@firestone-hs/simulate-bgs-battle 1.1.501 → 1.1.503

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 (324) hide show
  1. package/dist/bgs-player-entity.d.ts +6 -0
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/cards/card.interface.d.ts +114 -1
  4. package/dist/cards/card.interface.js +47 -0
  5. package/dist/cards/card.interface.js.map +1 -1
  6. package/dist/cards/cards-data.d.ts +5 -1
  7. package/dist/cards/cards-data.js +39 -6
  8. package/dist/cards/cards-data.js.map +1 -1
  9. package/dist/cards/impl/_card-mappings.d.ts +4 -0
  10. package/dist/cards/impl/_card-mappings.js +154 -0
  11. package/dist/cards/impl/_card-mappings.js.map +1 -0
  12. package/dist/cards/impl/anomaly/blessed-or-blighted.js +3 -2
  13. package/dist/cards/impl/anomaly/blessed-or-blighted.js.map +1 -1
  14. package/dist/cards/impl/bg-spell/boon-of-beetles.js +1 -1
  15. package/dist/cards/impl/bg-spell/boon-of-beetles.js.map +1 -1
  16. package/dist/cards/impl/enchantments/crystal-infuser-enchantment.d.ts +2 -0
  17. package/dist/cards/impl/enchantments/crystal-infuser-enchantment.js +16 -0
  18. package/dist/cards/impl/enchantments/crystal-infuser-enchantment.js.map +1 -0
  19. package/dist/cards/impl/hero-power/reborn-rites.js +2 -1
  20. package/dist/cards/impl/hero-power/reborn-rites.js.map +1 -1
  21. package/dist/cards/impl/hero-power/swatting-insects.js +5 -3
  22. package/dist/cards/impl/hero-power/swatting-insects.js.map +1 -1
  23. package/dist/cards/impl/hero-power/water-invocation.js +1 -1
  24. package/dist/cards/impl/hero-power/water-invocation.js.map +1 -1
  25. package/dist/cards/impl/minion/amber-guardian.js +1 -1
  26. package/dist/cards/impl/minion/amber-guardian.js.map +1 -1
  27. package/dist/cards/impl/minion/arcane-cannoneer.d.ts +2 -0
  28. package/dist/cards/impl/minion/arcane-cannoneer.js +15 -0
  29. package/dist/cards/impl/minion/arcane-cannoneer.js.map +1 -0
  30. package/dist/cards/impl/minion/bannerboar.d.ts +2 -0
  31. package/dist/cards/impl/minion/bannerboar.js +16 -0
  32. package/dist/cards/impl/minion/bannerboar.js.map +1 -0
  33. package/dist/cards/impl/minion/beetle.d.ts +2 -0
  34. package/dist/cards/impl/minion/beetle.js +16 -0
  35. package/dist/cards/impl/minion/beetle.js.map +1 -0
  36. package/dist/cards/impl/minion/bird-buddy.d.ts +2 -0
  37. package/dist/cards/impl/minion/bird-buddy.js +14 -0
  38. package/dist/cards/impl/minion/bird-buddy.js.map +1 -0
  39. package/dist/cards/impl/minion/blazing-skyfin.d.ts +2 -0
  40. package/dist/cards/impl/minion/blazing-skyfin.js +12 -0
  41. package/dist/cards/impl/minion/blazing-skyfin.js.map +1 -0
  42. package/dist/cards/impl/minion/boar-gamer.d.ts +2 -0
  43. package/dist/cards/impl/minion/boar-gamer.js +12 -0
  44. package/dist/cards/impl/minion/boar-gamer.js.map +1 -0
  45. package/dist/cards/impl/minion/bubble-gunner.d.ts +2 -0
  46. package/dist/cards/impl/minion/bubble-gunner.js +44 -0
  47. package/dist/cards/impl/minion/bubble-gunner.js.map +1 -0
  48. package/dist/cards/impl/minion/buzzing-vermin.d.ts +2 -0
  49. package/dist/cards/impl/minion/buzzing-vermin.js +12 -0
  50. package/dist/cards/impl/minion/buzzing-vermin.js.map +1 -0
  51. package/dist/cards/impl/minion/cadaver-caretaker.d.ts +2 -0
  52. package/dist/cards/impl/minion/cadaver-caretaker.js +12 -0
  53. package/dist/cards/impl/minion/cadaver-caretaker.js.map +1 -0
  54. package/dist/cards/impl/minion/clunker-junker.d.ts +2 -0
  55. package/dist/cards/impl/minion/clunker-junker.js +24 -0
  56. package/dist/cards/impl/minion/clunker-junker.js.map +1 -0
  57. package/dist/cards/impl/minion/deathly-striker.d.ts +2 -0
  58. package/dist/cards/impl/minion/deathly-striker.js +32 -0
  59. package/dist/cards/impl/minion/deathly-striker.js.map +1 -0
  60. package/dist/cards/impl/minion/deflecto-bot.d.ts +2 -0
  61. package/dist/cards/impl/minion/deflecto-bot.js +21 -0
  62. package/dist/cards/impl/minion/deflecto-bot.js.map +1 -0
  63. package/dist/cards/impl/minion/efficient-engineer.d.ts +2 -0
  64. package/dist/cards/impl/minion/efficient-engineer.js +24 -0
  65. package/dist/cards/impl/minion/efficient-engineer.js.map +1 -0
  66. package/dist/cards/impl/minion/electric-synthesizer.d.ts +2 -0
  67. package/dist/cards/impl/minion/electric-synthesizer.js +24 -0
  68. package/dist/cards/impl/minion/electric-synthesizer.js.map +1 -0
  69. package/dist/cards/impl/minion/fairy-gillmother.d.ts +2 -0
  70. package/dist/cards/impl/minion/fairy-gillmother.js +18 -0
  71. package/dist/cards/impl/minion/fairy-gillmother.js.map +1 -0
  72. package/dist/cards/impl/minion/forest-rover.d.ts +2 -0
  73. package/dist/cards/impl/minion/forest-rover.js +23 -0
  74. package/dist/cards/impl/minion/forest-rover.js.map +1 -0
  75. package/dist/cards/impl/minion/fountain-chiller.d.ts +2 -0
  76. package/dist/cards/impl/minion/fountain-chiller.js +27 -0
  77. package/dist/cards/impl/minion/fountain-chiller.js.map +1 -0
  78. package/dist/cards/impl/minion/gem-rat.d.ts +2 -0
  79. package/dist/cards/impl/minion/gem-rat.js +12 -0
  80. package/dist/cards/impl/minion/gem-rat.js.map +1 -0
  81. package/dist/cards/impl/minion/general-drakkisath.d.ts +2 -0
  82. package/dist/cards/impl/minion/general-drakkisath.js +17 -0
  83. package/dist/cards/impl/minion/general-drakkisath.js.map +1 -0
  84. package/dist/cards/impl/minion/gentle-djinni.d.ts +2 -0
  85. package/dist/cards/impl/minion/gentle-djinni.js +25 -0
  86. package/dist/cards/impl/minion/gentle-djinni.js.map +1 -0
  87. package/dist/cards/impl/minion/goldrinn-the-great-wolf.d.ts +2 -0
  88. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js +15 -0
  89. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js.map +1 -0
  90. package/dist/cards/impl/minion/grease-bot.d.ts +2 -0
  91. package/dist/cards/impl/minion/grease-bot.js +13 -0
  92. package/dist/cards/impl/minion/grease-bot.js.map +1 -0
  93. package/dist/cards/impl/minion/gritty-headhunter.d.ts +2 -0
  94. package/dist/cards/impl/minion/gritty-headhunter.js +14 -0
  95. package/dist/cards/impl/minion/gritty-headhunter.js.map +1 -0
  96. package/dist/cards/impl/minion/hackerfin.d.ts +2 -0
  97. package/dist/cards/impl/minion/hackerfin.js +21 -0
  98. package/dist/cards/impl/minion/hackerfin.js.map +1 -0
  99. package/dist/cards/impl/minion/handless-forsaken.d.ts +2 -0
  100. package/dist/cards/impl/minion/handless-forsaken.js +12 -0
  101. package/dist/cards/impl/minion/handless-forsaken.js.map +1 -0
  102. package/dist/cards/impl/minion/harmless-bonehead.d.ts +2 -0
  103. package/dist/cards/impl/minion/harmless-bonehead.js +12 -0
  104. package/dist/cards/impl/minion/harmless-bonehead.js.map +1 -0
  105. package/dist/cards/impl/minion/holo-rover.d.ts +2 -0
  106. package/dist/cards/impl/minion/holo-rover.js +16 -0
  107. package/dist/cards/impl/minion/holo-rover.js.map +1 -0
  108. package/dist/cards/impl/minion/humming-bird.d.ts +2 -5
  109. package/dist/cards/impl/minion/humming-bird.js +1 -0
  110. package/dist/cards/impl/minion/humming-bird.js.map +1 -1
  111. package/dist/cards/impl/minion/hungry-snapjaw.d.ts +2 -0
  112. package/dist/cards/impl/minion/hungry-snapjaw.js +17 -0
  113. package/dist/cards/impl/minion/hungry-snapjaw.js.map +1 -0
  114. package/dist/cards/impl/minion/hunter-of-gatherers.d.ts +2 -0
  115. package/dist/cards/impl/minion/hunter-of-gatherers.js +13 -0
  116. package/dist/cards/impl/minion/hunter-of-gatherers.js.map +1 -0
  117. package/dist/cards/impl/minion/implant-subject.d.ts +2 -0
  118. package/dist/cards/impl/minion/implant-subject.js +42 -0
  119. package/dist/cards/impl/minion/implant-subject.js.map +1 -0
  120. package/dist/cards/impl/minion/impulsive-trickster.d.ts +2 -0
  121. package/dist/cards/impl/minion/impulsive-trickster.js +14 -0
  122. package/dist/cards/impl/minion/impulsive-trickster.js.map +1 -0
  123. package/dist/cards/impl/minion/indomitable-mount.d.ts +2 -0
  124. package/dist/cards/impl/minion/indomitable-mount.js +23 -0
  125. package/dist/cards/impl/minion/indomitable-mount.js.map +1 -0
  126. package/dist/cards/impl/minion/interrogator-whitemane.js +5 -4
  127. package/dist/cards/impl/minion/interrogator-whitemane.js.map +1 -1
  128. package/dist/cards/impl/minion/kalecgos-arcane-aspect.d.ts +2 -0
  129. package/dist/cards/impl/minion/kalecgos-arcane-aspect.js +13 -0
  130. package/dist/cards/impl/minion/kalecgos-arcane-aspect.js.map +1 -0
  131. package/dist/cards/impl/minion/kangors-apprentice.d.ts +2 -0
  132. package/dist/cards/impl/minion/kangors-apprentice.js +21 -0
  133. package/dist/cards/impl/minion/kangors-apprentice.js.map +1 -0
  134. package/dist/cards/impl/minion/karmic-chameleon.d.ts +2 -0
  135. package/dist/cards/impl/minion/karmic-chameleon.js +27 -0
  136. package/dist/cards/impl/minion/karmic-chameleon.js.map +1 -0
  137. package/dist/cards/impl/minion/manasaber.d.ts +2 -0
  138. package/dist/cards/impl/minion/manasaber.js +14 -0
  139. package/dist/cards/impl/minion/manasaber.js.map +1 -0
  140. package/dist/cards/impl/minion/mantid-queen.js +6 -3
  141. package/dist/cards/impl/minion/mantid-queen.js.map +1 -1
  142. package/dist/cards/impl/minion/marquee-ticker.d.ts +2 -0
  143. package/dist/cards/impl/minion/marquee-ticker.js +12 -0
  144. package/dist/cards/impl/minion/marquee-ticker.js.map +1 -0
  145. package/dist/cards/impl/minion/mecha-jaraxxus.d.ts +2 -0
  146. package/dist/cards/impl/minion/mecha-jaraxxus.js +12 -0
  147. package/dist/cards/impl/minion/mecha-jaraxxus.js.map +1 -0
  148. package/dist/cards/impl/minion/mechanized-gift-horse.d.ts +2 -0
  149. package/dist/cards/impl/minion/mechanized-gift-horse.js +13 -0
  150. package/dist/cards/impl/minion/mechanized-gift-horse.js.map +1 -0
  151. package/dist/cards/impl/minion/mechorse.d.ts +2 -0
  152. package/dist/cards/impl/minion/mechorse.js +16 -0
  153. package/dist/cards/impl/minion/mechorse.js.map +1 -0
  154. package/dist/cards/impl/minion/misfit-dragonling.d.ts +2 -5
  155. package/dist/cards/impl/minion/misfit-dragonling.js.map +1 -1
  156. package/dist/cards/impl/minion/moonsteel-juggernaut.d.ts +2 -0
  157. package/dist/cards/impl/minion/moonsteel-juggernaut.js +15 -0
  158. package/dist/cards/impl/minion/moonsteel-juggernaut.js.map +1 -0
  159. package/dist/cards/impl/minion/murky.d.ts +2 -0
  160. package/dist/cards/impl/minion/murky.js +20 -0
  161. package/dist/cards/impl/minion/murky.js.map +1 -0
  162. package/dist/cards/impl/minion/mutated-lasher.d.ts +2 -0
  163. package/dist/cards/impl/minion/mutated-lasher.js +26 -0
  164. package/dist/cards/impl/minion/mutated-lasher.js.map +1 -0
  165. package/dist/cards/impl/minion/neon-agent.d.ts +2 -0
  166. package/dist/cards/impl/minion/neon-agent.js +18 -0
  167. package/dist/cards/impl/minion/neon-agent.js.map +1 -0
  168. package/dist/cards/impl/minion/nest-swarmer.d.ts +2 -0
  169. package/dist/cards/impl/minion/nest-swarmer.js +12 -0
  170. package/dist/cards/impl/minion/nest-swarmer.js.map +1 -0
  171. package/dist/cards/impl/minion/nether-drake.d.ts +2 -0
  172. package/dist/cards/impl/minion/nether-drake.js +15 -0
  173. package/dist/cards/impl/minion/nether-drake.js.map +1 -0
  174. package/dist/cards/impl/minion/niuzao.d.ts +2 -0
  175. package/dist/cards/impl/minion/niuzao.js +21 -0
  176. package/dist/cards/impl/minion/niuzao.js.map +1 -0
  177. package/dist/cards/impl/minion/operatic-belcher.d.ts +2 -0
  178. package/dist/cards/impl/minion/operatic-belcher.js +26 -0
  179. package/dist/cards/impl/minion/operatic-belcher.js.map +1 -0
  180. package/dist/cards/impl/minion/outback-smolderer.d.ts +2 -0
  181. package/dist/cards/impl/minion/outback-smolderer.js +17 -0
  182. package/dist/cards/impl/minion/outback-smolderer.js.map +1 -0
  183. package/dist/cards/impl/minion/parched-wanderer.d.ts +2 -0
  184. package/dist/cards/impl/minion/parched-wanderer.js +20 -0
  185. package/dist/cards/impl/minion/parched-wanderer.js.map +1 -0
  186. package/dist/cards/impl/minion/prized-promo-drake.d.ts +2 -5
  187. package/dist/cards/impl/minion/prized-promo-drake.js.map +1 -1
  188. package/dist/cards/impl/minion/razorgore-the-untamed.d.ts +2 -0
  189. package/dist/cards/impl/minion/razorgore-the-untamed.js +20 -0
  190. package/dist/cards/impl/minion/razorgore-the-untamed.js.map +1 -0
  191. package/dist/cards/impl/minion/reckless-cliffdiver.d.ts +2 -0
  192. package/dist/cards/impl/minion/reckless-cliffdiver.js +19 -0
  193. package/dist/cards/impl/minion/reckless-cliffdiver.js.map +1 -0
  194. package/dist/cards/impl/minion/runed-progenitor.d.ts +2 -0
  195. package/dist/cards/impl/minion/runed-progenitor.js +24 -0
  196. package/dist/cards/impl/minion/runed-progenitor.js.map +1 -0
  197. package/dist/cards/impl/minion/rylak-metalhead.d.ts +2 -0
  198. package/dist/cards/impl/minion/rylak-metalhead.js +22 -0
  199. package/dist/cards/impl/minion/rylak-metalhead.js.map +1 -0
  200. package/dist/cards/impl/minion/salty-hog.d.ts +2 -0
  201. package/dist/cards/impl/minion/salty-hog.js +17 -0
  202. package/dist/cards/impl/minion/salty-hog.js.map +1 -0
  203. package/dist/cards/impl/minion/showy-cyclist.d.ts +2 -0
  204. package/dist/cards/impl/minion/showy-cyclist.js +14 -0
  205. package/dist/cards/impl/minion/showy-cyclist.js.map +1 -0
  206. package/dist/cards/impl/minion/silver-handed-recruit.d.ts +2 -0
  207. package/dist/cards/impl/minion/silver-handed-recruit.js +17 -0
  208. package/dist/cards/impl/minion/silver-handed-recruit.js.map +1 -0
  209. package/dist/cards/impl/minion/sly-raptor.d.ts +2 -0
  210. package/dist/cards/impl/minion/sly-raptor.js +18 -0
  211. package/dist/cards/impl/minion/sly-raptor.js.map +1 -0
  212. package/dist/cards/impl/minion/smolderwing.d.ts +2 -0
  213. package/dist/cards/impl/minion/smolderwing.js +25 -0
  214. package/dist/cards/impl/minion/smolderwing.js.map +1 -0
  215. package/dist/cards/impl/minion/soulsplitter.js +2 -1
  216. package/dist/cards/impl/minion/soulsplitter.js.map +1 -1
  217. package/dist/cards/impl/minion/spacefarer.d.ts +2 -0
  218. package/dist/cards/impl/minion/spacefarer.js +20 -0
  219. package/dist/cards/impl/minion/spacefarer.js.map +1 -0
  220. package/dist/cards/impl/minion/sun-screener.js +1 -1
  221. package/dist/cards/impl/minion/sun-screener.js.map +1 -1
  222. package/dist/cards/impl/minion/swampstriker.d.ts +2 -0
  223. package/dist/cards/impl/minion/swampstriker.js +21 -0
  224. package/dist/cards/impl/minion/swampstriker.js.map +1 -0
  225. package/dist/cards/impl/minion/thousandth-paper-drake.js +2 -1
  226. package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -1
  227. package/dist/cards/impl/minion/turquoise-skitterer.d.ts +2 -0
  228. package/dist/cards/impl/minion/turquoise-skitterer.js +25 -0
  229. package/dist/cards/impl/minion/turquoise-skitterer.js.map +1 -0
  230. package/dist/cards/impl/minion/twilight-primordium.d.ts +2 -0
  231. package/dist/cards/impl/minion/twilight-primordium.js +24 -0
  232. package/dist/cards/impl/minion/twilight-primordium.js.map +1 -0
  233. package/dist/cards/impl/minion/ultraviolet-ascendant.d.ts +2 -0
  234. package/dist/cards/impl/minion/ultraviolet-ascendant.js +14 -0
  235. package/dist/cards/impl/minion/ultraviolet-ascendant.js.map +1 -0
  236. package/dist/cards/impl/minion/wandering-wight.d.ts +2 -0
  237. package/dist/cards/impl/minion/wandering-wight.js +12 -0
  238. package/dist/cards/impl/minion/wandering-wight.js.map +1 -0
  239. package/dist/cards/impl/minion/whelp-smuggler.d.ts +2 -0
  240. package/dist/cards/impl/minion/whelp-smuggler.js +17 -0
  241. package/dist/cards/impl/minion/whelp-smuggler.js.map +1 -0
  242. package/dist/cards/impl/minion/wisp-in-the-shell.d.ts +2 -0
  243. package/dist/cards/impl/minion/wisp-in-the-shell.js +19 -0
  244. package/dist/cards/impl/minion/wisp-in-the-shell.js.map +1 -0
  245. package/dist/cards/impl/trinket/eternal-portrait.js +4 -2
  246. package/dist/cards/impl/trinket/eternal-portrait.js.map +1 -1
  247. package/dist/cards/impl/trinket/holly-mallet.js +1 -1
  248. package/dist/cards/impl/trinket/holly-mallet.js.map +1 -1
  249. package/dist/{divine-shield.d.ts → keywords/divine-shield.d.ts} +11 -3
  250. package/dist/{divine-shield.js → keywords/divine-shield.js} +19 -14
  251. package/dist/keywords/divine-shield.js.map +1 -0
  252. package/dist/keywords/reborn.d.ts +10 -0
  253. package/dist/keywords/reborn.js +22 -0
  254. package/dist/keywords/reborn.js.map +1 -0
  255. package/dist/keywords/stealth.d.ts +10 -0
  256. package/dist/keywords/stealth.js +22 -0
  257. package/dist/keywords/stealth.js.map +1 -0
  258. package/dist/keywords/taunt.d.ts +10 -0
  259. package/dist/keywords/taunt.js +22 -0
  260. package/dist/keywords/taunt.js.map +1 -0
  261. package/dist/keywords/venomous.d.ts +10 -0
  262. package/dist/keywords/venomous.js +33 -0
  263. package/dist/keywords/venomous.js.map +1 -0
  264. package/dist/keywords/windfury.d.ts +10 -0
  265. package/dist/keywords/windfury.js +22 -0
  266. package/dist/keywords/windfury.js.map +1 -0
  267. package/dist/simulate-bgs-battle.d.ts +2 -2
  268. package/dist/simulate-bgs-battle.js +20 -5
  269. package/dist/simulate-bgs-battle.js.map +1 -1
  270. package/dist/simulation/add-minion-to-board.d.ts +23 -0
  271. package/dist/simulation/add-minion-to-board.js +50 -33
  272. package/dist/simulation/add-minion-to-board.js.map +1 -1
  273. package/dist/simulation/after-attack.js +2 -1
  274. package/dist/simulation/after-attack.js.map +1 -1
  275. package/dist/simulation/attack.js +7 -24
  276. package/dist/simulation/attack.js.map +1 -1
  277. package/dist/simulation/auras.d.ts +1 -1
  278. package/dist/simulation/auras.js +21 -15
  279. package/dist/simulation/auras.js.map +1 -1
  280. package/dist/simulation/avenge.d.ts +7 -0
  281. package/dist/simulation/avenge.js +223 -229
  282. package/dist/simulation/avenge.js.map +1 -1
  283. package/dist/simulation/battlecries.d.ts +8 -0
  284. package/dist/simulation/battlecries.js +574 -623
  285. package/dist/simulation/battlecries.js.map +1 -1
  286. package/dist/simulation/blood-gems.js +1 -1
  287. package/dist/simulation/blood-gems.js.map +1 -1
  288. package/dist/simulation/cards-in-hand.d.ts +7 -1
  289. package/dist/simulation/cards-in-hand.js +14 -0
  290. package/dist/simulation/cards-in-hand.js.map +1 -1
  291. package/dist/simulation/damage-effects.js +1 -1
  292. package/dist/simulation/damage-effects.js.map +1 -1
  293. package/dist/simulation/deathrattle-effects.d.ts +1 -1
  294. package/dist/simulation/deathrattle-effects.js +468 -517
  295. package/dist/simulation/deathrattle-effects.js.map +1 -1
  296. package/dist/simulation/deathrattle-on-trigger.d.ts +1 -0
  297. package/dist/simulation/deathrattle-on-trigger.js.map +1 -1
  298. package/dist/simulation/deathrattle-spawns.d.ts +2 -0
  299. package/dist/simulation/deathrattle-spawns.js +308 -384
  300. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  301. package/dist/simulation/deathrattle-utils.js +1 -1
  302. package/dist/simulation/deathrattle-utils.js.map +1 -1
  303. package/dist/simulation/frenzy.js +1 -1
  304. package/dist/simulation/frenzy.js.map +1 -1
  305. package/dist/simulation/magnetize.js.map +1 -1
  306. package/dist/simulation/on-attack.d.ts +13 -1
  307. package/dist/simulation/on-attack.js +21 -1
  308. package/dist/simulation/on-attack.js.map +1 -1
  309. package/dist/simulation/on-being-attacked.js +7 -4
  310. package/dist/simulation/on-being-attacked.js.map +1 -1
  311. package/dist/simulation/simulator.js +1 -1
  312. package/dist/simulation/simulator.js.map +1 -1
  313. package/dist/simulation/start-of-combat/soc-action-processor.js +6 -12
  314. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  315. package/dist/simulation/stats.d.ts +9 -0
  316. package/dist/simulation/stats.js +23 -14
  317. package/dist/simulation/stats.js.map +1 -1
  318. package/dist/temp-card-ids.d.ts +70 -0
  319. package/dist/temp-card-ids.js.map +1 -1
  320. package/dist/utils.d.ts +0 -1
  321. package/dist/utils.js +30 -36
  322. package/dist/utils.js.map +1 -1
  323. package/package.json +2 -2
  324. package/dist/divine-shield.js.map +0 -1
