@firestone-hs/simulate-bgs-battle 1.1.599 → 1.1.601

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 (270) hide show
  1. package/dist/bgs-player-entity.d.ts +2 -0
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/board-entity.d.ts +10 -9
  4. package/dist/board-entity.js.map +1 -1
  5. package/dist/cards/card.interface.d.ts +7 -7
  6. package/dist/cards/card.interface.js +3 -3
  7. package/dist/cards/card.interface.js.map +1 -1
  8. package/dist/cards/cards-data.d.ts +1 -0
  9. package/dist/cards/cards-data.js +8 -10
  10. package/dist/cards/cards-data.js.map +1 -1
  11. package/dist/cards/impl/_card-mappings.js +114 -2
  12. package/dist/cards/impl/_card-mappings.js.map +1 -1
  13. package/dist/cards/impl/minion/all-seeing-elder.d.ts +2 -0
  14. package/dist/cards/impl/minion/all-seeing-elder.js +18 -0
  15. package/dist/cards/impl/minion/all-seeing-elder.js.map +1 -0
  16. package/dist/cards/impl/minion/avalanche-caller.d.ts +2 -0
  17. package/dist/cards/impl/minion/avalanche-caller.js +14 -0
  18. package/dist/cards/impl/minion/avalanche-caller.js.map +1 -0
  19. package/dist/cards/impl/minion/bigwig-bandit.d.ts +2 -0
  20. package/dist/cards/impl/minion/bigwig-bandit.js +14 -0
  21. package/dist/cards/impl/minion/bigwig-bandit.js.map +1 -0
  22. package/dist/cards/impl/minion/bile-spitter.d.ts +2 -0
  23. package/dist/cards/impl/minion/bile-spitter.js +28 -0
  24. package/dist/cards/impl/minion/bile-spitter.js.map +1 -0
  25. package/dist/cards/impl/minion/bloodsnout-warlord.d.ts +2 -0
  26. package/dist/cards/impl/minion/bloodsnout-warlord.js +18 -0
  27. package/dist/cards/impl/minion/bloodsnout-warlord.js.map +1 -0
  28. package/dist/cards/impl/minion/blue-whelp.d.ts +2 -0
  29. package/dist/cards/impl/minion/blue-whelp.js +15 -0
  30. package/dist/cards/impl/minion/blue-whelp.js.map +1 -0
  31. package/dist/cards/impl/minion/campfire-shadow.d.ts +2 -0
  32. package/dist/cards/impl/minion/campfire-shadow.js +20 -0
  33. package/dist/cards/impl/minion/campfire-shadow.js.map +1 -0
  34. package/dist/cards/impl/minion/canopy-swinger.d.ts +2 -0
  35. package/dist/cards/impl/minion/canopy-swinger.js +19 -0
  36. package/dist/cards/impl/minion/canopy-swinger.js.map +1 -0
  37. package/dist/cards/impl/minion/carapace-raiser.d.ts +2 -0
  38. package/dist/cards/impl/minion/carapace-raiser.js +14 -0
  39. package/dist/cards/impl/minion/carapace-raiser.js.map +1 -0
  40. package/dist/cards/impl/minion/charmwing.d.ts +2 -0
  41. package/dist/cards/impl/minion/charmwing.js +29 -0
  42. package/dist/cards/impl/minion/charmwing.js.map +1 -0
  43. package/dist/cards/impl/minion/coldlight-diver.d.ts +2 -0
  44. package/dist/cards/impl/minion/coldlight-diver.js +20 -0
  45. package/dist/cards/impl/minion/coldlight-diver.js.map +1 -0
  46. package/dist/cards/impl/minion/crystal-infuser-enchantment.js.map +1 -0
  47. package/dist/cards/impl/minion/cupcake-peddler.d.ts +2 -0
  48. package/dist/cards/impl/minion/cupcake-peddler.js +14 -0
  49. package/dist/cards/impl/minion/cupcake-peddler.js.map +1 -0
  50. package/dist/cards/impl/minion/deathly-striker.js +1 -1
  51. package/dist/cards/impl/minion/deathly-striker.js.map +1 -1
  52. package/dist/cards/impl/minion/devout-hellcaller.d.ts +2 -0
  53. package/dist/cards/impl/minion/devout-hellcaller.js +17 -0
  54. package/dist/cards/impl/minion/devout-hellcaller.js.map +1 -0
  55. package/dist/cards/impl/minion/drakkari-embalmer.d.ts +2 -0
  56. package/dist/cards/impl/minion/drakkari-embalmer.js +24 -0
  57. package/dist/cards/impl/minion/drakkari-embalmer.js.map +1 -0
  58. package/dist/cards/impl/minion/exceptionnal-caretaker.d.ts +2 -0
  59. package/dist/cards/impl/minion/exceptionnal-caretaker.js +37 -0
  60. package/dist/cards/impl/minion/exceptionnal-caretaker.js.map +1 -0
  61. package/dist/cards/impl/minion/fauna-whisperer.js +11 -8
  62. package/dist/cards/impl/minion/fauna-whisperer.js.map +1 -1
  63. package/dist/cards/impl/minion/fire-forged-evoker.js +1 -1
  64. package/dist/cards/impl/minion/fire-forged-evoker.js.map +1 -1
  65. package/dist/cards/impl/minion/floating-watcher.d.ts +2 -0
  66. package/dist/cards/impl/minion/floating-watcher.js +12 -0
  67. package/dist/cards/impl/minion/floating-watcher.js.map +1 -0
  68. package/dist/cards/impl/minion/flotsam-flinger.d.ts +2 -0
  69. package/dist/cards/impl/minion/flotsam-flinger.js +17 -0
  70. package/dist/cards/impl/minion/flotsam-flinger.js.map +1 -0
  71. package/dist/cards/impl/minion/friendly-geist.d.ts +2 -0
  72. package/dist/cards/impl/minion/friendly-geist.js +12 -0
  73. package/dist/cards/impl/minion/friendly-geist.js.map +1 -0
  74. package/dist/cards/impl/minion/geared-guard.d.ts +2 -0
  75. package/dist/cards/impl/minion/geared-guard.js +23 -0
  76. package/dist/cards/impl/minion/geared-guard.js.map +1 -0
  77. package/dist/cards/impl/minion/gleaming-trader.d.ts +2 -0
  78. package/dist/cards/impl/minion/gleaming-trader.js +13 -0
  79. package/dist/cards/impl/minion/gleaming-trader.js.map +1 -0
  80. package/dist/cards/impl/minion/goldgrubber.js +1 -1
  81. package/dist/cards/impl/minion/goldgrubber.js.map +1 -1
  82. package/dist/cards/impl/minion/greedy-snaketongue.d.ts +2 -0
  83. package/dist/cards/impl/minion/greedy-snaketongue.js +17 -0
  84. package/dist/cards/impl/minion/greedy-snaketongue.js.map +1 -0
  85. package/dist/cards/impl/minion/greenskeeper.d.ts +2 -2
  86. package/dist/cards/impl/minion/greenskeeper.js +3 -2
  87. package/dist/cards/impl/minion/greenskeeper.js.map +1 -1
  88. package/dist/cards/impl/minion/hoarding-hatespawn.js +1 -1
  89. package/dist/cards/impl/minion/hoarding-hatespawn.js.map +1 -1
  90. package/dist/cards/impl/minion/hog-watcher.d.ts +2 -0
  91. package/dist/cards/impl/minion/hog-watcher.js +20 -0
  92. package/dist/cards/impl/minion/hog-watcher.js.map +1 -0
  93. package/dist/cards/impl/minion/hot-springer.d.ts +2 -0
  94. package/dist/cards/impl/minion/hot-springer.js +19 -0
  95. package/dist/cards/impl/minion/hot-springer.js.map +1 -0
  96. package/dist/cards/impl/minion/lightfeather-screecher.d.ts +2 -0
  97. package/dist/cards/impl/minion/lightfeather-screecher.js +23 -0
  98. package/dist/cards/impl/minion/lightfeather-screecher.js.map +1 -0
  99. package/dist/cards/impl/minion/lokholar-frostforger.d.ts +1 -1
  100. package/dist/cards/impl/minion/lokholar-frostforger.js +3 -3
  101. package/dist/cards/impl/minion/lokholar-frostforger.js.map +1 -1
  102. package/dist/cards/impl/minion/lord-of-the-ruins.d.ts +2 -0
  103. package/dist/cards/impl/minion/lord-of-the-ruins.js +19 -0
  104. package/dist/cards/impl/minion/lord-of-the-ruins.js.map +1 -0
  105. package/dist/cards/impl/minion/lost-city-looter.d.ts +2 -0
  106. package/dist/cards/impl/minion/lost-city-looter.js +13 -0
  107. package/dist/cards/impl/minion/lost-city-looter.js.map +1 -0
  108. package/dist/cards/impl/minion/monstrous-macaw.d.ts +2 -2
  109. package/dist/cards/impl/minion/monstrous-macaw.js +3 -2
  110. package/dist/cards/impl/minion/monstrous-macaw.js.map +1 -1
  111. package/dist/cards/impl/minion/nimble-hatchling.d.ts +2 -0
  112. package/dist/cards/impl/minion/nimble-hatchling.js +14 -0
  113. package/dist/cards/impl/minion/nimble-hatchling.js.map +1 -0
  114. package/dist/cards/impl/minion/noisul-of-the-many-faces.js +1 -1
  115. package/dist/cards/impl/minion/noisul-of-the-many-faces.js.map +1 -1
  116. package/dist/cards/impl/minion/oranomonos-the-wilted.d.ts +2 -0
  117. package/dist/cards/impl/minion/oranomonos-the-wilted.js +11 -0
  118. package/dist/cards/impl/minion/oranomonos-the-wilted.js.map +1 -0
  119. package/dist/cards/impl/minion/poultron.d.ts +2 -0
  120. package/dist/cards/impl/minion/poultron.js +20 -0
  121. package/dist/cards/impl/minion/poultron.js.map +1 -0
  122. package/dist/cards/impl/minion/primeval-monstrosity.d.ts +2 -0
  123. package/dist/cards/impl/minion/primeval-monstrosity.js +16 -0
  124. package/dist/cards/impl/minion/primeval-monstrosity.js.map +1 -0
  125. package/dist/cards/impl/minion/prodigious-tusker.d.ts +2 -0
  126. package/dist/cards/impl/minion/prodigious-tusker.js +16 -0
  127. package/dist/cards/impl/minion/prodigious-tusker.js.map +1 -0
  128. package/dist/cards/impl/minion/raptor-elder.d.ts +2 -0
  129. package/dist/cards/impl/minion/raptor-elder.js +42 -0
  130. package/dist/cards/impl/minion/raptor-elder.js.map +1 -0
  131. package/dist/cards/impl/minion/razorfen-vineweaver.d.ts +2 -0
  132. package/dist/cards/impl/minion/razorfen-vineweaver.js +16 -0
  133. package/dist/cards/impl/minion/razorfen-vineweaver.js.map +1 -0
  134. package/dist/cards/impl/minion/red-whelp.js +1 -1
  135. package/dist/cards/impl/minion/red-whelp.js.map +1 -1
  136. package/dist/cards/impl/minion/ride-or-die.d.ts +2 -0
  137. package/dist/cards/impl/minion/ride-or-die.js +35 -0
  138. package/dist/cards/impl/minion/ride-or-die.js.map +1 -0
  139. package/dist/cards/impl/minion/roadboar.d.ts +2 -0
  140. package/dist/cards/impl/minion/roadboar.js +17 -0
  141. package/dist/cards/impl/minion/roadboar.js.map +1 -0
  142. package/dist/cards/impl/minion/ruins-renovator.d.ts +2 -0
  143. package/dist/cards/impl/minion/ruins-renovator.js +17 -0
  144. package/dist/cards/impl/minion/ruins-renovator.js.map +1 -0
  145. package/dist/cards/impl/minion/sanctum-rester.js +1 -1
  146. package/dist/cards/impl/minion/sanctum-rester.js.map +1 -1
  147. package/dist/cards/impl/minion/sanguine-refiner.d.ts +2 -0
  148. package/dist/cards/impl/minion/sanguine-refiner.js +16 -0
  149. package/dist/cards/impl/minion/sanguine-refiner.js.map +1 -0
  150. package/dist/cards/impl/minion/scourge-harvester.d.ts +2 -0
  151. package/dist/cards/impl/minion/scourge-harvester.js +16 -0
  152. package/dist/cards/impl/minion/scourge-harvester.js.map +1 -0
  153. package/dist/cards/impl/minion/sharp-eyed-sabretooth.d.ts +2 -0
  154. package/dist/cards/impl/minion/sharp-eyed-sabretooth.js +20 -0
  155. package/dist/cards/impl/minion/sharp-eyed-sabretooth.js.map +1 -0
  156. package/dist/cards/impl/minion/ship-master-eudora.d.ts +2 -0
  157. package/dist/cards/impl/minion/ship-master-eudora.js +13 -0
  158. package/dist/cards/impl/minion/ship-master-eudora.js.map +1 -0
  159. package/dist/cards/impl/minion/shipwrecked-rascal.d.ts +2 -0
  160. package/dist/cards/impl/minion/shipwrecked-rascal.js +20 -0
  161. package/dist/cards/impl/minion/shipwrecked-rascal.js.map +1 -0
  162. package/dist/cards/impl/minion/silent-enforcer.d.ts +2 -0
  163. package/dist/cards/impl/minion/silent-enforcer.js +23 -0
  164. package/dist/cards/impl/minion/silent-enforcer.js.map +1 -0
  165. package/dist/cards/impl/minion/sleepy-supporter.d.ts +2 -0
  166. package/dist/cards/impl/minion/sleepy-supporter.js +24 -0
  167. package/dist/cards/impl/minion/sleepy-supporter.js.map +1 -0
  168. package/dist/cards/impl/minion/stitched-salvager.js +2 -1
  169. package/dist/cards/impl/minion/stitched-salvager.js.map +1 -1
  170. package/dist/cards/impl/minion/stomping-stegodon-enchantment.d.ts +2 -0
  171. package/dist/cards/impl/minion/stomping-stegodon-enchantment.js +32 -0
  172. package/dist/cards/impl/minion/stomping-stegodon-enchantment.js.map +1 -0
  173. package/dist/cards/impl/minion/stomping-stegodon.d.ts +2 -0
  174. package/dist/cards/impl/minion/stomping-stegodon.js +29 -0
  175. package/dist/cards/impl/minion/stomping-stegodon.js.map +1 -0
  176. package/dist/cards/impl/minion/stray-satyr.d.ts +2 -0
  177. package/dist/cards/impl/minion/stray-satyr.js +16 -0
  178. package/dist/cards/impl/minion/stray-satyr.js.map +1 -0
  179. package/dist/cards/impl/minion/tusked-camper.d.ts +2 -0
  180. package/dist/cards/impl/minion/tusked-camper.js +16 -0
  181. package/dist/cards/impl/minion/tusked-camper.js.map +1 -0
  182. package/dist/cards/impl/minion/twilight-watcher.d.ts +2 -0
  183. package/dist/cards/impl/minion/twilight-watcher.js +21 -0
  184. package/dist/cards/impl/minion/twilight-watcher.js.map +1 -0
  185. package/dist/cards/impl/minion/vengeful-protector.d.ts +2 -0
  186. package/dist/cards/impl/minion/vengeful-protector.js +19 -0
  187. package/dist/cards/impl/minion/vengeful-protector.js.map +1 -0
  188. package/dist/cards/impl/minion/void-earl.d.ts +2 -0
  189. package/dist/cards/impl/minion/void-earl.js +12 -0
  190. package/dist/cards/impl/minion/void-earl.js.map +1 -0
  191. package/dist/cards/impl/minion/whirring-protector-enchantment.d.ts +2 -0
  192. package/dist/cards/impl/minion/whirring-protector-enchantment.js +19 -0
  193. package/dist/cards/impl/minion/whirring-protector-enchantment.js.map +1 -0
  194. package/dist/cards/impl/minion/whirring-protector.d.ts +2 -0
  195. package/dist/cards/impl/minion/whirring-protector.js +16 -0
  196. package/dist/cards/impl/minion/whirring-protector.js.map +1 -0
  197. package/dist/cards/impl/minion/wildfire-elemental.js +1 -1
  198. package/dist/cards/impl/minion/wildfire-elemental.js.map +1 -1
  199. package/dist/cards/impl/minion/wrathscale-rogue.d.ts +2 -0
  200. package/dist/cards/impl/minion/wrathscale-rogue.js +20 -0
  201. package/dist/cards/impl/minion/wrathscale-rogue.js.map +1 -0
  202. package/dist/cards/impl/minion/yorik-smite.d.ts +2 -0
  203. package/dist/cards/impl/minion/yorik-smite.js +16 -0
  204. package/dist/cards/impl/minion/yorik-smite.js.map +1 -0
  205. package/dist/cards/impl/minion/young-murk-eye.d.ts +2 -0
  206. package/dist/cards/impl/minion/young-murk-eye.js +22 -0
  207. package/dist/cards/impl/minion/young-murk-eye.js.map +1 -0
  208. package/dist/cards/impl/minion/yrel.d.ts +2 -0
  209. package/dist/cards/impl/minion/yrel.js +16 -0
  210. package/dist/cards/impl/minion/yrel.js.map +1 -0
  211. package/dist/cards/impl/minion/zergling.js +1 -1
  212. package/dist/cards/impl/minion/zergling.js.map +1 -1
  213. package/dist/cards/impl/quest-reward/stand-as-one.d.ts +2 -0
  214. package/dist/cards/impl/quest-reward/stand-as-one.js +18 -0
  215. package/dist/cards/impl/quest-reward/stand-as-one.js.map +1 -0
  216. package/dist/cards/impl/trinket/eternal-portrait.d.ts +1 -1
  217. package/dist/cards/impl/trinket/eternal-portrait.js +1 -1
  218. package/dist/cards/impl/trinket/eternal-portrait.js.map +1 -1
  219. package/dist/cards/impl/trinket/karazhan-chess-set.js +1 -1
  220. package/dist/cards/impl/trinket/karazhan-chess-set.js.map +1 -1
  221. package/dist/keywords/divine-shield.js +1 -16
  222. package/dist/keywords/divine-shield.js.map +1 -1
  223. package/dist/simulate-bgs-battle.js +0 -4
  224. package/dist/simulate-bgs-battle.js.map +1 -1
  225. package/dist/simulation/add-minion-to-board.js +11 -49
  226. package/dist/simulation/add-minion-to-board.js.map +1 -1
  227. package/dist/simulation/after-attack.js +1 -35
  228. package/dist/simulation/after-attack.js.map +1 -1
  229. package/dist/simulation/attack.d.ts +1 -0
  230. package/dist/simulation/attack.js +17 -61
  231. package/dist/simulation/attack.js.map +1 -1
  232. package/dist/simulation/auras.js +25 -70
  233. package/dist/simulation/auras.js.map +1 -1
  234. package/dist/simulation/avenge.js +0 -50
  235. package/dist/simulation/avenge.js.map +1 -1
  236. package/dist/simulation/battlecries.js +11 -131
  237. package/dist/simulation/battlecries.js.map +1 -1
  238. package/dist/simulation/damage-effects.d.ts +9 -1
  239. package/dist/simulation/damage-effects.js +43 -83
  240. package/dist/simulation/damage-effects.js.map +1 -1
  241. package/dist/simulation/damage-to-hero.js +11 -0
  242. package/dist/simulation/damage-to-hero.js.map +1 -1
  243. package/dist/simulation/deathrattle-effects.js +7 -76
  244. package/dist/simulation/deathrattle-effects.js.map +1 -1
  245. package/dist/simulation/deathrattle-orchestration.js +2 -3
  246. package/dist/simulation/deathrattle-orchestration.js.map +1 -1
  247. package/dist/simulation/deathrattle-spawns.js +4 -65
  248. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  249. package/dist/simulation/frenzy.js +0 -6
  250. package/dist/simulation/frenzy.js.map +1 -1
  251. package/dist/simulation/minion-kill.d.ts +1 -1
  252. package/dist/simulation/minion-kill.js +2 -1
  253. package/dist/simulation/minion-kill.js.map +1 -1
  254. package/dist/simulation/on-attack.d.ts +1 -0
  255. package/dist/simulation/on-attack.js +113 -92
  256. package/dist/simulation/on-attack.js.map +1 -1
  257. package/dist/simulation/on-being-attacked.js +1 -25
  258. package/dist/simulation/on-being-attacked.js.map +1 -1
  259. package/dist/simulation/reborn.js +1 -1
  260. package/dist/simulation/reborn.js.map +1 -1
  261. package/dist/simulation/remove-minion-from-board.js +0 -9
  262. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  263. package/dist/simulation/start-of-combat/soc-action-processor.js +0 -12
  264. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  265. package/dist/utils.js +2 -11
  266. package/dist/utils.js.map +1 -1
  267. package/package.json +3 -3
  268. package/dist/cards/impl/enchantments/crystal-infuser-enchantment.js.map +0 -1
  269. /package/dist/cards/impl/{enchantments → minion}/crystal-infuser-enchantment.d.ts +0 -0
  270. /package/dist/cards/impl/{enchantments → minion}/crystal-infuser-enchantment.js +0 -0
