@firestone-hs/simulate-bgs-battle 1.1.621 → 1.1.623

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 (459) hide show
  1. package/dist/board-entity.d.ts +1 -0
  2. package/dist/board-entity.js.map +1 -1
  3. package/dist/cards/cards-data.d.ts +3 -1
  4. package/dist/cards/cards-data.js +8 -0
  5. package/dist/cards/cards-data.js.map +1 -1
  6. package/dist/cards/impl/_card-mappings.js +40 -0
  7. package/dist/cards/impl/_card-mappings.js.map +1 -1
  8. package/dist/cards/impl/bg-spell/murkys-fish.d.ts +2 -0
  9. package/dist/cards/impl/bg-spell/murkys-fish.js +21 -0
  10. package/dist/cards/impl/bg-spell/murkys-fish.js.map +1 -0
  11. package/dist/cards/impl/bg-spell/sharing-is-caring.js.map +1 -1
  12. package/dist/cards/impl/bg-spell/shiny-ring.js.map +1 -1
  13. package/dist/cards/impl/bg-spell/toxic-tumbleweed.js.map +1 -1
  14. package/dist/cards/impl/hero-power/aim-high.js.map +1 -1
  15. package/dist/cards/impl/hero-power/aim-left.js.map +1 -1
  16. package/dist/cards/impl/hero-power/aim-low.js.map +1 -1
  17. package/dist/cards/impl/hero-power/aim-right.js.map +1 -1
  18. package/dist/cards/impl/hero-power/earth-invocation.js.map +1 -1
  19. package/dist/cards/impl/hero-power/embrace-your-rage.js.map +1 -1
  20. package/dist/cards/impl/hero-power/fire-invocation.js.map +1 -1
  21. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.d.ts +2 -0
  22. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.js +15 -0
  23. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.js.map +1 -0
  24. package/dist/cards/impl/hero-power/fragrant-phylactery.js +8 -17
  25. package/dist/cards/impl/hero-power/fragrant-phylactery.js.map +1 -1
  26. package/dist/cards/impl/hero-power/glorious-gloop.js.map +1 -1
  27. package/dist/cards/impl/hero-power/lightning-invocation.js.map +1 -1
  28. package/dist/cards/impl/hero-power/rapid-reanimation.js.map +1 -1
  29. package/dist/cards/impl/hero-power/reborn-rites.js.map +1 -1
  30. package/dist/cards/impl/hero-power/tentacular.js.map +1 -1
  31. package/dist/cards/impl/hero-power/water-invocation.js.map +1 -1
  32. package/dist/cards/impl/hero-power/wax-warband.js +1 -1
  33. package/dist/cards/impl/hero-power/wax-warband.js.map +1 -1
  34. package/dist/cards/impl/minion/admiral-eliza-goreblade.js.map +1 -1
  35. package/dist/cards/impl/minion/all-seeing-elder.js.map +1 -1
  36. package/dist/cards/impl/minion/alleycat.js.map +1 -1
  37. package/dist/cards/impl/minion/amber-guardian.js.map +1 -1
  38. package/dist/cards/impl/minion/amplifying-lightspawn.js.map +1 -1
  39. package/dist/cards/impl/minion/anubarak-nerubian-king.js.map +1 -1
  40. package/dist/cards/impl/minion/apprentice-of-sefin.js.map +1 -1
  41. package/dist/cards/impl/minion/arcane-cannoneer.js.map +1 -1
  42. package/dist/cards/impl/minion/archimonde.js.map +1 -1
  43. package/dist/cards/impl/minion/arid-atrocity.js.map +1 -1
  44. package/dist/cards/impl/minion/ashen-corruptor.js.map +1 -1
  45. package/dist/cards/impl/minion/assistant-guard.js.map +1 -1
  46. package/dist/cards/impl/minion/audacious-anchor.js.map +1 -1
  47. package/dist/cards/impl/minion/auto-assembler-enchantment.js.map +1 -1
  48. package/dist/cards/impl/minion/auto-assembler.js.map +1 -1
  49. package/dist/cards/impl/minion/avalanche-caller.js.map +1 -1
  50. package/dist/cards/impl/minion/azsharan-cutlassier.d.ts +2 -0
  51. package/dist/cards/impl/minion/azsharan-cutlassier.js +12 -0
  52. package/dist/cards/impl/minion/azsharan-cutlassier.js.map +1 -0
  53. package/dist/cards/impl/minion/baneling.js.map +1 -1
  54. package/dist/cards/impl/minion/bannerboar.js.map +1 -1
  55. package/dist/cards/impl/minion/battlecruiser.js.map +1 -1
  56. package/dist/cards/impl/minion/beetle.js.map +1 -1
  57. package/dist/cards/impl/minion/bellowing-tyrant.js.map +1 -1
  58. package/dist/cards/impl/minion/bigwig-bandit.js.map +1 -1
  59. package/dist/cards/impl/minion/bile-spitter.js.map +1 -1
  60. package/dist/cards/impl/minion/bird-buddy.js.map +1 -1
  61. package/dist/cards/impl/minion/blazing-skyfin.js.map +1 -1
  62. package/dist/cards/impl/minion/bloodsnout-warlord.js.map +1 -1
  63. package/dist/cards/impl/minion/blue-whelp.js.map +1 -1
  64. package/dist/cards/impl/minion/boar-gamer.js.map +1 -1
  65. package/dist/cards/impl/minion/bongo-bopper.js.map +1 -1
  66. package/dist/cards/impl/minion/bonker.js.map +1 -1
  67. package/dist/cards/impl/minion/briarback-bookie.js.map +1 -1
  68. package/dist/cards/impl/minion/bronze-steward.js.map +1 -1
  69. package/dist/cards/impl/minion/bubble-gunner.js.map +1 -1
  70. package/dist/cards/impl/minion/buzzing-vermin.js.map +1 -1
  71. package/dist/cards/impl/minion/cadaver-caretaker.js.map +1 -1
  72. package/dist/cards/impl/minion/campfire-shadow.js.map +1 -1
  73. package/dist/cards/impl/minion/canopy-swinger.js.map +1 -1
  74. package/dist/cards/impl/minion/captain-bonerender.js.map +1 -1
  75. package/dist/cards/impl/minion/carapace-raiser.js.map +1 -1
  76. package/dist/cards/impl/minion/carbonic-copy.js.map +1 -1
  77. package/dist/cards/impl/minion/carrier.js.map +1 -1
  78. package/dist/cards/impl/minion/champion-of-the-primus.js.map +1 -1
  79. package/dist/cards/impl/minion/charlga.js.map +1 -1
  80. package/dist/cards/impl/minion/charmwing.js.map +1 -1
  81. package/dist/cards/impl/minion/choral-mrrrglr.js.map +1 -1
  82. package/dist/cards/impl/minion/clunker-junker.js.map +1 -1
  83. package/dist/cards/impl/minion/coilskar-sapper.js.map +1 -1
  84. package/dist/cards/impl/minion/coldlight-diver.js.map +1 -1
  85. package/dist/cards/impl/minion/colossus.js.map +1 -1
  86. package/dist/cards/impl/minion/corrupted-bristler.js.map +1 -1
  87. package/dist/cards/impl/minion/corrupted-myrmidon.js.map +1 -1
  88. package/dist/cards/impl/minion/cruise-controller.js.map +1 -1
  89. package/dist/cards/impl/minion/crystal-infuser-enchantment.js.map +1 -1
  90. package/dist/cards/impl/minion/cupcake-peddler.js.map +1 -1
  91. package/dist/cards/impl/minion/dastardly-drust.js.map +1 -1
  92. package/dist/cards/impl/minion/deadstomper.js.map +1 -1
  93. package/dist/cards/impl/minion/deathly-striker.js.map +1 -1
  94. package/dist/cards/impl/minion/defiant-shipwright.js.map +1 -1
  95. package/dist/cards/impl/minion/deflecto-bot.js.map +1 -1
  96. package/dist/cards/impl/minion/devout-hellcaller.js.map +1 -1
  97. package/dist/cards/impl/minion/diremuck-forager.js.map +1 -1
  98. package/dist/cards/impl/minion/divine-sparkbot.d.ts +2 -0
  99. package/dist/cards/impl/minion/divine-sparkbot.js +14 -0
  100. package/dist/cards/impl/minion/divine-sparkbot.js.map +1 -0
  101. package/dist/cards/impl/minion/drakkari-embalmer.js.map +1 -1
  102. package/dist/cards/impl/minion/dreaming-thornweaver.js.map +1 -1
  103. package/dist/cards/impl/minion/drustfallen-butcher.js.map +1 -1
  104. package/dist/cards/impl/minion/echoing-roar.js.map +1 -1
  105. package/dist/cards/impl/minion/efficient-engineer.js.map +1 -1
  106. package/dist/cards/impl/minion/elder-taggawag.js.map +1 -1
  107. package/dist/cards/impl/minion/electric-synthesizer.js.map +1 -1
  108. package/dist/cards/impl/minion/elite-navigator.js.map +1 -1
  109. package/dist/cards/impl/minion/exceptionnal-caretaker.js.map +1 -1
  110. package/dist/cards/impl/minion/expert-technician.d.ts +2 -0
  111. package/dist/cards/impl/minion/expert-technician.js +26 -0
  112. package/dist/cards/impl/minion/expert-technician.js.map +1 -0
  113. package/dist/cards/impl/minion/fairy-gillmother.js.map +1 -1
  114. package/dist/cards/impl/minion/fauna-whisperer.js.map +1 -1
  115. package/dist/cards/impl/minion/fire-forged-evoker.js.map +1 -1
  116. package/dist/cards/impl/minion/firescale-hoarder.js.map +1 -1
  117. package/dist/cards/impl/minion/fireworks-fanatic.js.map +1 -1
  118. package/dist/cards/impl/minion/flighty-scout.js.map +1 -1
  119. package/dist/cards/impl/minion/floating-watcher.js.map +1 -1
  120. package/dist/cards/impl/minion/flotsam-flinger.d.ts +1 -1
  121. package/dist/cards/impl/minion/flotsam-flinger.js.map +1 -1
  122. package/dist/cards/impl/minion/forest-rover.js.map +1 -1
  123. package/dist/cards/impl/minion/fountain-chiller.js.map +1 -1
  124. package/dist/cards/impl/minion/friendly-bouncer.d.ts +2 -0
  125. package/dist/cards/impl/minion/friendly-bouncer.js +25 -0
  126. package/dist/cards/impl/minion/friendly-bouncer.js.map +1 -0
  127. package/dist/cards/impl/minion/friendly-geist.js.map +1 -1
  128. package/dist/cards/impl/minion/frostwolf-lieutenant.d.ts +2 -0
  129. package/dist/cards/impl/minion/frostwolf-lieutenant.js +13 -0
  130. package/dist/cards/impl/minion/frostwolf-lieutenant.js.map +1 -0
  131. package/dist/cards/impl/minion/geared-guard.js.map +1 -1
  132. package/dist/cards/impl/minion/gem-rat.js.map +1 -1
  133. package/dist/cards/impl/minion/gem-smuggler.js.map +1 -1
  134. package/dist/cards/impl/minion/general-drakkisath.js.map +1 -1
  135. package/dist/cards/impl/minion/gentle-djinni.js.map +1 -1
  136. package/dist/cards/impl/minion/gentle-stag.js.map +1 -1
  137. package/dist/cards/impl/minion/gleaming-trader.js.map +1 -1
  138. package/dist/cards/impl/minion/glowgullet-warlord.js.map +1 -1
  139. package/dist/cards/impl/minion/glowing-cinder.js.map +1 -1
  140. package/dist/cards/impl/minion/goldgrubber.js.map +1 -1
  141. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js +1 -1
  142. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js.map +1 -1
  143. package/dist/cards/impl/minion/gormling-gourmet.js.map +1 -1
  144. package/dist/cards/impl/minion/grease-bot.js +1 -1
  145. package/dist/cards/impl/minion/grease-bot.js.map +1 -1
  146. package/dist/cards/impl/minion/greedy-snaketongue.js.map +1 -1
  147. package/dist/cards/impl/minion/greenskeeper.js.map +1 -1
  148. package/dist/cards/impl/minion/grimscale-elegist.js.map +1 -1
  149. package/dist/cards/impl/minion/gritty-headhunter.js.map +1 -1
  150. package/dist/cards/impl/minion/hackerfin.js.map +1 -1
  151. package/dist/cards/impl/minion/handless-forsaken.js.map +1 -1
  152. package/dist/cards/impl/minion/harmless-bonehead.js.map +1 -1
  153. package/dist/cards/impl/minion/hawkstrider-herald.js.map +1 -1
  154. package/dist/cards/impl/minion/hog-watcher.js.map +1 -1
  155. package/dist/cards/impl/minion/holo-rover.js.map +1 -1
  156. package/dist/cards/impl/minion/hot-springer.js.map +1 -1
  157. package/dist/cards/impl/minion/humming-bird.js.map +1 -1
  158. package/dist/cards/impl/minion/humongozz.js.map +1 -1
  159. package/dist/cards/impl/minion/hungry-snapjaw.js.map +1 -1
  160. package/dist/cards/impl/minion/hunter-of-gatherers.js.map +1 -1
  161. package/dist/cards/impl/minion/hydralisk.js.map +1 -1
  162. package/dist/cards/impl/minion/ignition-specialist.js.map +1 -1
  163. package/dist/cards/impl/minion/immortal.js.map +1 -1
  164. package/dist/cards/impl/minion/implant-subject.js.map +1 -1
  165. package/dist/cards/impl/minion/imposing-percussionist.js.map +1 -1
  166. package/dist/cards/impl/minion/impulsive-trickster.js.map +1 -1
  167. package/dist/cards/impl/minion/indomitable-mount.js.map +1 -1
  168. package/dist/cards/impl/minion/inspiring-underdog.js.map +1 -1
  169. package/dist/cards/impl/minion/interrogator-whitemane.js.map +1 -1
  170. package/dist/cards/impl/minion/irate-rooster.js.map +1 -1
  171. package/dist/cards/impl/minion/kalecgos-arcane-aspect.js.map +1 -1
  172. package/dist/cards/impl/minion/kangors-apprentice.js.map +1 -1
  173. package/dist/cards/impl/minion/karmic-chameleon.js.map +1 -1
  174. package/dist/cards/impl/minion/king-bagurgle.js.map +1 -1
  175. package/dist/cards/impl/minion/leeroy-the-reckless.js.map +1 -1
  176. package/dist/cards/impl/minion/lightfang-enforcer.js.map +1 -1
  177. package/dist/cards/impl/minion/lightfeather-screecher.js.map +1 -1
  178. package/dist/cards/impl/minion/lokholar-frostforger.js.map +1 -1
  179. package/dist/cards/impl/minion/lord-of-the-ruins.js.map +1 -1
  180. package/dist/cards/impl/minion/lost-city-looter.js.map +1 -1
  181. package/dist/cards/impl/minion/lovesick-balladist.js.map +1 -1
  182. package/dist/cards/impl/minion/low-flier.js.map +1 -1
  183. package/dist/cards/impl/minion/lurker.js.map +1 -1
  184. package/dist/cards/impl/minion/magicfin-apprentice.js.map +1 -1
  185. package/dist/cards/impl/minion/manasaber.js.map +1 -1
  186. package/dist/cards/impl/minion/mantid-queen.js.map +1 -1
  187. package/dist/cards/impl/minion/marquee-ticker.js.map +1 -1
  188. package/dist/cards/impl/minion/master-gadrin.d.ts +2 -0
  189. package/dist/cards/impl/minion/master-gadrin.js +20 -0
  190. package/dist/cards/impl/minion/master-gadrin.js.map +1 -0
  191. package/dist/cards/impl/minion/maw-caster.js.map +1 -1
  192. package/dist/cards/impl/minion/mecha-jaraxxus.js.map +1 -1
  193. package/dist/cards/impl/minion/mechagnome-interpreter.js +1 -1
  194. package/dist/cards/impl/minion/mechagnome-interpreter.js.map +1 -1
  195. package/dist/cards/impl/minion/mechanized-gift-horse.js.map +1 -1
  196. package/dist/cards/impl/minion/mechorse.js.map +1 -1
  197. package/dist/cards/impl/minion/menagerie-jug.js.map +1 -1
  198. package/dist/cards/impl/minion/metallic-hunter.js.map +1 -1
  199. package/dist/cards/impl/minion/misfit-dragonling.js.map +1 -1
  200. package/dist/cards/impl/minion/monstrosity.d.ts +2 -0
  201. package/dist/cards/impl/minion/monstrosity.js +13 -0
  202. package/dist/cards/impl/minion/monstrosity.js.map +1 -0
  203. package/dist/cards/impl/minion/monstrous-macaw.js.map +1 -1
  204. package/dist/cards/impl/minion/moonsteel-juggernaut.js.map +1 -1
  205. package/dist/cards/impl/minion/mothership.js.map +1 -1
  206. package/dist/cards/impl/minion/mummifier.js.map +1 -1
  207. package/dist/cards/impl/minion/murkbrine-expeditioner.js.map +1 -1
  208. package/dist/cards/impl/minion/murky-spash-fisher.d.ts +2 -0
  209. package/dist/cards/impl/minion/murky-spash-fisher.js +14 -0
  210. package/dist/cards/impl/minion/murky-spash-fisher.js.map +1 -0
  211. package/dist/cards/impl/minion/murky.js.map +1 -1
  212. package/dist/cards/impl/minion/mutalisk.js.map +1 -1
  213. package/dist/cards/impl/minion/mutated-lasher.js.map +1 -1
  214. package/dist/cards/impl/minion/mythrax.js.map +1 -1
  215. package/dist/cards/impl/minion/neon-agent.js.map +1 -1
  216. package/dist/cards/impl/minion/nerubian-deathswarmer.js.map +1 -1
  217. package/dist/cards/impl/minion/nest-swarmer.js.map +1 -1
  218. package/dist/cards/impl/minion/nether-drake.js.map +1 -1
  219. package/dist/cards/impl/minion/nightmare-par-tea-guest.js.map +1 -1
  220. package/dist/cards/impl/minion/nimble-hatchling.js.map +1 -1
  221. package/dist/cards/impl/minion/niuzao.js.map +1 -1
  222. package/dist/cards/impl/minion/noisul-of-the-many-faces.js.map +1 -1
  223. package/dist/cards/impl/minion/oozeling-gladiator.js.map +1 -1
  224. package/dist/cards/impl/minion/operatic-belcher.js.map +1 -1
  225. package/dist/cards/impl/minion/oranomonos-the-wilted.js +1 -1
  226. package/dist/cards/impl/minion/oranomonos-the-wilted.js.map +1 -1
  227. package/dist/cards/impl/minion/outback-smolderer.js.map +1 -1
  228. package/dist/cards/impl/minion/parched-wanderer.js.map +1 -1
  229. package/dist/cards/impl/minion/peggy-sturdybone.js.map +1 -1
  230. package/dist/cards/impl/minion/pilot-the-shredder.d.ts +2 -0
  231. package/dist/cards/impl/minion/pilot-the-shredder.js +33 -0
  232. package/dist/cards/impl/minion/pilot-the-shredder.js.map +1 -0
  233. package/dist/cards/impl/minion/piloted-whirl-o-tron.d.ts +2 -5
  234. package/dist/cards/impl/minion/piloted-whirl-o-tron.js +12 -3
  235. package/dist/cards/impl/minion/piloted-whirl-o-tron.js.map +1 -1
  236. package/dist/cards/impl/minion/poultron.js.map +1 -1
  237. package/dist/cards/impl/minion/primalfin-lookout.js.map +1 -1
  238. package/dist/cards/impl/minion/primeval-monstrosity.js.map +1 -1
  239. package/dist/cards/impl/minion/prized-promo-drake.js +1 -1
  240. package/dist/cards/impl/minion/prized-promo-drake.js.map +1 -1
  241. package/dist/cards/impl/minion/prodigious-tusker.js.map +1 -1
  242. package/dist/cards/impl/minion/rapscallion-recruiter.js.map +1 -1
  243. package/dist/cards/impl/minion/raptor-elder.js +1 -1
  244. package/dist/cards/impl/minion/raptor-elder.js.map +1 -1
  245. package/dist/cards/impl/minion/razorfen-geomancer.js.map +1 -1
  246. package/dist/cards/impl/minion/razorfen-vineweaver.js +1 -1
  247. package/dist/cards/impl/minion/razorfen-vineweaver.js.map +1 -1
  248. package/dist/cards/impl/minion/razorgore-the-untamed.js.map +1 -1
  249. package/dist/cards/impl/minion/reckless-cliffdiver.js.map +1 -1
  250. package/dist/cards/impl/minion/rickety-repairbot.js.map +1 -1
  251. package/dist/cards/impl/minion/ride-or-die.js.map +1 -1
  252. package/dist/cards/impl/minion/ripsnarl-captain.js.map +1 -1
  253. package/dist/cards/impl/minion/roach.js.map +1 -1
  254. package/dist/cards/impl/minion/roadboar.js +1 -1
  255. package/dist/cards/impl/minion/roadboar.js.map +1 -1
  256. package/dist/cards/impl/minion/rodeo-performer.js.map +1 -1
  257. package/dist/cards/impl/minion/ruins-renovator.js.map +1 -1
  258. package/dist/cards/impl/minion/runed-progenitor.js.map +1 -1
  259. package/dist/cards/impl/minion/rylak-metalhead.js.map +1 -1
  260. package/dist/cards/impl/minion/salty-hog.js.map +1 -1
  261. package/dist/cards/impl/minion/sand-swirler.js.map +1 -1
  262. package/dist/cards/impl/minion/sandy.js.map +1 -1
  263. package/dist/cards/impl/minion/sanguine-refiner.js.map +1 -1
  264. package/dist/cards/impl/minion/sanlayn-scribe.js.map +1 -1
  265. package/dist/cards/impl/minion/scallywag.js.map +1 -1
  266. package/dist/cards/impl/minion/scourge-harvester.js.map +1 -1
  267. package/dist/cards/impl/minion/selfless-hero.js.map +1 -1
  268. package/dist/cards/impl/minion/shadowdancer.js.map +1 -1
  269. package/dist/cards/impl/minion/shadowy-construct.d.ts +2 -0
  270. package/dist/cards/impl/minion/shadowy-construct.js +17 -0
  271. package/dist/cards/impl/minion/shadowy-construct.js.map +1 -0
  272. package/dist/cards/impl/minion/sharp-eyed-sabretooth.js.map +1 -1
  273. package/dist/cards/impl/minion/sharptooth-snapper.js.map +1 -1
  274. package/dist/cards/impl/minion/shell-collector.js.map +1 -1
  275. package/dist/cards/impl/minion/ship-master-eudora.js.map +1 -1
  276. package/dist/cards/impl/minion/shipwrecked-rascal.js.map +1 -1
  277. package/dist/cards/impl/minion/showy-cyclist.js.map +1 -1
  278. package/dist/cards/impl/minion/silent-enforcer.js +2 -1
  279. package/dist/cards/impl/minion/silent-enforcer.js.map +1 -1
  280. package/dist/cards/impl/minion/silithid-burrower.js.map +1 -1
  281. package/dist/cards/impl/minion/silky-shimmermoth.js.map +1 -1
  282. package/dist/cards/impl/minion/silver-handed-recruit.js.map +1 -1
  283. package/dist/cards/impl/minion/sinodorei-straight-shot.js.map +1 -1
  284. package/dist/cards/impl/minion/skulking-bristlemane.js.map +1 -1
  285. package/dist/cards/impl/minion/sky-pirate-flagbearer-enchantment.js.map +1 -1
  286. package/dist/cards/impl/minion/sky-pirate-flagbearer.js.map +1 -1
  287. package/dist/cards/impl/minion/sleepy-supporter.js.map +1 -1
  288. package/dist/cards/impl/minion/slumber-sorcerer.js.map +1 -1
  289. package/dist/cards/impl/minion/sly-raptor.js +1 -1
  290. package/dist/cards/impl/minion/sly-raptor.js.map +1 -1
  291. package/dist/cards/impl/minion/smolderwing.js.map +1 -1
  292. package/dist/cards/impl/minion/snack-vendor.d.ts +2 -0
  293. package/dist/cards/impl/minion/snack-vendor.js +20 -0
  294. package/dist/cards/impl/minion/snack-vendor.js.map +1 -0
  295. package/dist/cards/impl/minion/soul-rewinder.js.map +1 -1
  296. package/dist/cards/impl/minion/soulsplitter.js.map +1 -1
  297. package/dist/cards/impl/minion/spacefarer.js.map +1 -1
  298. package/dist/cards/impl/minion/spirited-whimsydrake.js.map +1 -1
  299. package/dist/cards/impl/minion/springy-spriggan.js.map +1 -1
  300. package/dist/cards/impl/minion/stitched-salvager.js.map +1 -1
  301. package/dist/cards/impl/minion/stomping-stegodon-enchantment.js.map +1 -1
  302. package/dist/cards/impl/minion/stomping-stegodon.d.ts +1 -1
  303. package/dist/cards/impl/minion/stomping-stegodon.js +1 -1
  304. package/dist/cards/impl/minion/stomping-stegodon.js.map +1 -1
  305. package/dist/cards/impl/minion/stoneshell-guardian.d.ts +2 -0
  306. package/dist/cards/impl/minion/stoneshell-guardian.js +35 -0
  307. package/dist/cards/impl/minion/stoneshell-guardian.js.map +1 -0
  308. package/dist/cards/impl/minion/stormpike-lieutenant.d.ts +2 -0
  309. package/dist/cards/impl/minion/stormpike-lieutenant.js +13 -0
  310. package/dist/cards/impl/minion/stormpike-lieutenant.js.map +1 -0
  311. package/dist/cards/impl/minion/stray-satyr.js.map +1 -1
  312. package/dist/cards/impl/minion/sun-screener.js.map +1 -1
  313. package/dist/cards/impl/minion/super-constructor.d.ts +2 -0
  314. package/dist/cards/impl/minion/super-constructor.js +13 -0
  315. package/dist/cards/impl/minion/super-constructor.js.map +1 -0
  316. package/dist/cards/impl/minion/surfing-slyvar.js.map +1 -1
  317. package/dist/cards/impl/minion/swampstriker.js.map +1 -1
  318. package/dist/cards/impl/minion/tamuzo.d.ts +2 -0
  319. package/dist/cards/impl/minion/tamuzo.js +12 -0
  320. package/dist/cards/impl/minion/tamuzo.js.map +1 -0
  321. package/dist/cards/impl/minion/the-uninvited-guest.js.map +1 -1
  322. package/dist/cards/impl/minion/thorncaller.js.map +1 -1
  323. package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -1
  324. package/dist/cards/impl/minion/three-lil-quilboar.js.map +1 -1
  325. package/dist/cards/impl/minion/thundering-abomination.js.map +1 -1
  326. package/dist/cards/impl/minion/tichondrius.js.map +1 -1
  327. package/dist/cards/impl/minion/transmuted-bramblewitch.js.map +1 -1
  328. package/dist/cards/impl/minion/tunnel-blaster.js.map +1 -1
  329. package/dist/cards/impl/minion/turquoise-skitterer.js.map +1 -1
  330. package/dist/cards/impl/minion/tusked-camper.js.map +1 -1
  331. package/dist/cards/impl/minion/twilight-primordium.js.map +1 -1
  332. package/dist/cards/impl/minion/twilight-watcher.js +1 -1
  333. package/dist/cards/impl/minion/twilight-watcher.js.map +1 -1
  334. package/dist/cards/impl/minion/ultralisk.js.map +1 -1
  335. package/dist/cards/impl/minion/ultraviolet-ascendant.js.map +1 -1
  336. package/dist/cards/impl/minion/vaelastrasz.d.ts +2 -5
  337. package/dist/cards/impl/minion/vaelastrasz.js +11 -9
  338. package/dist/cards/impl/minion/vaelastrasz.js.map +1 -1
  339. package/dist/cards/impl/minion/valiant-tiger.js.map +1 -1
  340. package/dist/cards/impl/minion/vengeful-protector.js.map +1 -1
  341. package/dist/cards/impl/minion/void-earl.js.map +1 -1
  342. package/dist/cards/impl/minion/void-ray.js.map +1 -1
  343. package/dist/cards/impl/minion/vorkai-guardian.js.map +1 -1
  344. package/dist/cards/impl/minion/wandering-wight.js.map +1 -1
  345. package/dist/cards/impl/minion/weebomination.d.ts +2 -0
  346. package/dist/cards/impl/minion/weebomination.js +22 -0
  347. package/dist/cards/impl/minion/weebomination.js.map +1 -0
  348. package/dist/cards/impl/minion/whelp-smuggler.js.map +1 -1
  349. package/dist/cards/impl/minion/whirring-protector-enchantment.js.map +1 -1
  350. package/dist/cards/impl/minion/whirring-protector.js.map +1 -1
  351. package/dist/cards/impl/minion/wildfire-elemental.js.map +1 -1
  352. package/dist/cards/impl/minion/wisp-in-the-shell.js.map +1 -1
  353. package/dist/cards/impl/minion/wrathscale-rogue.js.map +1 -1
  354. package/dist/cards/impl/minion/yorik-smite.js.map +1 -1
  355. package/dist/cards/impl/minion/young-murk-eye.js +9 -9
  356. package/dist/cards/impl/minion/young-murk-eye.js.map +1 -1
  357. package/dist/cards/impl/minion/yrel.js.map +1 -1
  358. package/dist/cards/impl/minion/yulon-fortune-granter.js.map +1 -1
  359. package/dist/cards/impl/minion/zergling.js.map +1 -1
  360. package/dist/cards/impl/quest-reward/righteous-charge.js.map +1 -1
  361. package/dist/cards/impl/trinket/all-purpose-kibble.js.map +1 -1
  362. package/dist/cards/impl/trinket/arm-of-the-empire.js.map +1 -1
  363. package/dist/cards/impl/trinket/artisanal-urn.js.map +1 -1
  364. package/dist/cards/impl/trinket/automaton-portrait.js.map +1 -1
  365. package/dist/cards/impl/trinket/baleful-incense.js.map +1 -1
  366. package/dist/cards/impl/trinket/bassgill-portrait.js.map +1 -1
  367. package/dist/cards/impl/trinket/battle-horn.js.map +1 -1
  368. package/dist/cards/impl/trinket/beetle-band.js.map +1 -1
  369. package/dist/cards/impl/trinket/bird-feeder.js.map +1 -1
  370. package/dist/cards/impl/trinket/crocheted-sungill.js.map +1 -1
  371. package/dist/cards/impl/trinket/divine-signet.js.map +1 -1
  372. package/dist/cards/impl/trinket/eclectic-shrine.js.map +1 -1
  373. package/dist/cards/impl/trinket/eternal-portrait.js.map +1 -1
  374. package/dist/cards/impl/trinket/faerie-dragon-scale.js.map +1 -1
  375. package/dist/cards/impl/trinket/fishy-sticker.js.map +1 -1
  376. package/dist/cards/impl/trinket/herald-sticker.js.map +1 -1
  377. package/dist/cards/impl/trinket/hoggy-bank.js.map +1 -1
  378. package/dist/cards/impl/trinket/hogwash-basin.js.map +1 -1
  379. package/dist/cards/impl/trinket/jarred-frostling.js.map +1 -1
  380. package/dist/cards/impl/trinket/karazhan-chess-set.js.map +1 -1
  381. package/dist/cards/impl/trinket/rivendare-portrait.js.map +1 -1
  382. package/dist/cards/impl/trinket/rusty-trident.js.map +1 -1
  383. package/dist/cards/impl/trinket/sthara-sticker.js.map +1 -1
  384. package/dist/cards/impl/trinket/unholy-sanctum.js.map +1 -1
  385. package/dist/cards/impl/trinket/valorous-medaillion.js.map +1 -1
  386. package/dist/cards/impl/trinket/vashjir-anemone.js.map +1 -1
  387. package/dist/cards/impl/trinket/yulon-sticker.js.map +1 -1
  388. package/dist/input-sanitation.js.map +1 -1
  389. package/dist/keywords/divine-shield.js +8 -3
  390. package/dist/keywords/divine-shield.js.map +1 -1
  391. package/dist/keywords/venomous.js.map +1 -1
  392. package/dist/services/card-ids.d.ts +33009 -0
  393. package/dist/services/card-ids.js +3 -0
  394. package/dist/services/card-ids.js.map +1 -0
  395. package/dist/services/utils.d.ts +3 -0
  396. package/dist/services/utils.js +25 -1
  397. package/dist/services/utils.js.map +1 -1
  398. package/dist/simulate-bgs-battle.js.map +1 -1
  399. package/dist/simulation/add-minion-to-board.js +1 -15
  400. package/dist/simulation/add-minion-to-board.js.map +1 -1
  401. package/dist/simulation/after-attack.js.map +1 -1
  402. package/dist/simulation/attack.js +0 -8
  403. package/dist/simulation/attack.js.map +1 -1
  404. package/dist/simulation/auras.js.map +1 -1
  405. package/dist/simulation/avenge.d.ts +1 -0
  406. package/dist/simulation/avenge.js +9 -1
  407. package/dist/simulation/avenge.js.map +1 -1
  408. package/dist/simulation/battlecries.js +5 -36
  409. package/dist/simulation/battlecries.js.map +1 -1
  410. package/dist/simulation/blood-gems.js.map +1 -1
  411. package/dist/simulation/cards-in-hand.js.map +1 -1
  412. package/dist/simulation/damage-effects.js.map +1 -1
  413. package/dist/simulation/death-effects.js +12 -0
  414. package/dist/simulation/death-effects.js.map +1 -1
  415. package/dist/simulation/deathrattle-effects.d.ts +0 -1
  416. package/dist/simulation/deathrattle-effects.js +3 -10
  417. package/dist/simulation/deathrattle-effects.js.map +1 -1
  418. package/dist/simulation/deathrattle-on-trigger.js.map +1 -1
  419. package/dist/simulation/deathrattle-orchestration.js.map +1 -1
  420. package/dist/simulation/deathrattle-spawns.js +3 -14
  421. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  422. package/dist/simulation/deathrattle-utils.js.map +1 -1
  423. package/dist/simulation/discover.js.map +1 -1
  424. package/dist/simulation/frenzy.js.map +1 -1
  425. package/dist/simulation/magnetize.js.map +1 -1
  426. package/dist/simulation/minion-death.js.map +1 -1
  427. package/dist/simulation/minion-kill.js.map +1 -1
  428. package/dist/simulation/on-attack.js.map +1 -1
  429. package/dist/simulation/on-being-attacked.js +14 -2
  430. package/dist/simulation/on-being-attacked.js.map +1 -1
  431. package/dist/simulation/quest.js.map +1 -1
  432. package/dist/simulation/reborn.js.map +1 -1
  433. package/dist/simulation/remembered-deathrattle.js.map +1 -1
  434. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  435. package/dist/simulation/secrets.d.ts +2 -2
  436. package/dist/simulation/secrets.js +6 -3
  437. package/dist/simulation/secrets.js.map +1 -1
  438. package/dist/simulation/spawn-fail.js +1 -2
  439. package/dist/simulation/spawn-fail.js.map +1 -1
  440. package/dist/simulation/spectator/game-action.js.map +1 -1
  441. package/dist/simulation/start-of-combat/soc-action-processor.js +0 -15
  442. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  443. package/dist/simulation/start-of-combat/soc-anomalies.js.map +1 -1
  444. package/dist/simulation/start-of-combat/soc-hero-power.js.map +1 -1
  445. package/dist/simulation/start-of-combat/soc-illidan-hero-power.js.map +1 -1
  446. package/dist/simulation/start-of-combat/soc-minion.js.map +1 -1
  447. package/dist/simulation/start-of-combat/soc-pre-combat-hero-power.js.map +1 -1
  448. package/dist/simulation/start-of-combat/soc-quest-reward.js.map +1 -1
  449. package/dist/simulation/start-of-combat/soc-secret.js.map +1 -1
  450. package/dist/simulation/start-of-combat/soc-trinket.js.map +1 -1
  451. package/dist/simulation/stats.js.map +1 -1
  452. package/dist/simulation/summon-when-space.js +47 -20
  453. package/dist/simulation/summon-when-space.js.map +1 -1
  454. package/dist/simulation/utils/golden.js.map +1 -1
  455. package/dist/utils.js.map +1 -1
  456. package/package.json +1 -1
  457. package/dist/cards/impl/minion/crabby.d.ts +0 -5
  458. package/dist/cards/impl/minion/crabby.js +0 -17
  459. package/dist/cards/impl/minion/crabby.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/simulation/discover.ts"],"names":[],"mappings":";;;AAGA,mDAAiD;AAEjD,mCAAsC;AAE/B,MAAM,aAAa,GAAG,CAC5B,IAAqB,EACrB,KAAoB,EACpB,MAAc,EACd,OAAiB,EACjB,SAAwB,EACvB,EAAE;IACH,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;QACrB,OAAO;KACP;IAED,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,QAAQ,MAAM,CAAC,MAAM,EAAE;YACtB,gBAAqC;YACrC;gBACC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,eAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,MAAM,eAAe,GAAG,OAAO;qBAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;qBAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM,eAAe,GAAG,OAAO;qBAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;qBAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,eAAe,GAAG,gBAAgB,EAClC,eAAe,GAAG,gBAAgB,EAClC,KAAK,EACL,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,MAAM;SACP;KACD;IAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAiD,CAChE,CAAC,MAAM,CAAC;IACT,IAAI,CAAC,CAAC,kBAAkB,EAAE;QACzB,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAA,8BAAc,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;KACnD;AACF,CAAC,CAAC;AA1CW,QAAA,aAAa,iBA0CxB","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const afterDiscover = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tpicked: string,\r\n\tignored: string[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (!ignored?.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tfor (const entity of board) {\r\n\t\tswitch (entity.cardId) {\r\n\t\t\tcase CardIds.DepravedFelfin_BG30_115:\r\n\t\t\tcase CardIds.DepravedFelfin_BG30_115_G:\r\n\t\t\t\tconst felfinMultiplier = entity.cardId === CardIds.DepravedFelfin_BG30_115 ? 1 : 2;\r\n\t\t\t\tconst baseTotalAttack = ignored\r\n\t\t\t\t\t.map((cardId) => gameState.allCards.getCard(cardId).attack)\r\n\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\tconst baseTotalHealth = ignored\r\n\t\t\t\t\t.map((cardId) => gameState.allCards.getCard(cardId).health)\r\n\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tbaseTotalAttack * felfinMultiplier,\r\n\t\t\t\t\tbaseTotalHealth * felfinMultiplier,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tconst primalfinPortraits = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PrimalfinPortrait_BG30_MagicItem_702,\r\n\t).length;\r\n\tif (!!primalfinPortraits) {\r\n\t\tconst cardsToAdd = new Array(primalfinPortraits).fill(null);\r\n\t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/simulation/discover.ts"],"names":[],"mappings":";;;AAGA,mDAAiD;AAEjD,mCAAsC;AAE/B,MAAM,aAAa,GAAG,CAC5B,IAAqB,EACrB,KAAoB,EACpB,MAAc,EACd,OAAiB,EACjB,SAAwB,EACvB,EAAE;IACH,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;QACrB,OAAO;KACP;IAED,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,QAAQ,MAAM,CAAC,MAAM,EAAE;YACtB,gBAAqC;YACrC;gBACC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,eAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,MAAM,eAAe,GAAG,OAAO;qBAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;qBAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM,eAAe,GAAG,OAAO;qBAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;qBAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,eAAe,GAAG,gBAAgB,EAClC,eAAe,GAAG,gBAAgB,EAClC,KAAK,EACL,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,MAAM;SACP;KACD;IAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAiD,CAChE,CAAC,MAAM,CAAC;IACT,IAAI,CAAC,CAAC,kBAAkB,EAAE;QACzB,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAA,8BAAc,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;KACnD;AACF,CAAC,CAAC;AA1CW,QAAA,aAAa,iBA0CxB","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const afterDiscover = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tpicked: string,\r\n\tignored: string[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (!ignored?.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tfor (const entity of board) {\r\n\t\tswitch (entity.cardId) {\r\n\t\t\tcase CardIds.DepravedFelfin_BG30_115:\r\n\t\t\tcase CardIds.DepravedFelfin_BG30_115_G:\r\n\t\t\t\tconst felfinMultiplier = entity.cardId === CardIds.DepravedFelfin_BG30_115 ? 1 : 2;\r\n\t\t\t\tconst baseTotalAttack = ignored\r\n\t\t\t\t\t.map((cardId) => gameState.allCards.getCard(cardId).attack)\r\n\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\tconst baseTotalHealth = ignored\r\n\t\t\t\t\t.map((cardId) => gameState.allCards.getCard(cardId).health)\r\n\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tbaseTotalAttack * felfinMultiplier,\r\n\t\t\t\t\tbaseTotalHealth * felfinMultiplier,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tconst primalfinPortraits = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PrimalfinPortrait_BG30_MagicItem_702,\r\n\t).length;\r\n\tif (!!primalfinPortraits) {\r\n\t\tconst cardsToAdd = new Array(primalfinPortraits).fill(null);\r\n\t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t}\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"frenzy.js","sourceRoot":"","sources":["../../src/simulation/frenzy.ts"],"names":[],"mappings":";;;AAIA,6DAA+D;AAGxD,MAAM,WAAW,GAAG,CAC1B,gBAA6B,EAC7B,qBAAoC,EACpC,yBAA0C,EAC1C,SAAwB,EACjB,EAAE;IACT,IACC,gBAAgB,CAAC,MAAM,eAAuC;QAC9D,gBAAgB,CAAC,MAAM,iBAAyC,EAC/D;QACD,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;YACnC,IAAA,kCAAkB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,IAAI,EACJ,IAAI,EACJ,SAAS,CACT,CAAC;SACF;KACD;AACF,CAAC,CAAC;AArBW,QAAA,WAAW,eAqBtB","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const applyFrenzy = (\r\n\tentityWithFrenzy: BoardEntity,\r\n\tentityWithFrenzyBoard: BoardEntity[],\r\n\tentityWithFrenzyBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (\r\n\t\tentityWithFrenzy.cardId === CardIds.BristlebackKnight_BG20_204 ||\r\n\t\tentityWithFrenzy.cardId === CardIds.BristlebackKnight_BG20_204_G\r\n\t) {\r\n\t\tif (!entityWithFrenzy.divineShield) {\r\n\t\t\tupdateDivineShield(\r\n\t\t\t\tentityWithFrenzy,\r\n\t\t\t\tentityWithFrenzyBoard,\r\n\t\t\t\tentityWithFrenzyBoardHero,\r\n\t\t\t\tnull,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"frenzy.js","sourceRoot":"","sources":["../../src/simulation/frenzy.ts"],"names":[],"mappings":";;;AAIA,6DAA+D;AAGxD,MAAM,WAAW,GAAG,CAC1B,gBAA6B,EAC7B,qBAAoC,EACpC,yBAA0C,EAC1C,SAAwB,EACjB,EAAE;IACT,IACC,gBAAgB,CAAC,MAAM,eAAuC;QAC9D,gBAAgB,CAAC,MAAM,iBAAyC,EAC/D;QACD,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;YACnC,IAAA,kCAAkB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,IAAI,EACJ,IAAI,EACJ,SAAS,CACT,CAAC;SACF;KACD;AACF,CAAC,CAAC;AArBW,QAAA,WAAW,eAqBtB","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { CardIds } from '../services/card-ids';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const applyFrenzy = (\r\n\tentityWithFrenzy: BoardEntity,\r\n\tentityWithFrenzyBoard: BoardEntity[],\r\n\tentityWithFrenzyBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (\r\n\t\tentityWithFrenzy.cardId === CardIds.BristlebackKnight_BG20_204 ||\r\n\t\tentityWithFrenzy.cardId === CardIds.BristlebackKnight_BG20_204_G\r\n\t) {\r\n\t\tif (!entityWithFrenzy.divineShield) {\r\n\t\t\tupdateDivineShield(\r\n\t\t\t\tentityWithFrenzy,\r\n\t\t\t\tentityWithFrenzyBoard,\r\n\t\t\t\tentityWithFrenzyBoardHero,\r\n\t\t\t\tnull,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../src/simulation/magnetize.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnBeforeMagnetize } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { Mutable } from '../services/utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\ttarget: BoardEntity,\r\n\tsource: BoardEntity,\r\n\tcardIdToMagnetize: string,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst modularCard = { ...gameState.allCards.getCard(cardIdToMagnetize) };\r\n\tfor (const boardEntity of board) {\r\n\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tmodifyStats(\r\n\t\ttarget,\r\n\t\tsource,\r\n\t\tmodularCard.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\tmodularCard.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\tboard,\r\n\t\thero,\r\n\t\tgameState,\r\n\t);\r\n\ttarget.taunt = target.taunt || modularCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\ttarget.divineShield = target.divineShield || modularCard.mechanics?.includes(GameTag[GameTag.DIVINE_SHIELD]);\r\n\ttarget.poisonous = target.poisonous || modularCard.mechanics?.includes(GameTag[GameTag.POISONOUS]);\r\n\ttarget.venomous = target.venomous || modularCard.mechanics?.includes(GameTag[GameTag.VENOMOUS]);\r\n\ttarget.windfury = target.windfury || modularCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\ttarget.reborn = target.reborn || modularCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\ttarget.stealth = target.stealth || modularCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\r\n\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\tif (magneticEnchantment) {\r\n\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\ttarget.enchantments.push({\r\n\t\t\tcardId: enchantment,\r\n\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t});\r\n\t}\r\n\tif ([CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(cardIdToMagnetize as CardIds)) {\r\n\t\tconst mult = cardIdToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t}\r\n\r\n\t// Dr Boom's Monster?\r\n\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\tfor (const entity of board) {\r\n\t\tconst drBoomBases =\r\n\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\tentity.enchantments.filter((e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e)\r\n\t\t\t\t.length;\r\n\t\tconst drBoomGoldens =\r\n\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\tentity.enchantments.filter((e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge)\r\n\t\t\t\t.length;\r\n\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t}\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: Mutable<ReferenceCard>;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../src/simulation/magnetize.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnBeforeMagnetize } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { Mutable } from '../services/utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\ttarget: BoardEntity,\r\n\tsource: BoardEntity,\r\n\tcardIdToMagnetize: string,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst modularCard = { ...gameState.allCards.getCard(cardIdToMagnetize) };\r\n\tfor (const boardEntity of board) {\r\n\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tmodifyStats(\r\n\t\ttarget,\r\n\t\tsource,\r\n\t\tmodularCard.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\tmodularCard.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\tboard,\r\n\t\thero,\r\n\t\tgameState,\r\n\t);\r\n\ttarget.taunt = target.taunt || modularCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\ttarget.divineShield = target.divineShield || modularCard.mechanics?.includes(GameTag[GameTag.DIVINE_SHIELD]);\r\n\ttarget.poisonous = target.poisonous || modularCard.mechanics?.includes(GameTag[GameTag.POISONOUS]);\r\n\ttarget.venomous = target.venomous || modularCard.mechanics?.includes(GameTag[GameTag.VENOMOUS]);\r\n\ttarget.windfury = target.windfury || modularCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\ttarget.reborn = target.reborn || modularCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\ttarget.stealth = target.stealth || modularCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\r\n\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\tif (magneticEnchantment) {\r\n\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\ttarget.enchantments.push({\r\n\t\t\tcardId: enchantment,\r\n\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t});\r\n\t}\r\n\tif ([CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(cardIdToMagnetize as CardIds)) {\r\n\t\tconst mult = cardIdToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t}\r\n\r\n\t// Dr Boom's Monster?\r\n\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\tfor (const entity of board) {\r\n\t\tconst drBoomBases =\r\n\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\tentity.enchantments.filter((e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e)\r\n\t\t\t\t.length;\r\n\t\tconst drBoomGoldens =\r\n\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\tentity.enchantments.filter((e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge)\r\n\t\t\t\t.length;\r\n\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t}\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: Mutable<ReferenceCard>;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"minion-death.js","sourceRoot":"","sources":["../../src/simulation/minion-death.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAG7D,6CAA4D;AAC5D,oCAAwE;AACxE,qCAAgD;AAChD,mDAAiD;AACjD,+DAAwE;AACxE,6DAAqD;AAErD,mCAAiD;AACjD,yEAAmE;AACnE,qCAA+C;AAC/C,mCAAsC;AAE/B,MAAM,cAAc,GAAG,CAC7B,KAAoB,EACpB,SAA0B,EAC1B,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACc,EAAE;IAExC,MAAM,yBAAyB,GAAa,EAAE,CAAC;IAC/C,MAAM,0BAA0B,GAAa,EAAE,CAAC;IAChD,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC;IAExC,IAAA,qDAA+B,EAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE;YACpD,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,0BAA0B,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAS5B;KACD;IAMD,IAAI,0BAA0B,GAAG,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAChE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,CAAC,CAAC,GAAG,0BAA0B,CAAC,MAAM,CAAC;QACnF,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC1C;IACD,0BAA0B,GAAG,0BAA0B,CAAC,OAAO,EAAE,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE;YAEpD,IAAA,gDAAqB,EAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YAEtD,CAAC,EAAE,CAAC;SACJ;KACD;IASD,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE;QACtC,MAAM,cAAc,GAAG,0BAA0B,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACpF,IAAA,6BAAoB,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACvC,IAAA,6BAAqB,EAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAA,6BAAqB,EAAC,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACzE,IAAA,yBAAiB,EAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QACvG,IAAA,yBAAiB,EAAC,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;KACvG;IAED,OAAO,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,YAAY,CAAC,CAAC;AAC9E,CAAC,CAAC;AAnEW,QAAA,cAAc,kBAmEzB;AAEK,MAAM,qBAAqB,GAAG,CACpC,KAAoB,EACpB,SAA0B,EAC1B,UAAuB,EACvB,SAAwB,EACvB,EAAE;IACH,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE;QAC7C,IACC,SAAS,CAAC,MAAM,0BAAwB;YACxC,SAAS,CAAC,IAAI;YACd,SAAS,CAAC,KAAK,IAAI,CAAC;YACpB,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EACzC;YACD,IAAA,8BAAc,EAAC,SAAS,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;YACjE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;SACpB;KACD;AACF,CAAC,CAAC;AAjBW,QAAA,qBAAqB,yBAiBhC;AAEK,MAAM,iBAAiB,GAAG,CAChC,UAAuB,EACvB,cAAsB,EACtB,KAAoB,EACpB,SAA0B,EAC1B,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACvB,EAAE;;IACH,MAAM,MAAM,GAAG,MAAA,SAAS,CAAC,aAAa,mCAAI,EAAE,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC3B,QAAQ,KAAK,CAAC,MAAM,EAAE;YACrB;gBACC,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;oBAC/C,IAAA,8BAAsB,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;iBAC3D;gBACD,MAAM;YACP;gBACC,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;oBAC/C,IAAA,8BAAsB,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;iBAC3D;gBACD,MAAM;SACP;KACD;IAED,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE;QACzC,QAAQ,OAAO,CAAC,MAAM,EAAE;YACvB,0BAAiD;YACjD;gBACC,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;oBAC7E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,yBAAgD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxF,MAAM,OAAO,GAAG,IAAA,+BAAuB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBACzD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;wBAC7B,IAAA,mBAAW,EACV,MAAM,EACN,SAAS,EACT,UAAU,CAAC,SAAS,EACpB,UAAU,CAAC,SAAS,EACpB,KAAK,EACL,SAAS,EACT,SAAS,CACT,CAAC;qBACF;oBACD,OAAO,CAAC,cAAc,EAAE,CAAC;iBACzB;gBACD,MAAM;YACP;gBACC,IACC,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;oBAC1C,IAAA,mCAA2B,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC;yBACzF,MAAM,KAAK,CAAC,EACb;oBACD,IAAA,8BAAc,EAAC,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;iBACpD;gBACD,MAAM;YACP;gBACC,IACC,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;oBAC1C,OAAO,CAAC,cAAc,GAAG,CAAC;oBAC1B,IAAA,uBAAe,EAAC,UAAU,EAAE,SAAS,EAAE,qBAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC7F;oBACD,IAAI,oBAAoB,GAAG,MAAA,UAAU,CAAC,YAAY,0CAAE,MAAM,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAA0C,CACzD,CAAC;oBACF,IAAI,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,MAAK,CAAC,EAAE;wBACvC,oBAAoB,GAAG,MAAA,UAAU,CAAC,YAAY,0CAAE,MAAM,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,gBAAyC,CACxD,CAAC;qBACF;oBACD,IAAI,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,IAAG,CAAC,EAAE;wBACrC,MAAM,cAAc,GAAG,oBAAoB;6BACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,iBAAiB,mCAAI,CAAC,CAAA,EAAA,CAAC;6BACpC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7B,MAAM,cAAc,GAAG,oBAAoB;6BACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,iBAAiB,mCAAI,CAAC,CAAA,EAAA,CAAC;6BACpC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7B,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE;4BAC7C,MAAM,MAAM,GAAG,IAAA,kCAAa,yBAE3B,CAAC,EACD,KAAK,EACL,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,UAAU,CAAC,QAAQ,EACnB,KAAK,CACL,CAAC;4BACF,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gCACpB,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC;gCAC1B,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC;4BAC3B,CAAC,CAAC,CAAC;4BACH,IAAA,4BAAmB,EAClB,MAAM,EACN,KAAK,EACL,SAAS,EACT,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;4BACF,OAAO,CAAC,cAAc,EAAE,CAAC;yBACzB;qBACD;iBACD;gBACD,MAAM;SACP;KACD;AACF,CAAC,CAAC;AA7GW,QAAA,iBAAiB,qBA6G5B","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { pickMultipleRandomAlive } from '../services/utils';\r\nimport { getEffectiveTribesForEntity, hasCorrectTribe } from '../utils';\r\nimport { updateAvengeCounters } from './avenge';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { handleWheneverMinionsKillEffect } from './deathrattle-effects';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { onQuestProgressUpdated } from './quest';\r\nimport { removeMinionFromBoard } from './remove-minion-from-board';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const makeMinionsDie = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): [number[], number[], BoardEntity[]] => {\r\n\t// Because entities spawn to the left, so the right index is unchanged\r\n\tconst deadMinionIndexesFromLeft: number[] = [];\r\n\tconst deadMinionIndexesFromRight: number[] = [];\r\n\tconst deadEntities: BoardEntity[] = [];\r\n\tconst initialBoardLength = board.length;\r\n\r\n\thandleWheneverMinionsKillEffect(board, boardHero, otherBoard, otherBoardHero, gameState);\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\tdeadMinionIndexesFromLeft.push(i);\r\n\t\t\tdeadMinionIndexesFromRight.push(initialBoardLength - (i + 1));\r\n\t\t\tdeadEntities.push(board[i]);\r\n\t\t\t// console.log(\r\n\t\t\t// \t'\\tflagging dead minion 0',\r\n\t\t\t// \tstringifySimpleCard(board[i], allCards),\r\n\t\t\t// \tstringifySimple(board, allCards),\r\n\t\t\t// \tinitialBoardLength,\r\n\t\t\t// \ti,\r\n\t\t\t// \tdeadMinionIndexesFromRight,\r\n\t\t\t// );\r\n\t\t}\r\n\t}\r\n\r\n\t// These will always be processed from left to right afterwards\r\n\t// We compute the indexes as they will be once the new board is effective. For a\r\n\t// board of length N, having an indexFromRight at N means it will spawn at the very left\r\n\t// of the board (first minion)\r\n\tlet indexesFromRightAfterDeath = [];\r\n\tfor (let i = deadMinionIndexesFromRight.length - 1; i >= 0; i--) {\r\n\t\tconst newIndex = deadMinionIndexesFromRight[i] - indexesFromRightAfterDeath.length;\r\n\t\tindexesFromRightAfterDeath.push(newIndex);\r\n\t}\r\n\tindexesFromRightAfterDeath = indexesFromRightAfterDeath.reverse();\r\n\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\t// console.log('\\tflagging dead minion', stringifySimpleCard(board[i], allCards), deadMinionIndexesFromRight);\r\n\t\t\tremoveMinionFromBoard(board, boardHero, i, gameState);\r\n\t\t\t// We modify the original array, so we need to update teh current index accordingly\r\n\t\t\ti--;\r\n\t\t}\r\n\t}\r\n\r\n\t// console.debug('dead entities', stringifySimple(deadEntities, allCards));\r\n\t// Update the avenge counters as soon as minions die. If we wait until the \"avenge\" phase, we might\r\n\t// update the counters for entities that have been spawned after the death of the original entity\r\n\t// ISSUE: deaths are actually processed one by one. Once a minion dies, its DR triggers, then the next, etc.\r\n\t// This means that if you have a minion that summons another one, it can progress and complete and quest\r\n\t// and the next minion dying could count towards that quest progress\r\n\t// See http://replays.firestoneapp.com/?reviewId=0ce4db9c-3269-4704-b662-8a8c31f5afe1&turn=16&action=27\r\n\tfor (const deadEntity of deadEntities) {\r\n\t\tconst indexFromRight = indexesFromRightAfterDeath[deadEntities.indexOf(deadEntity)];\r\n\t\tupdateAvengeCounters(board, boardHero);\r\n\t\tonMinionDeadHeroPower(board, boardHero, deadEntity, gameState);\r\n\t\tonMinionDeadHeroPower(otherBoard, otherBoardHero, deadEntity, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, indexFromRight, board, boardHero, otherBoard, otherBoardHero, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, indexFromRight, otherBoard, otherBoardHero, board, boardHero, gameState);\r\n\t}\r\n\r\n\treturn [deadMinionIndexesFromLeft, indexesFromRightAfterDeath, deadEntities];\r\n};\r\n\r\nexport const onMinionDeadHeroPower = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tfor (const heroPower of boardHero.heroPowers) {\r\n\t\tif (\r\n\t\t\theroPower.cardId === CardIds.IllTakeThat &&\r\n\t\t\theroPower.used &&\r\n\t\t\theroPower.info2 <= 0 &&\r\n\t\t\tdeadEntity.friendly !== boardHero.friendly\r\n\t\t) {\r\n\t\t\taddCardsInHand(boardHero, board, [deadEntity.cardId], gameState);\r\n\t\t\theroPower.info2 = 1;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const onMinionDeadQuest = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst quests = boardHero.questEntities ?? [];\r\n\tfor (const quest of quests) {\r\n\t\tswitch (quest.CardId) {\r\n\t\t\tcase CardIds.ReenactTheMurder:\r\n\t\t\t\tif (deadEntity.friendly === boardHero.friendly) {\r\n\t\t\t\t\tonQuestProgressUpdated(boardHero, quest, board, gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RoundUpTheSuspects:\r\n\t\t\t\tif (deadEntity.friendly !== boardHero.friendly) {\r\n\t\t\t\t\tonQuestProgressUpdated(boardHero, quest, board, gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\t\tif (trinket.scriptDataNum1 > 0 && deadEntity.friendly === boardHero.friendly) {\r\n\t\t\t\t\tconst quantity = trinket.cardId === CardIds.AllianceKeychain_BG30_MagicItem_433 ? 1 : 2;\r\n\t\t\t\t\tconst targets = pickMultipleRandomAlive(board, quantity);\r\n\t\t\t\t\tfor (const target of targets) {\r\n\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\tdeadEntity.maxAttack,\r\n\t\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\tboardHero,\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\ttrinket.scriptDataNum1--;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TheEyeOfDalaran_BG30_MagicItem_981:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\tgetEffectiveTribesForEntity(deadEntity, boardHero, gameState.anomalies, gameState.allCards)\r\n\t\t\t\t\t\t.length === 0\r\n\t\t\t\t) {\r\n\t\t\t\t\taddCardsInHand(boardHero, board, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\ttrinket.scriptDataNum1 > 0 &&\r\n\t\t\t\t\thasCorrectTribe(deadEntity, boardHero, Race.QUILBOAR, gameState.anomalies, gameState.allCards)\r\n\t\t\t\t) {\r\n\t\t\t\t\tlet bloodGemEnchantments = deadEntity.enchantments?.filter(\r\n\t\t\t\t\t\t(e) => e.cardId === CardIds.BloodGem_BloodGemsEnchantment,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (bloodGemEnchantments?.length === 0) {\r\n\t\t\t\t\t\tbloodGemEnchantments = deadEntity.enchantments?.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.BloodGem_BloodGemEnchantment,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (bloodGemEnchantments?.length > 0) {\r\n\t\t\t\t\t\tconst bloodGemAttack = bloodGemEnchantments\r\n\t\t\t\t\t\t\t.map((e) => e.tagScriptDataNum1 ?? 0)\r\n\t\t\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\t\t\tconst bloodGemHealth = bloodGemEnchantments\r\n\t\t\t\t\t\t\t.map((e) => e.tagScriptDataNum2 ?? 0)\r\n\t\t\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\t\t\tif (bloodGemAttack > 0 || bloodGemHealth > 0) {\r\n\t\t\t\t\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t,\r\n\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawns.forEach((b) => {\r\n\t\t\t\t\t\t\t\tb.attack = bloodGemAttack;\r\n\t\t\t\t\t\t\t\tb.health = bloodGemHealth;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tperformEntitySpawns(\r\n\t\t\t\t\t\t\t\tspawns,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\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\ttrinket.scriptDataNum1--;\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}\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"minion-death.js","sourceRoot":"","sources":["../../src/simulation/minion-death.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { Race } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { pickMultipleRandomAlive } from '../services/utils';\r\nimport { getEffectiveTribesForEntity, hasCorrectTribe } from '../utils';\r\nimport { updateAvengeCounters } from './avenge';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { handleWheneverMinionsKillEffect } from './deathrattle-effects';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { onQuestProgressUpdated } from './quest';\r\nimport { removeMinionFromBoard } from './remove-minion-from-board';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const makeMinionsDie = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): [number[], number[], BoardEntity[]] => {\r\n\t// Because entities spawn to the left, so the right index is unchanged\r\n\tconst deadMinionIndexesFromLeft: number[] = [];\r\n\tconst deadMinionIndexesFromRight: number[] = [];\r\n\tconst deadEntities: BoardEntity[] = [];\r\n\tconst initialBoardLength = board.length;\r\n\r\n\thandleWheneverMinionsKillEffect(board, boardHero, otherBoard, otherBoardHero, gameState);\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\tdeadMinionIndexesFromLeft.push(i);\r\n\t\t\tdeadMinionIndexesFromRight.push(initialBoardLength - (i + 1));\r\n\t\t\tdeadEntities.push(board[i]);\r\n\t\t\t// console.log(\r\n\t\t\t// \t'\\tflagging dead minion 0',\r\n\t\t\t// \tstringifySimpleCard(board[i], allCards),\r\n\t\t\t// \tstringifySimple(board, allCards),\r\n\t\t\t// \tinitialBoardLength,\r\n\t\t\t// \ti,\r\n\t\t\t// \tdeadMinionIndexesFromRight,\r\n\t\t\t// );\r\n\t\t}\r\n\t}\r\n\r\n\t// These will always be processed from left to right afterwards\r\n\t// We compute the indexes as they will be once the new board is effective. For a\r\n\t// board of length N, having an indexFromRight at N means it will spawn at the very left\r\n\t// of the board (first minion)\r\n\tlet indexesFromRightAfterDeath = [];\r\n\tfor (let i = deadMinionIndexesFromRight.length - 1; i >= 0; i--) {\r\n\t\tconst newIndex = deadMinionIndexesFromRight[i] - indexesFromRightAfterDeath.length;\r\n\t\tindexesFromRightAfterDeath.push(newIndex);\r\n\t}\r\n\tindexesFromRightAfterDeath = indexesFromRightAfterDeath.reverse();\r\n\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\t// console.log('\\tflagging dead minion', stringifySimpleCard(board[i], allCards), deadMinionIndexesFromRight);\r\n\t\t\tremoveMinionFromBoard(board, boardHero, i, gameState);\r\n\t\t\t// We modify the original array, so we need to update teh current index accordingly\r\n\t\t\ti--;\r\n\t\t}\r\n\t}\r\n\r\n\t// console.debug('dead entities', stringifySimple(deadEntities, allCards));\r\n\t// Update the avenge counters as soon as minions die. If we wait until the \"avenge\" phase, we might\r\n\t// update the counters for entities that have been spawned after the death of the original entity\r\n\t// ISSUE: deaths are actually processed one by one. Once a minion dies, its DR triggers, then the next, etc.\r\n\t// This means that if you have a minion that summons another one, it can progress and complete and quest\r\n\t// and the next minion dying could count towards that quest progress\r\n\t// See http://replays.firestoneapp.com/?reviewId=0ce4db9c-3269-4704-b662-8a8c31f5afe1&turn=16&action=27\r\n\tfor (const deadEntity of deadEntities) {\r\n\t\tconst indexFromRight = indexesFromRightAfterDeath[deadEntities.indexOf(deadEntity)];\r\n\t\tupdateAvengeCounters(board, boardHero);\r\n\t\tonMinionDeadHeroPower(board, boardHero, deadEntity, gameState);\r\n\t\tonMinionDeadHeroPower(otherBoard, otherBoardHero, deadEntity, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, indexFromRight, board, boardHero, otherBoard, otherBoardHero, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, indexFromRight, otherBoard, otherBoardHero, board, boardHero, gameState);\r\n\t}\r\n\r\n\treturn [deadMinionIndexesFromLeft, indexesFromRightAfterDeath, deadEntities];\r\n};\r\n\r\nexport const onMinionDeadHeroPower = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tfor (const heroPower of boardHero.heroPowers) {\r\n\t\tif (\r\n\t\t\theroPower.cardId === CardIds.IllTakeThat &&\r\n\t\t\theroPower.used &&\r\n\t\t\theroPower.info2 <= 0 &&\r\n\t\t\tdeadEntity.friendly !== boardHero.friendly\r\n\t\t) {\r\n\t\t\taddCardsInHand(boardHero, board, [deadEntity.cardId], gameState);\r\n\t\t\theroPower.info2 = 1;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const onMinionDeadQuest = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst quests = boardHero.questEntities ?? [];\r\n\tfor (const quest of quests) {\r\n\t\tswitch (quest.CardId) {\r\n\t\t\tcase CardIds.ReenactTheMurder:\r\n\t\t\t\tif (deadEntity.friendly === boardHero.friendly) {\r\n\t\t\t\t\tonQuestProgressUpdated(boardHero, quest, board, gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RoundUpTheSuspects:\r\n\t\t\t\tif (deadEntity.friendly !== boardHero.friendly) {\r\n\t\t\t\t\tonQuestProgressUpdated(boardHero, quest, board, gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\t\tif (trinket.scriptDataNum1 > 0 && deadEntity.friendly === boardHero.friendly) {\r\n\t\t\t\t\tconst quantity = trinket.cardId === CardIds.AllianceKeychain_BG30_MagicItem_433 ? 1 : 2;\r\n\t\t\t\t\tconst targets = pickMultipleRandomAlive(board, quantity);\r\n\t\t\t\t\tfor (const target of targets) {\r\n\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\tdeadEntity.maxAttack,\r\n\t\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\tboardHero,\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\ttrinket.scriptDataNum1--;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TheEyeOfDalaran_BG30_MagicItem_981:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\tgetEffectiveTribesForEntity(deadEntity, boardHero, gameState.anomalies, gameState.allCards)\r\n\t\t\t\t\t\t.length === 0\r\n\t\t\t\t) {\r\n\t\t\t\t\taddCardsInHand(boardHero, board, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\ttrinket.scriptDataNum1 > 0 &&\r\n\t\t\t\t\thasCorrectTribe(deadEntity, boardHero, Race.QUILBOAR, gameState.anomalies, gameState.allCards)\r\n\t\t\t\t) {\r\n\t\t\t\t\tlet bloodGemEnchantments = deadEntity.enchantments?.filter(\r\n\t\t\t\t\t\t(e) => e.cardId === CardIds.BloodGem_BloodGemsEnchantment,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (bloodGemEnchantments?.length === 0) {\r\n\t\t\t\t\t\tbloodGemEnchantments = deadEntity.enchantments?.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.BloodGem_BloodGemEnchantment,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (bloodGemEnchantments?.length > 0) {\r\n\t\t\t\t\t\tconst bloodGemAttack = bloodGemEnchantments\r\n\t\t\t\t\t\t\t.map((e) => e.tagScriptDataNum1 ?? 0)\r\n\t\t\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\t\t\tconst bloodGemHealth = bloodGemEnchantments\r\n\t\t\t\t\t\t\t.map((e) => e.tagScriptDataNum2 ?? 0)\r\n\t\t\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t\t\t\tif (bloodGemAttack > 0 || bloodGemHealth > 0) {\r\n\t\t\t\t\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t,\r\n\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawns.forEach((b) => {\r\n\t\t\t\t\t\t\t\tb.attack = bloodGemAttack;\r\n\t\t\t\t\t\t\t\tb.health = bloodGemHealth;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tperformEntitySpawns(\r\n\t\t\t\t\t\t\t\tspawns,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\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\ttrinket.scriptDataNum1--;\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}\r\n\t}\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"minion-kill.js","sourceRoot":"","sources":["../../src/simulation/minion-kill.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, CardType } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnMinionKilled } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { pickRandom } from '../services/utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onMinionKill = (\r\n\tkiller: BoardEntity,\r\n\tkillerIsAttacking: boolean,\r\n\tvictim: BoardEntity,\r\n\tkillerBoard: BoardEntity[],\r\n\tkillerHero: BgsPlayerEntity,\r\n\tvictimBoard: BoardEntity[],\r\n\tvictimHero: BgsPlayerEntity,\r\n\tdefenderNeighbours: readonly BoardEntity[],\r\n\tgameState: FullGameState,\r\n): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t// Can be null if killed by a hero power for instance\r\n\tif (!killer?.cardId) {\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t}\r\n\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\tfor (const boardEntity of killerBoard) {\r\n\t\tconst onMinionKilledImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnMinionKilled(onMinionKilledImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onMinionKilledImpl.onMinionKilled(boardEntity, {\r\n\t\t\t\tkiller: killer,\r\n\t\t\t\tkillerIsAttacking: killerIsAttacking,\r\n\t\t\t\tminionKilled: victim,\r\n\t\t\t\tattackingHero: killerHero,\r\n\t\t\t\tattackingBoard: killerBoard,\r\n\t\t\t\tdefendingHero: victimHero,\r\n\t\t\t\tdefendingBoard: victimBoard,\r\n\t\t\t\tdefenderNeighbours: defenderNeighbours,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: killerHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\tswitch (killer.cardId) {\r\n\t\tcase CardIds.Murcules_BG27_023:\r\n\t\tcase CardIds.Murcules_BG27_023_G:\r\n\t\t\tconst murculesTarget = pickRandom(\r\n\t\t\t\tkillerHero.hand\r\n\t\t\t\t\t.filter((e) => !!e?.cardId)\r\n\t\t\t\t\t.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);\r\n\t\t\tif (murculesTarget) {\r\n\t\t\t\tconst murculesStats = killer.cardId === CardIds.Murcules_BG27_023 ? 2 : 4;\r\n\t\t\t\tmodifyStats(murculesTarget, killer, murculesStats, murculesStats, killerBoard, killerHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(killer, murculesTarget, killerBoard, killerHero, victimHero);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Mannoroth_BG27_507:\r\n\t\tcase CardIds.Mannoroth_BG27_507_G:\r\n\t\t\tif (killer.health > 0 && !killer.definitelyDead && killer.abiityChargesLeft > 0) {\r\n\t\t\t\tmodifyStats(killer, killer, victim.attack, victim.maxHealth, killerBoard, killerHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(killer, killer, killerBoard, killerHero, victimHero);\r\n\t\t\t\tkiller.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TideOracleMorgl_BG27_513:\r\n\t\tcase CardIds.TideOracleMorgl_BG27_513_G:\r\n\t\t\tif (\r\n\t\t\t\tgameState.sharedState.currentAttackerEntityId != null &&\r\n\t\t\t\tgameState.sharedState.currentAttackerEntityId === killer.entityId\r\n\t\t\t) {\r\n\t\t\t\tconst tideOracleMorgleTarget = pickRandom(\r\n\t\t\t\t\tkillerHero.hand\r\n\t\t\t\t\t\t.filter((e) => !!e?.cardId)\r\n\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t\t\t\t),\r\n\t\t\t\t);\r\n\t\t\t\tif (tideOracleMorgleTarget) {\r\n\t\t\t\t\tconst tideOracleMorgleMultiplier = killer.cardId === CardIds.TideOracleMorgl_BG27_513 ? 1 : 2;\r\n\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\ttideOracleMorgleTarget,\r\n\t\t\t\t\t\tkiller,\r\n\t\t\t\t\t\ttideOracleMorgleMultiplier * victim.attack,\r\n\t\t\t\t\t\ttideOracleMorgleMultiplier * victim.maxHealth,\r\n\t\t\t\t\t\tkillerBoard,\r\n\t\t\t\t\t\tkillerHero,\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\tkiller,\r\n\t\t\t\t\t\ttideOracleMorgleTarget,\r\n\t\t\t\t\t\tkillerBoard,\r\n\t\t\t\t\t\tkillerHero,\r\n\t\t\t\t\t\tvictimHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t}\r\n\r\n\treturn { dmgDoneByAttacker: damageDoneByAttacker, dmgDoneByDefender: damageDoneByDefender };\r\n};\r\n"]}
1
+ {"version":3,"file":"minion-kill.js","sourceRoot":"","sources":["../../src/simulation/minion-kill.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { CardType } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnMinionKilled } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { pickRandom } from '../services/utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onMinionKill = (\r\n\tkiller: BoardEntity,\r\n\tkillerIsAttacking: boolean,\r\n\tvictim: BoardEntity,\r\n\tkillerBoard: BoardEntity[],\r\n\tkillerHero: BgsPlayerEntity,\r\n\tvictimBoard: BoardEntity[],\r\n\tvictimHero: BgsPlayerEntity,\r\n\tdefenderNeighbours: readonly BoardEntity[],\r\n\tgameState: FullGameState,\r\n): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t// Can be null if killed by a hero power for instance\r\n\tif (!killer?.cardId) {\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t}\r\n\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\tfor (const boardEntity of killerBoard) {\r\n\t\tconst onMinionKilledImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnMinionKilled(onMinionKilledImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onMinionKilledImpl.onMinionKilled(boardEntity, {\r\n\t\t\t\tkiller: killer,\r\n\t\t\t\tkillerIsAttacking: killerIsAttacking,\r\n\t\t\t\tminionKilled: victim,\r\n\t\t\t\tattackingHero: killerHero,\r\n\t\t\t\tattackingBoard: killerBoard,\r\n\t\t\t\tdefendingHero: victimHero,\r\n\t\t\t\tdefendingBoard: victimBoard,\r\n\t\t\t\tdefenderNeighbours: defenderNeighbours,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: killerHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\tswitch (killer.cardId) {\r\n\t\tcase CardIds.Murcules_BG27_023:\r\n\t\tcase CardIds.Murcules_BG27_023_G:\r\n\t\t\tconst murculesTarget = pickRandom(\r\n\t\t\t\tkillerHero.hand\r\n\t\t\t\t\t.filter((e) => !!e?.cardId)\r\n\t\t\t\t\t.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);\r\n\t\t\tif (murculesTarget) {\r\n\t\t\t\tconst murculesStats = killer.cardId === CardIds.Murcules_BG27_023 ? 2 : 4;\r\n\t\t\t\tmodifyStats(murculesTarget, killer, murculesStats, murculesStats, killerBoard, killerHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(killer, murculesTarget, killerBoard, killerHero, victimHero);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Mannoroth_BG27_507:\r\n\t\tcase CardIds.Mannoroth_BG27_507_G:\r\n\t\t\tif (killer.health > 0 && !killer.definitelyDead && killer.abiityChargesLeft > 0) {\r\n\t\t\t\tmodifyStats(killer, killer, victim.attack, victim.maxHealth, killerBoard, killerHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(killer, killer, killerBoard, killerHero, victimHero);\r\n\t\t\t\tkiller.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TideOracleMorgl_BG27_513:\r\n\t\tcase CardIds.TideOracleMorgl_BG27_513_G:\r\n\t\t\tif (\r\n\t\t\t\tgameState.sharedState.currentAttackerEntityId != null &&\r\n\t\t\t\tgameState.sharedState.currentAttackerEntityId === killer.entityId\r\n\t\t\t) {\r\n\t\t\t\tconst tideOracleMorgleTarget = pickRandom(\r\n\t\t\t\t\tkillerHero.hand\r\n\t\t\t\t\t\t.filter((e) => !!e?.cardId)\r\n\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t\t\t\t),\r\n\t\t\t\t);\r\n\t\t\t\tif (tideOracleMorgleTarget) {\r\n\t\t\t\t\tconst tideOracleMorgleMultiplier = killer.cardId === CardIds.TideOracleMorgl_BG27_513 ? 1 : 2;\r\n\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\ttideOracleMorgleTarget,\r\n\t\t\t\t\t\tkiller,\r\n\t\t\t\t\t\ttideOracleMorgleMultiplier * victim.attack,\r\n\t\t\t\t\t\ttideOracleMorgleMultiplier * victim.maxHealth,\r\n\t\t\t\t\t\tkillerBoard,\r\n\t\t\t\t\t\tkillerHero,\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\tkiller,\r\n\t\t\t\t\t\ttideOracleMorgleTarget,\r\n\t\t\t\t\t\tkillerBoard,\r\n\t\t\t\t\t\tkillerHero,\r\n\t\t\t\t\t\tvictimHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t}\r\n\r\n\treturn { dmgDoneByAttacker: damageDoneByAttacker, dmgDoneByDefender: damageDoneByDefender };\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"on-attack.js","sourceRoot":"","sources":["../../src/simulation/on-attack.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnWheneverAnotherMinionAttacks, hasRally } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { pickRandom } from '../services/utils';\r\nimport { hasCorrectTribe, hasEntityMechanic } from '../utils';\r\nimport { dealDamageToMinion, getNeighbours } from './attack';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\n// Whenever it attacks\r\nexport const applyOnAttackEffects = (\r\n\tattacker: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): { damageDoneByAttacker: number; damageDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets ?? []) {\r\n\t\tconst onAttackImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(trinket, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\t// \"Whenever friendly minion attacks\" triggers before the rally itself?\r\n\t// https://replays.firestoneapp.com/?reviewId=04e6a624-ccd5-4068-9420-884843f3685f&turn=25&action=1\r\n\tconst attackingBoardOtherEntities = attackingBoard.filter((e) => e !== attacker);\r\n\tfor (const boardEntity of attackingBoardOtherEntities) {\r\n\t\tconst onAttackImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(boardEntity, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = boardEntity.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// This assumes that only \"Rally\" effects trigger on attack\r\n\t// 2025-08-20: this is false. \"Whenever a friendly minion attacks\" is not a rally effect\r\n\tconst isAttackerRallying = hasEntityMechanic(attacker, GameTag.BACON_RALLY, gameState.allCards);\r\n\tconst numberOfRallyingCries =\r\n\t\tattackingBoardHero.questRewardEntities?.filter((r) => r.cardId === CardIds.RallyingCry_BG33_Reward_021)\r\n\t\t\t.length ?? 0;\r\n\tconst rallyLoops = 1 + (isAttackerRallying ? numberOfRallyingCries : 0);\r\n\tfor (let i = 0; i < rallyLoops; i++) {\r\n\t\tconst onAttackImpl = cardMappings[attacker.cardId];\r\n\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(attacker, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = attacker.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(enchantment, {\r\n\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t});\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Damage happens before the entity is buffed, e.g. before an attack buff from Roaring Rallier\r\n\tif (\r\n\t\tattacker.cardId === CardIds.ObsidianRavager_BG27_017 ||\r\n\t\tattacker.cardId === CardIds.ObsidianRavager_BG27_017_G\r\n\t) {\r\n\t\tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t\tconst targets = attacker.cardId === CardIds.ObsidianRavager_BG27_017_G ? neighbours : [pickRandom(neighbours)];\r\n\t\t[defendingEntity, ...targets].forEach((target) => {\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tattacker,\r\n\t\t\t\ttarget,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackingBoardHero,\r\n\t\t\t\tdefendingBoardHero,\r\n\t\t\t);\r\n\t\t\t// damageDoneByAttacker +=\r\n\t\t\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tdefendingBoardHero,\r\n\t\t\t\tattacker,\r\n\t\t\t\tattacker.attack,\r\n\t\t\t\tattackingBoard,\r\n\t\t\t\tattackingBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t// Roaring Rallier\r\n\tif (hasCorrectTribe(attacker, attackingBoardHero, Race.DRAGON, gameState.anomalies, gameState.allCards)) {\r\n\t\tattackingBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) => e.cardId === CardIds.RoaringRallier_BG29_816 || e.cardId === CardIds.RoaringRallier_BG29_816_G,\r\n\t\t\t)\r\n\t\t\t.forEach((rallier) => {\r\n\t\t\t\tif (rallier !== attacker) {\r\n\t\t\t\t\tconst stats = rallier.cardId === CardIds.RoaringRallier_BG29_816_G ? 2 : 1;\r\n\t\t\t\t\tmodifyStats(attacker, rallier, 3 * stats, 1 * stats, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\t// if (attacker.cardId === CardIds.GlyphGuardian_BGS_045) {\r\n\t// \t// For now the utility method only works additively, so we hack around it\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t2 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else if (attacker.cardId === CardIds.GlyphGuardian_TB_BaconUps_115) {\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t3 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else\r\n\tif (attacker.cardId === CardIds.GlimGuardian_BG29_888 || attacker.cardId === CardIds.GlimGuardian_BG29_888_G) {\r\n\t\tconst multiplier = attacker.cardId === CardIds.GlimGuardian_BG29_888_G ? 2 : 1;\r\n\t\tmodifyStats(attacker, attacker, 2 * multiplier, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t} else if (\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708 ||\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G\r\n\t) {\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, attackingBoardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t} else if (\r\n\t\tattacker.cardId === CardIds.WhirlingLassOMatic_BG28_635 ||\r\n\t\tattacker.cardId === CardIds.WhirlingLassOMatic_BG28_635_G\r\n\t) {\r\n\t\tconst numberOfCardsToAdd = attacker.cardId === CardIds.WhirlingLassOMatic_BG28_635_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array.from({ length: numberOfCardsToAdd }).map(() => null);\r\n\t\taddCardsInHand(attackingBoardHero, attackingBoard, cardsToAdd, gameState);\r\n\t} else if (attacker.cardId === CardIds.Rampager_BG29_809 || attacker.cardId === CardIds.Rampager_BG29_809_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.Rampager_BG29_809_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t// Don't include new spawns\r\n\t\t\tfor (const entity of [...attackingBoard]) {\r\n\t\t\t\tif (entity.entityId === attacker.entityId) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst isSameSide = entity.friendly === attacker.friendly;\r\n\t\t\t\tconst board = isSameSide ? attackingBoard : defendingBoard;\r\n\t\t\t\tconst hero = isSameSide ? attackingBoardHero : defendingBoardHero;\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tisSameSide ? defendingBoard : attackingBoard,\r\n\t\t\t\t\tisSameSide ? defendingBoardHero : attackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t} else if (attacker.cardId === CardIds.HatefulHag_BG29_120 || attacker.cardId === CardIds.HatefulHag_BG29_120_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.HatefulHag_BG29_120_G ? 2 : 1;\r\n\t\tconst attackerIndex = attackingBoard.indexOf(attacker);\r\n\t\tfor (let i = 1; i <= loops; i++) {\r\n\t\t\tconst target = attackingBoard[attackerIndex + i];\r\n\t\t\tif (!!target) {\r\n\t\t\t\tupdateReborn(target, true, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tdefendingBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst eclipsion = attackingBoard.find(\r\n\t\t(e) =>\r\n\t\t\t[\r\n\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy,\r\n\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G,\r\n\t\t\t].includes(e.cardId as CardIds) && e.abiityChargesLeft > 0,\r\n\t);\r\n\t// Only once per minion\r\n\tif (!!eclipsion && attacker.immuneWhenAttackCharges == null) {\r\n\t\tattacker.immuneWhenAttackCharges = 1;\r\n\t\t// If we have 2 eclipsions, the first minion that attacks eats both charges\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) =>\r\n\t\t\t\t[\r\n\t\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy,\r\n\t\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G,\r\n\t\t\t\t].includes(e.cardId as CardIds),\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.abiityChargesLeft--;\r\n\t\t\t});\r\n\t}\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.CeremonialSword_BG30_MagicItem_925:\r\n\t\t\t\tmodifyStats(attacker, trinket, 4, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { damageDoneByAttacker, damageDoneByDefender };\r\n};\r\n\r\nexport interface OnAttackInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n\tplayerIsFriendly: boolean;\r\n}\r\n"]}
1
+ {"version":3,"file":"on-attack.js","sourceRoot":"","sources":["../../src/simulation/on-attack.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { GameTag, Race } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnWheneverAnotherMinionAttacks, hasRally } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { pickRandom } from '../services/utils';\r\nimport { hasCorrectTribe, hasEntityMechanic } from '../utils';\r\nimport { dealDamageToMinion, getNeighbours } from './attack';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\n// Whenever it attacks\r\nexport const applyOnAttackEffects = (\r\n\tattacker: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): { damageDoneByAttacker: number; damageDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets ?? []) {\r\n\t\tconst onAttackImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(trinket, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\t// \"Whenever friendly minion attacks\" triggers before the rally itself?\r\n\t// https://replays.firestoneapp.com/?reviewId=04e6a624-ccd5-4068-9420-884843f3685f&turn=25&action=1\r\n\tconst attackingBoardOtherEntities = attackingBoard.filter((e) => e !== attacker);\r\n\tfor (const boardEntity of attackingBoardOtherEntities) {\r\n\t\tconst onAttackImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(boardEntity, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = boardEntity.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// This assumes that only \"Rally\" effects trigger on attack\r\n\t// 2025-08-20: this is false. \"Whenever a friendly minion attacks\" is not a rally effect\r\n\tconst isAttackerRallying = hasEntityMechanic(attacker, GameTag.BACON_RALLY, gameState.allCards);\r\n\tconst numberOfRallyingCries =\r\n\t\tattackingBoardHero.questRewardEntities?.filter((r) => r.cardId === CardIds.RallyingCry_BG33_Reward_021)\r\n\t\t\t.length ?? 0;\r\n\tconst rallyLoops = 1 + (isAttackerRallying ? numberOfRallyingCries : 0);\r\n\tfor (let i = 0; i < rallyLoops; i++) {\r\n\t\tconst onAttackImpl = cardMappings[attacker.cardId];\r\n\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(attacker, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = attacker.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(enchantment, {\r\n\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t});\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Damage happens before the entity is buffed, e.g. before an attack buff from Roaring Rallier\r\n\tif (\r\n\t\tattacker.cardId === CardIds.ObsidianRavager_BG27_017 ||\r\n\t\tattacker.cardId === CardIds.ObsidianRavager_BG27_017_G\r\n\t) {\r\n\t\tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t\tconst targets = attacker.cardId === CardIds.ObsidianRavager_BG27_017_G ? neighbours : [pickRandom(neighbours)];\r\n\t\t[defendingEntity, ...targets].forEach((target) => {\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tattacker,\r\n\t\t\t\ttarget,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackingBoardHero,\r\n\t\t\t\tdefendingBoardHero,\r\n\t\t\t);\r\n\t\t\t// damageDoneByAttacker +=\r\n\t\t\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tdefendingBoardHero,\r\n\t\t\t\tattacker,\r\n\t\t\t\tattacker.attack,\r\n\t\t\t\tattackingBoard,\r\n\t\t\t\tattackingBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t// Roaring Rallier\r\n\tif (hasCorrectTribe(attacker, attackingBoardHero, Race.DRAGON, gameState.anomalies, gameState.allCards)) {\r\n\t\tattackingBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) => e.cardId === CardIds.RoaringRallier_BG29_816 || e.cardId === CardIds.RoaringRallier_BG29_816_G,\r\n\t\t\t)\r\n\t\t\t.forEach((rallier) => {\r\n\t\t\t\tif (rallier !== attacker) {\r\n\t\t\t\t\tconst stats = rallier.cardId === CardIds.RoaringRallier_BG29_816_G ? 2 : 1;\r\n\t\t\t\t\tmodifyStats(attacker, rallier, 3 * stats, 1 * stats, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t}\r\n\r\n\t// if (attacker.cardId === CardIds.GlyphGuardian_BGS_045) {\r\n\t// \t// For now the utility method only works additively, so we hack around it\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t2 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else if (attacker.cardId === CardIds.GlyphGuardian_TB_BaconUps_115) {\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t3 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else\r\n\tif (attacker.cardId === CardIds.GlimGuardian_BG29_888 || attacker.cardId === CardIds.GlimGuardian_BG29_888_G) {\r\n\t\tconst multiplier = attacker.cardId === CardIds.GlimGuardian_BG29_888_G ? 2 : 1;\r\n\t\tmodifyStats(attacker, attacker, 2 * multiplier, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t} else if (\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708 ||\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G\r\n\t) {\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, attackingBoardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t} else if (\r\n\t\tattacker.cardId === CardIds.WhirlingLassOMatic_BG28_635 ||\r\n\t\tattacker.cardId === CardIds.WhirlingLassOMatic_BG28_635_G\r\n\t) {\r\n\t\tconst numberOfCardsToAdd = attacker.cardId === CardIds.WhirlingLassOMatic_BG28_635_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array.from({ length: numberOfCardsToAdd }).map(() => null);\r\n\t\taddCardsInHand(attackingBoardHero, attackingBoard, cardsToAdd, gameState);\r\n\t} else if (attacker.cardId === CardIds.Rampager_BG29_809 || attacker.cardId === CardIds.Rampager_BG29_809_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.Rampager_BG29_809_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t// Don't include new spawns\r\n\t\t\tfor (const entity of [...attackingBoard]) {\r\n\t\t\t\tif (entity.entityId === attacker.entityId) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst isSameSide = entity.friendly === attacker.friendly;\r\n\t\t\t\tconst board = isSameSide ? attackingBoard : defendingBoard;\r\n\t\t\t\tconst hero = isSameSide ? attackingBoardHero : defendingBoardHero;\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tisSameSide ? defendingBoard : attackingBoard,\r\n\t\t\t\t\tisSameSide ? defendingBoardHero : attackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t} else if (attacker.cardId === CardIds.HatefulHag_BG29_120 || attacker.cardId === CardIds.HatefulHag_BG29_120_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.HatefulHag_BG29_120_G ? 2 : 1;\r\n\t\tconst attackerIndex = attackingBoard.indexOf(attacker);\r\n\t\tfor (let i = 1; i <= loops; i++) {\r\n\t\t\tconst target = attackingBoard[attackerIndex + i];\r\n\t\t\tif (!!target) {\r\n\t\t\t\tupdateReborn(target, true, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tdefendingBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst eclipsion = attackingBoard.find(\r\n\t\t(e) =>\r\n\t\t\t[\r\n\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy,\r\n\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G,\r\n\t\t\t].includes(e.cardId as CardIds) && e.abiityChargesLeft > 0,\r\n\t);\r\n\t// Only once per minion\r\n\tif (!!eclipsion && attacker.immuneWhenAttackCharges == null) {\r\n\t\tattacker.immuneWhenAttackCharges = 1;\r\n\t\t// If we have 2 eclipsions, the first minion that attacks eats both charges\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) =>\r\n\t\t\t\t[\r\n\t\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy,\r\n\t\t\t\t\tCardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G,\r\n\t\t\t\t].includes(e.cardId as CardIds),\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.abiityChargesLeft--;\r\n\t\t\t});\r\n\t}\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.CeremonialSword_BG30_MagicItem_925:\r\n\t\t\t\tmodifyStats(attacker, trinket, 4, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { damageDoneByAttacker, damageDoneByDefender };\r\n};\r\n\r\nexport interface OnAttackInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n\tplayerIsFriendly: boolean;\r\n}\r\n"]}
@@ -4,6 +4,7 @@ exports.applyOnBeingAttackedBuffs = void 0;
4
4
  const card_interface_1 = require("../cards/card.interface");
5
5
  const _card_mappings_1 = require("../cards/impl/_card-mappings");
6
6
  const divine_shield_1 = require("../keywords/divine-shield");
7
+ const reborn_1 = require("../keywords/reborn");
7
8
  const venomous_1 = require("../keywords/venomous");
8
9
  const utils_1 = require("../utils");
9
10
  const secrets_1 = require("./secrets");
@@ -13,9 +14,13 @@ const applyOnBeingAttackedBuffs = (attackerEntity, attackerBoard, attackerHero,
13
14
  for (const secret of ((_a = defendingPlayerEntity.secrets) !== null && _a !== void 0 ? _a : []).filter((s) => !s.triggered)) {
14
15
  switch (secret.cardId) {
15
16
  case "TB_Bacon_Secrets_07":
17
+ case "TB_Bacon_Secrets_07b":
16
18
  if (!defendingEntity.divineShield) {
17
19
  secret.triggered = true;
18
20
  (0, divine_shield_1.updateDivineShield)(defendingEntity, defendingBoard, defendingPlayerEntity, attackerHero, true, gameState);
21
+ if (secret.cardId === "TB_Bacon_Secrets_07b") {
22
+ defendingEntity.strongDivineShield = true;
23
+ }
19
24
  }
20
25
  break;
21
26
  case "TB_Bacon_Secrets_04":
@@ -25,9 +30,10 @@ const applyOnBeingAttackedBuffs = (attackerEntity, attackerBoard, attackerHero,
25
30
  }
26
31
  break;
27
32
  case "TB_Bacon_Secrets_15":
33
+ case "TB_Bacon_Secrets_15b":
28
34
  if (defendingBoard.length < 7) {
29
35
  secret.triggered = true;
30
- (0, secrets_1.handlePackTactics)(defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState);
36
+ (0, secrets_1.handlePackTactics)(defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState, secret.cardId);
31
37
  }
32
38
  break;
33
39
  case "TB_Bacon_Secrets_02":
@@ -37,9 +43,15 @@ const applyOnBeingAttackedBuffs = (attackerEntity, attackerBoard, attackerHero,
37
43
  }
38
44
  break;
39
45
  case "TB_Bacon_Secrets_01":
46
+ case "TB_Bacon_Secrets_01b":
40
47
  if (defendingBoard.length < 7) {
41
48
  secret.triggered = true;
42
- (0, secrets_1.handleVenomstrikeTrap)(defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState);
49
+ const spawns = (0, secrets_1.handleVenomstrikeTrap)(defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState);
50
+ if (secret.cardId === "TB_Bacon_Secrets_01b") {
51
+ for (const spawn of spawns) {
52
+ (0, reborn_1.updateReborn)(spawn, true, defendingBoard, defendingPlayerEntity, attackerHero, gameState);
53
+ }
54
+ }
43
55
  }
44
56
  break;
45
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"on-being-attacked.js","sourceRoot":"","sources":["../../src/simulation/on-being-attacked.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnMinionAttacked } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { updateVenomous } from '../keywords/venomous';\r\nimport { addStatsToBoard } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { handlePackTactics, handleSnakeTrap, handleSplittingImage, handleVenomstrikeTrap } from './secrets';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const applyOnBeingAttackedBuffs = (\r\n\tattackerEntity: BoardEntity,\r\n\tattackerBoard: BoardEntity[],\r\n\tattackerHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// We need to respect the order of the secrets\r\n\tfor (const secret of (defendingPlayerEntity.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.AutodefenseMatrix_TB_Bacon_Secrets_07:\r\n\t\t\t\tif (!defendingEntity.divineShield) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\tupdateDivineShield(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\ttrue,\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.SplittingImage_TB_Bacon_Secrets_04:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSplittingImage(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\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.PackTactics_TB_Bacon_Secrets_15:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandlePackTactics(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\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.SnakeTrap_TB_Bacon_Secrets_02:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSnakeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\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.VenomstrikeTrap_TB_Bacon_Secrets_01:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleVenomstrikeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\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}\r\n\t}\r\n\r\n\tfor (const entity of defendingBoard) {\r\n\t\tconst onBeingAttackedImpl = cardMappings[entity.cardId];\r\n\t\tif (hasOnMinionAttacked(onBeingAttackedImpl)) {\r\n\t\t\tonBeingAttackedImpl.onAttacked(entity, {\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tattacker: attackerEntity,\r\n\t\t\t\tattackingHero: attackerHero,\r\n\t\t\t\tattackingBoard: attackerBoard,\r\n\t\t\t\tdefendingHero: defendingPlayerEntity,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tif (defendingEntity.taunt) {\r\n\t\t// const champions = defendingBoard.filter((entity) => entity.cardId === CardIds.ChampionOfYshaarj_BGS_111);\r\n\t\t// const goldenChampions = defendingBoard.filter(\r\n\t\t// \t(entity) => entity.cardId === CardIds.ChampionOfYshaarj_TB_BaconUps_301,\r\n\t\t// );\r\n\t\t// champions.forEach((entity) => {\r\n\t\t// \tmodifyStats(entity, entity, 1, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t// });\r\n\t\t// goldenChampions.forEach((entity) => {\r\n\t\t// \tmodifyStats(entity, entity, 2, 4, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t// });\r\n\r\n\t\tdefendingBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((entity) => {\r\n\t\t\t\tconst buff = entity.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ? 1 : 2;\r\n\t\t\t\taddStatsToBoard(entity, defendingBoard, defendingPlayerEntity, buff, 0, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\t// Based on defending entity\r\n\t// if (defendingEntity.cardId === CardIds.TormentedRitualist_BGS_201) {\r\n\t// \tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t// \tneighbours.forEach((entity) => {\r\n\t// \t\tmodifyStats(entity, defendingEntity, 1, 1, defendingBoard, defendingPlayerEntity, gameState);\r\n\t// \t});\r\n\t// } else if (defendingEntity.cardId === CardIds.TormentedRitualist_TB_BaconUps_257) {\r\n\t// \tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t// \tneighbours.forEach((entity) => {\r\n\t// \t\tmodifyStats(entity, defendingEntity, 2, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t// \t});\r\n\t// } else\r\n\tif (\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300 ||\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G\r\n\t) {\r\n\t\tmodifyStats(\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G ? 2 : 1,\r\n\t\t\t0,\r\n\t\t\tdefendingBoard,\r\n\t\t\tdefendingPlayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t} else if (\r\n\t\t[CardIds.AdaptableBarricade_BG27_022, CardIds.AdaptableBarricade_BG27_022_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\t// https://twitter.com/LoewenMitchell/status/1692225556559901031?s=20\r\n\t\tconst totalStats = defendingEntity.attack + defendingEntity.health;\r\n\t\tconst attackerAttack = attackerEntity.attack;\r\n\t\tif (defendingEntity.divineShield) {\r\n\t\t\tdefendingEntity.health = 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t} else if (attackerEntity.venomous || attackerEntity.poisonous) {\r\n\t\t\t// Do nothing\r\n\t\t} else if (attackerAttack < totalStats) {\r\n\t\t\tdefendingEntity.health = attackerAttack + 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t}\r\n\t\t// } else if (\r\n\t\t// \t[CardIds.GraniteGuardian_BG24_001, CardIds.GraniteGuardian_BG24_001_G].includes(\r\n\t\t// \t\tdefendingEntity.cardId as CardIds,\r\n\t\t// \t)\r\n\t\t// ) {\r\n\t\t// \tsetEntityStats(attackerEntity, attackerEntity.attack, 1, attackerBoard, attackerHero, gameState);\r\n\t\t// \t// attackerEntity.health = 1;\r\n\t} else if (\r\n\t\t[CardIds.WaywardGrimscale_BG28_406, CardIds.WaywardGrimscale_BG28_406_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\tupdateVenomous(defendingEntity, true, defendingBoard, defendingPlayerEntity, attackerHero, gameState);\r\n\t}\r\n};\r\n\r\nexport interface OnMinionAttackedInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"on-being-attacked.js","sourceRoot":"","sources":["../../src/simulation/on-being-attacked.ts"],"names":[],"mappings":";;;AAEA,4DAA8D;AAC9D,iEAA4D;AAC5D,6DAA+D;AAC/D,+CAAkD;AAClD,mDAAsD;AAEtD,oCAA2C;AAE3C,uCAA4G;AAC5G,mCAAsC;AAE/B,MAAM,yBAAyB,GAAG,CACxC,cAA2B,EAC3B,aAA4B,EAC5B,YAA6B,EAC7B,eAA4B,EAC5B,cAA6B,EAC7B,qBAAsC,EACtC,SAAwB,EACjB,EAAE;;IAET,KAAK,MAAM,MAAM,IAAI,CAAC,MAAA,qBAAqB,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;QACvF,QAAQ,MAAM,CAAC,MAAM,EAAE;YACtB,2BAAmD;YACnD;gBACC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;oBAClC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,kCAAkB,EACjB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,IAAI,EACJ,SAAS,CACT,CAAC;oBACF,IAAI,MAAM,CAAC,MAAM,2BAA2E,EAAE;wBAC7F,eAAe,CAAC,kBAAkB,GAAG,IAAI,CAAC;qBAC1C;iBACD;gBACD,MAAM;YACP;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,8BAAoB,EACnB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP,2BAA6C;YAC7C;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,2BAAiB,EAChB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,MAAM,CAAC,MAAM,CACb,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,yBAAe,EACd,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP,2BAAiD;YACjD;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,MAAM,MAAM,GAAG,IAAA,+BAAqB,EACnC,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;oBACF,IAAI,MAAM,CAAC,MAAM,2BAAuE,EAAE;wBACzF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;4BAC3B,IAAA,qBAAY,EAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;yBAC1F;qBACD;iBACD;gBACD,MAAM;SACP;KACD;IAED,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;QACpC,MAAM,mBAAmB,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,IAAA,oCAAmB,EAAC,mBAAmB,CAAC,EAAE;YAC7C,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE;gBACtC,eAAe,EAAE,eAAe;gBAChC,QAAQ,EAAE,cAAc;gBACxB,aAAa,EAAE,YAAY;gBAC3B,cAAc,EAAE,aAAa;gBAC7B,aAAa,EAAE,qBAAqB;gBACpC,cAAc,EAAE,cAAc;gBAC9B,SAAS;aACT,CAAC,CAAC;SACH;KACD;IAED,IAAI,eAAe,CAAC,KAAK,EAAE;QAY1B,cAAc;aACZ,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,iCAAuD;YAC/D,CAAC,CAAC,MAAM,mCAAyD,CAClE;aACA,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iCAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,IAAA,uBAAe,EAAC,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;KACJ;IAcD,IACC,eAAe,CAAC,MAAM,eAA+B;QACrD,eAAe,CAAC,MAAM,iBAAiC,EACtD;QACD,IAAA,mBAAW,EACV,eAAe,EACf,eAAe,EACf,eAAe,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/D,CAAC,EACD,cAAc,EACd,qBAAqB,EACrB,SAAS,CACT,CAAC;KACF;SAAM,IACN,0BAA4E,CAAC,QAAQ,CACpF,eAAe,CAAC,MAAiB,CACjC,EACA;QAED,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QACnE,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;QAC7C,IAAI,eAAe,CAAC,YAAY,EAAE;YACjC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,eAAe,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;SAC7D;aAAM,IAAI,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,EAAE;SAE/D;aAAM,IAAI,cAAc,GAAG,UAAU,EAAE;YACvC,eAAe,CAAC,MAAM,GAAG,cAAc,GAAG,CAAC,CAAC;YAC5C,eAAe,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;SAC7D;KAQD;SAAM,IACN,0BAAwE,CAAC,QAAQ,CAChF,eAAe,CAAC,MAAiB,CACjC,EACA;QACD,IAAA,yBAAc,EAAC,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;KACtG;AACF,CAAC,CAAC;AA3LW,QAAA,yBAAyB,6BA2LpC","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnMinionAttacked } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { updateVenomous } from '../keywords/venomous';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { addStatsToBoard } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { handlePackTactics, handleSnakeTrap, handleSplittingImage, handleVenomstrikeTrap } from './secrets';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const applyOnBeingAttackedBuffs = (\r\n\tattackerEntity: BoardEntity,\r\n\tattackerBoard: BoardEntity[],\r\n\tattackerHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// We need to respect the order of the secrets\r\n\tfor (const secret of (defendingPlayerEntity.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.AutodefenseMatrix_TB_Bacon_Secrets_07:\r\n\t\t\tcase CardIds.AutodefenseMatrix_BetterAutodefenseMatrix_TB_Bacon_Secrets_07b:\r\n\t\t\t\tif (!defendingEntity.divineShield) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\tupdateDivineShield(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (secret.cardId === CardIds.AutodefenseMatrix_BetterAutodefenseMatrix_TB_Bacon_Secrets_07b) {\r\n\t\t\t\t\t\tdefendingEntity.strongDivineShield = true;\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.SplittingImage_TB_Bacon_Secrets_04:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSplittingImage(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\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.PackTactics_TB_Bacon_Secrets_15:\r\n\t\t\tcase CardIds.PackTactics_BetterPackTactics_TB_Bacon_Secrets_15b:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandlePackTactics(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tsecret.cardId,\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.SnakeTrap_TB_Bacon_Secrets_02:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSnakeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\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.VenomstrikeTrap_TB_Bacon_Secrets_01:\r\n\t\t\tcase CardIds.VenomstrikeTrap_BetterVenomstrikeTrap_TB_Bacon_Secrets_01b:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\tconst spawns = handleVenomstrikeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (secret.cardId === CardIds.VenomstrikeTrap_BetterVenomstrikeTrap_TB_Bacon_Secrets_01b) {\r\n\t\t\t\t\t\tfor (const spawn of spawns) {\r\n\t\t\t\t\t\t\tupdateReborn(spawn, true, defendingBoard, defendingPlayerEntity, attackerHero, gameState);\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}\r\n\t}\r\n\r\n\tfor (const entity of defendingBoard) {\r\n\t\tconst onBeingAttackedImpl = cardMappings[entity.cardId];\r\n\t\tif (hasOnMinionAttacked(onBeingAttackedImpl)) {\r\n\t\t\tonBeingAttackedImpl.onAttacked(entity, {\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tattacker: attackerEntity,\r\n\t\t\t\tattackingHero: attackerHero,\r\n\t\t\t\tattackingBoard: attackerBoard,\r\n\t\t\t\tdefendingHero: defendingPlayerEntity,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tif (defendingEntity.taunt) {\r\n\t\t// const champions = defendingBoard.filter((entity) => entity.cardId === CardIds.ChampionOfYshaarj_BGS_111);\r\n\t\t// const goldenChampions = defendingBoard.filter(\r\n\t\t// \t(entity) => entity.cardId === CardIds.ChampionOfYshaarj_TB_BaconUps_301,\r\n\t\t// );\r\n\t\t// champions.forEach((entity) => {\r\n\t\t// \tmodifyStats(entity, entity, 1, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t// });\r\n\t\t// goldenChampions.forEach((entity) => {\r\n\t\t// \tmodifyStats(entity, entity, 2, 4, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t// });\r\n\r\n\t\tdefendingBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((entity) => {\r\n\t\t\t\tconst buff = entity.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ? 1 : 2;\r\n\t\t\t\taddStatsToBoard(entity, defendingBoard, defendingPlayerEntity, buff, 0, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\t// Based on defending entity\r\n\t// if (defendingEntity.cardId === CardIds.TormentedRitualist_BGS_201) {\r\n\t// \tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t// \tneighbours.forEach((entity) => {\r\n\t// \t\tmodifyStats(entity, defendingEntity, 1, 1, defendingBoard, defendingPlayerEntity, gameState);\r\n\t// \t});\r\n\t// } else if (defendingEntity.cardId === CardIds.TormentedRitualist_TB_BaconUps_257) {\r\n\t// \tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t// \tneighbours.forEach((entity) => {\r\n\t// \t\tmodifyStats(entity, defendingEntity, 2, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t// \t});\r\n\t// } else\r\n\tif (\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300 ||\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G\r\n\t) {\r\n\t\tmodifyStats(\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G ? 2 : 1,\r\n\t\t\t0,\r\n\t\t\tdefendingBoard,\r\n\t\t\tdefendingPlayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t} else if (\r\n\t\t[CardIds.AdaptableBarricade_BG27_022, CardIds.AdaptableBarricade_BG27_022_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\t// https://twitter.com/LoewenMitchell/status/1692225556559901031?s=20\r\n\t\tconst totalStats = defendingEntity.attack + defendingEntity.health;\r\n\t\tconst attackerAttack = attackerEntity.attack;\r\n\t\tif (defendingEntity.divineShield) {\r\n\t\t\tdefendingEntity.health = 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t} else if (attackerEntity.venomous || attackerEntity.poisonous) {\r\n\t\t\t// Do nothing\r\n\t\t} else if (attackerAttack < totalStats) {\r\n\t\t\tdefendingEntity.health = attackerAttack + 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t}\r\n\t\t// } else if (\r\n\t\t// \t[CardIds.GraniteGuardian_BG24_001, CardIds.GraniteGuardian_BG24_001_G].includes(\r\n\t\t// \t\tdefendingEntity.cardId as CardIds,\r\n\t\t// \t)\r\n\t\t// ) {\r\n\t\t// \tsetEntityStats(attackerEntity, attackerEntity.attack, 1, attackerBoard, attackerHero, gameState);\r\n\t\t// \t// attackerEntity.health = 1;\r\n\t} else if (\r\n\t\t[CardIds.WaywardGrimscale_BG28_406, CardIds.WaywardGrimscale_BG28_406_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\tupdateVenomous(defendingEntity, true, defendingBoard, defendingPlayerEntity, attackerHero, gameState);\r\n\t}\r\n};\r\n\r\nexport interface OnMinionAttackedInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"quest.js","sourceRoot":"","sources":["../../src/simulation/quest.ts"],"names":[],"mappings":";;;AAKO,MAAM,sBAAsB,GAAG,CACrC,YAA6B,EAC7B,KAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;IACH,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;QAChD,OAAO;KACP;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACtE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QACjD,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC;KACtE,CAAC,CAAC;IAGH,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjG,4BAA4B,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC;AAEF,MAAM,4BAA4B,GAAG,CACpC,YAAoB,EACpB,KAAoB,EACpB,YAA6B,EAC7B,SAAwB,EACvB,EAAE;IACH,QAAQ,YAAY,EAAE;QACrB;YACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM;QACP;YACC,MAAM;KACP;AACF,CAAC,CAAC","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BgsQuestEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const onQuestProgressUpdated = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tquest: BgsQuestEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tquest.ProgressCurrent++;\r\n\tif (quest.ProgressCurrent < quest.ProgressTotal) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst rewardCardId = gameState.allCards.getCard(quest.RewardDbfId).id;\r\n\tplayerEntity.questRewards.push(rewardCardId);\r\n\tplayerEntity.questRewardEntities.push({\r\n\t\tcardId: rewardCardId,\r\n\t\tentityId: gameState.sharedState.currentEntityId++,\r\n\t\tavengeDefault: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tavengeCurrent: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tscriptDataNum1: gameState.cardsData.defaultScriptDataNum(rewardCardId),\r\n\t});\r\n\r\n\t// Remove the quest from the list of quests\r\n\tplayerEntity.questEntities = playerEntity.questEntities.filter((q) => q.CardId !== quest.CardId);\r\n\r\n\tupdateStateAfterQuestCreated(rewardCardId, board, playerEntity, gameState);\r\n};\r\n\r\nconst updateStateAfterQuestCreated = (\r\n\trewardCardId: string,\r\n\tboard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tswitch (rewardCardId) {\r\n\t\tcase CardIds.TheSmokingGun:\r\n\t\t\tboard.forEach((e) => {\r\n\t\t\t\te.attack += 4;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"quest.js","sourceRoot":"","sources":["../../src/simulation/quest.ts"],"names":[],"mappings":";;;AAKO,MAAM,sBAAsB,GAAG,CACrC,YAA6B,EAC7B,KAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;IACH,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;QAChD,OAAO;KACP;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACtE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QACjD,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC;KACtE,CAAC,CAAC;IAGH,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjG,4BAA4B,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC;AAEF,MAAM,4BAA4B,GAAG,CACpC,YAAoB,EACpB,KAAoB,EACpB,YAA6B,EAC7B,SAAwB,EACvB,EAAE;IACH,QAAQ,YAAY,EAAE;QACrB;YACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM;QACP;YACC,MAAM;KACP;AACF,CAAC,CAAC","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { BgsPlayerEntity, BgsQuestEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const onQuestProgressUpdated = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tquest: BgsQuestEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tquest.ProgressCurrent++;\r\n\tif (quest.ProgressCurrent < quest.ProgressTotal) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst rewardCardId = gameState.allCards.getCard(quest.RewardDbfId).id;\r\n\tplayerEntity.questRewards.push(rewardCardId);\r\n\tplayerEntity.questRewardEntities.push({\r\n\t\tcardId: rewardCardId,\r\n\t\tentityId: gameState.sharedState.currentEntityId++,\r\n\t\tavengeDefault: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tavengeCurrent: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tscriptDataNum1: gameState.cardsData.defaultScriptDataNum(rewardCardId),\r\n\t});\r\n\r\n\t// Remove the quest from the list of quests\r\n\tplayerEntity.questEntities = playerEntity.questEntities.filter((q) => q.CardId !== quest.CardId);\r\n\r\n\tupdateStateAfterQuestCreated(rewardCardId, board, playerEntity, gameState);\r\n};\r\n\r\nconst updateStateAfterQuestCreated = (\r\n\trewardCardId: string,\r\n\tboard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tswitch (rewardCardId) {\r\n\t\tcase CardIds.TheSmokingGun:\r\n\t\t\tboard.forEach((e) => {\r\n\t\t\t\te.attack += 4;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reborn.js","sourceRoot":"","sources":["../../src/simulation/reborn.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasRebornEffect, hasRebornSelfEffect } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { addStatsToBoard } from '../utils';\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 handleRebornForEntity = (\r\n\tboardWithKilledMinion: BoardEntity[],\r\n\tboardWithKilledMinionHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadMinionIndexFromRight: number,\r\n\topponentBoard: BoardEntity[],\r\n\topponentBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst numberOfReborns = 1;\r\n\tlet entityToSpawn: BoardEntity = null;\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.SinrunnerBlanchy_BG24_005 ||\r\n\t\tdeadEntity.cardId === CardIds.SinrunnerBlanchy_BG24_005_G\r\n\t) {\r\n\t\tentityToSpawn = {\r\n\t\t\t...deadEntity,\r\n\t\t\thasAttacked: 0,\r\n\t\t\thealth: deadEntity.maxHealth,\r\n\t\t\tdivineShield: deadEntity.hadDivineShield,\r\n\t\t\treborn: false,\r\n\t\t};\r\n\t}\r\n\tconst entitiesFromReborn: readonly BoardEntity[] =\r\n\t\tdeadEntity.reborn && deadMinionIndexFromRight >= 0\r\n\t\t\t? spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\tnumberOfReborns,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\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\ttrue,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tentityToSpawn,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t )\r\n\t\t\t: [];\r\n\tif (!entitiesFromReborn.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109 ||\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G\r\n\t) {\r\n\t\tentitiesFromReborn.forEach((e) => {\r\n\t\t\tconst attack = deadEntity.maxAttack;\r\n\t\t\tconst health = deadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G ? deadEntity.maxHealth : 1;\r\n\t\t\te.attack = attack;\r\n\t\t\te.health = health;\r\n\t\t});\r\n\t}\r\n\r\n\tfor (const entity of entitiesFromReborn) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornSelfEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornSelfEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const entity of boardWithKilledMinion) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tconst entitiesThatWereReborn = performEntitySpawns(\r\n\t\tentitiesFromReborn,\r\n\t\tboardWithKilledMinion,\r\n\t\tboardWithKilledMinionHero,\r\n\t\tdeadEntity,\r\n\t\tdeadMinionIndexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tentitiesThatWereReborn.forEach((e) => (e.rebornFromEntityId = deadEntity.entityId));\r\n\tconst entityRightToSpawns =\r\n\t\tdeadMinionIndexFromRight === 0\r\n\t\t\t? null\r\n\t\t\t: boardWithKilledMinion[boardWithKilledMinion.length - deadMinionIndexFromRight];\r\n\tentitiesThatWereReborn.forEach((entity) => {\r\n\t\tentity.hasAttacked = deadEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\t// Arfus\r\n\tboardWithKilledMinion\r\n\t\t.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.cardId === CardIds.Arfus_TB_BaconShop_HERO_22_Buddy ||\r\n\t\t\t\te.cardId === CardIds.Arfus_TB_BaconShop_HERO_22_Buddy_G,\r\n\t\t)\r\n\t\t.forEach((arfus) => {\r\n\t\t\tconst multiplier = arfus.cardId === CardIds.Arfus_TB_BaconShop_HERO_22_Buddy_G ? 2 : 1;\r\n\t\t\tconst attackBonus = arfus.attack * multiplier;\r\n\t\t\tentitiesThatWereReborn\r\n\t\t\t\t.filter((e) => e.entityId !== arfus.entityId && e.rebornFromEntityId !== arfus.entityId)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tmodifyStats(e, arfus, attackBonus, 0, boardWithKilledMinion, boardWithKilledMinionHero, gameState);\r\n\t\t\t\t});\r\n\t\t});\r\n\r\n\tconst numberOfTriggersForDeathwhisper = Math.min(entitiesThatWereReborn.length, 1);\r\n\tfor (let i = 0; i < numberOfTriggersForDeathwhisper; i++) {\r\n\t\tboardWithKilledMinion\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020 ||\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst multiplier = e.cardId === CardIds.SisterDeathwhisper_BG25_020_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\tmultiplier * 1,\r\n\t\t\t\t\tmultiplier * 3,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\tboardWithKilledMinion\r\n\t\t\t.filter((e) => e.cardId === CardIds.JellyBelly_BG25_005 || e.cardId === CardIds.JellyBelly_BG25_005_G)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst multiplier = e.cardId === CardIds.JellyBelly_BG25_005_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\te,\r\n\t\t\t\t\tmultiplier * 2,\r\n\t\t\t\t\tmultiplier * 3,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\nexport interface RebornEffectInput {\r\n\treadonly rebornEntity: BoardEntity;\r\n\treadonly boardWithKilledMinion: BoardEntity[];\r\n\treadonly boardWithKilledMinionHero: BgsPlayerEntity;\r\n\treadonly opponentBoard: BoardEntity[];\r\n\treadonly opponentBoardHero: BgsPlayerEntity;\r\n\treadonly gameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"reborn.js","sourceRoot":"","sources":["../../src/simulation/reborn.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasRebornEffect, hasRebornSelfEffect } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { addStatsToBoard } from '../utils';\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 handleRebornForEntity = (\r\n\tboardWithKilledMinion: BoardEntity[],\r\n\tboardWithKilledMinionHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadMinionIndexFromRight: number,\r\n\topponentBoard: BoardEntity[],\r\n\topponentBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst numberOfReborns = 1;\r\n\tlet entityToSpawn: BoardEntity = null;\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.SinrunnerBlanchy_BG24_005 ||\r\n\t\tdeadEntity.cardId === CardIds.SinrunnerBlanchy_BG24_005_G\r\n\t) {\r\n\t\tentityToSpawn = {\r\n\t\t\t...deadEntity,\r\n\t\t\thasAttacked: 0,\r\n\t\t\thealth: deadEntity.maxHealth,\r\n\t\t\tdivineShield: deadEntity.hadDivineShield,\r\n\t\t\treborn: false,\r\n\t\t};\r\n\t}\r\n\tconst entitiesFromReborn: readonly BoardEntity[] =\r\n\t\tdeadEntity.reborn && deadMinionIndexFromRight >= 0\r\n\t\t\t? spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\tnumberOfReborns,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\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\ttrue,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tentityToSpawn,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t )\r\n\t\t\t: [];\r\n\tif (!entitiesFromReborn.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109 ||\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G\r\n\t) {\r\n\t\tentitiesFromReborn.forEach((e) => {\r\n\t\t\tconst attack = deadEntity.maxAttack;\r\n\t\t\tconst health = deadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G ? deadEntity.maxHealth : 1;\r\n\t\t\te.attack = attack;\r\n\t\t\te.health = health;\r\n\t\t});\r\n\t}\r\n\r\n\tfor (const entity of entitiesFromReborn) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornSelfEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornSelfEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const entity of boardWithKilledMinion) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tconst entitiesThatWereReborn = performEntitySpawns(\r\n\t\tentitiesFromReborn,\r\n\t\tboardWithKilledMinion,\r\n\t\tboardWithKilledMinionHero,\r\n\t\tdeadEntity,\r\n\t\tdeadMinionIndexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tentitiesThatWereReborn.forEach((e) => (e.rebornFromEntityId = deadEntity.entityId));\r\n\tconst entityRightToSpawns =\r\n\t\tdeadMinionIndexFromRight === 0\r\n\t\t\t? null\r\n\t\t\t: boardWithKilledMinion[boardWithKilledMinion.length - deadMinionIndexFromRight];\r\n\tentitiesThatWereReborn.forEach((entity) => {\r\n\t\tentity.hasAttacked = deadEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\t// Arfus\r\n\tboardWithKilledMinion\r\n\t\t.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.cardId === CardIds.Arfus_TB_BaconShop_HERO_22_Buddy ||\r\n\t\t\t\te.cardId === CardIds.Arfus_TB_BaconShop_HERO_22_Buddy_G,\r\n\t\t)\r\n\t\t.forEach((arfus) => {\r\n\t\t\tconst multiplier = arfus.cardId === CardIds.Arfus_TB_BaconShop_HERO_22_Buddy_G ? 2 : 1;\r\n\t\t\tconst attackBonus = arfus.attack * multiplier;\r\n\t\t\tentitiesThatWereReborn\r\n\t\t\t\t.filter((e) => e.entityId !== arfus.entityId && e.rebornFromEntityId !== arfus.entityId)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tmodifyStats(e, arfus, attackBonus, 0, boardWithKilledMinion, boardWithKilledMinionHero, gameState);\r\n\t\t\t\t});\r\n\t\t});\r\n\r\n\tconst numberOfTriggersForDeathwhisper = Math.min(entitiesThatWereReborn.length, 1);\r\n\tfor (let i = 0; i < numberOfTriggersForDeathwhisper; i++) {\r\n\t\tboardWithKilledMinion\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020 ||\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst multiplier = e.cardId === CardIds.SisterDeathwhisper_BG25_020_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\tmultiplier * 1,\r\n\t\t\t\t\tmultiplier * 3,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\tboardWithKilledMinion\r\n\t\t\t.filter((e) => e.cardId === CardIds.JellyBelly_BG25_005 || e.cardId === CardIds.JellyBelly_BG25_005_G)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst multiplier = e.cardId === CardIds.JellyBelly_BG25_005_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\te,\r\n\t\t\t\t\tmultiplier * 2,\r\n\t\t\t\t\tmultiplier * 3,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\nexport interface RebornEffectInput {\r\n\treadonly rebornEntity: BoardEntity;\r\n\treadonly boardWithKilledMinion: BoardEntity[];\r\n\treadonly boardWithKilledMinionHero: BgsPlayerEntity;\r\n\treadonly opponentBoard: BoardEntity[];\r\n\treadonly opponentBoardHero: BgsPlayerEntity;\r\n\treadonly gameState: FullGameState;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"remembered-deathrattle.js","sourceRoot":"","sources":["../../src/simulation/remembered-deathrattle.ts"],"names":[],"mappings":";;;AAEA,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAE3B,MAAM,4BAA4B,GAAG,CAC3C,sBAA6E,EACrB,EAAE;IAC1D,MAAM,UAAU,GAAG,sBAAsB;SACvC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,WAAC,OAAA,MAAA,WAAW,CAAC,MAAM,0CAAE,UAAU,YAA8B,CAAA,EAAA,CAAC;SACrF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C;QACD,OAAO,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IACJ,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAiC,CAAC,CAAC,CAAC;IAC5G,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC;IAC9G,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,YAAY,CAAC,CAAC;AAC3C,CAAC,CAAC;AAdW,QAAA,4BAA4B,gCAcvC;AAEF,MAAM,iBAAiB,GAAG,CACzB,UAAiE,EACT,EAAE;IAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,YAAY,IAAI,sBAAsB,EAAE;QAC3C,OAAO,UAAU,CAAC;KAClB;IAED,MAAM,MAAM,GAA0D,EAAE,CAAC;IACzE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,sBAAsB,CAAC,CAAC;IACzE,IAAI,WAAW,GAAG,YAAY,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QACzD,WAAW,IAAI,YAAY,CAAC;KAC5B;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\n\r\nconst MAX_LEAPFROGGER_GROUPS = 12;\r\n\r\nexport const groupLeapfroggerDeathrattles = (\r\n\trememberedDeathrattles: { cardId: string; timing: number; repeats: number }[],\r\n): { cardId: string; timing: number; repeats: number }[] => {\r\n\tconst candidates = rememberedDeathrattles\r\n\t\t.filter((deathrattle) => deathrattle.cardId?.startsWith(CardIds.Leapfrogger_BG21_000))\r\n\t\t.map((d) => {\r\n\t\t\tif (d.cardId.endsWith('e')) {\r\n\t\t\t\treturn { ...d, cardId: d.cardId.slice(0, -1) };\r\n\t\t\t}\r\n\t\t\treturn d;\r\n\t\t});\r\n\tconst normalGroups = groupDeathrattles(candidates.filter((d) => d.cardId === CardIds.Leapfrogger_BG21_000));\r\n\tconst goldenGroups = groupDeathrattles(candidates.filter((d) => d.cardId === CardIds.Leapfrogger_BG21_000_G));\r\n\treturn [...normalGroups, ...goldenGroups];\r\n};\r\n\r\nconst groupDeathrattles = (\r\n\tcandidates: { cardId: string; timing: number; repeats: number }[],\r\n): { cardId: string; timing: number; repeats: number }[] => {\r\n\tconst totalRepeats = candidates.reduce((acc, next) => acc + next.repeats, 0);\r\n\tif (totalRepeats <= MAX_LEAPFROGGER_GROUPS) {\r\n\t\treturn candidates;\r\n\t}\r\n\r\n\tconst result: { cardId: string; timing: number; repeats: number }[] = [];\r\n\tconst repeatsPerGroup = Math.ceil(totalRepeats / MAX_LEAPFROGGER_GROUPS);\r\n\tlet repeatsLeft = totalRepeats;\r\n\tfor (let i = 0; i < MAX_LEAPFROGGER_GROUPS; i++) {\r\n\t\tconst groupRepeats = Math.min(repeatsPerGroup, repeatsLeft);\r\n\t\tresult.push({ ...candidates[0], repeats: groupRepeats });\r\n\t\trepeatsLeft -= groupRepeats;\r\n\t}\r\n\treturn result;\r\n};\r\n"]}
1
+ {"version":3,"file":"remembered-deathrattle.js","sourceRoot":"","sources":["../../src/simulation/remembered-deathrattle.ts"],"names":[],"mappings":";;;AAEA,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAE3B,MAAM,4BAA4B,GAAG,CAC3C,sBAA6E,EACrB,EAAE;IAC1D,MAAM,UAAU,GAAG,sBAAsB;SACvC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,WAAC,OAAA,MAAA,WAAW,CAAC,MAAM,0CAAE,UAAU,YAA8B,CAAA,EAAA,CAAC;SACrF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C;QACD,OAAO,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IACJ,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAiC,CAAC,CAAC,CAAC;IAC5G,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC;IAC9G,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,YAAY,CAAC,CAAC;AAC3C,CAAC,CAAC;AAdW,QAAA,4BAA4B,gCAcvC;AAEF,MAAM,iBAAiB,GAAG,CACzB,UAAiE,EACT,EAAE;IAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,YAAY,IAAI,sBAAsB,EAAE;QAC3C,OAAO,UAAU,CAAC;KAClB;IAED,MAAM,MAAM,GAA0D,EAAE,CAAC;IACzE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,sBAAsB,CAAC,CAAC;IACzE,IAAI,WAAW,GAAG,YAAY,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QACzD,WAAW,IAAI,YAAY,CAAC;KAC5B;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC","sourcesContent":["import { CardIds } from '../services/card-ids';\n\r\nconst MAX_LEAPFROGGER_GROUPS = 12;\r\n\r\nexport const groupLeapfroggerDeathrattles = (\r\n\trememberedDeathrattles: { cardId: string; timing: number; repeats: number }[],\r\n): { cardId: string; timing: number; repeats: number }[] => {\r\n\tconst candidates = rememberedDeathrattles\r\n\t\t.filter((deathrattle) => deathrattle.cardId?.startsWith(CardIds.Leapfrogger_BG21_000))\r\n\t\t.map((d) => {\r\n\t\t\tif (d.cardId.endsWith('e')) {\r\n\t\t\t\treturn { ...d, cardId: d.cardId.slice(0, -1) };\r\n\t\t\t}\r\n\t\t\treturn d;\r\n\t\t});\r\n\tconst normalGroups = groupDeathrattles(candidates.filter((d) => d.cardId === CardIds.Leapfrogger_BG21_000));\r\n\tconst goldenGroups = groupDeathrattles(candidates.filter((d) => d.cardId === CardIds.Leapfrogger_BG21_000_G));\r\n\treturn [...normalGroups, ...goldenGroups];\r\n};\r\n\r\nconst groupDeathrattles = (\r\n\tcandidates: { cardId: string; timing: number; repeats: number }[],\r\n): { cardId: string; timing: number; repeats: number }[] => {\r\n\tconst totalRepeats = candidates.reduce((acc, next) => acc + next.repeats, 0);\r\n\tif (totalRepeats <= MAX_LEAPFROGGER_GROUPS) {\r\n\t\treturn candidates;\r\n\t}\r\n\r\n\tconst result: { cardId: string; timing: number; repeats: number }[] = [];\r\n\tconst repeatsPerGroup = Math.ceil(totalRepeats / MAX_LEAPFROGGER_GROUPS);\r\n\tlet repeatsLeft = totalRepeats;\r\n\tfor (let i = 0; i < MAX_LEAPFROGGER_GROUPS; i++) {\r\n\t\tconst groupRepeats = Math.min(repeatsPerGroup, repeatsLeft);\r\n\t\tresult.push({ ...candidates[0], repeats: groupRepeats });\r\n\t\trepeatsLeft -= groupRepeats;\r\n\t}\r\n\treturn result;\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-minion-from-board.js","sourceRoot":"","sources":["../../src/simulation/remove-minion-from-board.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { hasOnDespawned } from '../cards/card.interface';\r\n\r\nexport const removeMinionFromBoard = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tindex: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst removedEntity = board.splice(index, 1)[0];\r\n\thandleMinionRemovedAuraEffect(board, removedEntity, boardHero, gameState);\r\n};\r\n\r\nexport const handleMinionRemovedAuraEffect = (\r\n\tboard: BoardEntity[],\r\n\tremoved: BoardEntity,\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst onDespawnedImpl = cardMappings[removed.cardId];\r\n\tif (hasOnDespawned(onDespawnedImpl)) {\r\n\t\tonDespawnedImpl.onDespawned(removed, {\r\n\t\t\thero: boardHero,\r\n\t\t\tboard: board,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (removed.cardId) {\r\n\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\r\n\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\r\n\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\r\n\t\t\t// console.debug('removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t\te.health = Math.max(1, e.health - diff);\r\n\t\t\t\t});\r\n\t\t\t// console.debug('after removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tbreak;\r\n\t\t// case CardIds.Kathranatir_BG21_039:\r\n\t\t// case CardIds.Kathranatir_BG21_039_G:\r\n\t\t// \tboard\r\n\t\t// \t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards))\r\n\t\t// \t\t.forEach((e) => {\r\n\t\t// \t\t\tconst diff = removed.cardId === CardIds.Kathranatir_BG21_039_G ? 4 : 2;\r\n\t\t// \t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t// \t\t});\r\n\t\t// \tbreak;\r\n\t\tcase CardIds.CyborgDrake_BG25_043:\r\n\t\tcase CardIds.CyborgDrake_BG25_043_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => e.divineShield)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SoreLoser_BG27_030:\r\n\t\tcase CardIds.SoreLoser_BG27_030_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = (removed.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"remove-minion-from-board.js","sourceRoot":"","sources":["../../src/simulation/remove-minion-from-board.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { Race } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { hasOnDespawned } from '../cards/card.interface';\r\n\r\nexport const removeMinionFromBoard = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tindex: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst removedEntity = board.splice(index, 1)[0];\r\n\thandleMinionRemovedAuraEffect(board, removedEntity, boardHero, gameState);\r\n};\r\n\r\nexport const handleMinionRemovedAuraEffect = (\r\n\tboard: BoardEntity[],\r\n\tremoved: BoardEntity,\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst onDespawnedImpl = cardMappings[removed.cardId];\r\n\tif (hasOnDespawned(onDespawnedImpl)) {\r\n\t\tonDespawnedImpl.onDespawned(removed, {\r\n\t\t\thero: boardHero,\r\n\t\t\tboard: board,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (removed.cardId) {\r\n\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\r\n\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\r\n\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\r\n\t\t\t// console.debug('removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t\te.health = Math.max(1, e.health - diff);\r\n\t\t\t\t});\r\n\t\t\t// console.debug('after removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tbreak;\r\n\t\t// case CardIds.Kathranatir_BG21_039:\r\n\t\t// case CardIds.Kathranatir_BG21_039_G:\r\n\t\t// \tboard\r\n\t\t// \t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards))\r\n\t\t// \t\t.forEach((e) => {\r\n\t\t// \t\t\tconst diff = removed.cardId === CardIds.Kathranatir_BG21_039_G ? 4 : 2;\r\n\t\t// \t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t// \t\t});\r\n\t\t// \tbreak;\r\n\t\tcase CardIds.CyborgDrake_BG25_043:\r\n\t\tcase CardIds.CyborgDrake_BG25_043_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => e.divineShield)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SoreLoser_BG27_030:\r\n\t\tcase CardIds.SoreLoser_BG27_030_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = (removed.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
@@ -2,6 +2,6 @@ import { BgsPlayerEntity } from '../bgs-player-entity';
2
2
  import { BoardEntity } from '../board-entity';
3
3
  import { FullGameState } from './internal-game-state';
4
4
  export declare const handleSplittingImage: (defendingEntity: BoardEntity, defendingBoard: BoardEntity[], defendingPlayerEntity: BgsPlayerEntity, attackerBoard: BoardEntity[], attackerHero: BgsPlayerEntity, gameState: FullGameState) => void;
5
- export declare const handlePackTactics: (defendingEntity: BoardEntity, defendingBoard: BoardEntity[], defendingPlayerEntity: BgsPlayerEntity, attackerBoard: BoardEntity[], attackerHero: BgsPlayerEntity, gameState: FullGameState) => void;
5
+ export declare const handlePackTactics: (defendingEntity: BoardEntity, defendingBoard: BoardEntity[], defendingPlayerEntity: BgsPlayerEntity, attackerBoard: BoardEntity[], attackerHero: BgsPlayerEntity, gameState: FullGameState, secretCardId: string) => void;
6
6
  export declare const handleSnakeTrap: (defendingEntity: BoardEntity, defendingBoard: BoardEntity[], defendingPlayerEntity: BgsPlayerEntity, attackerBoard: BoardEntity[], attackerHero: BgsPlayerEntity, gameState: FullGameState) => void;
7
- export declare const handleVenomstrikeTrap: (defendingEntity: BoardEntity, defendingBoard: BoardEntity[], defendingPlayerEntity: BgsPlayerEntity, attackerBoard: BoardEntity[], attackerHero: BgsPlayerEntity, gameState: FullGameState) => void;
7
+ export declare const handleVenomstrikeTrap: (defendingEntity: BoardEntity, defendingBoard: BoardEntity[], defendingPlayerEntity: BgsPlayerEntity, attackerBoard: BoardEntity[], attackerHero: BgsPlayerEntity, gameState: FullGameState) => readonly BoardEntity[];
@@ -16,11 +16,13 @@ const handleSplittingImage = (defendingEntity, defendingBoard, defendingPlayerEn
16
16
  (0, spawns_1.performEntitySpawns)(candidateEntities, defendingBoard, defendingPlayerEntity, defendingEntity, indexFromRight, attackerBoard, attackerHero, gameState);
17
17
  };
18
18
  exports.handleSplittingImage = handleSplittingImage;
19
- const handlePackTactics = (defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState) => {
19
+ const handlePackTactics = (defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState, secretCardId) => {
20
20
  const candidateEntities = (0, deathrattle_spawns_1.spawnEntities)(defendingEntity.cardId, 1, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState, defendingEntity.friendly, false, false, true, { ...defendingEntity });
21
21
  const indexFromRight = defendingBoard.length - (defendingBoard.indexOf(defendingEntity) + 1);
22
22
  const spawned = (0, spawns_1.performEntitySpawns)(candidateEntities, defendingBoard, defendingPlayerEntity, defendingEntity, indexFromRight, attackerBoard, attackerHero, gameState);
23
- spawned.forEach((e) => (0, stats_1.setEntityStats)(e, 3, 3, defendingBoard, defendingPlayerEntity, gameState));
23
+ if (secretCardId === "TB_Bacon_Secrets_15") {
24
+ spawned.forEach((e) => (0, stats_1.setEntityStats)(e, 3, 3, defendingBoard, defendingPlayerEntity, gameState));
25
+ }
24
26
  };
25
27
  exports.handlePackTactics = handlePackTactics;
26
28
  const handleSnakeTrap = (defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState) => {
@@ -30,7 +32,8 @@ const handleSnakeTrap = (defendingEntity, defendingBoard, defendingPlayerEntity,
30
32
  exports.handleSnakeTrap = handleSnakeTrap;
31
33
  const handleVenomstrikeTrap = (defendingEntity, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState) => {
32
34
  const candidateEntities = (0, deathrattle_spawns_1.spawnEntities)("BG_EX1_170", 1, defendingBoard, defendingPlayerEntity, attackerBoard, attackerHero, gameState, defendingEntity.friendly, false);
33
- (0, spawns_1.performEntitySpawns)(candidateEntities, defendingBoard, defendingPlayerEntity, defendingEntity, 0, attackerBoard, attackerHero, gameState);
35
+ const spawns = (0, spawns_1.performEntitySpawns)(candidateEntities, defendingBoard, defendingPlayerEntity, defendingEntity, 0, attackerBoard, attackerHero, gameState);
36
+ return spawns;
34
37
  };
35
38
  exports.handleVenomstrikeTrap = handleVenomstrikeTrap;
36
39
  //# sourceMappingURL=secrets.js.map