@@ -2,6 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.triggerBattlecry = exports.computeBattlecryMultiplier = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const card_interface_1 = require("../cards/card.interface");
6
+ const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
+ const divine_shield_1 = require("../keywords/divine-shield");
8
+ const taunt_1 = require("../keywords/taunt");
9
+ const windfury_1 = require("../keywords/windfury");
5
10
  const utils_1 = require("../services/utils");
6
11
  const utils_2 = require("../utils");
7
12
  const attack_1 = require("./attack");
@@ -10,7 +15,6 @@ const cards_in_hand_1 = require("./cards-in-hand");
10
15
  const damage_to_hero_1 = require("./damage-to-hero");
11
16
  const deathrattle_spawns_1 = require("./deathrattle-spawns");
12
17
  const discover_1 = require("./discover");
13
- const magnetize_1 = require("./magnetize");
14
18
  const spawns_1 = require("./spawns");
15
19
  const stats_1 = require("./stats");
16
20
  const golden_1 = require("./utils/golden");
@@ -30,632 +34,580 @@ const computeBattlecryMultiplier = (board, boardHero, sharedState) => {
30
34
  };
31
35
  exports.computeBattlecryMultiplier = computeBattlecryMultiplier;
32
36
  const triggerBattlecry = (board, hero, entity, otherBoard, otherHero, gameState) => {
33
- 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;
37
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
34
38
  const allMinions = [...board, ...otherBoard];
35
39
  const totalTriggers = (0, exports.computeBattlecryMultiplier)(board, hero, gameState.sharedState);
36
40
  for (let z = 0; z < totalTriggers; z++) {
37
41
  let hasTriggered = true;
38
- switch (entity.cardId) {
39
- case "BG20_100":
40
- case "BG20_100_G":
41
- const razorFenCardsToAdd = entity.cardId === "BG20_100"
42
- ? ["BG20_GEM"]
43
- : ["BG20_GEM", "BG20_GEM"];
44
- (0, cards_in_hand_1.addCardsInHand)(hero, board, razorFenCardsToAdd, gameState);
45
- break;
46
- case "BG_UNG_073":
47
- case "TB_BaconUps_061":
48
- const rockPoolTarget = (0, utils_2.getRandomAliveMinion)(board, hero, reference_data_1.Race.MURLOC, gameState.allCards);
49
- if (!!rockPoolTarget) {
50
- const rockpoolStats = entity.cardId === "BG_UNG_073" ? 1 : 2;
51
- (0, stats_1.modifyStats)(rockPoolTarget, rockpoolStats, rockpoolStats, board, hero, gameState);
52
- gameState.spectator.registerPowerTarget(entity, rockPoolTarget, board, hero, otherHero);
53
- }
54
- break;
55
- case "BG23_002":
56
- case "BG23_002_G":
57
- const shellCollectorCardsToAdd = entity.cardId === "BG23_002"
58
- ? ["GAME_005"]
59
- : ["GAME_005", "GAME_005"];
60
- (0, cards_in_hand_1.addCardsInHand)(hero, board, shellCollectorCardsToAdd, gameState);
61
- break;
62
- case "BGS_082":
63
- case "TB_BaconUps_144":
64
- const menagerieMugStats = entity.cardId === "BGS_082" ? 1 : 2;
65
- (0, utils_2.grantStatsToMinionsOfEachType)(entity, board, hero, menagerieMugStats, menagerieMugStats, gameState, 3);
66
- break;
67
- case "BGS_083":
68
- case "TB_BaconUps_145":
69
- const menagerieJugStats = entity.cardId === "BGS_083" ? 2 : 4;
70
- (0, utils_2.grantStatsToMinionsOfEachType)(entity, board, hero, menagerieJugStats, menagerieJugStats, gameState, 3);
71
- break;
72
- case "BG25_011":
73
- case "BG25_011_G":
74
- const nerubianDeathswarmerStats = entity.cardId === "BG25_011" ? 1 : 2;
75
- hero.globalInfo.UndeadAttackBonus =
76
- ((_b = (_a = hero.globalInfo) === null || _a === void 0 ? void 0 : _a.UndeadAttackBonus) !== null && _b !== void 0 ? _b : 0) + nerubianDeathswarmerStats;
77
- (0, utils_2.addStatsToBoard)(entity, board, hero, nerubianDeathswarmerStats, 0, gameState, reference_data_1.Race[reference_data_1.Race.UNDEAD]);
78
- break;
79
- case "BG_AT_069":
80
- case "BG_AT_069_G":
81
- const sparringPartnersTargets = allMinions.filter((e) => !e.taunt);
82
- const sparringPartnersTarget = (0, utils_1.pickRandom)(sparringPartnersTargets);
83
- if (sparringPartnersTarget) {
84
- sparringPartnersTarget.taunt = true;
85
- }
86
- break;
87
- case "BGS_038":
88
- case "TB_BaconUps_108":
89
- const twilightEmissaryTarget = (0, utils_2.getRandomAliveMinion)(board, hero, reference_data_1.Race.DRAGON, gameState.allCards);
90
- if (!!twilightEmissaryTarget) {
91
- const twilightEmissaryStats = entity.cardId === "BGS_038" ? 2 : 4;
92
- (0, stats_1.modifyStats)(twilightEmissaryTarget, twilightEmissaryStats, twilightEmissaryStats, board, hero, gameState);
93
- gameState.spectator.registerPowerTarget(entity, twilightEmissaryTarget, board, hero, otherHero);
94
- }
95
- break;
96
- case "BGS_053":
97
- case "TB_BaconUps_138":
98
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BGS_053" ? 3 : 6, 0, gameState, reference_data_1.Race[reference_data_1.Race.PIRATE]);
99
- break;
100
- case "BG29_502":
101
- case "BG29_502_G":
102
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, 0, entity.cardId === "BG29_502" ? 4 : 8, gameState, reference_data_1.Race[reference_data_1.Race.PIRATE]);
103
- break;
104
- case "BG_EX1_103":
105
- case "TB_BaconUps_064":
106
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, 0, entity.cardId === "BG_EX1_103" ? 2 : 4, gameState, reference_data_1.Race[reference_data_1.Race.MURLOC]);
107
- break;
108
- case "BG_BT_010":
109
- case "TB_BaconUps_124":
110
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "TB_BaconUps_124" ? 2 : 1, entity.cardId === "TB_BaconUps_124" ? 2 : 1, gameState, reference_data_1.Race[reference_data_1.Race.MURLOC]);
111
- break;
112
- case "BG26_522":
113
- case "BG26_522_G":
114
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BG26_522" ? 2 : 4, entity.cardId === "BG26_522" ? 2 : 4, gameState, reference_data_1.Race[reference_data_1.Race.DEMON]);
115
- const numberOfTimesToTrigger = entity.cardId === "BG26_522" ? 1 : 2;
116
- for (let i = 0; i < numberOfTimesToTrigger; i++) {
117
- (0, damage_to_hero_1.dealDamageToHero)(entity, hero, board, 2, gameState);
118
- }
119
- break;
120
- case "BG26_159":
121
- case "BG26_159_G":
122
- const moonBaconJazzerStats = entity.cardId === "BG26_159" ? 1 : 2;
123
- hero.globalInfo.BloodGemHealthBonus =
124
- ((_d = (_c = hero.globalInfo) === null || _c === void 0 ? void 0 : _c.BloodGemHealthBonus) !== null && _d !== void 0 ? _d : 0) + moonBaconJazzerStats;
125
- break;
126
- case "BG21_021":
127
- case "BG21_021_G":
128
- const smoggerLoops = entity.cardId === "BG21_021" ? 1 : 2;
129
- for (let i = 0; i < smoggerLoops; i++) {
130
- const smoggerTarget = (0, utils_2.getRandomAliveMinion)(board, hero, reference_data_1.Race.ELEMENTAL, gameState.allCards);
131
- const smoggerStats = (_e = hero.tavernTier) !== null && _e !== void 0 ? _e : 3;
132
- (0, stats_1.modifyStats)(smoggerTarget, smoggerStats, smoggerStats, board, hero, gameState);
133
- gameState.spectator.registerPowerTarget(entity, smoggerTarget, board, hero, otherHero);
134
- }
135
- break;
136
- case "BGS_010":
137
- case "TB_BaconUps_083":
138
- const startingHp = hero.cardId === "TB_BaconShop_HERO_34" ? 60 : 30;
139
- const hpMissing = startingHp - hero.hpLeft;
140
- const annihilanStats = (entity.cardId === "BGS_010" ? 2 : 4) * hpMissing;
141
- (0, stats_1.modifyStats)(entity, 0, annihilanStats, board, hero, gameState);
142
- gameState.spectator.registerPowerTarget(entity, entity, board, hero, otherHero);
143
- break;
144
- case "BG26_963":
145
- case "BG26_963_G":
146
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BG26_963" ? 3 : 6, entity.cardId === "BG26_963" ? 2 : 4, gameState, reference_data_1.Race[reference_data_1.Race.DRAGON]);
147
- break;
148
- case "BG20_202":
149
- case "BG20_202_G":
150
- const necrolyteBloodGems = entity.cardId === "BG20_202" ? 2 : 4;
151
- const necrolyteTarget = (0, utils_1.pickRandom)(board);
152
- (0, blood_gems_1.playBloodGemsOn)(entity, necrolyteTarget, necrolyteBloodGems, board, hero, gameState);
153
- gameState.spectator.registerPowerTarget(entity, necrolyteTarget, board, hero, otherHero);
154
- const necrolyteTargetNeighbours = (0, attack_1.getNeighbours)(board, necrolyteTarget);
155
- for (const neighbour of necrolyteTargetNeighbours) {
156
- const bloodGemStatsEnchantment = (_f = neighbour.enchantments) === null || _f === void 0 ? void 0 : _f.find((e) => e.cardId === "BG20_GEMe2");
157
- if (bloodGemStatsEnchantment) {
158
- const atk = (_g = bloodGemStatsEnchantment.tagScriptDataNum1) !== null && _g !== void 0 ? _g : 0;
159
- const heath = (_h = bloodGemStatsEnchantment.tagScriptDataNum2) !== null && _h !== void 0 ? _h : 0;
160
- neighbour.attack = Math.max(0, neighbour.attack - atk);
161
- neighbour.health = Math.max(1, neighbour.health - heath);
162
- neighbour.maxHealth = Math.max(1, neighbour.maxHealth - heath);
163
- necrolyteTarget.attack += atk;
164
- necrolyteTarget.health += heath;
165
- necrolyteTarget.maxHealth += heath;
166
- gameState.spectator.registerPowerTarget(necrolyteTarget, neighbour, board, hero, otherHero);
42
+ const battlecryImpl = _card_mappings_1.cardMappings[entity.cardId];
43
+ if ((0, card_interface_1.hasBattlecry)(battlecryImpl)) {
44
+ battlecryImpl.battlecry(entity, {
45
+ hero: hero,
46
+ board: board,
47
+ otherHero: otherHero,
48
+ otherBoard: otherBoard,
49
+ gameState,
50
+ });
51
+ }
52
+ else {
53
+ switch (entity.cardId) {
54
+ case "BG20_100":
55
+ case "BG20_100_G":
56
+ const razorFenCardsToAdd = entity.cardId === "BG20_100"
57
+ ? ["BG20_GEM"]
58
+ : ["BG20_GEM", "BG20_GEM"];
59
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, razorFenCardsToAdd, gameState);
60
+ break;
61
+ case "BG_UNG_073":
62
+ case "TB_BaconUps_061":
63
+ const rockPoolTarget = (0, utils_2.getRandomAliveMinion)(board, hero, reference_data_1.Race.MURLOC, gameState.allCards);
64
+ if (!!rockPoolTarget) {
65
+ const rockpoolStats = entity.cardId === "BG_UNG_073" ? 1 : 2;
66
+ (0, stats_1.modifyStats)(rockPoolTarget, rockpoolStats, rockpoolStats, board, hero, gameState);
67
+ gameState.spectator.registerPowerTarget(entity, rockPoolTarget, board, hero, otherHero);
167
68
  }
168
- }
169
- break;
170
- case "BGS_020":
171
- case "TB_BaconUps_089":
172
- const primalfinLoops = entity.cardId === "BGS_020" ? 1 : 2;
173
- for (let i = 0; i < primalfinLoops; i++) {
174
- const discoverOptions = [
175
- gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MURLOC, (_j = hero.tavernTier) !== null && _j !== void 0 ? _j : 1),
176
- gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MURLOC, (_k = hero.tavernTier) !== null && _k !== void 0 ? _k : 1),
177
- gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MURLOC, (_l = hero.tavernTier) !== null && _l !== void 0 ? _l : 1),
178
- ];
179
- const picked = (0, utils_1.pickRandom)(discoverOptions);
180
- const others = discoverOptions.filter((e) => e !== picked);
181
- (0, cards_in_hand_1.addCardsInHand)(hero, board, [picked], gameState);
182
- (0, discover_1.afterDiscover)(hero, board, picked, others, gameState);
183
- gameState.spectator.registerPowerTarget(entity, hero, board, hero, otherHero);
184
69
  break;