@@ -11,26 +11,8 @@ const setMissingAuras = (board, boardHero, anomalies, allCards) => {
11
11
  };
12
12
  exports.setMissingAuras = setMissingAuras;
13
13
  const setMissingTrinketAura = (board, boardHero) => {
14
- var _a, _b;
14
+ var _a;
15
15
  for (const trinket of (_a = boardHero.trinkets) !== null && _a !== void 0 ? _a : []) {
16
- switch (trinket.cardId) {
17
- case "BG30_MagicItem_997":
18
- case "BG30_MagicItem_997t":
19
- const enchantment = trinket.cardId === "BG30_MagicItem_997"
20
- ? "BG30_MagicItem_997e"
21
- : "BG30_MagicItem_997e2";
22
- const buff = trinket.cardId === "BG30_MagicItem_997" ? 8 : 20;
23
- const target = board[0];
24
- if (!!target && !((_b = target.enchantments) === null || _b === void 0 ? void 0 : _b.find((e) => e.cardId === enchantment))) {
25
- target.attack += buff;
26
- target.enchantments.push({
27
- cardId: enchantment,
28
- originEntityId: trinket.entityId,
29
- timing: 0,
30
- });
31
- }
32
- break;
33
- }
34
16
  }
35
17
  };
36
18
  exports.setMissingTrinketAura = setMissingTrinketAura;
@@ -63,11 +45,7 @@ const setMissingMinionsAura = (board, boardHero, anomalies, allCards) => {
63
45
  setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.PIRATE, anomalies, allCards)), "BG_NEW1_027", "VAN_NEW1_027e", 1, 1);
64
46
  setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.PIRATE, anomalies, allCards)), "TB_BaconUps_136", "TB_BaconUps_136e", 2, 2);
65
47
  setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.MURLOC, anomalies, allCards)), "BG_EX1_507", "EX1_507e", 2, 0);
66
- setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.MURLOC, anomalies, allCards)), "BG_EX1_507", "TB_BaconUps_008e", 4, 0);
67
- setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.DEMON, anomalies, allCards)), "BG21_039", "BG21_039e", 2, 0);
68
- setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.DEMON, anomalies, allCards)), "BG21_039_G", "BG21_039_Ge", 4, 0);
69
48
  setMissingAura(board.filter((e) => e.divineShield), "BG25_043", "BG25_043e", 6, 0, false);
70
- setMissingAura(board.filter((e) => e.divineShield), "BG25_043_G", "BG25_043_Ge", 12, 0, false);
71
49
  setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.UNDEAD, anomalies, allCards)), "BG27_030", "BG27_030e", boardHero.tavernTier, 0);
72
50
  setMissingAura(board.filter((e) => (0, utils_1.hasCorrectTribe)(e, boardHero, reference_data_1.Race.UNDEAD, anomalies, allCards)), "BG27_030_G", "BG27_030e", 2 * boardHero.tavernTier, 0);
73
51
  };
@@ -84,7 +62,7 @@ const setMissingAura = (board, minionCardId, enchantmentCardId, attack, health,
84
62
  }
85
63
  };