185
- }
186
- break;
187
- case "BG_ICC_807":
188
- case "TB_BaconUps_072":
189
- const strongshellScavengerStats = entity.cardId === "BG_ICC_807" ? 2 : 4;
190
- const strongshellScavengerTargets = board
191
- .filter((e) => e.entityId != entity.entityId)
192
- .filter((e) => e.taunt);
193
- strongshellScavengerTargets.forEach((target) => {
194
- (0, stats_1.modifyStats)(target, strongshellScavengerStats, strongshellScavengerStats, board, hero, gameState);
195
- gameState.spectator.registerPowerTarget(entity, target, board, hero, otherHero);
196
- });
197
- break;
198
- case "BG24_023":
199
- case "BG24_023_G":
200
- const vigilantStonebornTarget = (0, utils_1.pickRandom)(board);
201
- const vigilantStonebornStats = entity.cardId === "BG24_023" ? 6 : 12;
202
- vigilantStonebornTarget.taunt = true;
203
- (0, stats_1.modifyStats)(vigilantStonebornTarget, 0, vigilantStonebornStats, board, hero, gameState);
204
- gameState.spectator.registerPowerTarget(entity, vigilantStonebornTarget, board, hero, otherHero);
205
- break;
206
- case "BG26_ICC_705":
207
- case "BG26_ICC_705_G":
208
- const bonemareTarget = (0, utils_1.pickRandom)(board);
209
- const bonemareStats = entity.cardId === "BG26_ICC_705" ? 4 : 8;
210
- bonemareTarget.taunt = true;
211
- (0, stats_1.modifyStats)(bonemareTarget, bonemareStats, bonemareStats, board, hero, gameState);
212
- gameState.spectator.registerPowerTarget(entity, bonemareTarget, board, hero, otherHero);
213
- break;
214
- case "BG25_309":
215
- case "BG25_309_G":
216
- const generalDrakkisathCardsToAdd = entity.cardId === "BG25_309"
217
- ? ["BG25_309t"]
218
- : [
219
- "BG25_309t",
220
- "BG25_309t",
221
- ];
222
- (0, cards_in_hand_1.addCardsInHand)(hero, board, generalDrakkisathCardsToAdd, gameState);
223
- break;
224
- case "BGS_030":
225
- case "TB_BaconUps_100":
226
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BGS_030" ? 3 : 6, entity.cardId === "BGS_030" ? 3 : 6, gameState, reference_data_1.Race[reference_data_1.Race.MURLOC]);
227
- break;
228
- case "BGS_043":
229
- case "TB_BaconUps_110":
230
- const murozondCardsToAdd = entity.cardId === "BGS_043"
231
- ? ["GAME_005"]
232
- : ["GAME_005", "GAME_005"];
233
- (0, cards_in_hand_1.addCardsInHand)(hero, board, murozondCardsToAdd, gameState);
234
- break;
235
- case "BGS_123":
236
- case "TB_BaconUps_162":
237
- const tavernTempestCardsToAdd = entity.cardId === "BGS_123"
238
- ? ["GAME_005"]
239
- : ["GAME_005", "GAME_005"];
240
- (0, cards_in_hand_1.addCardsInHand)(hero, board, tavernTempestCardsToAdd, gameState);
241
- break;
242
- case "BG25_807":
243
- case "BG25_807_G":
244
- const mechaJaraxxusCardsToAdd = entity.cardId === "BG25_807"
245
- ? ["GAME_005"]
246
- : ["GAME_005", "GAME_005"];
247
- (0, cards_in_hand_1.addCardsInHand)(hero, board, mechaJaraxxusCardsToAdd, gameState);
248
- break;
249
- case "BG27_002":
250
- case "BG27_002_G":
251
- const oozelingCardsToAdd = entity.cardId === "BG27_002"
252
- ? ["GAME_005", "GAME_005"]
253
- : ["GAME_005", "GAME_005", "GAME_005", "GAME_005"];
254
- (0, cards_in_hand_1.addCardsInHand)(hero, board, oozelingCardsToAdd, gameState);
255
- break;
256
- case "BG23_190":
257
- case "BG23_190_G":
258
- const utherTarget = (0, utils_1.pickRandom)(allMinions);
259
- const utherStats = entity.cardId === "BG23_190" ? 15 : 30;
260
- utherTarget.attack = utherStats;
261
- utherTarget.health = utherStats;
262
- utherTarget.maxHealth = utherStats;
263
- break;
264
- case "BG27_000":
265
- case "BG27_000_G":
266
- const ironGroundskeeperTargets = allMinions;
267
- const ironGroundskeeperTarget = (0, utils_1.pickRandom)(ironGroundskeeperTargets);
268
- ironGroundskeeperTarget.taunt = !ironGroundskeeperTarget.taunt;
269
- break;
270
- case "BG27_001":
271
- case "BG27_001_G":
272
- const differentTypes = extractUniqueTribes(board, gameState.allCards);
273
- const livingConstellationStats = (entity.cardId === "BG27_001" ? 1 : 2) * differentTypes.length;
274
- const livingConstellationTarget = (0, utils_1.pickRandom)(allMinions);
275
- const boardForTarget = board.includes(livingConstellationTarget) ? board : otherBoard;
276
- (0, stats_1.modifyStats)(livingConstellationTarget, livingConstellationStats, livingConstellationStats, boardForTarget, hero, gameState);
277
- gameState.spectator.registerPowerTarget(entity, livingConstellationTarget, boardForTarget, hero, otherHero);
278
- break;
279
- case "BG26_001":
280
- case "BG26_001_G":
281
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BG26_001" ? 2 : 4, entity.cardId === "BG26_001" ? 2 : 4, gameState);
282
- break;
283
- case "BG27_019":
284
- case "BG27_019_G":
285
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BG27_019" ? 1 : 2, entity.cardId === "BG27_019" ? 1 : 2, gameState);
286
- (0, utils_2.addStatsToBoard)(entity, otherBoard, hero, entity.cardId === "BG27_019" ? 1 : 2, entity.cardId === "BG27_019" ? 1 : 2, gameState);
287
- break;
288
- case "BG27_018":
289
- case "BG27_018_G":
290
- const emergentFlameTarget = (0, utils_1.pickRandom)(allMinions.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.ELEMENTAL, gameState.allCards)));
291
- if (!!emergentFlameTarget) {
292
- const targetBoard = board.includes(emergentFlameTarget) ? board : otherBoard;
293
- const targetHero = board.includes(emergentFlameTarget) ? hero : otherHero;
294
- const emergentFlameMultiplier = entity.cardId === "BG27_018" ? 1 : 2;
295
- const emergentFlameStats = ((_m = entity.scriptDataNum1) !== null && _m !== void 0 ? _m : 1) * emergentFlameMultiplier;
296
- (0, stats_1.modifyStats)(emergentFlameTarget, emergentFlameStats, emergentFlameStats, targetBoard, targetHero, gameState);
297
- gameState.spectator.registerPowerTarget(entity, emergentFlameTarget, targetBoard, hero, otherHero);
298
- }
299
- break;
300
- case "BG25_309t":
301
- case "BG25_309_Gt":
302
- const smolderwingTarget = (0, utils_1.pickRandom)(allMinions.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.DRAGON, gameState.allCards)));
303
- if (!!smolderwingTarget) {
304
- const targetBoard = board.includes(smolderwingTarget) ? board : otherBoard;
305
- const targetHero = board.includes(smolderwingTarget) ? hero : otherHero;
306
- const smolderwingMultiplier = entity.cardId === "BG25_309t" ? 1 : 2;
307
- const smolderwingStats = 5 * smolderwingMultiplier;
308
- (0, stats_1.modifyStats)(smolderwingTarget, smolderwingStats, 0, targetBoard, targetHero, gameState);
309
- }
310
- break;
311
- case "BG_SCH_149":
312
- case "TB_BaconUps_308":
313
- const highestAttack = Math.max(...allMinions.map((minion) => minion.attack));
314
- const highestHealth = Math.max(...allMinions.map((minion) => minion.health));
315
- const argentBraggartMultiplier = entity.cardId === "BG_SCH_149" ? 1 : 2;
316
- entity.attack = argentBraggartMultiplier * highestAttack;
317
- entity.health = argentBraggartMultiplier * highestHealth;
318
- break;
319
- case "BG25_034":
320
- case "BG25_034_G":
321
- const captainSandersTarget = (0, utils_1.pickRandom)(board.filter((e) => !(0, golden_1.isMinionGolden)(e, gameState.allCards)));
322
- if (captainSandersTarget) {
323
- (0, golden_1.makeMinionGolden)(captainSandersTarget, entity, board, hero, otherHero, gameState);
324
- }
325
- break;
326
- case "BG23_017":
327
- case "BG23_017_G":
328
- const sanguineChampionStats = entity.cardId === "BG23_017" ? 1 : 2;
329
- hero.globalInfo.BloodGemAttackBonus += sanguineChampionStats;
330
- hero.globalInfo.BloodGemHealthBonus += sanguineChampionStats;
331
- break;
332
- case "BG24_012":
333
- case "BG24_012_G":
334
- const murkyScale = entity.cardId === "BG24_012" ? 1 : 2;
335
- const murlocsControlled = board.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.MURLOC, gameState.allCards)).length;
336
- const murkyStats = murkyScale * 3 * murlocsControlled;
337
- const murkyTarget = (0, utils_1.pickRandom)(board.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.MURLOC, gameState.allCards)));
338
- if (!!murkyTarget) {
339
- (0, stats_1.modifyStats)(murkyTarget, murkyStats, murkyStats, board, hero, gameState);
340
- }
341
- break;
342
- case "BG26_814":
343
- case "BG26_814_G":
344
- const balladistMultiplier = entity.cardId === "BG26_814" ? 1 : 2;
345
- const balladistStats = balladistMultiplier * ((_o = entity.scriptDataNum1) !== null && _o !== void 0 ? _o : 0);
346
- const balladistTargets = allMinions.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.PIRATE, gameState.allCards));
347
- const balladistTarget = (0, utils_1.pickRandom)(balladistTargets);
348
- if (balladistTarget) {
349
- const targetBoard = board.includes(balladistTarget) ? board : otherBoard;
350
- const targetHero = board.includes(balladistTarget) ? hero : otherHero;
351
- (0, stats_1.modifyStats)(balladistTarget, 0, balladistStats, targetBoard, targetHero, gameState);
352
- gameState.spectator.registerPowerTarget(entity, balladistTarget, targetBoard, targetHero, otherHero);
353
- }
354
- break;
355
- case "BG24_719":
356
- case "BG24_719_G":
357
- const target = (0, utils_1.pickRandom)(allMinions.filter((e) => !e.definitelyDead && e.health > 0));
358
- if (target) {
359
- gameState.spectator.registerPowerTarget(entity, target, board, hero, otherHero);
360
- const minionTier = gameState.cardsData.getTavernLevel(target.cardId);
361
- const targetTier = entity.cardId === "BG24_719" ? minionTier + 1 : minionTier + 2;
362
- const maxTier = !!((_p = gameState.anomalies) === null || _p === void 0 ? void 0 : _p.includes("BG27_Anomaly_504"))
363
- ? 7
364
- : 6;
365
- const newMinionId = gameState.cardsData.getRandomMinionForTavernTier(Math.min(maxTier, targetTier));
366
- const targetBoard = board.includes(target) ? board : otherBoard;
367
- const targetHero = board.includes(target) ? hero : otherHero;
368
- const newMinion = (0, utils_2.buildSingleBoardEntity)(newMinionId, hero, board, gameState.allCards, targetHero.friendly, gameState.sharedState.currentEntityId++, false, gameState.cardsData, gameState.sharedState, null);
369
- const index = targetBoard.indexOf(target);
370
- targetBoard.splice(index, 1, newMinion);
371
- gameState.spectator.registerPowerTarget(entity, newMinion, targetBoard, hero, otherHero);
372
- }
373
- break;
374
- case "BGS_069":
375
- case "TB_BaconUps_121":
376
- const numberOfTribes = extractUniqueTribes(board, gameState.allCards).length;
377
- const amalgadonMultiplier = entity.cardId === "BGS_069" ? 1 : 2;
378
- const totalAdapts = amalgadonMultiplier * numberOfTribes;
379
- for (let i = 0; i < totalAdapts; i++) {
380
- const adapts = [
381
- "UNG_999t3",
382
- "UNG_999t2",
383
- "UNG_999t14",
384
- "UNG_999t4",
385
- ];
386
- if (!entity.divineShield) {
387
- adapts.push("UNG_999t8");
70
+ case "BG23_002":
71
+ case "BG23_002_G":
72
+ const shellCollectorCardsToAdd = entity.cardId === "BG23_002"
73
+ ? ["GAME_005"]
74
+ : ["GAME_005", "GAME_005"];
75
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, shellCollectorCardsToAdd, gameState);
76
+ break;
77
+ case "BGS_082":
78
+ case "TB_BaconUps_144":
79
+ const menagerieMugStats = entity.cardId === "BGS_082" ? 1 : 2;
80
+ (0, utils_2.grantStatsToMinionsOfEachType)(entity, board, hero, menagerieMugStats, menagerieMugStats, gameState, 3);
81
+ break;
82
+ case "BGS_083":
83
+ case "TB_BaconUps_145":
84
+ const menagerieJugStats = entity.cardId === "BGS_083" ? 2 : 4;
85
+ (0, utils_2.grantStatsToMinionsOfEachType)(entity, board, hero, menagerieJugStats, menagerieJugStats, gameState, 3);
86
+ break;
87
+ case "BG25_011":
88
+ case "BG25_011_G":
89
+ const nerubianDeathswarmerStats = entity.cardId === "BG25_011" ? 1 : 2;
90
+ hero.globalInfo.UndeadAttackBonus =
91
+ ((_b = (_a = hero.globalInfo) === null || _a === void 0 ? void 0 : _a.UndeadAttackBonus) !== null && _b !== void 0 ? _b : 0) + nerubianDeathswarmerStats;
92
+ (0, utils_2.addStatsToBoard)(entity, board, hero, nerubianDeathswarmerStats, 0, gameState, reference_data_1.Race[reference_data_1.Race.UNDEAD]);
93
+ break;
94
+ case "BG_AT_069":
95
+ case "BG_AT_069_G":
96
+ const sparringPartnersTargets = allMinions.filter((e) => !e.taunt);
97
+ const sparringPartnersTarget = (0, utils_1.pickRandom)(sparringPartnersTargets);
98
+ if (sparringPartnersTarget) {
99
+ (0, taunt_1.updateTaunt)(sparringPartnersTarget, true, board, hero, otherHero, gameState);
388
100
  }
389
- if (!entity.windfury) {
390
- adapts.push("UNG_999t7");
101
+ break;
102
+ case "BGS_038":
103
+ case "TB_BaconUps_108":
104
+ const twilightEmissaryTarget = (0, utils_2.getRandomAliveMinion)(board, hero, reference_data_1.Race.DRAGON, gameState.allCards);
105
+ if (!!twilightEmissaryTarget) {
106
+ const twilightEmissaryStats = entity.cardId === "BGS_038" ? 2 : 4;
107
+ (0, stats_1.modifyStats)(twilightEmissaryTarget, twilightEmissaryStats, twilightEmissaryStats, board, hero, gameState);
108
+ gameState.spectator.registerPowerTarget(entity, twilightEmissaryTarget, board, hero, otherHero);
391
109
  }
392
- if (!entity.taunt) {
393
- adapts.push("UNG_999t6");
110
+ break;
111
+ case "BGS_053":
112
+ case "TB_BaconUps_138":
113
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BGS_053" ? 3 : 6, 0, gameState, reference_data_1.Race[reference_data_1.Race.PIRATE]);
114
+ break;
115
+ case "BG29_502":
116
+ case "BG29_502_G":
117
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, 0, entity.cardId === "BG29_502" ? 4 : 8, gameState, reference_data_1.Race[reference_data_1.Race.PIRATE]);
118
+ break;
119
+ case "BG_EX1_103":
120
+ case "TB_BaconUps_064":
121
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, 0, entity.cardId === "BG_EX1_103" ? 2 : 4, gameState, reference_data_1.Race[reference_data_1.Race.MURLOC]);
122
+ break;
123
+ case "BG_BT_010":
124
+ case "TB_BaconUps_124":
125
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "TB_BaconUps_124" ? 2 : 1, entity.cardId === "TB_BaconUps_124" ? 2 : 1, gameState, reference_data_1.Race[reference_data_1.Race.MURLOC]);
126
+ break;
127
+ case "BG26_522":
128
+ case "BG26_522_G":
129
+ const numberOfTimesToTrigger = entity.cardId === "BG26_522" ? 1 : 2;
130
+ for (let i = 0; i < numberOfTimesToTrigger; i++) {
131
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, 2, 2, gameState, reference_data_1.Race[reference_data_1.Race.DEMON]);
132
+ (0, damage_to_hero_1.dealDamageToHero)(entity, hero, board, 2, gameState);
394
133
  }
395
- if (!entity.venomous && !entity.poisonous) {
396
- adapts.push("UNG_999t13");
134
+ break;
135
+ case "BG26_159":
136
+ case "BG26_159_G":
137
+ const moonBaconJazzerStats = entity.cardId === "BG26_159" ? 1 : 2;
138
+ hero.globalInfo.BloodGemHealthBonus =
139
+ ((_d = (_c = hero.globalInfo) === null || _c === void 0 ? void 0 : _c.BloodGemHealthBonus) !== null && _d !== void 0 ? _d : 0) + moonBaconJazzerStats;
140
+ break;
141
+ case "BG21_021":
142
+ case "BG21_021_G":
143
+ const smoggerLoops = entity.cardId === "BG21_021" ? 1 : 2;
144
+ for (let i = 0; i < smoggerLoops; i++) {
145
+ const smoggerTarget = (0, utils_2.getRandomAliveMinion)(board, hero, reference_data_1.Race.ELEMENTAL, gameState.allCards);
146
+ const smoggerStats = (_e = hero.tavernTier) !== null && _e !== void 0 ? _e : 3;
147
+ (0, stats_1.modifyStats)(smoggerTarget, smoggerStats, smoggerStats, board, hero, gameState);
148
+ gameState.spectator.registerPowerTarget(entity, smoggerTarget, board, hero, otherHero);
397
149
  }
398
- const adapt = (0, utils_1.pickRandom)(adapts);
399
- switch (adapt) {
400
- case "UNG_999t3":
401
- (0, stats_1.modifyStats)(entity, 3, 0, board, hero, gameState);
402
- break;
403
- case "UNG_999t2":
404
- entity.enchantments = (_q = entity.enchantments) !== null && _q !== void 0 ? _q : [];
405
- entity.enchantments.push({
406
- cardId: "UNG_999t2e",
407
- timing: 0,
408
- });
409
- break;
410
- case "UNG_999t7":
411
- entity.windfury = true;
412
- break;
413
- case "UNG_999t6":
414
- entity.taunt = true;
415
- break;
416
- case "UNG_999t13":
417
- entity.poisonous = true;
418
- break;
419
- case "UNG_999t4":
420
- (0, stats_1.modifyStats)(entity, 0, 3, board, hero, gameState);
421
- break;
422
- case "UNG_999t8":
423
- entity.divineShield = true;
424
- break;
425
- case "UNG_999t14":
426
- (0, stats_1.modifyStats)(entity, 1, 1, board, hero, gameState);
427
- break;
150
+ break;
151
+ case "BGS_010":
152
+ case "TB_BaconUps_083":
153
+ const startingHp = hero.cardId === "TB_BaconShop_HERO_34" ? 60 : 30;
154
+ const hpMissing = startingHp - hero.hpLeft;
155
+ const annihilanStats = (entity.cardId === "BGS_010" ? 2 : 4) * hpMissing;
156
+ (0, stats_1.modifyStats)(entity, 0, annihilanStats, board, hero, gameState);
157
+ gameState.spectator.registerPowerTarget(entity, entity, board, hero, otherHero);
158
+ break;
159
+ case "BG20_202":
160
+ case "BG20_202_G":
161
+ const necrolyteBloodGems = entity.cardId === "BG20_202" ? 2 : 4;
162
+ const necrolyteTarget = (0, utils_1.pickRandom)(board);
163
+ (0, blood_gems_1.playBloodGemsOn)(entity, necrolyteTarget, necrolyteBloodGems, board, hero, gameState);
164
+ gameState.spectator.registerPowerTarget(entity, necrolyteTarget, board, hero, otherHero);
165
+ const necrolyteTargetNeighbours = (0, attack_1.getNeighbours)(board, necrolyteTarget);
166
+ for (const neighbour of necrolyteTargetNeighbours) {
167
+ const bloodGemStatsEnchantment = (_f = neighbour.enchantments) === null || _f === void 0 ? void 0 : _f.find((e) => e.cardId === "BG20_GEMe2");
168
+ if (bloodGemStatsEnchantment) {
169
+ const atk = (_g = bloodGemStatsEnchantment.tagScriptDataNum1) !== null && _g !== void 0 ? _g : 0;
170
+ const heath = (_h = bloodGemStatsEnchantment.tagScriptDataNum2) !== null && _h !== void 0 ? _h : 0;
171
+ neighbour.attack = Math.max(0, neighbour.attack - atk);
172
+ neighbour.health = Math.max(1, neighbour.health - heath);
173
+ neighbour.maxHealth = Math.max(1, neighbour.maxHealth - heath);
174
+ necrolyteTarget.attack += atk;
175
+ necrolyteTarget.health += heath;
176
+ necrolyteTarget.maxHealth += heath;
177
+ gameState.spectator.registerPowerTarget(necrolyteTarget, neighbour, board, hero, otherHero);
178
+ }
428
179
  }
429
- }
430
- break;
431
- case "BG28_550":
432
- case "BG28_550_G":
433
- const rodeoPerformerCardsToAdd = entity.cardId === "BG28_550_G" ? [null] : [null, null];
434
- (0, cards_in_hand_1.addCardsInHand)(hero, board, rodeoPerformerCardsToAdd, gameState);
435
- break;
436
- case "BG28_630":
437
- case "BG28_630_G":
438
- const eagillMultiplier = entity.cardId === "BG28_630" ? 1 : 2;
439
- const eagillBoardTarget = (0, utils_1.pickRandom)(board.filter((e) => e.entityId !== entity.entityId));
440
- if (eagillBoardTarget) {
441
- (0, stats_1.modifyStats)(eagillBoardTarget, 2 * eagillMultiplier, 3 * eagillMultiplier, board, hero, gameState);
442
- gameState.spectator.registerPowerTarget(entity, eagillBoardTarget, board, hero, otherHero);
443
- }
444
- const eagillHandTarget = (0, utils_1.pickRandom)(hero.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]; }));
445
- if (eagillHandTarget) {
446
- (0, stats_1.modifyStats)(eagillHandTarget, 2 * eagillMultiplier, 3 * eagillMultiplier, board, hero, gameState);
447
- gameState.spectator.registerPowerTarget(entity, eagillHandTarget, board, hero, otherHero);
448
- }
449
- break;
450
- case "TB_BaconShop_HERO_34_Buddy":
451
- case "TB_BaconShop_HERO_34_Buddy_G":
452
- const weebominationMultiplier = entity.cardId === "TB_BaconShop_HERO_34_Buddy" ? 1 : 2;
453
- const weebominationTarget = (0, utils_1.pickRandom)(allMinions);
454
- if (weebominationTarget) {
455
- const heroMaxHealth = (_s = (_r = gameState.allCards.getCard(hero.cardId)) === null || _r === void 0 ? void 0 : _r.health) !== null && _s !== void 0 ? _s : 40;
456
- const heroMissingHealth = heroMaxHealth - hero.hpLeft;
457
- const weebominationBuff = weebominationMultiplier * heroMissingHealth;
458
- (0, stats_1.modifyStats)(weebominationTarget, 0, weebominationBuff, board, hero, gameState);
459
- gameState.spectator.registerPowerTarget(entity, weebominationTarget, board, hero, otherHero);
460
- }
461
- break;
462
- case "BG29_845":
463
- case "BG29_845_G":
464
- const assistantGuardMultiplier = entity.cardId === "BG29_845" ? 1 : 2;
465
- const assistantGuardTarget = (0, utils_1.pickRandom)(allMinions);
466
- if (assistantGuardTarget) {
467
- assistantGuardTarget.taunt = true;
468
- gameState.spectator.registerPowerTarget(entity, assistantGuardTarget, board, hero, otherHero);
469
- }
470
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => !!e.taunt), hero, assistantGuardMultiplier * 2, assistantGuardMultiplier * 3, gameState);
471
- break;
472
- case "BG29_803":
473
- case "BG29_803_G":
474
- const goldshellMultiplier = entity.cardId === "BG29_803_G" ? 2 : 1;
475
- (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, goldshellMultiplier * 2, goldshellMultiplier * 4, gameState, reference_data_1.Race[reference_data_1.Race.BEAST]);
476
- break;
477
- case "BG26_045":
478
- case "BG26_045_G":
479
- const shellWhistlerCardsToAdd = entity.cardId === "BG26_045_G" ? [null] : [null, null];
480
- (0, cards_in_hand_1.addCardsInHand)(hero, board, shellWhistlerCardsToAdd, gameState);
481
- break;
482
- case "BG25_155":
483
- case "BG25_155_G":
484
- const gemSmugglerBloodGems = entity.cardId === "BG25_155" ? 1 : 2;
485
- board
486
- .filter((e) => e.entityId !== entity.entityId)
487
- .forEach((e) => (0, blood_gems_1.playBloodGemsOn)(entity, e, gemSmugglerBloodGems, board, hero, gameState));
488
- break;
489
- case "BG28_303":
490
- case "BG28_303_G":
491
- const disguisedGraverobberTarget = (0, utils_1.pickRandomAlive)(board.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.UNDEAD, gameState.allCards)));
492
- if (disguisedGraverobberTarget) {
493
- const disguisedGraverobberNumberOfCopies = entity.cardId === "BG28_303" ? 1 : 2;
494
- disguisedGraverobberTarget.definitelyDead = true;
495
- const copies = Array.from({ length: disguisedGraverobberNumberOfCopies }).map((_) => disguisedGraverobberTarget.cardId);
496
- (0, cards_in_hand_1.addCardsInHand)(hero, board, copies, gameState);
497
- }
498
- break;
499
- case "BGDUO_104":
500
- case "BGDUO_104_G":
501
- const playerState = (0, utils_2.getPlayerState)(gameState.gameState, hero);
502
- if (playerState) {
503
- const cardsToAdd = entity.cardId === "BGDUO_104"
180
+ break;
181
+ case "BGS_020":
182
+ case "TB_BaconUps_089":
183
+ const primalfinLoops = entity.cardId === "BGS_020" ? 1 : 2;
184
+ for (let i = 0; i < primalfinLoops; i++) {
185
+ const discoverOptions = [
186
+ gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MURLOC, (_j = hero.tavernTier) !== null && _j !== void 0 ? _j : 1),
187
+ gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MURLOC, (_k = hero.tavernTier) !== null && _k !== void 0 ? _k : 1),
188
+ gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MURLOC, (_l = hero.tavernTier) !== null && _l !== void 0 ? _l : 1),
189
+ ];
190
+ const picked = (0, utils_1.pickRandom)(discoverOptions);
191
+ const others = discoverOptions.filter((e) => e !== picked);
192
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, [picked], gameState);
193
+ (0, discover_1.afterDiscover)(hero, board, picked, others, gameState);
194
+ gameState.spectator.registerPowerTarget(entity, hero, board, hero, otherHero);
195
+ break;
196
+ }
197
+ break;
198
+ case "BG_ICC_807":
199
+ case "TB_BaconUps_072":
200
+ const strongshellScavengerStats = entity.cardId === "BG_ICC_807" ? 2 : 4;
201
+ const strongshellScavengerTargets = board
202
+ .filter((e) => e.entityId != entity.entityId)
203
+ .filter((e) => e.taunt);
204
+ strongshellScavengerTargets.forEach((target) => {
205
+ (0, stats_1.modifyStats)(target, strongshellScavengerStats, strongshellScavengerStats, board, hero, gameState);
206
+ gameState.spectator.registerPowerTarget(entity, target, board, hero, otherHero);
207
+ });
208
+ break;
209
+ case "BG24_023":
210
+ case "BG24_023_G":
211
+ const vigilantStonebornTarget = (0, utils_1.pickRandom)(board);
212
+ const vigilantStonebornStats = entity.cardId === "BG24_023" ? 6 : 12;
213
+ (0, taunt_1.updateTaunt)(vigilantStonebornTarget, true, board, hero, otherHero, gameState);
214
+ (0, stats_1.modifyStats)(vigilantStonebornTarget, 0, vigilantStonebornStats, board, hero, gameState);
215
+ gameState.spectator.registerPowerTarget(entity, vigilantStonebornTarget, board, hero, otherHero);
216
+ break;
217
+ case "BG26_ICC_705":
218
+ case "BG26_ICC_705_G":
219
+ const bonemareTarget = (0, utils_1.pickRandom)(board);
220
+ const bonemareStats = entity.cardId === "BG26_ICC_705" ? 4 : 8;
221
+ (0, taunt_1.updateTaunt)(bonemareTarget, true, board, hero, otherHero, gameState);
222
+ (0, stats_1.modifyStats)(bonemareTarget, bonemareStats, bonemareStats, board, hero, gameState);
223
+ gameState.spectator.registerPowerTarget(entity, bonemareTarget, board, hero, otherHero);
224
+ break;
225
+ case "BGS_030":
226
+ case "TB_BaconUps_100":
227
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BGS_030" ? 3 : 6, entity.cardId === "BGS_030" ? 3 : 6, gameState, reference_data_1.Race[reference_data_1.Race.MURLOC]);
228
+ break;
229
+ case "BGS_043":
230
+ case "TB_BaconUps_110":
231
+ const murozondCardsToAdd = entity.cardId === "BGS_043"
504
232
  ? ["GAME_005"]