86
64
  const setImplicitDataHero = (hero, cardsData, isPlayer, entityIdContainer) => {
87
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
65
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
88
66
  for (const heroPower of hero.heroPowers) {
89
67
  const avengeValue = cardsData.avengeValue(heroPower.cardId);
90
68
  if (avengeValue > 0) {
@@ -129,29 +107,31 @@ const setImplicitDataHero = (hero, cardsData, isPlayer, entityIdContainer) => {
129
107
  hero.globalInfo.EternalKnightsDeadThisGame = (_e = hero.globalInfo.EternalKnightsDeadThisGame) !== null && _e !== void 0 ? _e : 0;
130
108
  hero.globalInfo.SanlaynScribesDeadThisGame = (_f = hero.globalInfo.SanlaynScribesDeadThisGame) !== null && _f !== void 0 ? _f : 0;
131
109
  hero.globalInfo.BeastsSummonedThisGame = (_g = hero.globalInfo.BeastsSummonedThisGame) !== null && _g !== void 0 ? _g : 0;
132
- hero.globalInfo.MagnetizedThisGame = (_h = hero.globalInfo.MagnetizedThisGame) !== null && _h !== void 0 ? _h : 0;
133
- hero.globalInfo.PiratesSummonedThisGame = (_j = hero.globalInfo.PiratesSummonedThisGame) !== null && _j !== void 0 ? _j : 0;
134
- hero.globalInfo.BattlecriesTriggeredThisGame = (_k = hero.globalInfo.BattlecriesTriggeredThisGame) !== null && _k !== void 0 ? _k : 0;
135
- hero.globalInfo.BeetleAttackBuff = (_l = hero.globalInfo.BeetleAttackBuff) !== null && _l !== void 0 ? _l : 0;
136
- hero.globalInfo.BeetleHealthBuff = (_m = hero.globalInfo.BeetleHealthBuff) !== null && _m !== void 0 ? _m : 0;
137
- hero.globalInfo.ElementalAttackBuff = (_o = hero.globalInfo.ElementalAttackBuff) !== null && _o !== void 0 ? _o : 0;
138
- hero.globalInfo.ElementalHealthBuff = (_p = hero.globalInfo.ElementalHealthBuff) !== null && _p !== void 0 ? _p : 0;
139
- hero.globalInfo.TavernSpellAttackBuff = (_q = hero.globalInfo.TavernSpellAttackBuff) !== null && _q !== void 0 ? _q : 0;
140
- hero.globalInfo.TavernSpellHealthBuff = (_r = hero.globalInfo.TavernSpellHealthBuff) !== null && _r !== void 0 ? _r : 0;
141
- hero.globalInfo.MutatedLasherAttackBuff = (_s = hero.globalInfo.MutatedLasherAttackBuff) !== null && _s !== void 0 ? _s : 0;
142
- hero.globalInfo.MutatedLasherHealthBuff = (_t = hero.globalInfo.MutatedLasherHealthBuff) !== null && _t !== void 0 ? _t : 0;
143
- hero.globalInfo.TavernSpellsCastThisGame = (_u = hero.globalInfo.TavernSpellsCastThisGame) !== null && _u !== void 0 ? _u : 0;
144
- hero.globalInfo.SpellsCastThisGame = (_v = hero.globalInfo.SpellsCastThisGame) !== null && _v !== void 0 ? _v : 0;
145
- hero.globalInfo.UndeadAttackBonus = (_w = hero.globalInfo.UndeadAttackBonus) !== null && _w !== void 0 ? _w : 0;
146
- hero.globalInfo.FrostlingBonus = (_x = hero.globalInfo.FrostlingBonus) !== null && _x !== void 0 ? _x : 0;
110
+ hero.globalInfo.BeastsSummonedThisCombat = (_h = hero.globalInfo.BeastsSummonedThisCombat) !== null && _h !== void 0 ? _h : 0;
111
+ hero.globalInfo.MagnetizedThisGame = (_j = hero.globalInfo.MagnetizedThisGame) !== null && _j !== void 0 ? _j : 0;
112
+ hero.globalInfo.PiratesSummonedThisGame = (_k = hero.globalInfo.PiratesSummonedThisGame) !== null && _k !== void 0 ? _k : 0;
113
+ hero.globalInfo.BattlecriesTriggeredThisGame = (_l = hero.globalInfo.BattlecriesTriggeredThisGame) !== null && _l !== void 0 ? _l : 0;
114
+ hero.globalInfo.BeetleAttackBuff = (_m = hero.globalInfo.BeetleAttackBuff) !== null && _m !== void 0 ? _m : 0;
115
+ hero.globalInfo.BeetleHealthBuff = (_o = hero.globalInfo.BeetleHealthBuff) !== null && _o !== void 0 ? _o : 0;
116
+ hero.globalInfo.ElementalAttackBuff = (_p = hero.globalInfo.ElementalAttackBuff) !== null && _p !== void 0 ? _p : 0;
117
+ hero.globalInfo.ElementalHealthBuff = (_q = hero.globalInfo.ElementalHealthBuff) !== null && _q !== void 0 ? _q : 0;
118
+ hero.globalInfo.TavernSpellAttackBuff = (_r = hero.globalInfo.TavernSpellAttackBuff) !== null && _r !== void 0 ? _r : 0;
119
+ hero.globalInfo.TavernSpellHealthBuff = (_s = hero.globalInfo.TavernSpellHealthBuff) !== null && _s !== void 0 ? _s : 0;
120
+ hero.globalInfo.MutatedLasherAttackBuff = (_t = hero.globalInfo.MutatedLasherAttackBuff) !== null && _t !== void 0 ? _t : 0;
121
+ hero.globalInfo.MutatedLasherHealthBuff = (_u = hero.globalInfo.MutatedLasherHealthBuff) !== null && _u !== void 0 ? _u : 0;
122
+ hero.globalInfo.TavernSpellsCastThisGame = (_v = hero.globalInfo.TavernSpellsCastThisGame) !== null && _v !== void 0 ? _v : 0;
123
+ hero.globalInfo.AdditionalAttack = (_w = hero.globalInfo.AdditionalAttack) !== null && _w !== void 0 ? _w : 0;
124
+ hero.globalInfo.SpellsCastThisGame = (_x = hero.globalInfo.SpellsCastThisGame) !== null && _x !== void 0 ? _x : 0;
125
+ hero.globalInfo.UndeadAttackBonus = (_y = hero.globalInfo.UndeadAttackBonus) !== null && _y !== void 0 ? _y : 0;
126
+ hero.globalInfo.FrostlingBonus = (_z = hero.globalInfo.FrostlingBonus) !== null && _z !== void 0 ? _z : 0;
147
127
  hero.globalInfo.BloodGemAttackBonus =
148
- ((_y = hero.globalInfo.BloodGemAttackBonus) !== null && _y !== void 0 ? _y : 0) +
149
- ((_0 = (_z = hero.questRewardEntities) === null || _z === void 0 ? void 0 : _z.filter((e) => e.cardId === "BG27_Reward_815").length) !== null && _0 !== void 0 ? _0 : 0);
128
+ ((_0 = hero.globalInfo.BloodGemAttackBonus) !== null && _0 !== void 0 ? _0 : 0) +
129
+ ((_2 = (_1 = hero.questRewardEntities) === null || _1 === void 0 ? void 0 : _1.filter((e) => e.cardId === "BG27_Reward_815").length) !== null && _2 !== void 0 ? _2 : 0);
150
130
  hero.globalInfo.BloodGemHealthBonus =
151
- ((_1 = hero.globalInfo.BloodGemHealthBonus) !== null && _1 !== void 0 ? _1 : 0) +
152
- ((_3 = (_2 = hero.questRewardEntities) === null || _2 === void 0 ? void 0 : _2.filter((e) => e.cardId === "BG27_Reward_815").length) !== null && _3 !== void 0 ? _3 : 0);
153
- hero.globalInfo.GoldrinnBuffAtk = (_4 = hero.globalInfo.GoldrinnBuffAtk) !== null && _4 !== void 0 ? _4 : 0;
154
- hero.globalInfo.GoldrinnBuffHealth = (_5 = hero.globalInfo.GoldrinnBuffHealth) !== null && _5 !== void 0 ? _5 : 0;
131
+ ((_3 = hero.globalInfo.BloodGemHealthBonus) !== null && _3 !== void 0 ? _3 : 0) +
132
+ ((_5 = (_4 = hero.questRewardEntities) === null || _4 === void 0 ? void 0 : _4.filter((e) => e.cardId === "BG27_Reward_815").length) !== null && _5 !== void 0 ? _5 : 0);
133
+ hero.globalInfo.GoldrinnBuffAtk = (_6 = hero.globalInfo.GoldrinnBuffAtk) !== null && _6 !== void 0 ? _6 : 0;
134
+ hero.globalInfo.GoldrinnBuffHealth = (_7 = hero.globalInfo.GoldrinnBuffHealth) !== null && _7 !== void 0 ? _7 : 0;
155
135
  };
156
136
  exports.setImplicitDataHero = setImplicitDataHero;
157
137
  const clearStealthIfNeeded = (board, hero, otherBoard, otherHero, gameState) => {
@@ -171,31 +151,6 @@ const updateBoardwideAuras = (board, boardHero, gameState) => {
171
151
  if (board.length === 0) {
172
152
  return;
173
153
  }
174
- board
175
- .filter((entity) => entity.enchantments.some((ench) => ench.cardId === "BG30_MagicItem_997e" ||
176
- ench.cardId === "BG30_MagicItem_997e2"))
177
- .forEach((e) => {
178
- const enchantments = e.enchantments.filter((ench) => ench.cardId === "BG30_MagicItem_997e").length;
179
- const greaterEnchantments = e.enchantments.filter((ench) => ench.cardId === "BG30_MagicItem_997e2").length;
180
- e.attack = Math.max(0, e.attack - enchantments * 8 - greaterEnchantments * 15);
181
- e.enchantments = e.enchantments
182
- .filter((ench) => ench.cardId !== "BG30_MagicItem_997e")
183
- .filter((ench) => ench.cardId !== "BG30_MagicItem_997e2");
184
- });
185
- boardHero.trinkets
186
- .filter((t) => t.cardId === "BG30_MagicItem_997" ||
187
- t.cardId === "BG30_MagicItem_997t")
188
- .forEach((t) => {
189
- const buff = t.cardId === "BG30_MagicItem_997" ? 8 : 15;
190
- board[0].attack = board[0].attack + buff;
191
- board[0].enchantments.push({
192
- cardId: t.cardId === "BG30_MagicItem_997"
193
- ? "BG30_MagicItem_997e"
194
- : "BG30_MagicItem_997e2",
195
- originEntityId: t.entityId,
196
- timing: gameState.sharedState.currentEntityId++,
197
- });
198
- });
199
154
  };
200
155
  exports.updateBoardwideAuras = updateBoardwideAuras;
201
156
  //# sourceMappingURL=auras.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auras.js","sourceRoot":"","sources":["../../src/simulation/auras.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { AllCardsService, CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardsData } from '../cards/cards-data';\r\nimport { updateStealth } from '../keywords/stealth';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const setMissingAuras = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tanomalies: readonly string[],\r\n\tallCards: AllCardsService,\r\n): void => {\r\n\tsetMissingMinionsAura(board, boardHero, anomalies, allCards);\r\n\tsetMissingHeroPowerAura(board, boardHero);\r\n\tsetMissingTrinketAura(board, boardHero);\r\n};\r\n\r\nexport const setMissingTrinketAura = (board: BoardEntity[], boardHero: BgsPlayerEntity): void => {\r\n\tfor (const trinket of boardHero.trinkets ?? []) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.WindrunnerNecklace_BG30_MagicItem_997:\r\n\t\t\tcase CardIds.WindrunnerNecklace_WindrunnerNecklaceToken_BG30_MagicItem_997t:\r\n\t\t\t\tconst enchantment =\r\n\t\t\t\t\ttrinket.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997\r\n\t\t\t\t\t\t? CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e\r\n\t\t\t\t\t\t: CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2;\r\n\t\t\t\tconst buff = trinket.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997 ? 8 : 20;\r\n\t\t\t\tconst target = board[0];\r\n\t\t\t\tif (!!target && !target.enchantments?.find((e) => e.cardId === enchantment)) {\r\n\t\t\t\t\ttarget.attack += buff;\r\n\t\t\t\t\ttarget.enchantments.push({\r\n\t\t\t\t\t\tcardId: enchantment,\r\n\t\t\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\t\t\ttiming: 0,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const setMissingHeroPowerAura = (board: BoardEntity[], boardHero: BgsPlayerEntity): void => {\r\n\tfor (const heroPower of boardHero.heroPowers) {\r\n\t\tif (heroPower.cardId === CardIds.TheSmokingGun) {\r\n\t\t\tboard\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t!e.enchantments.find(\r\n\t\t\t\t\t\t\t(ench) => ench.cardId === CardIds.TheSmokingGun_ArmedAndStillSmokingEnchantment,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\te.attack += 4;\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tif (heroPower.cardId === CardIds.VolatileVenom) {\r\n\t\t\tboard\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(e) => !e.enchantments.find((ench) => ench.cardId === CardIds.VolatileVenom_VolatileEnchantment),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\te.attack += 7;\r\n\t\t\t\t\te.health += 7;\r\n\t\t\t\t\te.enchantments.push({\r\n\t\t\t\t\t\tcardId: CardIds.VolatileVenom_VolatileEnchantment,\r\n\t\t\t\t\t\toriginEntityId: undefined,\r\n\t\t\t\t\t\ttiming: 0,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst setMissingMinionsAura = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tanomalies: readonly string[],\r\n\tallCards: AllCardsService,\r\n): void => {\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, anomalies, allCards)),\r\n\t\tCardIds.SouthseaCaptainLegacy_BG_NEW1_027,\r\n\t\tCardIds.SouthseaCaptain_YarrrVanillaEnchantment,\r\n\t\t1,\r\n\t\t1,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, anomalies, allCards)),\r\n\t\tCardIds.SouthseaCaptainLegacy_TB_BaconUps_136,\r\n\t\tCardIds.SouthseaCaptain_YarrrEnchantment,\r\n\t\t2,\r\n\t\t2,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, anomalies, allCards)),\r\n\t\tCardIds.MurlocWarleaderLegacy_BG_EX1_507,\r\n\t\tCardIds.MurlocWarleader_MrgglaarglLegacyEnchantment,\r\n\t\t2,\r\n\t\t0,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, anomalies, allCards)),\r\n\t\tCardIds.MurlocWarleaderLegacy_BG_EX1_507,\r\n\t\tCardIds.MurlocWarleader_MrgglaarglEnchantment,\r\n\t\t4,\r\n\t\t0,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, anomalies, allCards)),\r\n\t\tCardIds.Kathranatir_BG21_039,\r\n\t\tCardIds.Kathranatir_GraspOfKathranatirEnchantment_BG21_039e,\r\n\t\t2,\r\n\t\t0,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, anomalies, allCards)),\r\n\t\tCardIds.Kathranatir_BG21_039_G,\r\n\t\tCardIds.Kathranatir_GraspOfKathranatirEnchantment_BG21_039_Ge,\r\n\t\t4,\r\n\t\t0,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => e.divineShield),\r\n\t\tCardIds.CyborgDrake_BG25_043,\r\n\t\tCardIds.CyborgDrake_CyborgEnhancementEnchantment_BG25_043e,\r\n\t\t6,\r\n\t\t0,\r\n\t\tfalse,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => e.divineShield),\r\n\t\tCardIds.CyborgDrake_BG25_043_G,\r\n\t\tCardIds.CyborgDrake_CyborgEnhancementEnchantment_BG25_043_Ge,\r\n\t\t12,\r\n\t\t0,\r\n\t\tfalse,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, anomalies, allCards)),\r\n\t\tCardIds.SoreLoser_BG27_030,\r\n\t\tCardIds.SoreLoser_NoImWinningEnchantment_BG27_030e,\r\n\t\tboardHero.tavernTier,\r\n\t\t0,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, anomalies, allCards)),\r\n\t\tCardIds.SoreLoser_BG27_030_G,\r\n\t\tCardIds.SoreLoser_NoImWinningEnchantment_BG27_030e,\r\n\t\t2 * boardHero.tavernTier,\r\n\t\t0,\r\n\t);\r\n};\r\n\r\nconst setMissingAura = (\r\n\tboard: BoardEntity[],\r\n\tminionCardId: string,\r\n\tenchantmentCardId: string,\r\n\tattack: number,\r\n\thealth: number,\r\n\tignoreSelf = true,\r\n\tallCards: AllCardsService = null,\r\n): void => {\r\n\tconst buffers = board.filter((e) => e.cardId === minionCardId);\r\n\tfor (const buffer of buffers) {\r\n\t\tboard\r\n\t\t\t.filter((e) => !e.enchantments.find((ench) => ench.cardId === enchantmentCardId))\r\n\t\t\t.filter((e) => (ignoreSelf ? e.entityId !== buffer.entityId : true))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.attack += attack;\r\n\t\t\t\te.health += health;\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\nexport const setImplicitDataHero = (\r\n\thero: BgsPlayerEntity,\r\n\tcardsData: CardsData,\r\n\tisPlayer: boolean,\r\n\tentityIdContainer: { entityId: number },\r\n): void => {\r\n\tfor (const heroPower of hero.heroPowers) {\r\n\t\tconst avengeValue = cardsData.avengeValue(heroPower.cardId);\r\n\t\tif (avengeValue > 0) {\r\n\t\t\theroPower.avengeCurrent = avengeValue;\r\n\t\t\theroPower.avengeDefault = avengeValue;\r\n\t\t}\r\n\t}\r\n\t// Backward compatibility\r\n\tif (!!hero.questRewards?.length && !Array.isArray(hero.questRewards)) {\r\n\t\thero.questRewards = [hero.questRewards as any];\r\n\t}\r\n\r\n\t// Because Denathrius can send a quest reward as its hero power (I think)\r\n\t// For now deactivating this, until I have a scenario where this matters. It feels like\r\n\t// this should be a display issue only, as quest rewards are also handled in the code\r\n\tconst heroPowerAsReward = null; // hero.cardId === CardIds.SireDenathrius_BG24_HERO_100 ? hero.heroPowers[0]?.cardId : null;\r\n\thero.questRewards = [...(hero.questRewards ?? []), heroPowerAsReward].filter((e) => !!e);\r\n\thero.questRewardEntities = hero.questRewardEntities\r\n\t\t? hero.questRewardEntities.map((reward: any) => ({\r\n\t\t\t\tcardId: reward.CardId,\r\n\t\t\t\tscriptDataNum1: reward.ScriptDataNum1 ?? 0,\r\n\t\t\t\tentityId: entityIdContainer.entityId--,\r\n\t\t\t\tavengeDefault: cardsData.avengeValue(reward.CardId),\r\n\t\t\t\tavengeCurrent: cardsData.avengeValue(reward.CardId),\r\n\t\t }))\r\n\t\t: hero.questRewards.map((reward) => ({\r\n\t\t\t\tcardId: reward,\r\n\t\t\t\tentityId: entityIdContainer.entityId--,\r\n\t\t\t\tavengeCurrent: cardsData.avengeValue(reward),\r\n\t\t\t\tavengeDefault: cardsData.avengeValue(reward),\r\n\t\t\t\tscriptDataNum1: cardsData.defaultScriptDataNum(reward),\r\n\t\t }));\r\n\thero.trinkets = (hero.trinkets ?? []).map((trinket) => ({\r\n\t\t...trinket,\r\n\t\tavengeDefault: cardsData.avengeValue(trinket.cardId),\r\n\t\tavengeCurrent: cardsData.avengeValue(trinket.cardId),\r\n\t\t// Use scriptDataNum1 to keep the info from the input\r\n\t\tscriptDataNum1: trinket.scriptDataNum1 || cardsData.defaultScriptDataNum(trinket.cardId),\r\n\t}));\r\n\t// 0 is not a valid entityId\r\n\thero.entityId = hero.entityId || entityIdContainer.entityId--;\r\n\thero.hand = hero.hand ?? [];\r\n\tif (!hero.globalInfo) {\r\n\t\thero.globalInfo = {};\r\n\t}\r\n\r\n\thero.globalInfo.EternalKnightsDeadThisGame = hero.globalInfo.EternalKnightsDeadThisGame ?? 0;\r\n\thero.globalInfo.SanlaynScribesDeadThisGame = hero.globalInfo.SanlaynScribesDeadThisGame ?? 0;\r\n\thero.globalInfo.BeastsSummonedThisGame = hero.globalInfo.BeastsSummonedThisGame ?? 0;\r\n\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame ?? 0;\r\n\thero.globalInfo.PiratesSummonedThisGame = hero.globalInfo.PiratesSummonedThisGame ?? 0;\r\n\thero.globalInfo.BattlecriesTriggeredThisGame = hero.globalInfo.BattlecriesTriggeredThisGame ?? 0;\r\n\thero.globalInfo.BeetleAttackBuff = hero.globalInfo.BeetleAttackBuff ?? 0;\r\n\thero.globalInfo.BeetleHealthBuff = hero.globalInfo.BeetleHealthBuff ?? 0;\r\n\thero.globalInfo.ElementalAttackBuff = hero.globalInfo.ElementalAttackBuff ?? 0;\r\n\thero.globalInfo.ElementalHealthBuff = hero.globalInfo.ElementalHealthBuff ?? 0;\r\n\thero.globalInfo.TavernSpellAttackBuff = hero.globalInfo.TavernSpellAttackBuff ?? 0;\r\n\thero.globalInfo.TavernSpellHealthBuff = hero.globalInfo.TavernSpellHealthBuff ?? 0;\r\n\thero.globalInfo.MutatedLasherAttackBuff = hero.globalInfo.MutatedLasherAttackBuff ?? 0;\r\n\thero.globalInfo.MutatedLasherHealthBuff = hero.globalInfo.MutatedLasherHealthBuff ?? 0;\r\n\thero.globalInfo.TavernSpellsCastThisGame = hero.globalInfo.TavernSpellsCastThisGame ?? 0;\r\n\thero.globalInfo.SpellsCastThisGame = hero.globalInfo.SpellsCastThisGame ?? 0;\r\n\thero.globalInfo.UndeadAttackBonus = hero.globalInfo.UndeadAttackBonus ?? 0;\r\n\thero.globalInfo.FrostlingBonus = hero.globalInfo.FrostlingBonus ?? 0;\r\n\thero.globalInfo.BloodGemAttackBonus =\r\n\t\t(hero.globalInfo.BloodGemAttackBonus ?? 0) +\r\n\t\t// Not sure why, but this isn't reflected in the player enchant\r\n\t\t(hero.questRewardEntities?.filter((e) => e.cardId === CardIds.EndlessBloodMoon).length ?? 0);\r\n\thero.globalInfo.BloodGemHealthBonus =\r\n\t\t(hero.globalInfo.BloodGemHealthBonus ?? 0) +\r\n\t\t(hero.questRewardEntities?.filter((e) => e.cardId === CardIds.EndlessBloodMoon).length ?? 0);\r\n\thero.globalInfo.GoldrinnBuffAtk = hero.globalInfo.GoldrinnBuffAtk ?? 0;\r\n\thero.globalInfo.GoldrinnBuffHealth = hero.globalInfo.GoldrinnBuffHealth ?? 0;\r\n};\r\n\r\nexport const clearStealthIfNeeded = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// https://twitter.com/DCalkosz/status/1562194944688660481?s=20&t=100I8IVZmBKgYQWkdK8nIA\r\n\tif (board.every((entity) => entity.stealth && !entity.attack)) {\r\n\t\tboard.forEach((e) => updateStealth(e, false, board, hero, otherHero, gameState));\r\n\t}\r\n\tif (otherBoard.every((entity) => entity.stealth && !entity.attack)) {\r\n\t\totherBoard.forEach((e) => updateStealth(e, false, otherBoard, otherHero, hero, gameState));\r\n\t}\r\n\tif (board.every((e) => e.stealth) && otherBoard.every((e) => e.stealth)) {\r\n\t\tboard.forEach((e) => updateStealth(e, false, board, hero, otherHero, gameState));\r\n\t\totherBoard.forEach((e) => updateStealth(e, false, otherBoard, otherHero, hero, gameState));\r\n\t}\r\n};\r\n\r\nexport const updateBoardwideAuras = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (board.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tboard\r\n\t\t.filter((entity) =>\r\n\t\t\tentity.enchantments.some(\r\n\t\t\t\t(ench) =>\r\n\t\t\t\t\tench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e ||\r\n\t\t\t\t\tench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t\t\t),\r\n\t\t)\r\n\t\t.forEach((e) => {\r\n\t\t\tconst enchantments = e.enchantments.filter(\r\n\t\t\t\t(ench) => ench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e,\r\n\t\t\t).length;\r\n\t\t\tconst greaterEnchantments = e.enchantments.filter(\r\n\t\t\t\t(ench) => ench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t\t\t).length;\r\n\t\t\te.attack = Math.max(0, e.attack - enchantments * 8 - greaterEnchantments * 15);\r\n\t\t\te.enchantments = e.enchantments\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(ench) =>\r\n\t\t\t\t\t\tench.cardId !== CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e,\r\n\t\t\t\t)\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(ench) =>\r\n\t\t\t\t\t\tench.cardId !== CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t\t\t\t);\r\n\t\t});\r\n\tboardHero.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997 ||\r\n\t\t\t\tt.cardId === CardIds.WindrunnerNecklace_WindrunnerNecklaceToken_BG30_MagicItem_997t,\r\n\t\t)\r\n\t\t.forEach((t) => {\r\n\t\t\tconst buff = t.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997 ? 8 : 15;\r\n\t\t\tboard[0].attack = board[0].attack + buff;\r\n\t\t\tboard[0].enchantments.push({\r\n\t\t\t\tcardId:\r\n\t\t\t\t\tt.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997\r\n\t\t\t\t\t\t? CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e\r\n\t\t\t\t\t\t: CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t\t\t\toriginEntityId: t.entityId,\r\n\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t});\r\n\t\t});\r\n};\r\n"]}
1
+ {"version":3,"file":"auras.js","sourceRoot":"","sources":["../../src/simulation/auras.ts"],"names":[],"mappings":";;;AACA,iEAA8E;AAI9E,iDAAoD;AACpD,oCAA2C;AAGpC,MAAM,eAAe,GAAG,CAC9B,KAAoB,EACpB,SAA0B,EAC1B,SAA4B,EAC5B,QAAyB,EAClB,EAAE;IACT,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,IAAA,+BAAuB,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAA,6BAAqB,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC,CAAC;AATW,QAAA,eAAe,mBAS1B;AAEK,MAAM,qBAAqB,GAAG,CAAC,KAAoB,EAAE,SAA0B,EAAQ,EAAE;;IAC/F,KAAK,MAAM,OAAO,IAAI,MAAA,SAAS,CAAC,QAAQ,mCAAI,EAAE,EAAE;KAoB/C;AACF,CAAC,CAAC;AAtBW,QAAA,qBAAqB,yBAsBhC;AAEK,MAAM,uBAAuB,GAAG,CAAC,KAAoB,EAAE,SAA0B,EAAQ,EAAE;IACjG,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE;QAC7C,IAAI,SAAS,CAAC,MAAM,sBAA0B,EAAE;YAC/C,KAAK;iBACH,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CACnB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,uBAA0D,CAC/E,CACF;iBACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,SAAS,CAAC,MAAM,sBAA0B,EAAE;YAC/C,KAAK;iBACH,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,uBAA8C,CAAC,CAChG;iBACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACd,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACd,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;oBACnB,MAAM,oBAA2C;oBACjD,cAAc,EAAE,SAAS;oBACzB,MAAM,EAAE,CAAC;iBACT,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;KACD;AACF,CAAC,CAAC;AA9BW,QAAA,uBAAuB,2BA8BlC;AAEF,MAAM,qBAAqB,GAAG,CAC7B,KAAoB,EACpB,SAA0B,EAC1B,SAA4B,EAC5B,QAAyB,EAClB,EAAE;IACT,cAAc,CACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,SAAS,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,kCAGpF,CAAC,EACD,CAAC,CACD,CAAC;IACF,cAAc,CACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,SAAS,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,yCAGpF,CAAC,EACD,CAAC,CACD,CAAC;IACF,cAAc,CACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,SAAS,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,4BAGpF,CAAC,EACD,CAAC,CACD,CAAC;IAsBF,cAAc,CACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,2BAGnC,CAAC,EACD,CAAC,EACD,KAAK,CACL,CAAC;IASF,cAAc,CACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,SAAS,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,2BAGpF,SAAS,CAAC,UAAU,EACpB,CAAC,CACD,CAAC;IACF,cAAc,CACb,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,SAAS,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,6BAGpF,CAAC,GAAG,SAAS,CAAC,UAAU,EACxB,CAAC,CACD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACtB,KAAoB,EACpB,YAAoB,EACpB,iBAAyB,EACzB,MAAc,EACd,MAAc,EACd,UAAU,GAAG,IAAI,EACjB,WAA4B,IAAI,EACzB,EAAE;IACT,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC;IAC/D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC7B,KAAK;aACH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC;aAChF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACnE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC;YACnB,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC;QACpB,CAAC,CAAC,CAAC;KACJ;AACF,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAClC,IAAqB,EACrB,SAAoB,EACpB,QAAiB,EACjB,iBAAuC,EAChC,EAAE;;IACT,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;QACxC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,WAAW,GAAG,CAAC,EAAE;YACpB,SAAS,CAAC,aAAa,GAAG,WAAW,CAAC;YACtC,SAAS,CAAC,aAAa,GAAG,WAAW,CAAC;SACtC;KACD;IAED,IAAI,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,CAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QACrE,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAmB,CAAC,CAAC;KAC/C;IAKD,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,YAAY,mCAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;QAClD,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;;YAAC,OAAA,CAAC;gBAC/C,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,cAAc,EAAE,MAAA,MAAM,CAAC,cAAc,mCAAI,CAAC;gBAC1C,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;gBACtC,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;gBACnD,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;aAClD,CAAC,CAAA;SAAA,CAAC;QACL,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;YACtC,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;YAC5C,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;YAC5C,cAAc,EAAE,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC;SACrD,CAAC,CAAC,CAAC;IACP,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvD,GAAG,OAAO;QACV,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;QACpD,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;QAEpD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC;KACxF,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAC9D,IAAI,CAAC,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACrB;IAED,IAAI,CAAC,UAAU,CAAC,0BAA0B,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,0BAA0B,mCAAI,CAAC,CAAC;IAC7F,IAAI,CAAC,UAAU,CAAC,0BAA0B,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,0BAA0B,mCAAI,CAAC,CAAC;IAC7F,IAAI,CAAC,UAAU,CAAC,sBAAsB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,sBAAsB,mCAAI,CAAC,CAAC;IACrF,IAAI,CAAC,UAAU,CAAC,wBAAwB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,wBAAwB,mCAAI,CAAC,CAAC;IACzF,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;IACvF,IAAI,CAAC,UAAU,CAAC,4BAA4B,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,4BAA4B,mCAAI,CAAC,CAAC;IACjG,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,mCAAI,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,mCAAI,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,mCAAI,CAAC,CAAC;IAC/E,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,mCAAI,CAAC,CAAC;IAC/E,IAAI,CAAC,UAAU,CAAC,qBAAqB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,mCAAI,CAAC,CAAC;IACnF,IAAI,CAAC,UAAU,CAAC,qBAAqB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,mCAAI,CAAC,CAAC;IACnF,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;IACvF,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;IACvF,IAAI,CAAC,UAAU,CAAC,wBAAwB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,wBAAwB,mCAAI,CAAC,CAAC;IACzF,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,mCAAI,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,mCAAI,CAAC,CAAC;IAC3E,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,cAAc,mCAAI,CAAC,CAAC;IACrE,IAAI,CAAC,UAAU,CAAC,mBAAmB;QAClC,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,mCAAI,CAAC,CAAC;YAE1C,CAAC,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,sBAA6B,EAAE,MAAM,mCAAI,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,UAAU,CAAC,mBAAmB;QAClC,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,mBAAmB,mCAAI,CAAC,CAAC;YAC1C,CAAC,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,sBAA6B,EAAE,MAAM,mCAAI,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,eAAe,mCAAI,CAAC,CAAC;IACvE,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;AAC9E,CAAC,CAAC;AAjFW,QAAA,mBAAmB,uBAiF9B;AAEK,MAAM,oBAAoB,GAAG,CACnC,KAAoB,EACpB,IAAqB,EACrB,UAAyB,EACzB,SAA0B,EAC1B,SAAwB,EACjB,EAAE;IAET,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;KACjF;IACD,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACnE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;KAC3F;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACjF,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;KAC3F;AACF,CAAC,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B;AAEK,MAAM,oBAAoB,GAAG,CACnC,KAAoB,EACpB,SAA0B,EAC1B,SAAwB,EACjB,EAAE;IACT,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO;KACP;AA8CF,CAAC,CAAC;AArDW,QAAA,oBAAoB,wBAqD/B","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { AllCardsService, CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardsData } from '../cards/cards-data';\r\nimport { updateStealth } from '../keywords/stealth';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const setMissingAuras = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tanomalies: readonly string[],\r\n\tallCards: AllCardsService,\r\n): void => {\r\n\tsetMissingMinionsAura(board, boardHero, anomalies, allCards);\r\n\tsetMissingHeroPowerAura(board, boardHero);\r\n\tsetMissingTrinketAura(board, boardHero);\r\n};\r\n\r\nexport const setMissingTrinketAura = (board: BoardEntity[], boardHero: BgsPlayerEntity): void => {\r\n\tfor (const trinket of boardHero.trinkets ?? []) {\r\n\t\t// switch (trinket.cardId) {\r\n\t\t// \tcase CardIds.WindrunnerNecklace_BG30_MagicItem_997:\r\n\t\t// \tcase CardIds.WindrunnerNecklace_WindrunnerNecklaceToken_BG30_MagicItem_997t:\r\n\t\t// \t\tconst enchantment =\r\n\t\t// \t\t\ttrinket.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997\r\n\t\t// \t\t\t\t? CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e\r\n\t\t// \t\t\t\t: CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2;\r\n\t\t// \t\tconst buff = trinket.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997 ? 8 : 20;\r\n\t\t// \t\tconst target = board[0];\r\n\t\t// \t\tif (!!target && !target.enchantments?.find((e) => e.cardId === enchantment)) {\r\n\t\t// \t\t\ttarget.attack += buff;\r\n\t\t// \t\t\ttarget.enchantments.push({\r\n\t\t// \t\t\t\tcardId: enchantment,\r\n\t\t// \t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t// \t\t\t\ttiming: 0,\r\n\t\t// \t\t\t});\r\n\t\t// \t\t}\r\n\t\t// \t\tbreak;\r\n\t\t// }\r\n\t}\r\n};\r\n\r\nexport const setMissingHeroPowerAura = (board: BoardEntity[], boardHero: BgsPlayerEntity): void => {\r\n\tfor (const heroPower of boardHero.heroPowers) {\r\n\t\tif (heroPower.cardId === CardIds.TheSmokingGun) {\r\n\t\t\tboard\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t!e.enchantments.find(\r\n\t\t\t\t\t\t\t(ench) => ench.cardId === CardIds.TheSmokingGun_ArmedAndStillSmokingEnchantment,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\te.attack += 4;\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tif (heroPower.cardId === CardIds.VolatileVenom) {\r\n\t\t\tboard\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(e) => !e.enchantments.find((ench) => ench.cardId === CardIds.VolatileVenom_VolatileEnchantment),\r\n\t\t\t\t)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\te.attack += 7;\r\n\t\t\t\t\te.health += 7;\r\n\t\t\t\t\te.enchantments.push({\r\n\t\t\t\t\t\tcardId: CardIds.VolatileVenom_VolatileEnchantment,\r\n\t\t\t\t\t\toriginEntityId: undefined,\r\n\t\t\t\t\t\ttiming: 0,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst setMissingMinionsAura = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tanomalies: readonly string[],\r\n\tallCards: AllCardsService,\r\n): void => {\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, anomalies, allCards)),\r\n\t\tCardIds.SouthseaCaptainLegacy_BG_NEW1_027,\r\n\t\tCardIds.SouthseaCaptain_YarrrVanillaEnchantment,\r\n\t\t1,\r\n\t\t1,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, anomalies, allCards)),\r\n\t\tCardIds.SouthseaCaptainLegacy_TB_BaconUps_136,\r\n\t\tCardIds.SouthseaCaptain_YarrrEnchantment,\r\n\t\t2,\r\n\t\t2,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, anomalies, allCards)),\r\n\t\tCardIds.MurlocWarleaderLegacy_BG_EX1_507,\r\n\t\tCardIds.MurlocWarleader_MrgglaarglLegacyEnchantment,\r\n\t\t2,\r\n\t\t0,\r\n\t);\r\n\t// setMissingAura(\r\n\t// \tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, anomalies, allCards)),\r\n\t// \tCardIds.MurlocWarleaderLegacy_BG_EX1_507,\r\n\t// \tCardIds.MurlocWarleader_MrgglaarglEnchantment,\r\n\t// \t4,\r\n\t// \t0,\r\n\t// );\r\n\t// setMissingAura(\r\n\t// \tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, anomalies, allCards)),\r\n\t// \tCardIds.Kathranatir_BG21_039,\r\n\t// \tCardIds.Kathranatir_GraspOfKathranatirEnchantment_BG21_039e,\r\n\t// \t2,\r\n\t// \t0,\r\n\t// );\r\n\t// setMissingAura(\r\n\t// \tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, anomalies, allCards)),\r\n\t// \tCardIds.Kathranatir_BG21_039_G,\r\n\t// \tCardIds.Kathranatir_GraspOfKathranatirEnchantment_BG21_039_Ge,\r\n\t// \t4,\r\n\t// \t0,\r\n\t// );\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => e.divineShield),\r\n\t\tCardIds.CyborgDrake_BG25_043,\r\n\t\tCardIds.CyborgDrake_CyborgEnhancementEnchantment_BG25_043e,\r\n\t\t6,\r\n\t\t0,\r\n\t\tfalse,\r\n\t);\r\n\t// setMissingAura(\r\n\t// \tboard.filter((e) => e.divineShield),\r\n\t// \tCardIds.CyborgDrake_BG25_043_G,\r\n\t// \tCardIds.CyborgDrake_CyborgEnhancementEnchantment_BG25_043_Ge,\r\n\t// \t12,\r\n\t// \t0,\r\n\t// \tfalse,\r\n\t// );\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, anomalies, allCards)),\r\n\t\tCardIds.SoreLoser_BG27_030,\r\n\t\tCardIds.SoreLoser_NoImWinningEnchantment_BG27_030e,\r\n\t\tboardHero.tavernTier,\r\n\t\t0,\r\n\t);\r\n\tsetMissingAura(\r\n\t\tboard.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, anomalies, allCards)),\r\n\t\tCardIds.SoreLoser_BG27_030_G,\r\n\t\tCardIds.SoreLoser_NoImWinningEnchantment_BG27_030e,\r\n\t\t2 * boardHero.tavernTier,\r\n\t\t0,\r\n\t);\r\n};\r\n\r\nconst setMissingAura = (\r\n\tboard: BoardEntity[],\r\n\tminionCardId: string,\r\n\tenchantmentCardId: string,\r\n\tattack: number,\r\n\thealth: number,\r\n\tignoreSelf = true,\r\n\tallCards: AllCardsService = null,\r\n): void => {\r\n\tconst buffers = board.filter((e) => e.cardId === minionCardId);\r\n\tfor (const buffer of buffers) {\r\n\t\tboard\r\n\t\t\t.filter((e) => !e.enchantments.find((ench) => ench.cardId === enchantmentCardId))\r\n\t\t\t.filter((e) => (ignoreSelf ? e.entityId !== buffer.entityId : true))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.attack += attack;\r\n\t\t\t\te.health += health;\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\nexport const setImplicitDataHero = (\r\n\thero: BgsPlayerEntity,\r\n\tcardsData: CardsData,\r\n\tisPlayer: boolean,\r\n\tentityIdContainer: { entityId: number },\r\n): void => {\r\n\tfor (const heroPower of hero.heroPowers) {\r\n\t\tconst avengeValue = cardsData.avengeValue(heroPower.cardId);\r\n\t\tif (avengeValue > 0) {\r\n\t\t\theroPower.avengeCurrent = avengeValue;\r\n\t\t\theroPower.avengeDefault = avengeValue;\r\n\t\t}\r\n\t}\r\n\t// Backward compatibility\r\n\tif (!!hero.questRewards?.length && !Array.isArray(hero.questRewards)) {\r\n\t\thero.questRewards = [hero.questRewards as any];\r\n\t}\r\n\r\n\t// Because Denathrius can send a quest reward as its hero power (I think)\r\n\t// For now deactivating this, until I have a scenario where this matters. It feels like\r\n\t// this should be a display issue only, as quest rewards are also handled in the code\r\n\tconst heroPowerAsReward = null; // hero.cardId === CardIds.SireDenathrius_BG24_HERO_100 ? hero.heroPowers[0]?.cardId : null;\r\n\thero.questRewards = [...(hero.questRewards ?? []), heroPowerAsReward].filter((e) => !!e);\r\n\thero.questRewardEntities = hero.questRewardEntities\r\n\t\t? hero.questRewardEntities.map((reward: any) => ({\r\n\t\t\t\tcardId: reward.CardId,\r\n\t\t\t\tscriptDataNum1: reward.ScriptDataNum1 ?? 0,\r\n\t\t\t\tentityId: entityIdContainer.entityId--,\r\n\t\t\t\tavengeDefault: cardsData.avengeValue(reward.CardId),\r\n\t\t\t\tavengeCurrent: cardsData.avengeValue(reward.CardId),\r\n\t\t }))\r\n\t\t: hero.questRewards.map((reward) => ({\r\n\t\t\t\tcardId: reward,\r\n\t\t\t\tentityId: entityIdContainer.entityId--,\r\n\t\t\t\tavengeCurrent: cardsData.avengeValue(reward),\r\n\t\t\t\tavengeDefault: cardsData.avengeValue(reward),\r\n\t\t\t\tscriptDataNum1: cardsData.defaultScriptDataNum(reward),\r\n\t\t }));\r\n\thero.trinkets = (hero.trinkets ?? []).map((trinket) => ({\r\n\t\t...trinket,\r\n\t\tavengeDefault: cardsData.avengeValue(trinket.cardId),\r\n\t\tavengeCurrent: cardsData.avengeValue(trinket.cardId),\r\n\t\t// Use scriptDataNum1 to keep the info from the input\r\n\t\tscriptDataNum1: trinket.scriptDataNum1 || cardsData.defaultScriptDataNum(trinket.cardId),\r\n\t}));\r\n\t// 0 is not a valid entityId\r\n\thero.entityId = hero.entityId || entityIdContainer.entityId--;\r\n\thero.hand = hero.hand ?? [];\r\n\tif (!hero.globalInfo) {\r\n\t\thero.globalInfo = {};\r\n\t}\r\n\r\n\thero.globalInfo.EternalKnightsDeadThisGame = hero.globalInfo.EternalKnightsDeadThisGame ?? 0;\r\n\thero.globalInfo.SanlaynScribesDeadThisGame = hero.globalInfo.SanlaynScribesDeadThisGame ?? 0;\r\n\thero.globalInfo.BeastsSummonedThisGame = hero.globalInfo.BeastsSummonedThisGame ?? 0;\r\n\thero.globalInfo.BeastsSummonedThisCombat = hero.globalInfo.BeastsSummonedThisCombat ?? 0;\r\n\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame ?? 0;\r\n\thero.globalInfo.PiratesSummonedThisGame = hero.globalInfo.PiratesSummonedThisGame ?? 0;\r\n\thero.globalInfo.BattlecriesTriggeredThisGame = hero.globalInfo.BattlecriesTriggeredThisGame ?? 0;\r\n\thero.globalInfo.BeetleAttackBuff = hero.globalInfo.BeetleAttackBuff ?? 0;\r\n\thero.globalInfo.BeetleHealthBuff = hero.globalInfo.BeetleHealthBuff ?? 0;\r\n\thero.globalInfo.ElementalAttackBuff = hero.globalInfo.ElementalAttackBuff ?? 0;\r\n\thero.globalInfo.ElementalHealthBuff = hero.globalInfo.ElementalHealthBuff ?? 0;\r\n\thero.globalInfo.TavernSpellAttackBuff = hero.globalInfo.TavernSpellAttackBuff ?? 0;\r\n\thero.globalInfo.TavernSpellHealthBuff = hero.globalInfo.TavernSpellHealthBuff ?? 0;\r\n\thero.globalInfo.MutatedLasherAttackBuff = hero.globalInfo.MutatedLasherAttackBuff ?? 0;\r\n\thero.globalInfo.MutatedLasherHealthBuff = hero.globalInfo.MutatedLasherHealthBuff ?? 0;\r\n\thero.globalInfo.TavernSpellsCastThisGame = hero.globalInfo.TavernSpellsCastThisGame ?? 0;\r\n\thero.globalInfo.AdditionalAttack = hero.globalInfo.AdditionalAttack ?? 0;\r\n\thero.globalInfo.SpellsCastThisGame = hero.globalInfo.SpellsCastThisGame ?? 0;\r\n\thero.globalInfo.UndeadAttackBonus = hero.globalInfo.UndeadAttackBonus ?? 0;\r\n\thero.globalInfo.FrostlingBonus = hero.globalInfo.FrostlingBonus ?? 0;\r\n\thero.globalInfo.BloodGemAttackBonus =\r\n\t\t(hero.globalInfo.BloodGemAttackBonus ?? 0) +\r\n\t\t// Not sure why, but this isn't reflected in the player enchant\r\n\t\t(hero.questRewardEntities?.filter((e) => e.cardId === CardIds.EndlessBloodMoon).length ?? 0);\r\n\thero.globalInfo.BloodGemHealthBonus =\r\n\t\t(hero.globalInfo.BloodGemHealthBonus ?? 0) +\r\n\t\t(hero.questRewardEntities?.filter((e) => e.cardId === CardIds.EndlessBloodMoon).length ?? 0);\r\n\thero.globalInfo.GoldrinnBuffAtk = hero.globalInfo.GoldrinnBuffAtk ?? 0;\r\n\thero.globalInfo.GoldrinnBuffHealth = hero.globalInfo.GoldrinnBuffHealth ?? 0;\r\n};\r\n\r\nexport const clearStealthIfNeeded = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// https://twitter.com/DCalkosz/status/1562194944688660481?s=20&t=100I8IVZmBKgYQWkdK8nIA\r\n\tif (board.every((entity) => entity.stealth && !entity.attack)) {\r\n\t\tboard.forEach((e) => updateStealth(e, false, board, hero, otherHero, gameState));\r\n\t}\r\n\tif (otherBoard.every((entity) => entity.stealth && !entity.attack)) {\r\n\t\totherBoard.forEach((e) => updateStealth(e, false, otherBoard, otherHero, hero, gameState));\r\n\t}\r\n\tif (board.every((e) => e.stealth) && otherBoard.every((e) => e.stealth)) {\r\n\t\tboard.forEach((e) => updateStealth(e, false, board, hero, otherHero, gameState));\r\n\t\totherBoard.forEach((e) => updateStealth(e, false, otherBoard, otherHero, hero, gameState));\r\n\t}\r\n};\r\n\r\nexport const updateBoardwideAuras = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (board.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// board\r\n\t// \t.filter((entity) =>\r\n\t// \t\tentity.enchantments.some(\r\n\t// \t\t\t(ench) =>\r\n\t// \t\t\t\tench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e ||\r\n\t// \t\t\t\tench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t// \t\t),\r\n\t// \t)\r\n\t// \t.forEach((e) => {\r\n\t// \t\tconst enchantments = e.enchantments.filter(\r\n\t// \t\t\t(ench) => ench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e,\r\n\t// \t\t).length;\r\n\t// \t\tconst greaterEnchantments = e.enchantments.filter(\r\n\t// \t\t\t(ench) => ench.cardId === CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t// \t\t).length;\r\n\t// \t\te.attack = Math.max(0, e.attack - enchantments * 8 - greaterEnchantments * 15);\r\n\t// \t\te.enchantments = e.enchantments\r\n\t// \t\t\t.filter(\r\n\t// \t\t\t\t(ench) =>\r\n\t// \t\t\t\t\tench.cardId !== CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e,\r\n\t// \t\t\t)\r\n\t// \t\t\t.filter(\r\n\t// \t\t\t\t(ench) =>\r\n\t// \t\t\t\t\tench.cardId !== CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t// \t\t\t);\r\n\t// \t});\r\n\t// boardHero.trinkets\r\n\t// \t.filter(\r\n\t// \t\t(t) =>\r\n\t// \t\t\tt.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997 ||\r\n\t// \t\t\tt.cardId === CardIds.WindrunnerNecklace_WindrunnerNecklaceToken_BG30_MagicItem_997t,\r\n\t// \t)\r\n\t// \t.forEach((t) => {\r\n\t// \t\tconst buff = t.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997 ? 8 : 15;\r\n\t// \t\tboard[0].attack = board[0].attack + buff;\r\n\t// \t\tboard[0].enchantments.push({\r\n\t// \t\t\tcardId:\r\n\t// \t\t\t\tt.cardId === CardIds.WindrunnerNecklace_BG30_MagicItem_997\r\n\t// \t\t\t\t\t? CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e\r\n\t// \t\t\t\t\t: CardIds.WindrunnerNecklace_RunningLikeTheWindEnchantment_BG30_MagicItem_997e2,\r\n\t// \t\t\toriginEntityId: t.entityId,\r\n\t// \t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t// \t\t});\r\n\t// \t});\r\n};\r\n"]}
@@ -7,7 +7,6 @@ const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
7
  const divine_shield_1 = require("../keywords/divine-shield");
8
8
  const reborn_1 = require("../keywords/reborn");
9
9
  const taunt_1 = require("../keywords/taunt");
10
- const venomous_1 = require("../keywords/venomous");
11
10
  const utils_1 = require("../services/utils");
12
11
  const simulate_bgs_battle_1 = require("../simulate-bgs-battle");
13
12
  const utils_2 = require("../utils");
@@ -17,18 +16,11 @@ const cards_in_hand_1 = require("./cards-in-hand");
17
16
  const deathrattle_spawns_1 = require("./deathrattle-spawns");
18
17
  const spawns_1 = require("./spawns");
19
18
  const stats_1 = require("./stats");
20
- const golden_1 = require("./utils/golden");
21
19
  const applyAvengeEffects = (deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, entitiesSpawnedFromMinionDeath) => {
22
20
  const candidatesEntitiesSpawnedFromAvenge = [];
23
21
  const avengers = boardWithDeadEntity
24
22
  .filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0)
25
23
  .sort((a, b) => {
26
- if (a.cardId === "BG21_031" || a.cardId === "BG21_031_G") {
27
- return -1;
28
- }
29
- if (b.cardId === "BG21_031" || b.cardId === "BG21_031_G") {
30
- return 1;
31
- }
32
24
  return 0;
33
25
  });
34
26
  for (const avenger of avengers) {
@@ -156,18 +148,6 @@ const handleAvenge = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity,
156
148
  const thorncallerCardsToAdd = Array(thorncallerToAddQuantity).fill("BG20_GEM");
157
149
  (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, thorncallerCardsToAdd, gameState);
158
150
  break;
159
- case "BG21_009":
160
- case "BG21_009_G":
161
- const poisonousIterations = avenger.cardId === "BG21_009_G" ? 2 : 1;
162
- for (let i = 0; i < poisonousIterations; i++) {
163
- const validTargets = boardWithDeadEntity.filter((e) => !e.poisonous && !e.venomous);
164
- const murloc = (0, utils_2.getRandomAliveMinion)(validTargets, boardWithDeadEntityHero, reference_data_1.Race.MURLOC, gameState);
165
- if (murloc) {
166
- (0, venomous_1.updateVenomous)(murloc, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);
167
- gameState.spectator.registerPowerTarget(avenger, murloc, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero);
168
- }
169
- }
170
- break;
171
151
  case "BG21_023":
172
152
  const target = (0, utils_2.getRandomMinionWithHighestHealth)(otherBoard);
173
153
  gameState.spectator.registerPowerTarget(avenger, target, otherBoard, boardWithDeadEntityHero, otherBoardHero);
@@ -180,33 +160,6 @@ const handleAvenge = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity,
180
160
  (0, attack_1.dealDamageToMinion)(target, otherBoard, otherBoardHero, avenger, 5, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
181
161
  }
182
162
  break;
183
- case "BG21_031":
184
- const nonGoldenMinions = boardWithDeadEntity
185
- .filter((e) => e.entityId !== avenger.entityId)
186
- .filter((e) => {
187
- const ref = gameState.allCards.getCard(e.cardId);
188
- return (!!ref.battlegroundsPremiumDbfId &&
189
- !!gameState.allCards.getCardFromDbfId(ref.battlegroundsPremiumDbfId).id);
190
- });
191
- const pirate = (0, utils_2.getRandomAliveMinion)(nonGoldenMinions, boardWithDeadEntityHero, reference_data_1.Race.PIRATE, gameState);
192
- if (pirate) {
193
- (0, golden_1.makeMinionGolden)(pirate, avenger, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);
194
- }
195
- break;
196
- case "BG21_031_G":
197
- for (let i = 0; i < 2; i++) {
198
- const nonGoldenMinions = boardWithDeadEntity.filter((e) => !(0, golden_1.isMinionGolden)(e, gameState.allCards));
199
- const pirate = (0, utils_2.getRandomAliveMinion)(nonGoldenMinions, boardWithDeadEntityHero, reference_data_1.Race.PIRATE, gameState);
200
- if (pirate) {
201
- (0, golden_1.makeMinionGolden)(pirate, avenger, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);
202
- }
203
- }
204
- break;
205
- case "BG25_002":
206
- case "BG25_002_G":
207
- const ghoulMultiplier = avenger.cardId === "BG25_002_G" ? 2 : 1;
208
- (0, utils_2.grantStatsToMinionsOfEachType)(avenger, boardWithDeadEntity, boardWithDeadEntityHero, ghoulMultiplier * 3, 0, gameState);
209
- break;
210
163
  case "BG26_157":
211
164
  case "BG26_157_G":
212
165
  const bristlebachMultiplier = avenger.cardId === "BG26_157_G" ? 4 : 2;
@@ -226,9 +179,6 @@ const handleAvenge = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity,
226
179
  const abominationMultiplier = avenger.cardId === "BG25_014_G" ? 2 : 1;
227
180
  (0, stats_1.modifyStats)(avenger, avenger, abominationMultiplier * 1, abominationMultiplier * 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
228
181
  break;
229
- case "BG27_Reward_800":
230
- (0, utils_2.grantRandomStats)(avenger, boardWithDeadEntityHero.hand.filter((e) => { var _a; return ((_a = gameState.allCards.getCard(e.cardId).type) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === reference_data_1.CardType[reference_data_1.CardType.MINION]; }), boardWithDeadEntityHero, 4, 0, null, true, gameState);
231
- break;
232
182
  case "BG27_Reward_502":
233
183
  const highestHealthMinion = [...otherBoard].sort((a, b) => b.health - a.health)[0];
234
184
  (0, attack_1.dealDamageToMinion)(highestHealthMinion, otherBoard, otherBoardHero, avenger, 10, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
@@ -1 +1 @@
1
- {"version":3,"file":"avenge.js","sourceRoot":"","sources":["../../src/simulation/avenge.ts"],"names":[],"mappings":";;;AAAA,iEAAgF;AAGhF,4DAAoD;AACpD,iEAA4D;AAC5D,6DAAoE;AACpE,+CAAkD;AAClD,6CAAgD;AAChD,mDAAsD;AACtD,6CAA+C;AAC/C,gEAAuE;AACvE,oCAQkB;AAClB,qCAA6D;AAC7D,6CAA+C;AAC/C,mDAAiD;AACjD,6DAAqD;AAErD,qCAA+C;AAC/C,mCAAsC;AACtC,2CAAkE;AAE3D,MAAM,kBAAkB,GAAG,CACjC,UAAuB,EACvB,wBAAgC,EAChC,mBAAkC,EAClC,uBAAwC,EACxC,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACxB,8BAA6C,EAC7B,EAAE;IAClB,MAAM,mCAAmC,GAAkB,EAAE,CAAC;IAE9D,MAAM,QAAQ,GAAG,mBAAmB;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;SAGxD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,CAAC,CAAC,MAAM,eAAiC,IAAI,CAAC,CAAC,MAAM,iBAAmC,EAAE;YAC7F,OAAO,CAAC,CAAC,CAAC;SACV;QACD,IAAI,CAAC,CAAC,MAAM,eAAiC,IAAI,CAAC,CAAC,MAAM,iBAAmC,EAAE;YAC7F,OAAO,CAAC,CAAC;SACT;QACD,OAAO,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IACJ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC/B,YAAY,CACX,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,OAAO,EACP,mCAAmC,EACnC,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;KACF;IAED,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,UAAU,EAAE;QAC3D,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,IAAI,CAAC,CAAC;QAC9E,IAAI,WAAW,EAAE;YAChB,gBAAgB,CACf,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,mCAAmC,EACnC,SAAS,CACT,CAAC;SACF;KACD;IAED,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,mBAAmB,CAAC,MAAM,CAC7E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAChD,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE;QAC1C,YAAY,CACX,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,OAAsB,EACtB,mCAAmC,EACnC,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;KACF;IAED,MAAM,eAAe,GAAG,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;IAClH,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE;QACtC,YAAY,CACX,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,OAAsB,EACtB,mCAAmC,EACnC,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;KACF;IAED,IAAA,4BAAmB,EAClB,mCAAmC,EACnC,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;IAGF,MAAM,cAAc,GACnB,IAAA,mBAAW,EAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,wBAAO,CAAC,wBAAO,CAAC,WAAW,CAAC,CAAC;QACxF,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,mDAA6B,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,IAAI,cAAc,EAAE;QASnB,mBAAmB;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAiC,IAAI,CAAC,CAAC,MAAM,iBAAmC,CAAC;aACvG,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAClB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,IAAA,uBAAe,EAAC,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,mCAAmC,CAAC;AAC5C,CAAC,CAAC;AAxHW,QAAA,kBAAkB,sBAwH7B;AAEK,MAAM,oBAAoB,GAAG,CAAC,KAA6B,EAAE,uBAAwC,EAAE,EAAE;IAC/G,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE;YAC3B,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;SAC1B;KACD;IACD,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,UAAU,EAAE;QAC3D,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE;YAC9B,SAAS,CAAC,aAAa,IAAI,CAAC,CAAC;SAC7B;KACD;IAED,KAAK,MAAM,MAAM,IAAI,uBAAuB,CAAC,mBAAmB,EAAE;QACjE,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE;YAC3B,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;SAC1B;KACD;IAED,KAAK,MAAM,OAAO,IAAI,uBAAuB,CAAC,QAAQ,EAAE;QACvD,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;YAC5B,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;SAC3B;KACD;AACF,CAAC,CAAC;AAvBW,QAAA,oBAAoB,wBAuB/B;AAEF,MAAM,YAAY,GAAG,CACpB,mBAAkC,EAClC,uBAAwC,EACxC,UAAuB,EACvB,wBAAgC,EAChC,OAAoB,EACpB,mCAAkD,EAClD,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACvB,EAAE;;IACH,MAAM,UAAU,GAAG,6BAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,IAAA,0BAAS,EAAC,UAAU,CAAC,EAAE;QAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE;YAC5C,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,uBAAuB;YAC7B,UAAU,EAAE,UAAU;YACtB,SAAS,EAAE,cAAc;YACzB,SAAS;SACT,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,EAAE;YAClD,mCAAmC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;SACvD;KACD;SAAM;QAEN,QAAQ,OAAO,CAAC,MAAM,EAAE;YACvB,gBAAwC;YACxC;gBACC,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;gBAC/D,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC7B,IAAA,mBAAW,EACV,MAAM,EACN,OAAO,EACP,OAAO,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/D,OAAO,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/D,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,MAAM;YAYP,2BAAqD;YACrD;gBAUC,MAAM;YACP;gBACC,MAAM,OAAO,GAAG,IAAA,wBAAgB,EAC/B,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,CAAC,EACD,CAAC,EACD,qBAAI,CAAC,KAAK,EACV,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,IAAI,CAAC,CAAC,OAAO,EAAE;oBACd,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,MAAM,OAAO,GAAG,IAAA,wBAAgB,EAC/B,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,EAAE,EACF,EAAE,EACF,qBAAI,CAAC,KAAK,EACV,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,IAAI,CAAC,CAAC,OAAO,EAAE;oBACd,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;iBACF;gBACD,MAAM;YACP,gBAAyC;YACzC;gBACC,MAAM,2BAA2B,GAAG,OAAO,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrG,MAAM,mBAAmB,GAAG,EAAE,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,2BAA2B,EAAE,CAAC,EAAE,EAAE;oBACrD,mBAAmB,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;iBACtE;gBACD,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;gBAC7F,MAAM;YACP,gBAAyC;YACzC;gBACC,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;gBAChF,MAAM;YACP,gBAAuC;YACvC;gBACC,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;gBAChF,MAAM;YACP,gBAA0C;YAC1C;gBACC,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,iBAA2C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClG,MAAM,oBAAoB,GAAG,EAAE,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,EAAE,CAAC,EAAE,EAAE;oBACjD,oBAAoB,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;iBAC5E;gBACD,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;gBAC9F,MAAM;YACP,gBAAkC;YAClC;gBACC,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3F,MAAM,qBAAqB,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC,IAAI,YAAkB,CAAC;gBACrF,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;gBAC/F,MAAM;YACP,gBAA8B;YAC9B;gBACC,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,iBAA+B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;oBAC7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACpF,MAAM,MAAM,GAAG,IAAA,4BAAoB,EAAC,YAAY,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACnG,IAAI,MAAM,EAAE;wBACX,IAAA,yBAAc,EACb,MAAM,EACN,IAAI,EACJ,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,SAAS,CACT,CAAC;wBACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;qBACF;iBACD;gBACD,MAAM;YACP;gBAEC,MAAM,MAAM,GAAG,IAAA,wCAAgC,EAAC,UAAU,CAAC,CAAC;gBAC5D,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,MAAM,EACN,UAAU,EACV,uBAAuB,EACvB,cAAc,CACd,CAAC;gBACF,IAAA,2BAAkB,EACjB,MAAM,EACN,UAAU,EACV,cAAc,EACd,OAAO,EACP,CAAC,EACD,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;gBACF,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC3B,MAAM,MAAM,GAAG,IAAA,wCAAgC,EAAC,UAAU,CAAC,CAAC;oBAC5D,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,MAAM,EACN,UAAU,EACV,uBAAuB,EACvB,cAAc,CACd,CAAC;oBACF,IAAA,2BAAkB,EACjB,MAAM,EACN,UAAU,EACV,cAAc,EACd,OAAO,EACP,CAAC,EACD,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,MAAM,gBAAgB,GAAG,mBAAmB;qBAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;qBAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;oBACb,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBACjD,OAAO,CACN,CAAC,CAAC,GAAG,CAAC,yBAAyB;wBAC/B,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,EAAE,CACvE,CAAC;gBACH,CAAC,CAAC,CAAC;gBACJ,MAAM,MAAM,GAAG,IAAA,4BAAoB,EAAC,gBAAgB,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBACvG,IAAI,MAAM,EAAE;oBACX,IAAA,yBAAgB,EACf,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC3B,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAA,uBAAc,EAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACnG,MAAM,MAAM,GAAG,IAAA,4BAAoB,EAClC,gBAAgB,EAChB,uBAAuB,EACvB,qBAAI,CAAC,MAAM,EACX,SAAS,CACT,CAAC;oBACF,IAAI,MAAM,EAAE;wBACX,IAAA,yBAAgB,EACf,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;qBACF;iBACD;gBACD,MAAM;YACP,gBAAsC;YACtC;gBACC,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtF,IAAA,qCAA6B,EAC5B,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAAG,CAAC,EACnB,CAAC,EACD,SAAS,CACT,CAAC;gBACF,MAAM;YACP,gBAAkC;YAClC;gBACC,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC,EAAE,EAAE;oBAC/C,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE;wBACzC,MAAM,aAAa,GAClB,CAAA,MAAA,uBAAuB,CAAC,QAAQ,0CAAE,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAmD,CAClE;4BACD,IAAA,uBAAe,EACd,MAAM,EACN,uBAAuB,EACvB,qBAAI,CAAC,QAAQ,EACb,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,QAAQ,CAClB,CAAC;wBACH,IAAI,aAAa,EAAE;4BAClB,IAAA,4BAAe,EACd,OAAO,EACP,MAAM,EACN,CAAC,EACD,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;4BACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;yBACF;qBACD;iBACD;gBACD,MAAM;YACP,gBAA2C;YAC3C;gBACC,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjG,IAAA,mBAAW,EACV,OAAO,EACP,OAAO,EACP,qBAAqB,GAAG,CAAC,EACzB,qBAAqB,GAAG,CAAC,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;gBACF,MAAM;YACP;gBACC,IAAA,wBAAgB,EACf,OAAO,EACP,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CAC7F,EACD,uBAAuB,EACvB,CAAC,EACD,CAAC,EACD,IAAI,EACJ,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,MAAM;YACP;gBACC,MAAM,mBAAmB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,IAAA,2BAAkB,EACjB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,OAAO,EACP,EAAE,EACF,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;gBACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,mBAAmB,EACnB,UAAU,EACV,uBAAuB,EACvB,cAAc,CACd,CAAC;gBACF,MAAM;YACP,gBAAuC;YACvC;gBACC,IAAA,qBAAY,EAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;gBACrG,IAAA,mBAAW,EAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;gBACpG,MAAM;YACP,gBAAyC;YACzC;gBACC,IAAA,qBAAY,EAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;gBACrG,IAAA,mBAAW,EAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;gBACpG,MAAM;YACP,gBAA2C;YAC3C;gBACC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAA,uCAAuB,EACtB,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP,gBAAuC;YACvC;gBACC,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;iBAChF;gBACD,MAAM;YACP;gBACC,MAAM,sBAAsB,GAAG,MAAA,uBAAuB,CAAC,mBAAmB,0CAAE,IAAI,CAC/E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,sBAA6C,CAC5D,CAAC;gBACF,IAAI,sBAAsB,EAAE;oBAC3B,sBAAsB,CAAC,cAAc,GAAG,CAAC,MAAA,sBAAsB,CAAC,cAAc,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;iBACzF;gBACD,MAAM;YACP;gBACC,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;gBAChF,MAAM;YACP;gBACC,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM;YACP,gBAAgC;YAChC;gBACC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,IAAA,uBAAe,EACd,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,SAAS,CACT,CAAC;gBAEF,KAAK,MAAM,CAAC,IAAI,MAAA,uBAAuB,CAAC,IAAI,mCAAI,EAAE,EAAE;oBACnD,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC;oBACzB,CAAC,CAAC,MAAM,IAAI,YAAY,CAAC;oBACzB,CAAC,CAAC,SAAS,IAAI,YAAY,CAAC;iBAC5B;gBACD,MAAM;YACP;gBACC,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;gBACxG,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC1F,MAAM;YACP;gBACC,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,CAAC;gBAC5D,MAAM;YACP;gBACC,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,CAAC;gBAC5D,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,CAAC;gBAC5D,MAAM;YACP;gBACC,IAAA,uBAAe,EAAC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxF,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE;oBACzC,IAAA,2BAAkB,EACjB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,OAAO,EACP,CAAC,EACD,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;oBACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnC,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACxE,IAAI,CAAC,CAAC,MAAM,EAAE;wBACb,IAAA,qBAAY,EACX,MAAM,EACN,IAAI,EACJ,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,SAAS,CACT,CAAC;wBACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;qBACF;iBACD;gBACD,MAAM;YACP;gBACC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAC/D,qBAAI,CAAC,MAAM,EACX,uBAAuB,CAAC,UAAU,CAClC,CAAC;gBACF,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxF,MAAM;SACP;KACD;IACD,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACxB,UAAuB,EACvB,SAAuB,EACvB,mBAAkC,EAClC,uBAAwC,EACxC,UAAyB,EACzB,cAA+B,EAC/B,mCAAkD,EAClD,SAAwB,EACvB,EAAE;IAGH,QAAQ,SAAS,CAAC,MAAM,EAAE;QACzB;YACC,mCAAmC,CAAC,IAAI,CACvC,GAAG,IAAA,kCAAa,oBAEf,CAAC,EACD,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,SAAS,EACT,UAAU,CAAC,QAAQ,EACnB,KAAK,EACL,KAAK,EACL,KAAK,CACL,CACD,CAAC;YACF,MAAM;QACP;YACC,mBAAmB;iBAEjB,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACnB,IAAA,mBAAW,EAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;gBAC9F,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,uBAAuB,EACvB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;YACH,CAAC,CAAC,CAAC;YACJ,MAAM;QACP;YACC,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACtC,IAAA,mBAAW,EAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;gBAC9F,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,uBAAuB,EACvB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM;KACP;IACD,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,CAAC;AACpD,CAAC,CAAC","sourcesContent":["import { CardIds, CardType, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsHeroPower, BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAvenge } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { grantRandomDivineShield } from '../keywords/divine-shield';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { updateVenomous } from '../keywords/venomous';\r\nimport { pickRandom } from '../services/utils';\r\nimport { isValidDeathrattleEnchantment } from '../simulate-bgs-battle';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgetRandomAliveMinion,\r\n\tgetRandomMinionWithHighestHealth,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\thasMechanic,\r\n} from '../utils';\r\nimport { dealDamageToMinion, getNeighbours } from './attack';\r\nimport { playBloodGemsOn } from './blood-gems';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\nimport { isMinionGolden, makeMinionGolden } from './utils/golden';\r\n\r\nexport const applyAvengeEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tentitiesSpawnedFromMinionDeath: BoardEntity[],\r\n): BoardEntity[] => {\r\n\tconst candidatesEntitiesSpawnedFromAvenge: BoardEntity[] = [];\r\n\t// updateAvengeCounters(boardWithDeadEntity, boardWithDeadEntityHero);\r\n\tconst avengers = boardWithDeadEntity\r\n\t\t.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0)\r\n\t\t// Get Tony to be processed first, because of the \"when turned golden, the minion ignores the death for the avenge counter\"\r\n\t\t// behavior\r\n\t\t.sort((a, b) => {\r\n\t\t\tif (a.cardId === CardIds.TonyTwoTusk_BG21_031 || a.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (b.cardId === CardIds.TonyTwoTusk_BG21_031 || b.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t});\r\n\tfor (const avenger of avengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\t// console.log('updating dead entity avenge counter', boardWithDeadEntityHero.avengeCurrent, stringifySimpleCard(deadEntity, allCards));\r\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\r\n\t\tconst heroAvenger = !!heroPower.avengeDefault && heroPower.avengeCurrent <= 0;\r\n\t\tif (heroAvenger) {\r\n\t\t\thandleHeroAvenge(\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\theroPower,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tconst questRewardAvengers = boardWithDeadEntityHero.questRewardEntities.filter(\r\n\t\t(e) => !!e.avengeDefault && e.avengeCurrent <= 0,\r\n\t);\r\n\tfor (const avenger of questRewardAvengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger as BoardEntity,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tconst trinketAvengers = boardWithDeadEntityHero.trinkets.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0);\r\n\tfor (const avenger of trinketAvengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger as BoardEntity,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tperformEntitySpawns(\r\n\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\t// Not an avenge, but with Avenge timing\r\n\tconst hasDeathrattle =\r\n\t\thasMechanic(gameState.allCards.getCard(deadEntity.cardId), GameTag[GameTag.DEATHRATTLE]) ||\r\n\t\tdeadEntity.enchantments.some((e) => isValidDeathrattleEnchantment(e.cardId));\r\n\tif (hasDeathrattle) {\r\n\t\t// These are apparently processed after Reborn is triggered\r\n\t\t// http://replays.firestoneapp.com/?reviewId=5db9a191-ae9b-43a5-a072-0d460631d7a9&turn=23&action=12\r\n\t\t// UPDATE 2024-06-24: Multiple counterexamples of this, so I'm not sure exactly what is the right approach\r\n\t\t// I'm implementing the one that makes more sense to me; triggering after reborn is just too different\r\n\t\t// from what happens usually\r\n\t\t// However, we want to trigger it after all the spawns have been processed, so more or less an \"avenge\" timing?\r\n\t\t// Maybe even after that?\r\n\t\t// Update 2024-06-27 29.6.2: timing should stay the same\r\n\t\tboardWithDeadEntity\r\n\t\t\t.filter((e) => e.cardId === CardIds.GhoulAcabra_BG29_863 || e.cardId === CardIds.GhoulAcabra_BG29_863_G)\r\n\t\t\t.forEach((ghoul) => {\r\n\t\t\t\tconst buff = ghoul.cardId === CardIds.GhoulAcabra_BG29_863_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(ghoul, boardWithDeadEntity, boardWithDeadEntityHero, 2 * buff, 2 * buff, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\treturn candidatesEntitiesSpawnedFromAvenge;\r\n};\r\n\r\nexport const updateAvengeCounters = (board: readonly BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity) => {\r\n\tfor (const entity of board) {\r\n\t\tif (!!entity.avengeDefault) {\r\n\t\t\tentity.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\r\n\t\tif (!!heroPower.avengeDefault) {\r\n\t\t\theroPower.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const reward of boardWithDeadEntityHero.questRewardEntities) {\r\n\t\tif (!!reward.avengeDefault) {\r\n\t\t\treward.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardWithDeadEntityHero.trinkets) {\r\n\t\tif (!!trinket.avengeDefault) {\r\n\t\t\ttrinket.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleAvenge = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tavenger: BoardEntity,\r\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst avengeImpl = cardMappings[avenger.cardId];\r\n\tif (hasAvenge(avengeImpl)) {\r\n\t\tconst newSpawns = avengeImpl.avenge(avenger, {\r\n\t\t\tboard: boardWithDeadEntity,\r\n\t\t\thero: boardWithDeadEntityHero,\r\n\t\t\totherBoard: otherBoard,\r\n\t\t\totherHero: otherBoardHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t\tif (Array.isArray(newSpawns) && newSpawns?.length) {\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(...newSpawns);\r\n\t\t}\r\n\t} else {\r\n\t\t// Don't forget to update the avenge data in cards-data\r\n\t\tswitch (avenger.cardId) {\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030:\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030_G:\r\n\t\t\t\tconst neighbours = getNeighbours(boardWithDeadEntity, avenger);\r\n\t\t\t\tneighbours.forEach((entity) => {\r\n\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 4 : 2,\r\n\t\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 2 : 1,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.FrostwolfLieutenant:\r\n\t\t\t// case CardIds.FrostwolfLieutenantBattlegrounds:\r\n\t\t\t// \taddStatsToBoard(\r\n\t\t\t// \t\tavenger,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tavenger.cardId === CardIds.FrostwolfLieutenantBattlegrounds ? 2 : 1,\r\n\t\t\t// \t\t0,\r\n\t\t\t// \t\tallCards,\r\n\t\t\t// \t\tspectator,\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\t\t// Only for Tavern\r\n\t\t\t\t// addStatsToBoard(\r\n\t\t\t\t// \tavenger,\r\n\t\t\t\t// \tboardWithDeadEntity,\r\n\t\t\t\t// \t0,\r\n\t\t\t\t// \tavenger.cardId === CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G ? 2 : 1,\r\n\t\t\t\t// \tgameState.allCards,\r\n\t\t\t\t// \tgameState.spectator,\r\n\t\t\t\t// );\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\t\tconst target1 = grantRandomStats(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t6,\r\n\t\t\t\t\t6,\r\n\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tif (!!target1) {\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\ttarget1,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\t\tconst target2 = grantRandomStats(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t12,\r\n\t\t\t\t\t12,\r\n\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tif (!!target2) {\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\ttarget2,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\t\tconst doomsayerCardsToAddQuantity = avenger.cardId === CardIds.ImpatientDoomsayer_BG21_007_G ? 2 : 1;\r\n\t\t\t\tconst doomsayerCardsToAdd = [];\r\n\t\t\t\tfor (let i = 0; i < doomsayerCardsToAddQuantity; i++) {\r\n\t\t\t\t\tdoomsayerCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\r\n\t\t\t\t}\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, doomsayerCardsToAdd, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014:\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038:\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038_G:\r\n\t\t\t\tconst nestmatronToAddQuantity = avenger.cardId === CardIds.WitchwingNestmatron_BG21_038_G ? 2 : 1;\r\n\t\t\t\tconst nestmatronCardsToAdd = [];\r\n\t\t\t\tfor (let i = 0; i < nestmatronToAddQuantity; i++) {\r\n\t\t\t\t\tnestmatronCardsToAdd.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t}\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, nestmatronCardsToAdd, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Thorncaller_BG20_105:\r\n\t\t\tcase CardIds.Thorncaller_BG20_105_G:\r\n\t\t\t\tconst thorncallerToAddQuantity = avenger.cardId === CardIds.Thorncaller_BG20_105_G ? 2 : 1;\r\n\t\t\t\tconst thorncallerCardsToAdd = Array(thorncallerToAddQuantity).fill(CardIds.BloodGem);\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, thorncallerCardsToAdd, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Sisefin_BG21_009:\r\n\t\t\tcase CardIds.Sisefin_BG21_009_G:\r\n\t\t\t\tconst poisonousIterations = avenger.cardId === CardIds.Sisefin_BG21_009_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < poisonousIterations; i++) {\r\n\t\t\t\t\tconst validTargets = boardWithDeadEntity.filter((e) => !e.poisonous && !e.venomous);\r\n\t\t\t\t\tconst murloc = getRandomAliveMinion(validTargets, boardWithDeadEntityHero, Race.MURLOC, gameState);\r\n\t\t\t\t\tif (murloc) {\r\n\t\t\t\t\t\tupdateVenomous(\r\n\t\t\t\t\t\t\tmurloc,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\tmurloc,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\t\t// This can be null if the avenge triggers when the last enemy minion dies as well\r\n\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\t5,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t5,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\t\tconst nonGoldenMinions = boardWithDeadEntity\r\n\t\t\t\t\t.filter((e) => e.entityId !== avenger.entityId)\r\n\t\t\t\t\t.filter((e) => {\r\n\t\t\t\t\t\tconst ref = gameState.allCards.getCard(e.cardId);\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t!!ref.battlegroundsPremiumDbfId &&\r\n\t\t\t\t\t\t\t!!gameState.allCards.getCardFromDbfId(ref.battlegroundsPremiumDbfId).id\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\t\t\t\tconst pirate = getRandomAliveMinion(nonGoldenMinions, boardWithDeadEntityHero, Race.PIRATE, gameState);\r\n\t\t\t\tif (pirate) {\r\n\t\t\t\t\tmakeMinionGolden(\r\n\t\t\t\t\t\tpirate,\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\t\t\tconst nonGoldenMinions = boardWithDeadEntity.filter((e) => !isMinionGolden(e, gameState.allCards));\r\n\t\t\t\t\tconst pirate = getRandomAliveMinion(\r\n\t\t\t\t\t\tnonGoldenMinions,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tRace.PIRATE,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (pirate) {\r\n\t\t\t\t\t\tmakeMinionGolden(\r\n\t\t\t\t\t\t\tpirate,\r\n\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GhoulOfTheFeast_BG25_002:\r\n\t\t\tcase CardIds.GhoulOfTheFeast_BG25_002_G:\r\n\t\t\t\tconst ghoulMultiplier = avenger.cardId === CardIds.GhoulOfTheFeast_BG25_002_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tghoulMultiplier * 3,\r\n\t\t\t\t\t0,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\t\tconst bristlebachMultiplier = avenger.cardId === CardIds.Bristlebach_BG26_157_G ? 4 : 2;\r\n\t\t\t\tfor (let i = 0; i < bristlebachMultiplier; i++) {\r\n\t\t\t\t\tfor (const entity of boardWithDeadEntity) {\r\n\t\t\t\t\t\tconst isValidTarget =\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.trinkets?.some(\r\n\t\t\t\t\t\t\t\t(t) => t.cardId === CardIds.BristlebachPortrait_BG32_MagicItem_274,\r\n\t\t\t\t\t\t\t) ||\r\n\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tRace.QUILBOAR,\r\n\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (isValidTarget) {\r\n\t\t\t\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\t\tconst abominationMultiplier = avenger.cardId === CardIds.HungeringAbomination_BG25_014_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tabominationMultiplier * 1,\r\n\t\t\t\t\tabominationMultiplier * 2,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.IceSickle:\r\n\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntityHero.hand.filter(\r\n\t\t\t\t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t\t\t),\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t4,\r\n\t\t\t\t\t0,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\t\tconst highestHealthMinion = [...otherBoard].sort((a, b) => b.health - a.health)[0];\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\thighestHealthMinion,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\t10,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\thighestHealthMinion,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\t\tconst phaerixLoops = avenger.cardId === CardIds.PhaerixWrathOfTheSun_BG28_403_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < phaerixLoops; i++) {\r\n\t\t\t\t\tgrantRandomDivineShield(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\t\tconst AugmentedLaborerLoops = avenger.cardId === CardIds.AugmentedLaborer_BG28_740_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < AugmentedLaborerLoops; i++) {\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\t\tconst tumblingDisasterEntity = boardWithDeadEntityHero.questRewardEntities?.find(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505,\r\n\t\t\t\t);\r\n\t\t\t\tif (tumblingDisasterEntity) {\r\n\t\t\t\t\ttumblingDisasterEntity.scriptDataNum1 = (tumblingDisasterEntity.scriptDataNum1 ?? 0) + 1;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\t\tavenger.scriptDataNum1 = (avenger.scriptDataNum1 ?? 0) + 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\r\n\t\t\t\tconst murglMkStats = avenger.cardId === CardIds.MurglMkIi_BG29_991_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tmurglMkStats,\r\n\t\t\t\t\tmurglMkStats,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\t// Don't use utility methods, as we don't want triggers to proc\r\n\t\t\t\tfor (const e of boardWithDeadEntityHero.hand ?? []) {\r\n\t\t\t\t\te.attack += murglMkStats;\r\n\t\t\t\t\te.health += murglMkStats;\r\n\t\t\t\t\te.maxHealth += murglMkStats;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.FridgeMagnet_BG30_MagicItem_545:\r\n\t\t\t\tconst randomMagnetic = gameState.cardsData.getRandomMechToMagnetize(boardWithDeadEntityHero.tavernTier);\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomMagnetic], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.QuilligraphySet_BG30_MagicItem_410:\r\n\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.QuilligraphySet_QuilligraphySetToken_BG30_MagicItem_410t2:\r\n\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += 1;\r\n\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GilneanThornedRose_BG30_MagicItem_864:\r\n\t\t\t\taddStatsToBoard(avenger, boardWithDeadEntity, boardWithDeadEntityHero, 3, 3, gameState);\r\n\t\t\t\tfor (const minion of boardWithDeadEntity) {\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t1,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\r\n\t\t\t\tif (boardWithDeadEntity.length > 0) {\r\n\t\t\t\t\tconst target = pickRandom(boardWithDeadEntity.filter((e) => !e.reborn));\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tupdateReborn(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\r\n\t\t\t\tconst randomUndead = gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\tboardWithDeadEntityHero.tavernTier,\r\n\t\t\t\t);\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomUndead], gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tavenger.avengeCurrent += avenger.avengeDefault;\r\n};\r\n\r\nconst handleHeroAvenge = (\r\n\tdeadEntity: BoardEntity,\r\n\theroPower: BgsHeroPower,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\r\n\t// Not affected by Khadgar\r\n\tswitch (heroPower.cardId) {\r\n\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tCardIds.Onyxia_OnyxianWhelpToken,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.VanndarStormpike_LeadTheStormpikes:\r\n\t\t\tboardWithDeadEntity\r\n\t\t\t\t// .filter((entity) => !entity.definitelyDead && entity.health > 0)\r\n\t\t\t\t.forEach((entity) => {\r\n\t\t\t\t\tmodifyStats(entity, heroPower, 0, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Drekthar_LeadTheFrostwolves:\r\n\t\t\tboardWithDeadEntity.forEach((entity) => {\r\n\t\t\t\tmodifyStats(entity, heroPower, 1, 0, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n\theroPower.avengeCurrent += heroPower.avengeDefault;\r\n};\r\n\r\nexport interface AvengeInput {\r\n\treadonly board: BoardEntity[];\r\n\treadonly hero: BgsPlayerEntity;\r\n\treadonly otherBoard: BoardEntity[];\r\n\treadonly otherHero: BgsPlayerEntity;\r\n\treadonly gameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"avenge.js","sourceRoot":"","sources":["../../src/simulation/avenge.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsHeroPower, BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAvenge } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { grantRandomDivineShield } from '../keywords/divine-shield';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { pickRandom } from '../services/utils';\r\nimport { isValidDeathrattleEnchantment } from '../simulate-bgs-battle';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgetRandomMinionWithHighestHealth,\r\n\tgrantRandomStats,\r\n\thasCorrectTribe,\r\n\thasMechanic,\r\n} from '../utils';\r\nimport { dealDamageToMinion, getNeighbours } from './attack';\r\nimport { playBloodGemsOn } from './blood-gems';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const applyAvengeEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tentitiesSpawnedFromMinionDeath: BoardEntity[],\r\n): BoardEntity[] => {\r\n\tconst candidatesEntitiesSpawnedFromAvenge: BoardEntity[] = [];\r\n\t// updateAvengeCounters(boardWithDeadEntity, boardWithDeadEntityHero);\r\n\tconst avengers = boardWithDeadEntity\r\n\t\t.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0)\r\n\t\t// Get Tony to be processed first, because of the \"when turned golden, the minion ignores the death for the avenge counter\"\r\n\t\t// behavior\r\n\t\t.sort((a, b) => {\r\n\t\t\t// if (a.cardId === CardIds.TonyTwoTusk_BG21_031 || a.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t// \treturn -1;\r\n\t\t\t// }\r\n\t\t\t// if (b.cardId === CardIds.TonyTwoTusk_BG21_031 || b.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t// \treturn 1;\r\n\t\t\t// }\r\n\t\t\treturn 0;\r\n\t\t});\r\n\tfor (const avenger of avengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\t// console.log('updating dead entity avenge counter', boardWithDeadEntityHero.avengeCurrent, stringifySimpleCard(deadEntity, allCards));\r\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\r\n\t\tconst heroAvenger = !!heroPower.avengeDefault && heroPower.avengeCurrent <= 0;\r\n\t\tif (heroAvenger) {\r\n\t\t\thandleHeroAvenge(\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\theroPower,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tconst questRewardAvengers = boardWithDeadEntityHero.questRewardEntities.filter(\r\n\t\t(e) => !!e.avengeDefault && e.avengeCurrent <= 0,\r\n\t);\r\n\tfor (const avenger of questRewardAvengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger as BoardEntity,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tconst trinketAvengers = boardWithDeadEntityHero.trinkets.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0);\r\n\tfor (const avenger of trinketAvengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger as BoardEntity,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tperformEntitySpawns(\r\n\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\t// Not an avenge, but with Avenge timing\r\n\tconst hasDeathrattle =\r\n\t\thasMechanic(gameState.allCards.getCard(deadEntity.cardId), GameTag[GameTag.DEATHRATTLE]) ||\r\n\t\tdeadEntity.enchantments.some((e) => isValidDeathrattleEnchantment(e.cardId));\r\n\tif (hasDeathrattle) {\r\n\t\t// These are apparently processed after Reborn is triggered\r\n\t\t// http://replays.firestoneapp.com/?reviewId=5db9a191-ae9b-43a5-a072-0d460631d7a9&turn=23&action=12\r\n\t\t// UPDATE 2024-06-24: Multiple counterexamples of this, so I'm not sure exactly what is the right approach\r\n\t\t// I'm implementing the one that makes more sense to me; triggering after reborn is just too different\r\n\t\t// from what happens usually\r\n\t\t// However, we want to trigger it after all the spawns have been processed, so more or less an \"avenge\" timing?\r\n\t\t// Maybe even after that?\r\n\t\t// Update 2024-06-27 29.6.2: timing should stay the same\r\n\t\tboardWithDeadEntity\r\n\t\t\t.filter((e) => e.cardId === CardIds.GhoulAcabra_BG29_863 || e.cardId === CardIds.GhoulAcabra_BG29_863_G)\r\n\t\t\t.forEach((ghoul) => {\r\n\t\t\t\tconst buff = ghoul.cardId === CardIds.GhoulAcabra_BG29_863_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(ghoul, boardWithDeadEntity, boardWithDeadEntityHero, 2 * buff, 2 * buff, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\treturn candidatesEntitiesSpawnedFromAvenge;\r\n};\r\n\r\nexport const updateAvengeCounters = (board: readonly BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity) => {\r\n\tfor (const entity of board) {\r\n\t\tif (!!entity.avengeDefault) {\r\n\t\t\tentity.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\r\n\t\tif (!!heroPower.avengeDefault) {\r\n\t\t\theroPower.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const reward of boardWithDeadEntityHero.questRewardEntities) {\r\n\t\tif (!!reward.avengeDefault) {\r\n\t\t\treward.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardWithDeadEntityHero.trinkets) {\r\n\t\tif (!!trinket.avengeDefault) {\r\n\t\t\ttrinket.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleAvenge = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tavenger: BoardEntity,\r\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst avengeImpl = cardMappings[avenger.cardId];\r\n\tif (hasAvenge(avengeImpl)) {\r\n\t\tconst newSpawns = avengeImpl.avenge(avenger, {\r\n\t\t\tboard: boardWithDeadEntity,\r\n\t\t\thero: boardWithDeadEntityHero,\r\n\t\t\totherBoard: otherBoard,\r\n\t\t\totherHero: otherBoardHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t\tif (Array.isArray(newSpawns) && newSpawns?.length) {\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(...newSpawns);\r\n\t\t}\r\n\t} else {\r\n\t\t// Don't forget to update the avenge data in cards-data\r\n\t\tswitch (avenger.cardId) {\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030:\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030_G:\r\n\t\t\t\tconst neighbours = getNeighbours(boardWithDeadEntity, avenger);\r\n\t\t\t\tneighbours.forEach((entity) => {\r\n\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 4 : 2,\r\n\t\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 2 : 1,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.FrostwolfLieutenant:\r\n\t\t\t// case CardIds.FrostwolfLieutenantBattlegrounds:\r\n\t\t\t// \taddStatsToBoard(\r\n\t\t\t// \t\tavenger,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tavenger.cardId === CardIds.FrostwolfLieutenantBattlegrounds ? 2 : 1,\r\n\t\t\t// \t\t0,\r\n\t\t\t// \t\tallCards,\r\n\t\t\t// \t\tspectator,\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\t\t// Only for Tavern\r\n\t\t\t\t// addStatsToBoard(\r\n\t\t\t\t// \tavenger,\r\n\t\t\t\t// \tboardWithDeadEntity,\r\n\t\t\t\t// \t0,\r\n\t\t\t\t// \tavenger.cardId === CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G ? 2 : 1,\r\n\t\t\t\t// \tgameState.allCards,\r\n\t\t\t\t// \tgameState.spectator,\r\n\t\t\t\t// );\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\t\tconst target1 = grantRandomStats(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t6,\r\n\t\t\t\t\t6,\r\n\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tif (!!target1) {\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\ttarget1,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\t\tconst target2 = grantRandomStats(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t12,\r\n\t\t\t\t\t12,\r\n\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tif (!!target2) {\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\ttarget2,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\t\tconst doomsayerCardsToAddQuantity = avenger.cardId === CardIds.ImpatientDoomsayer_BG21_007_G ? 2 : 1;\r\n\t\t\t\tconst doomsayerCardsToAdd = [];\r\n\t\t\t\tfor (let i = 0; i < doomsayerCardsToAddQuantity; i++) {\r\n\t\t\t\t\tdoomsayerCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\r\n\t\t\t\t}\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, doomsayerCardsToAdd, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014:\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038:\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038_G:\r\n\t\t\t\tconst nestmatronToAddQuantity = avenger.cardId === CardIds.WitchwingNestmatron_BG21_038_G ? 2 : 1;\r\n\t\t\t\tconst nestmatronCardsToAdd = [];\r\n\t\t\t\tfor (let i = 0; i < nestmatronToAddQuantity; i++) {\r\n\t\t\t\t\tnestmatronCardsToAdd.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t}\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, nestmatronCardsToAdd, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Thorncaller_BG20_105:\r\n\t\t\tcase CardIds.Thorncaller_BG20_105_G:\r\n\t\t\t\tconst thorncallerToAddQuantity = avenger.cardId === CardIds.Thorncaller_BG20_105_G ? 2 : 1;\r\n\t\t\t\tconst thorncallerCardsToAdd = Array(thorncallerToAddQuantity).fill(CardIds.BloodGem);\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, thorncallerCardsToAdd, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.Sisefin_BG21_009:\r\n\t\t\t// case CardIds.Sisefin_BG21_009_G:\r\n\t\t\t// \tconst poisonousIterations = avenger.cardId === CardIds.Sisefin_BG21_009_G ? 2 : 1;\r\n\t\t\t// \tfor (let i = 0; i < poisonousIterations; i++) {\r\n\t\t\t// \t\tconst validTargets = boardWithDeadEntity.filter((e) => !e.poisonous && !e.venomous);\r\n\t\t\t// \t\tconst murloc = getRandomAliveMinion(validTargets, boardWithDeadEntityHero, Race.MURLOC, gameState);\r\n\t\t\t// \t\tif (murloc) {\r\n\t\t\t// \t\t\tupdateVenomous(\r\n\t\t\t// \t\t\t\tmurloc,\r\n\t\t\t// \t\t\t\ttrue,\r\n\t\t\t// \t\t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t// \t\t\t\tgameState,\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t// \t\t\t\tavenger,\r\n\t\t\t// \t\t\t\tmurloc,\r\n\t\t\t// \t\t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t}\r\n\t\t\t// \t}\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\t\t// This can be null if the avenge triggers when the last enemy minion dies as well\r\n\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\t5,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t5,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\t// \tconst nonGoldenMinions = boardWithDeadEntity\r\n\t\t\t// \t\t.filter((e) => e.entityId !== avenger.entityId)\r\n\t\t\t// \t\t.filter((e) => {\r\n\t\t\t// \t\t\tconst ref = gameState.allCards.getCard(e.cardId);\r\n\t\t\t// \t\t\treturn (\r\n\t\t\t// \t\t\t\t!!ref.battlegroundsPremiumDbfId &&\r\n\t\t\t// \t\t\t\t!!gameState.allCards.getCardFromDbfId(ref.battlegroundsPremiumDbfId).id\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t});\r\n\t\t\t// \tconst pirate = getRandomAliveMinion(nonGoldenMinions, boardWithDeadEntityHero, Race.PIRATE, gameState);\r\n\t\t\t// \tif (pirate) {\r\n\t\t\t// \t\tmakeMinionGolden(\r\n\t\t\t// \t\t\tpirate,\r\n\t\t\t// \t\t\tavenger,\r\n\t\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\totherBoard,\r\n\t\t\t// \t\t\totherBoardHero,\r\n\t\t\t// \t\t\tgameState,\r\n\t\t\t// \t\t);\r\n\t\t\t// \t}\r\n\t\t\t// \tbreak;\r\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\t// \tfor (let i = 0; i < 2; i++) {\r\n\t\t\t// \t\tconst nonGoldenMinions = boardWithDeadEntity.filter((e) => !isMinionGolden(e, gameState.allCards));\r\n\t\t\t// \t\tconst pirate = getRandomAliveMinion(\r\n\t\t\t// \t\t\tnonGoldenMinions,\r\n\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\tRace.PIRATE,\r\n\t\t\t// \t\t\tgameState,\r\n\t\t\t// \t\t);\r\n\t\t\t// \t\tif (pirate) {\r\n\t\t\t// \t\t\tmakeMinionGolden(\r\n\t\t\t// \t\t\t\tpirate,\r\n\t\t\t// \t\t\t\tavenger,\r\n\t\t\t// \t\t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\totherBoard,\r\n\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t// \t\t\t\tgameState,\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t}\r\n\t\t\t// \t}\r\n\t\t\t// \tbreak;\r\n\t\t\t// case CardIds.GhoulOfTheFeast_BG25_002:\r\n\t\t\t// case CardIds.GhoulOfTheFeast_BG25_002_G:\r\n\t\t\t// \tconst ghoulMultiplier = avenger.cardId === CardIds.GhoulOfTheFeast_BG25_002_G ? 2 : 1;\r\n\t\t\t// \tgrantStatsToMinionsOfEachType(\r\n\t\t\t// \t\tavenger,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\tghoulMultiplier * 3,\r\n\t\t\t// \t\t0,\r\n\t\t\t// \t\tgameState,\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\t\tconst bristlebachMultiplier = avenger.cardId === CardIds.Bristlebach_BG26_157_G ? 4 : 2;\r\n\t\t\t\tfor (let i = 0; i < bristlebachMultiplier; i++) {\r\n\t\t\t\t\tfor (const entity of boardWithDeadEntity) {\r\n\t\t\t\t\t\tconst isValidTarget =\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.trinkets?.some(\r\n\t\t\t\t\t\t\t\t(t) => t.cardId === CardIds.BristlebachPortrait_BG32_MagicItem_274,\r\n\t\t\t\t\t\t\t) ||\r\n\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tRace.QUILBOAR,\r\n\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (isValidTarget) {\r\n\t\t\t\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\t\tconst abominationMultiplier = avenger.cardId === CardIds.HungeringAbomination_BG25_014_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tabominationMultiplier * 1,\r\n\t\t\t\t\tabominationMultiplier * 2,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.IceSickle:\r\n\t\t\t// \tgrantRandomStats(\r\n\t\t\t// \t\tavenger,\r\n\t\t\t// \t\tboardWithDeadEntityHero.hand.filter(\r\n\t\t\t// \t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t// \t\t),\r\n\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t4,\r\n\t\t\t// \t\t0,\r\n\t\t\t// \t\tnull,\r\n\t\t\t// \t\ttrue,\r\n\t\t\t// \t\tgameState,\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\t\tconst highestHealthMinion = [...otherBoard].sort((a, b) => b.health - a.health)[0];\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\thighestHealthMinion,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\t10,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\thighestHealthMinion,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\t\tconst phaerixLoops = avenger.cardId === CardIds.PhaerixWrathOfTheSun_BG28_403_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < phaerixLoops; i++) {\r\n\t\t\t\t\tgrantRandomDivineShield(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\t\tconst AugmentedLaborerLoops = avenger.cardId === CardIds.AugmentedLaborer_BG28_740_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < AugmentedLaborerLoops; i++) {\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\t\tconst tumblingDisasterEntity = boardWithDeadEntityHero.questRewardEntities?.find(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505,\r\n\t\t\t\t);\r\n\t\t\t\tif (tumblingDisasterEntity) {\r\n\t\t\t\t\ttumblingDisasterEntity.scriptDataNum1 = (tumblingDisasterEntity.scriptDataNum1 ?? 0) + 1;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\t\tavenger.scriptDataNum1 = (avenger.scriptDataNum1 ?? 0) + 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\r\n\t\t\t\tconst murglMkStats = avenger.cardId === CardIds.MurglMkIi_BG29_991_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tmurglMkStats,\r\n\t\t\t\t\tmurglMkStats,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\t// Don't use utility methods, as we don't want triggers to proc\r\n\t\t\t\tfor (const e of boardWithDeadEntityHero.hand ?? []) {\r\n\t\t\t\t\te.attack += murglMkStats;\r\n\t\t\t\t\te.health += murglMkStats;\r\n\t\t\t\t\te.maxHealth += murglMkStats;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.FridgeMagnet_BG30_MagicItem_545:\r\n\t\t\t\tconst randomMagnetic = gameState.cardsData.getRandomMechToMagnetize(boardWithDeadEntityHero.tavernTier);\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomMagnetic], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.QuilligraphySet_BG30_MagicItem_410:\r\n\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.QuilligraphySet_QuilligraphySetToken_BG30_MagicItem_410t2:\r\n\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += 1;\r\n\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GilneanThornedRose_BG30_MagicItem_864:\r\n\t\t\t\taddStatsToBoard(avenger, boardWithDeadEntity, boardWithDeadEntityHero, 3, 3, gameState);\r\n\t\t\t\tfor (const minion of boardWithDeadEntity) {\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t1,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\r\n\t\t\t\tif (boardWithDeadEntity.length > 0) {\r\n\t\t\t\t\tconst target = pickRandom(boardWithDeadEntity.filter((e) => !e.reborn));\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tupdateReborn(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\r\n\t\t\t\tconst randomUndead = gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\tboardWithDeadEntityHero.tavernTier,\r\n\t\t\t\t);\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomUndead], gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\tavenger.avengeCurrent += avenger.avengeDefault;\r\n};\r\n\r\nconst handleHeroAvenge = (\r\n\tdeadEntity: BoardEntity,\r\n\theroPower: BgsHeroPower,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\r\n\t// Not affected by Khadgar\r\n\tswitch (heroPower.cardId) {\r\n\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tCardIds.Onyxia_OnyxianWhelpToken,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.VanndarStormpike_LeadTheStormpikes:\r\n\t\t\tboardWithDeadEntity\r\n\t\t\t\t// .filter((entity) => !entity.definitelyDead && entity.health > 0)\r\n\t\t\t\t.forEach((entity) => {\r\n\t\t\t\t\tmodifyStats(entity, heroPower, 0, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Drekthar_LeadTheFrostwolves:\r\n\t\t\tboardWithDeadEntity.forEach((entity) => {\r\n\t\t\t\tmodifyStats(entity, heroPower, 1, 0, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n\theroPower.avengeCurrent += heroPower.avengeDefault;\r\n};\r\n\r\nexport interface AvengeInput {\r\n\treadonly board: BoardEntity[];\r\n\treadonly hero: BgsPlayerEntity;\r\n\treadonly otherBoard: BoardEntity[];\r\n\treadonly otherHero: BgsPlayerEntity;\r\n\treadonly gameState: FullGameState;\r\n}\r\n"]}