505
233
  : ["GAME_005", "GAME_005"];
506
- (0, cards_in_hand_1.addCardsInHand)(playerState.player, playerState.board, cardsToAdd, gameState);
507
- }
508
- break;
509
- case "BGDUO_111":
510
- case "BGDUO_111_G":
511
- const cardsToAdd = entity.cardId === "BGDUO_111"
512
- ? ["BG20_GEM"]
513
- : ["BG20_GEM", "BG20_GEM"];
514
- (0, cards_in_hand_1.addCardsInHand)(gameState.gameState.player.player, gameState.gameState.player.board, cardsToAdd, gameState);
515
- if (gameState.gameState.player.teammate) {
516
- (0, cards_in_hand_1.addCardsInHand)(gameState.gameState.player.teammate.player, gameState.gameState.player.teammate.board, cardsToAdd, gameState);
517
- }
518
- break;
519
- case "BGDUO_119":
520
- case "BGDUO_119_G":
521
- const conductorTarget = (0, utils_1.pickRandom)(allMinions.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.ELEMENTAL, gameState.allCards)));
522
- if (!!conductorTarget) {
523
- const targetBoard = board.includes(conductorTarget) ? board : otherBoard;
524
- const targetHero = board.includes(conductorTarget) ? hero : otherHero;
525
- const multiplier = entity.cardId === "BGDUO_119" ? 1 : 2;
526
- const attackStats = 2 * ((_t = entity.scriptDataNum1) !== null && _t !== void 0 ? _t : 1) * multiplier;
527
- const healthStats = 2 * ((_u = entity.scriptDataNum1) !== null && _u !== void 0 ? _u : 1) * multiplier;
528
- (0, stats_1.modifyStats)(conductorTarget, attackStats, healthStats, targetBoard, targetHero, gameState);
529
- gameState.spectator.registerPowerTarget(entity, conductorTarget, targetBoard, hero, otherHero);
530
- }
531
- break;
532
- case "BGDUO_HERO_100_Buddy":
533
- case "BGDUO_HERO_100_Buddy_G":
534
- const facelessOneCardsToAdd = entity.cardId === "BGDUO_HERO_100_Buddy" ? [null] : [null, null];
535
- (0, cards_in_hand_1.addCardsInHand)(hero, board, facelessOneCardsToAdd, gameState);
536
- break;
537
- case "TB_BaconShop_HERO_91_Buddy":
538
- case "TB_BaconShop_HERO_91_Buddy_G":
539
- const phyreszCardsToAdd = entity.cardId === "TB_BaconShop_HERO_91_Buddy" ? [null] : [null, null];
540
- (0, cards_in_hand_1.addCardsInHand)(hero, board, phyreszCardsToAdd, gameState);
541
- break;
542
- case "TB_BaconShop_HERO_23_Buddy":
543
- case "TB_BaconShop_HERO_23_Buddy_G":
544
- const muckslingerCardsToAdd = entity.cardId === "TB_BaconShop_HERO_23_Buddy"
545
- ? [(0, utils_1.pickRandom)(gameState.cardsData.battlecryMinions)]
546
- : [
547
- (0, utils_1.pickRandom)(gameState.cardsData.battlecryMinions),
548
- (0, utils_1.pickRandom)(gameState.cardsData.battlecryMinions),
549
- ];
550
- (0, cards_in_hand_1.addCardsInHand)(hero, board, muckslingerCardsToAdd, gameState);
551
- break;
552
- case "BG29_861":
553
- case "BG29_861_G":
554
- const barrendsBrawlerCardsToAdd = entity.cardId === "BG29_861"
555
- ? [(0, utils_1.pickRandom)(gameState.cardsData.deathrattleMinions)]
556
- : [
557
- (0, utils_1.pickRandom)(gameState.cardsData.deathrattleMinions),
558
- (0, utils_1.pickRandom)(gameState.cardsData.deathrattleMinions),
559
- ];
560
- (0, cards_in_hand_1.addCardsInHand)(hero, board, barrendsBrawlerCardsToAdd, gameState);
561
- break;
562
- case "TB_BaconShop_HERO_56_Buddy":
563
- case "TB_BaconShop_HERO_56_Buddy_G":
564
- const vaelastraszBonus = entity.cardId === "TB_BaconShop_HERO_56_Buddy_G" ? 6 : 3;
565
- board
566
- .filter((e) => e.entityId !== entity.entityId)
567
- .forEach((e) => {
568
- (0, stats_1.modifyStats)(e, vaelastraszBonus, vaelastraszBonus, board, hero, gameState);
569
- });
570
- break;
571
- case "BG29_503":
572
- case "BG29_503_G":
573
- const boardWithMechs = board.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.MECH, gameState.allCards));
574
- const junkerTarget = (0, utils_1.pickRandom)(boardWithMechs);
575
- if (junkerTarget) {
576
- const numberOfMagnetizes = entity.cardId === "BG29_503" ? 1 : 2;
577
- for (let i = 0; i < numberOfMagnetizes; i++) {
578
- const minionToMagnetize = gameState.cardsData.getRandomMechToMagnetize((_v = hero.tavernTier) !== null && _v !== void 0 ? _v : 1);
579
- gameState.spectator.registerPowerTarget(entity, junkerTarget, board, null, null);
580
- (0, magnetize_1.magnetizeToTarget)(junkerTarget, minionToMagnetize, board, hero, gameState);
234
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, murozondCardsToAdd, gameState);
235
+ break;
236
+ case "BGS_123":
237
+ case "TB_BaconUps_162":
238
+ const tavernTempestCardsToAdd = entity.cardId === "BGS_123"
239
+ ? ["GAME_005"]
240
+ : ["GAME_005", "GAME_005"];
241
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, tavernTempestCardsToAdd, gameState);
242
+ break;
243
+ case "BG27_002":
244
+ case "BG27_002_G":
245
+ const oozelingCardsToAdd = entity.cardId === "BG27_002"
246
+ ? ["GAME_005", "GAME_005"]
247
+ : ["GAME_005", "GAME_005", "GAME_005", "GAME_005"];
248
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, oozelingCardsToAdd, gameState);
249
+ break;
250
+ case "BG23_190":
251
+ case "BG23_190_G":
252
+ const utherTarget = (0, utils_1.pickRandom)(allMinions);
253
+ const utherStats = entity.cardId === "BG23_190" ? 15 : 30;
254
+ utherTarget.attack = utherStats;
255
+ utherTarget.health = utherStats;
256
+ utherTarget.maxHealth = utherStats;
257
+ break;
258
+ case "BG27_000":
259
+ case "BG27_000_G":
260
+ const ironGroundskeeperTargets = allMinions;
261
+ const ironGroundskeeperTarget = (0, utils_1.pickRandom)(ironGroundskeeperTargets);
262
+ (0, taunt_1.updateTaunt)(ironGroundskeeperTarget, !ironGroundskeeperTarget.taunt, board, hero, otherHero, gameState);
263
+ break;
264
+ case "BG27_001":
265
+ case "BG27_001_G":
266
+ const differentTypes = extractUniqueTribes(board, gameState.allCards);
267
+ const livingConstellationStats = (entity.cardId === "BG27_001" ? 1 : 2) * differentTypes.length;
268
+ const livingConstellationTarget = (0, utils_1.pickRandom)(allMinions);
269
+ const boardForTarget = board.includes(livingConstellationTarget) ? board : otherBoard;
270
+ (0, stats_1.modifyStats)(livingConstellationTarget, livingConstellationStats, livingConstellationStats, boardForTarget, hero, gameState);
271
+ gameState.spectator.registerPowerTarget(entity, livingConstellationTarget, boardForTarget, hero, otherHero);
272
+ break;
273
+ case "BG26_001":
274
+ case "BG26_001_G":
275
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BG26_001" ? 2 : 4, entity.cardId === "BG26_001" ? 2 : 4, gameState);
276
+ break;
277
+ case "BG27_019":
278
+ case "BG27_019_G":
279
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, entity.cardId === "BG27_019" ? 1 : 2, entity.cardId === "BG27_019" ? 1 : 2, gameState);
280
+ (0, utils_2.addStatsToBoard)(entity, otherBoard, hero, entity.cardId === "BG27_019" ? 1 : 2, entity.cardId === "BG27_019" ? 1 : 2, gameState);
281
+ break;
282
+ case "BG27_018":
283
+ case "BG27_018_G":
284
+ const emergentFlameTarget = (0, utils_1.pickRandom)(allMinions.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.ELEMENTAL, gameState.allCards)));
285
+ if (!!emergentFlameTarget) {
286
+ const targetBoard = board.includes(emergentFlameTarget) ? board : otherBoard;
287
+ const targetHero = board.includes(emergentFlameTarget) ? hero : otherHero;
288
+ const emergentFlameMultiplier = entity.cardId === "BG27_018" ? 1 : 2;
289
+ const emergentFlameStats = ((_m = entity.scriptDataNum1) !== null && _m !== void 0 ? _m : 1) * emergentFlameMultiplier;
290
+ (0, stats_1.modifyStats)(emergentFlameTarget, emergentFlameStats, emergentFlameStats, targetBoard, targetHero, gameState);
291
+ gameState.spectator.registerPowerTarget(entity, emergentFlameTarget, targetBoard, hero, otherHero);
581
292
  }
582
- }
583
- break;
584
- case "BG23_HERO_306_Buddy":
585
- case "BG23_HERO_306_Buddy_G":
586
- const nathanosTarget = (0, utils_1.pickRandom)(board);
587
- if (nathanosTarget) {
588
- gameState.spectator.registerPowerTarget(entity, nathanosTarget, board, null, null);
589
- nathanosTarget.definitelyDead = true;
590
- const buffMultiplier = entity.cardId === "BG23_HERO_306_Buddy" ? 1 : 2;
591
- const attackBuff = nathanosTarget.attack * buffMultiplier;
592
- const healthBuff = nathanosTarget.health * buffMultiplier;
593
- const buffTargets = (0, attack_1.getNeighbours)(board, nathanosTarget);
594
- buffTargets.forEach((e) => {
595
- (0, stats_1.modifyStats)(e, attackBuff, healthBuff, board, hero, gameState);
596
- gameState.spectator.registerPowerTarget(entity, e, board, null, null);
293
+ break;
294
+ case "BG_SCH_149":
295
+ case "TB_BaconUps_308":
296
+ const highestAttack = Math.max(...allMinions.map((minion) => minion.attack));
297
+ const highestHealth = Math.max(...allMinions.map((minion) => minion.health));
298
+ const argentBraggartMultiplier = entity.cardId === "BG_SCH_149" ? 1 : 2;
299
+ entity.attack = argentBraggartMultiplier * highestAttack;
300
+ entity.health = argentBraggartMultiplier * highestHealth;
301
+ break;
302
+ case "BG25_034":
303
+ case "BG25_034_G":
304
+ const captainSandersTarget = (0, utils_1.pickRandom)(board.filter((e) => !(0, golden_1.isMinionGolden)(e, gameState.allCards)));
305
+ if (captainSandersTarget) {
306
+ (0, golden_1.makeMinionGolden)(captainSandersTarget, entity, board, hero, otherHero, gameState);
307
+ }
308
+ break;
309
+ case "BG23_017":
310
+ case "BG23_017_G":
311
+ const sanguineChampionStats = entity.cardId === "BG23_017" ? 1 : 2;
312
+ hero.globalInfo.BloodGemAttackBonus += sanguineChampionStats;
313
+ hero.globalInfo.BloodGemHealthBonus += sanguineChampionStats;
314
+ break;
315
+ case "BG26_814":
316
+ case "BG26_814_G":
317
+ const balladistMultiplier = entity.cardId === "BG26_814" ? 1 : 2;
318
+ const balladistStats = balladistMultiplier * ((_o = entity.scriptDataNum1) !== null && _o !== void 0 ? _o : 0);
319
+ const balladistTargets = allMinions.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.PIRATE, gameState.allCards));
320
+ const balladistTarget = (0, utils_1.pickRandom)(balladistTargets);
321
+ if (balladistTarget) {
322
+ const targetBoard = board.includes(balladistTarget) ? board : otherBoard;
323
+ const targetHero = board.includes(balladistTarget) ? hero : otherHero;
324
+ (0, stats_1.modifyStats)(balladistTarget, 0, balladistStats, targetBoard, targetHero, gameState);
325
+ gameState.spectator.registerPowerTarget(entity, balladistTarget, targetBoard, targetHero, otherHero);
326
+ }
327
+ break;
328
+ case "BG24_719":
329
+ case "BG24_719_G":
330
+ const target = (0, utils_1.pickRandom)(allMinions.filter((e) => !e.definitelyDead && e.health > 0));
331
+ if (target) {
332
+ gameState.spectator.registerPowerTarget(entity, target, board, hero, otherHero);
333
+ const minionTier = gameState.cardsData.getTavernLevel(target.cardId);
334
+ const targetTier = entity.cardId === "BG24_719" ? minionTier + 1 : minionTier + 2;
335
+ const maxTier = !!((_p = gameState.anomalies) === null || _p === void 0 ? void 0 : _p.includes("BG27_Anomaly_504"))
336
+ ? 7
337
+ : 6;
338
+ const newMinionId = gameState.cardsData.getRandomMinionForTavernTier(Math.min(maxTier, targetTier));
339
+ const targetBoard = board.includes(target) ? board : otherBoard;
340
+ const targetHero = board.includes(target) ? hero : otherHero;
341
+ const newMinion = (0, utils_2.buildSingleBoardEntity)(newMinionId, hero, board, gameState.allCards, targetHero.friendly, gameState.sharedState.currentEntityId++, false, gameState.cardsData, gameState.sharedState, null);
342
+ const index = targetBoard.indexOf(target);
343
+ targetBoard.splice(index, 1, newMinion);
344
+ gameState.spectator.registerPowerTarget(entity, newMinion, targetBoard, hero, otherHero);
345
+ }
346
+ break;
347
+ case "BGS_069":
348
+ case "TB_BaconUps_121":
349
+ const numberOfTribes = extractUniqueTribes(board, gameState.allCards).length;
350
+ const amalgadonMultiplier = entity.cardId === "BGS_069" ? 1 : 2;
351
+ const totalAdapts = amalgadonMultiplier * numberOfTribes;
352
+ for (let i = 0; i < totalAdapts; i++) {
353
+ const adapts = [
354
+ "UNG_999t3",
355
+ "UNG_999t2",
356
+ "UNG_999t14",
357
+ "UNG_999t4",
358
+ ];
359
+ if (!entity.divineShield) {
360
+ adapts.push("UNG_999t8");
361
+ }
362
+ if (!entity.windfury) {
363
+ adapts.push("UNG_999t7");
364
+ }
365
+ if (!entity.taunt) {
366
+ adapts.push("UNG_999t6");
367
+ }
368
+ if (!entity.venomous && !entity.poisonous) {
369
+ adapts.push("UNG_999t13");
370
+ }
371
+ const adapt = (0, utils_1.pickRandom)(adapts);
372
+ switch (adapt) {
373
+ case "UNG_999t3":
374
+ (0, stats_1.modifyStats)(entity, 3, 0, board, hero, gameState);
375
+ break;
376
+ case "UNG_999t2":
377
+ entity.enchantments = (_q = entity.enchantments) !== null && _q !== void 0 ? _q : [];
378
+ entity.enchantments.push({
379
+ cardId: "UNG_999t2e",
380
+ timing: 0,
381
+ });
382
+ break;
383
+ case "UNG_999t7":
384
+ (0, windfury_1.updateWindfury)(entity, true, board, hero, otherHero, gameState);
385
+ break;
386
+ case "UNG_999t6":
387
+ (0, taunt_1.updateTaunt)(entity, true, board, hero, otherHero, gameState);
388
+ break;
389
+ case "UNG_999t13":
390
+ entity.poisonous = true;
391
+ break;
392
+ case "UNG_999t4":
393
+ (0, stats_1.modifyStats)(entity, 0, 3, board, hero, gameState);
394
+ break;
395
+ case "UNG_999t8":
396
+ (0, divine_shield_1.updateDivineShield)(entity, board, hero, otherHero, true, gameState);
397
+ break;
398
+ case "UNG_999t14":
399
+ (0, stats_1.modifyStats)(entity, 1, 1, board, hero, gameState);
400
+ break;
401
+ }
402
+ }
403
+ break;
404
+ case "BG28_550":
405
+ case "BG28_550_G":
406
+ const rodeoPerformerCardsToAdd = entity.cardId === "BG28_550_G" ? [null] : [null, null];
407
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, rodeoPerformerCardsToAdd, gameState);
408
+ break;
409
+ case "BG28_630":
410
+ case "BG28_630_G":
411
+ const eagillMultiplier = entity.cardId === "BG28_630" ? 1 : 2;
412
+ const eagillBoardTarget = (0, utils_1.pickRandom)(board.filter((e) => e.entityId !== entity.entityId));
413
+ if (eagillBoardTarget) {
414
+ (0, stats_1.modifyStats)(eagillBoardTarget, 2 * eagillMultiplier, 3 * eagillMultiplier, board, hero, gameState);
415
+ gameState.spectator.registerPowerTarget(entity, eagillBoardTarget, board, hero, otherHero);
416
+ }
417
+ const eagillHandTarget = (0, utils_1.pickRandom)(hero.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]; }));
418
+ if (eagillHandTarget) {
419
+ (0, stats_1.modifyStats)(eagillHandTarget, 2 * eagillMultiplier, 3 * eagillMultiplier, board, hero, gameState);
420
+ gameState.spectator.registerPowerTarget(entity, eagillHandTarget, board, hero, otherHero);
421
+ }
422
+ break;
423
+ case "TB_BaconShop_HERO_34_Buddy":
424
+ case "TB_BaconShop_HERO_34_Buddy_G":
425
+ const weebominationMultiplier = entity.cardId === "TB_BaconShop_HERO_34_Buddy" ? 1 : 2;
426
+ const weebominationTarget = (0, utils_1.pickRandom)(allMinions);
427
+ if (weebominationTarget) {
428
+ const heroMaxHealth = (_s = (_r = gameState.allCards.getCard(hero.cardId)) === null || _r === void 0 ? void 0 : _r.health) !== null && _s !== void 0 ? _s : 40;
429
+ const heroMissingHealth = heroMaxHealth - hero.hpLeft;
430
+ const weebominationBuff = weebominationMultiplier * heroMissingHealth;
431
+ (0, stats_1.modifyStats)(weebominationTarget, 0, weebominationBuff, board, hero, gameState);
432
+ gameState.spectator.registerPowerTarget(entity, weebominationTarget, board, hero, otherHero);
433
+ }
434
+ break;
435
+ case "BG29_845":
436
+ case "BG29_845_G":
437
+ const assistantGuardMultiplier = entity.cardId === "BG29_845" ? 1 : 2;
438
+ const assistantGuardTarget = (0, utils_1.pickRandom)(allMinions);
439
+ if (assistantGuardTarget) {
440
+ (0, taunt_1.updateTaunt)(assistantGuardTarget, true, board, hero, otherHero, gameState);
441
+ gameState.spectator.registerPowerTarget(entity, assistantGuardTarget, board, hero, otherHero);
442
+ }
443
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => !!e.taunt), hero, assistantGuardMultiplier * 2, assistantGuardMultiplier * 3, gameState);
444
+ break;
445
+ case "BG29_803":
446
+ case "BG29_803_G":
447
+ const goldshellMultiplier = entity.cardId === "BG29_803_G" ? 2 : 1;
448
+ (0, utils_2.addStatsToBoard)(entity, board.filter((e) => e.entityId != entity.entityId), hero, goldshellMultiplier * 2, goldshellMultiplier * 4, gameState, reference_data_1.Race[reference_data_1.Race.BEAST]);
449
+ break;
450
+ case "BG26_045":
451
+ case "BG26_045_G":
452
+ const shellWhistlerCardsToAdd = entity.cardId === "BG26_045_G" ? [null] : [null, null];
453
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, shellWhistlerCardsToAdd, gameState);
454
+ break;
455
+ case "BG25_155":
456
+ case "BG25_155_G":
457
+ const gemSmugglerBloodGems = entity.cardId === "BG25_155" ? 1 : 2;
458
+ board
459
+ .filter((e) => e.entityId !== entity.entityId)
460
+ .forEach((e) => (0, blood_gems_1.playBloodGemsOn)(entity, e, gemSmugglerBloodGems, board, hero, gameState));
461
+ break;
462
+ case "BG28_303":
463
+ case "BG28_303_G":
464
+ const disguisedGraverobberTarget = (0, utils_1.pickRandomAlive)(board.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.UNDEAD, gameState.allCards)));
465
+ if (disguisedGraverobberTarget) {
466
+ const disguisedGraverobberNumberOfCopies = entity.cardId === "BG28_303" ? 1 : 2;
467
+ disguisedGraverobberTarget.definitelyDead = true;
468
+ const copies = Array.from({ length: disguisedGraverobberNumberOfCopies }).map((_) => disguisedGraverobberTarget.cardId);
469
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, copies, gameState);
470
+ }
471
+ break;
472
+ case "BGDUO_104":
473
+ case "BGDUO_104_G":
474
+ const playerState = (0, utils_2.getPlayerState)(gameState.gameState, hero);
475
+ if (playerState) {
476
+ const cardsToAdd = entity.cardId === "BGDUO_104"
477
+ ? ["GAME_005"]
478
+ : ["GAME_005", "GAME_005"];
479
+ (0, cards_in_hand_1.addCardsInHand)(playerState.player, playerState.board, cardsToAdd, gameState);
480
+ }
481
+ break;
482
+ case "BGDUO_111":
483
+ case "BGDUO_111_G":
484
+ const cardsToAdd = entity.cardId === "BGDUO_111"
485
+ ? ["BG20_GEM"]
486
+ : ["BG20_GEM", "BG20_GEM"];
487
+ (0, cards_in_hand_1.addCardsInHand)(gameState.gameState.player.player, gameState.gameState.player.board, cardsToAdd, gameState);
488
+ if (gameState.gameState.player.teammate) {
489
+ (0, cards_in_hand_1.addCardsInHand)(gameState.gameState.player.teammate.player, gameState.gameState.player.teammate.board, cardsToAdd, gameState);
490
+ }
491
+ break;
492
+ case "BGDUO_119":
493
+ case "BGDUO_119_G":
494
+ const conductorTarget = (0, utils_1.pickRandom)(allMinions.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.ELEMENTAL, gameState.allCards)));
495
+ if (!!conductorTarget) {
496
+ const targetBoard = board.includes(conductorTarget) ? board : otherBoard;
497
+ const targetHero = board.includes(conductorTarget) ? hero : otherHero;
498
+ const multiplier = entity.cardId === "BGDUO_119" ? 1 : 2;
499
+ const attackStats = 2 * ((_t = entity.scriptDataNum1) !== null && _t !== void 0 ? _t : 1) * multiplier;
500
+ const healthStats = 2 * ((_u = entity.scriptDataNum1) !== null && _u !== void 0 ? _u : 1) * multiplier;
501
+ (0, stats_1.modifyStats)(conductorTarget, attackStats, healthStats, targetBoard, targetHero, gameState);
502
+ gameState.spectator.registerPowerTarget(entity, conductorTarget, targetBoard, hero, otherHero);
503
+ }
504
+ break;
505
+ case "BGDUO_HERO_100_Buddy":
506
+ case "BGDUO_HERO_100_Buddy_G":
507
+ const facelessOneCardsToAdd = entity.cardId === "BGDUO_HERO_100_Buddy" ? [null] : [null, null];
508
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, facelessOneCardsToAdd, gameState);
509
+ break;
510
+ case "TB_BaconShop_HERO_91_Buddy":
511
+ case "TB_BaconShop_HERO_91_Buddy_G":
512
+ const phyreszCardsToAdd = entity.cardId === "TB_BaconShop_HERO_91_Buddy" ? [null] : [null, null];
513
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, phyreszCardsToAdd, gameState);
514
+ break;
515
+ case "TB_BaconShop_HERO_23_Buddy":
516
+ case "TB_BaconShop_HERO_23_Buddy_G":
517
+ const muckslingerCardsToAdd = entity.cardId === "TB_BaconShop_HERO_23_Buddy"
518
+ ? [(0, utils_1.pickRandom)(gameState.cardsData.battlecryMinions)]
519
+ : [
520
+ (0, utils_1.pickRandom)(gameState.cardsData.battlecryMinions),
521
+ (0, utils_1.pickRandom)(gameState.cardsData.battlecryMinions),
522
+ ];
523
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, muckslingerCardsToAdd, gameState);
524
+ break;
525
+ case "BG29_861":
526
+ case "BG29_861_G":
527
+ const barrendsBrawlerCardsToAdd = entity.cardId === "BG29_861"
528
+ ? [(0, utils_1.pickRandom)(gameState.cardsData.deathrattleMinions)]
529
+ : [
530
+ (0, utils_1.pickRandom)(gameState.cardsData.deathrattleMinions),
531
+ (0, utils_1.pickRandom)(gameState.cardsData.deathrattleMinions),
532
+ ];
533
+ (0, cards_in_hand_1.addCardsInHand)(hero, board, barrendsBrawlerCardsToAdd, gameState);
534
+ break;
535
+ case "TB_BaconShop_HERO_56_Buddy":
536
+ case "TB_BaconShop_HERO_56_Buddy_G":
537
+ const vaelastraszBonus = entity.cardId === "TB_BaconShop_HERO_56_Buddy_G" ? 6 : 3;
538
+ board
539
+ .filter((e) => e.entityId !== entity.entityId)
540
+ .forEach((e) => {
541
+ (0, stats_1.modifyStats)(e, vaelastraszBonus, vaelastraszBonus, board, hero, gameState);
597
542
  });
598
- }
599
- break;
600
- case "TB_BaconShop_HERO_18_Buddy":
601
- case "TB_BaconShop_HERO_18_Buddy_G":
602
- const tuskarrTarget = (0, utils_1.pickRandom)(allMinions);
603
- if (tuskarrTarget) {
604
- gameState.spectator.registerPowerTarget(entity, tuskarrTarget, board, null, null);
605
- const buffMultiplier = entity.cardId === "TB_BaconShop_HERO_18_Buddy" ? 1 : 2;
606
- const attackBuff = ((_w = hero.globalInfo.PiratesPlayedThisGame) !== null && _w !== void 0 ? _w : 0) * buffMultiplier;
607
- const healthBuff = ((_x = hero.globalInfo.PiratesPlayedThisGame) !== null && _x !== void 0 ? _x : 0) * buffMultiplier;
608
- (0, stats_1.modifyStats)(tuskarrTarget, attackBuff, healthBuff, board, hero, gameState);
609
- }
610
- break;
611
- case "BG30_127":
612
- case "BG30_127_G":
613
- if (board.length > 0) {
614
- const targets = board.filter((e) => gameState.cardsData.getTavernLevel(e.cardId) <= 3);
615
- if (targets.length > 0) {
616
- const multiplier = entity.cardId === "BG30_127" ? 1 : 2;
617
- targets.forEach((target) => {
618
- (0, stats_1.modifyStats)(target, multiplier * 2, multiplier * 1, board, hero, gameState);
619
- gameState.spectator.registerPowerTarget(entity, target, board, hero, otherHero);
543
+ break;
544
+ case "BG23_HERO_306_Buddy":
545
+ case "BG23_HERO_306_Buddy_G":
546
+ const nathanosTarget = (0, utils_1.pickRandom)(board);
547
+ if (nathanosTarget) {
548
+ gameState.spectator.registerPowerTarget(entity, nathanosTarget, board, null, null);
549
+ nathanosTarget.definitelyDead = true;
550
+ const buffMultiplier = entity.cardId === "BG23_HERO_306_Buddy" ? 1 : 2;
551
+ const attackBuff = nathanosTarget.attack * buffMultiplier;
552
+ const healthBuff = nathanosTarget.health * buffMultiplier;
553
+ const buffTargets = (0, attack_1.getNeighbours)(board, nathanosTarget);
554
+ buffTargets.forEach((e) => {
555
+ (0, stats_1.modifyStats)(e, attackBuff, healthBuff, board, hero, gameState);
556
+ gameState.spectator.registerPowerTarget(entity, e, board, null, null);
620
557
  });
621
558
  }
622
- }
623
- break;
624
- case "BG30_104":
625
- case "BG30_104_G":
626
- if (board.length > 0) {
627
- const transformedInto = gameState.cardsData.getRandomMinionForTavernTier(3);
628
- const premiumDbfId = gameState.allCards.getCard(transformedInto).battlegroundsPremiumDbfId;
629
- const goldenCardId = gameState.allCards.getCard(premiumDbfId).id;
630
- const currentIndex = board.findIndex((e) => e.entityId === entity.entityId);
631
- const currentIndexFromRight = board.length - currentIndex - 1;
632
- board.splice(currentIndex, 1);
633
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(goldenCardId, 1, board, hero, otherBoard, otherHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, entity.friendly, false);
634
- const spawns = (0, spawns_1.performEntitySpawns)(newMinions, board, hero, entity, currentIndexFromRight, otherBoard, otherHero, gameState);
635
- }
636
- break;
637
- case "BG30_850":
638
- case "BG30_850_G":
639
- const newMinions = (0, deathrattle_spawns_1.spawnEntities)(entity.cardId === "BG30_850_G"
640
- ? "BG_ICC_026t_G"
641
- : "BG_ICC_026t", 1, board, hero, otherBoard, otherHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, entity.friendly, false);
642
- const indexFromRight = board.length - board.findIndex((e) => e.entityId === entity.entityId) - 1;
643
- const spawns = (0, spawns_1.performEntitySpawns)(newMinions, board, hero, entity, indexFromRight, otherBoard, otherHero, gameState);
644
- break;
645
- case "BG30_756":
646
- case "BG30_756_G":
647
- const wandererTarget = (0, utils_1.pickRandom)(board.filter((e) => (0, utils_2.hasCorrectTribe)(e, hero, reference_data_1.Race.MURLOC, gameState.allCards)));
648
- if (!!wandererTarget) {
649
- const wandererMultiplier = entity.cardId === "BG30_756" ? 1 : 2;
650
- wandererTarget.taunt = true;
651
- (0, stats_1.modifyStats)(wandererTarget, wandererMultiplier * 3, wandererMultiplier * 3, board, hero, gameState);
652
- }
653
- break;
654
- default:
655
- const hasBattlecry = (_z = (_y = gameState.allCards
656
- .getCard(entity.cardId)) === null || _y === void 0 ? void 0 : _y.mechanics) === null || _z === void 0 ? void 0 : _z.includes(reference_data_1.GameTag[reference_data_1.GameTag.BATTLECRY]);
657
- hasTriggered = hasBattlecry;
658
- break;
559
+ break;
560
+ case "TB_BaconShop_HERO_18_Buddy":
561
+ case "TB_BaconShop_HERO_18_Buddy_G":
562
+ const tuskarrTarget = (0, utils_1.pickRandom)(allMinions);
563
+ if (tuskarrTarget) {
564
+ gameState.spectator.registerPowerTarget(entity, tuskarrTarget, board, null, null);
565
+ const buffMultiplier = entity.cardId === "TB_BaconShop_HERO_18_Buddy" ? 1 : 2;
566
+ const attackBuff = ((_v = hero.globalInfo.PiratesPlayedThisGame) !== null && _v !== void 0 ? _v : 0) * buffMultiplier;
567
+ const healthBuff = ((_w = hero.globalInfo.PiratesPlayedThisGame) !== null && _w !== void 0 ? _w : 0) * buffMultiplier;
568
+ (0, stats_1.modifyStats)(tuskarrTarget, attackBuff, healthBuff, board, hero, gameState);
569
+ }
570
+ break;
571
+ case "BG30_127":
572
+ case "BG30_127_G":
573
+ if (board.length > 0) {
574
+ const targets = board.filter((e) => gameState.cardsData.getTavernLevel(e.cardId) <= 3);
575
+ if (targets.length > 0) {
576
+ const multiplier = entity.cardId === "BG30_127" ? 1 : 2;
577
+ targets.forEach((target) => {
578
+ (0, stats_1.modifyStats)(target, multiplier * 2, multiplier * 1, board, hero, gameState);
579
+ gameState.spectator.registerPowerTarget(entity, target, board, hero, otherHero);
580
+ });
581
+ }
582
+ }
583
+ break;
584
+ case "BG30_104":
585
+ case "BG30_104_G":
586
+ if (board.length > 0) {
587
+ const transformedInto = gameState.cardsData.getRandomMinionForTavernTier(3);
588
+ const premiumDbfId = gameState.allCards.getCard(transformedInto).battlegroundsPremiumDbfId;
589
+ const goldenCardId = gameState.allCards.getCard(premiumDbfId).id;
590
+ const currentIndex = board.findIndex((e) => e.entityId === entity.entityId);
591
+ const currentIndexFromRight = board.length - currentIndex - 1;
592
+ board.splice(currentIndex, 1);
593
+ const newMinions = (0, deathrattle_spawns_1.spawnEntities)(goldenCardId, 1, board, hero, otherBoard, otherHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, entity.friendly, false);
594
+ const spawns = (0, spawns_1.performEntitySpawns)(newMinions, board, hero, entity, currentIndexFromRight, otherBoard, otherHero, gameState);
595
+ }
596
+ break;
597
+ case "BG30_850":
598
+ case "BG30_850_G":
599
+ const newMinions = (0, deathrattle_spawns_1.spawnEntities)(entity.cardId === "BG30_850_G"
600
+ ? "BG_ICC_026t_G"
601
+ : "BG_ICC_026t", 1, board, hero, otherBoard, otherHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, entity.friendly, false);
602
+ const indexFromRight = board.length - board.findIndex((e) => e.entityId === entity.entityId) - 1;
603
+ const spawns = (0, spawns_1.performEntitySpawns)(newMinions, board, hero, entity, indexFromRight, otherBoard, otherHero, gameState);
604
+ break;
605
+ default:
606
+ const hasBattlecry = (_y = (_x = gameState.allCards
607
+ .getCard(entity.cardId)) === null || _x === void 0 ? void 0 : _x.mechanics) === null || _y === void 0 ? void 0 : _y.includes(reference_data_1.GameTag[reference_data_1.GameTag.BATTLECRY]);
608
+ hasTriggered = hasBattlecry;
609
+ break;
610
+ }
659
611
  }
660
612
  if (hasTriggered) {
661
613
  afterBattlecryTriggered(entity, board, hero, otherBoard, otherHero, gameState);
@@ -664,19 +616,18 @@ const triggerBattlecry = (board, hero, entity, otherBoard, otherHero, gameState)
664
616
  };
665
617
  exports.triggerBattlecry = triggerBattlecry;
666
618
  const afterBattlecryTriggered = (entity, board, hero, otherBoard, otherHero, gameState) => {
667
- board
668
- .filter((e) => e.cardId === "BGS_041" ||
669
- e.cardId === "TB_BaconUps_109")
670
- .forEach((e) => {
671
- const buff = entity.cardId === "BGS_041" ? 1 : 2;
672
- (0, utils_2.addStatsToBoard)(e, board, hero, buff, buff, gameState, reference_data_1.Race[reference_data_1.Race.DRAGON]);
673
- });
674
- board
675
- .filter((e) => e.cardId === "BG25_040" || e.cardId === "BG25_040_G")
676
- .forEach((e) => {
677
- const buff = e.cardId === "BG25_040" ? 1 : 2;
678
- (0, stats_1.modifyStats)(e, buff, buff, board, hero, gameState);
679
- });
619
+ for (const boardEntity of board) {
620
+ const onBattlecryTriggeredImpl = _card_mappings_1.cardMappings[boardEntity.cardId];
621
+ if ((0, card_interface_1.hasOnBattlecryTriggered)(onBattlecryTriggeredImpl)) {
622
+ onBattlecryTriggeredImpl.onBattlecryTriggered(boardEntity, {
623
+ board: board,
624
+ hero: hero,
625
+ otherBoard: otherBoard,
626
+ otherHero: otherHero,
627
+ gameState: gameState,
628
+ });
629
+ }
630
+ }
680
631
  };
681
632
  const extractUniqueTribes = (board, allCards) => {
682
633
  const boardReferenceCards = board.map((m) => allCards.getCard(m.cardId));