@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":"stats.js","sourceRoot":"","sources":["../../src/simulation/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsHeroPower, BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { hasOnStatsChanged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { applyAurasToSelf, removeAurasFromSelf } from './add-minion-to-board';\r\nimport { getNeighbours } from './attack';\r\nimport { FullGameState, PlayerState } from './internal-game-state';\r\nimport { onQuestProgressUpdated } from './quest';\r\n\r\nexport const setEntityStats = (\r\n\tentity: BoardEntity,\r\n\tattack: number | null,\r\n\thealth: number | null,\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tremoveAurasFromSelf(entity, board, boardHero, gameState);\r\n\tif (attack !== null) {\r\n\t\tentity.attack = attack;\r\n\t\tentity.maxAttack = attack;\r\n\t}\r\n\tif (health !== null) {\r\n\t\tentity.health = health;\r\n\t\tentity.maxHealth = health;\r\n\t}\r\n\tapplyAurasToSelf(entity, board, boardHero, gameState);\r\n};\r\n\r\nexport const modifyStats = (\r\n\tentity: BoardEntity,\r\n\tsource: BoardEntity | BoardSecret | BoardTrinket | BgsPlayerEntity | BgsHeroPower,\r\n\tattackAmount: number,\r\n\thealthAmount: number,\r\n\tfriendlyBoard: BoardEntity[],\r\n\tfriendlyBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tregisterSpectator = true,\r\n\t// All stat modifications become enchantments, excepted the ones coming from gilding a minion\r\n\tisEnchantment = true,\r\n): void => {\r\n\tconst debug = attackAmount === 10;\r\n\tif (attackAmount === 0 && healthAmount === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (entity.cardId === CardIds.LocPrince_BG29_889 || entity.cardId === CardIds.LocPrince_BG29_889_G) {\r\n\t\tconst buff = entity.cardId === CardIds.LocPrince_BG29_889_G ? 2 : 1;\r\n\t\tattackAmount += 2 * buff;\r\n\t\thealthAmount += 1 * buff;\r\n\t}\r\n\r\n\tif (\r\n\t\tentity?.entityId !== source?.entityId &&\r\n\t\thasCorrectTribe(\r\n\t\t\tsource as BoardEntity,\r\n\t\t\tfriendlyBoardHero,\r\n\t\t\tRace.ELEMENTAL,\r\n\t\t\tgameState.anomalies,\r\n\t\t\tgameState.allCards,\r\n\t\t) &&\r\n\t\t// Safeguard\r\n\t\tattackAmount >= 0 &&\r\n\t\thealthAmount >= 0\r\n\t) {\r\n\t\tattackAmount += friendlyBoardHero.globalInfo.ElementalAttackBuff;\r\n\t\thealthAmount += friendlyBoardHero.globalInfo.ElementalHealthBuff;\r\n\t}\r\n\r\n\t// The only spell for now that grants stats is the Fleeting Vigor secret, and the stats it grants\r\n\t// are in scriptDataNum1 and 2\r\n\t// if (\r\n\t// \tentity?.entityId !== source?.entityId &&\r\n\t// \tgameState.allCards.getCard(source?.cardId).type?.toUpperCase() === CardType[CardType.BATTLEGROUND_SPELL] &&\r\n\t// \t// Safeguard\r\n\t// \tattackAmount >= 0 &&\r\n\t// \thealthAmount >= 0\r\n\t// ) {\r\n\t// \tattackAmount += friendlyBoardHero.globalInfo.TavernSpellAttackBuff;\r\n\t// \thealthAmount += friendlyBoardHero.globalInfo.TavernSpellHealthBuff;\r\n\t// }\r\n\r\n\tconst otherBoardHero: BgsPlayerEntity =\r\n\t\tgameState.gameState.player.player === friendlyBoardHero\r\n\t\t\t? gameState.gameState.opponent.player\r\n\t\t\t: gameState.gameState.player.player;\r\n\r\n\tconst neighbours = getNeighbours(friendlyBoard, entity);\r\n\tconst poetMultipliers =\r\n\t\tisEnchantment &&\r\n\t\thasCorrectTribe(entity, friendlyBoardHero, Race.DRAGON, gameState.anomalies, gameState.allCards)\r\n\t\t\t? neighbours.filter((e) => e.cardId === CardIds.PersistentPoet_BG29_813_G).length * 2 || 1\r\n\t\t\t: 1;\r\n\tconst tarecgosaMultiplier = isEnchantment && entity.cardId === CardIds.Tarecgosa_BG21_015_G ? 2 : 1;\r\n\r\n\tconst realAttackAmount = attackAmount * poetMultipliers * tarecgosaMultiplier;\r\n\tconst realHealthAmount = healthAmount * poetMultipliers * tarecgosaMultiplier;\r\n\r\n\tentity.attack = Math.max(0, entity.attack + realAttackAmount);\r\n\tentity.previousAttack = entity.attack;\r\n\tentity.pendingAttackBuffs = entity.pendingAttackBuffs || [];\r\n\tentity.pendingAttackBuffs.push(realAttackAmount);\r\n\tentity.health += realHealthAmount;\r\n\r\n\tif (realAttackAmount > 0) {\r\n\t\tentity.maxAttack += realAttackAmount;\r\n\r\n\t\tif (hasCorrectTribe(entity, friendlyBoardHero, Race.DRAGON, gameState.anomalies, gameState.allCards)) {\r\n\t\t\tif (entity.cardId !== CardIds.Stormbringer_BG26_966 && entity.cardId !== CardIds.Stormbringer_BG26_966_G) {\r\n\t\t\t\tconst stormbringers = friendlyBoard.filter(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.Stormbringer_BG26_966 || e.cardId === CardIds.Stormbringer_BG26_966_G,\r\n\t\t\t\t);\r\n\t\t\t\tstormbringers.forEach((stormbringer) => {\r\n\t\t\t\t\tconst multiplier = stormbringer.cardId === CardIds.Stormbringer_BG26_966_G ? 2 : 1;\r\n\t\t\t\t\tstormbringer.attack += multiplier * realAttackAmount;\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tstormbringer,\r\n\t\t\t\t\t\tstormbringer,\r\n\t\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Sinestra\r\n\t\tfriendlyBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.LadySinestra_TB_BaconShop_HERO_52_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.LadySinestra_TB_BaconShop_HERO_52_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((sinestra) => {\r\n\t\t\t\tconst buff = sinestra.cardId === CardIds.LadySinestra_TB_BaconShop_HERO_52_Buddy_G ? 2 : 1;\r\n\t\t\t\tentity.health += buff;\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tsinestra,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n\r\n\tif (realHealthAmount > 0) {\r\n\t\tentity.maxHealth += realHealthAmount;\r\n\t\tconst titanicGuardians = friendlyBoard\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TitanicGuardian_TB_BaconShop_HERO_39_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.TitanicGuardian_TB_BaconShop_HERO_39_Buddy_G,\r\n\t\t\t);\r\n\t\ttitanicGuardians.forEach((guardian) => {\r\n\t\t\tconst buff =\r\n\t\t\t\t(guardian.cardId === CardIds.TitanicGuardian_TB_BaconShop_HERO_39_Buddy_G ? 2 : 1) * realHealthAmount;\r\n\t\t\tif (buff > 0) {\r\n\t\t\t\tguardian.health += buff;\r\n\t\t\t\tguardian.maxHealth += buff;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tif (registerSpectator && !!source) {\r\n\t\tgameState.spectator.registerPowerTarget(source, entity, friendlyBoard, friendlyBoardHero, otherBoardHero);\r\n\t}\r\n\r\n\tif (\r\n\t\tentity.cardId === CardIds.Menagerist_AmalgamToken ||\r\n\t\tentity.cardId === CardIds.Amalgam ||\r\n\t\tentity.cardId === CardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A ||\r\n\t\tentity.cardId === CardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A_G ||\r\n\t\tentity.cardId === CardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D ||\r\n\t\tentity.cardId === CardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D_G\r\n\t) {\r\n\t\tconst mishmashes = friendlyBoard.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy ||\r\n\t\t\t\te.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G,\r\n\t\t);\r\n\t\tmishmashes.forEach((mishmash) => {\r\n\t\t\tmodifyStats(\r\n\t\t\t\tmishmash,\r\n\t\t\t\tmishmash,\r\n\t\t\t\t(mishmash.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G ? 2 : 1) * realAttackAmount,\r\n\t\t\t\t(mishmash.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G ? 2 : 1) * realHealthAmount,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\tonStatsUpdate(\r\n\t\tentity,\r\n\t\trealAttackAmount,\r\n\t\trealHealthAmount,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyBoardHero,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n};\r\n\r\nconst onStatsUpdate = (\r\n\tentity: BoardEntity,\r\n\trealAttackAmount: number,\r\n\trealHealthAmount: number,\r\n\tfriendlyBoard: BoardEntity[],\r\n\tfriendlyHero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tonStatUpdateMinions(entity, realAttackAmount, realHealthAmount, friendlyBoard, friendlyHero, otherHero, gameState);\r\n\tonStatUpdateQuests(entity, friendlyBoard, friendlyHero, gameState);\r\n};\r\n\r\nexport const applyAfterStatsUpdate = (gameState: FullGameState) => {\r\n\tfor (const entity of gameState.gameState.player.board) {\r\n\t\tapplyAfterStatsUpdateForEntity(entity, gameState.gameState.player, gameState.gameState.opponent, gameState);\r\n\t}\r\n\tfor (const entity of gameState.gameState.opponent.board) {\r\n\t\tapplyAfterStatsUpdateForEntity(entity, gameState.gameState.opponent, gameState.gameState.player, gameState);\r\n\t}\r\n};\r\n\r\nconst applyAfterStatsUpdateForEntity = (\r\n\tentity: BoardEntity,\r\n\tplayerState: PlayerState,\r\n\topponentState: PlayerState,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tentity.pendingAttackBuffs = [];\r\n};\r\n\r\nconst onStatUpdateQuests = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst quests = hero.questEntities ?? [];\r\n\tif (!quests.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tfor (const quest of quests) {\r\n\t\tswitch (quest.CardId) {\r\n\t\t\tcase CardIds.FindTheMurderWeapon:\r\n\t\t\t\tonQuestProgressUpdated(hero, quest, board, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PressureTheAuthorities:\r\n\t\t\t\tconst totalAttack = board.map((e) => e.attack).reduce((a, b) => a + b, 0);\r\n\t\t\t\tif (totalAttack >= 35) {\r\n\t\t\t\t\tonQuestProgressUpdated(hero, 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\r\nconst onStatUpdateMinions = (\r\n\tentity: BoardEntity,\r\n\tattackAmount: number,\r\n\thealthAmount: number,\r\n\tfriendlyBoard: BoardEntity[],\r\n\tfriendlyBoardHero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (attackAmount > 0 || healthAmount > 0) {\r\n\t\tfor (const boardEntity of friendlyBoard) {\r\n\t\t\tconst onStatsChangedImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnStatsChanged(onStatsChangedImpl)) {\r\n\t\t\t\tonStatsChangedImpl.onStatsChanged(boardEntity, {\r\n\t\t\t\t\ttarget: entity,\r\n\t\t\t\t\tattackAmount: attackAmount,\r\n\t\t\t\t\thealthAmount: healthAmount,\r\n\t\t\t\t\tboard: friendlyBoard,\r\n\t\t\t\t\thero: friendlyBoardHero,\r\n\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (hasCorrectTribe(entity, friendlyBoardHero, Race.ELEMENTAL, gameState.anomalies, gameState.allCards)) {\r\n\t\tconst masterOfRealities = friendlyBoard.filter(\r\n\t\t\t(e) => e.cardId === CardIds.MasterOfRealities_BG21_036 || e.cardId === CardIds.MasterOfRealities_BG21_036_G,\r\n\t\t);\r\n\t\tmasterOfRealities.forEach((master) => {\r\n\t\t\tmodifyStats(\r\n\t\t\t\tmaster,\r\n\t\t\t\tmaster,\r\n\t\t\t\tmaster.cardId === CardIds.MasterOfRealities_BG21_036_G ? 2 : 1,\r\n\t\t\t\tmaster.cardId === CardIds.MasterOfRealities_BG21_036_G ? 2 : 1,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\tconst tentaclesOfCthun = friendlyBoard\r\n\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy ||\r\n\t\t\t\te.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy_G,\r\n\t\t);\r\n\ttentaclesOfCthun.forEach((tentacle) => {\r\n\t\ttentacle.attack += tentacle.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy_G ? 2 : 1;\r\n\t\ttentacle.health += tentacle.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy_G ? 2 : 1;\r\n\t});\r\n};\r\n\r\nexport interface OnStatsChangedInput {\r\n\ttarget: BoardEntity;\r\n\tattackAmount: number;\r\n\thealthAmount: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/simulation/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { Race } from '@firestone-hs/reference-data';\nimport { BgsHeroPower, BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { hasOnStatsChanged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { applyAurasToSelf, removeAurasFromSelf } from './add-minion-to-board';\r\nimport { getNeighbours } from './attack';\r\nimport { FullGameState, PlayerState } from './internal-game-state';\r\nimport { onQuestProgressUpdated } from './quest';\r\n\r\nexport const setEntityStats = (\r\n\tentity: BoardEntity,\r\n\tattack: number | null,\r\n\thealth: number | null,\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tremoveAurasFromSelf(entity, board, boardHero, gameState);\r\n\tif (attack !== null) {\r\n\t\tentity.attack = attack;\r\n\t\tentity.maxAttack = attack;\r\n\t}\r\n\tif (health !== null) {\r\n\t\tentity.health = health;\r\n\t\tentity.maxHealth = health;\r\n\t}\r\n\tapplyAurasToSelf(entity, board, boardHero, gameState);\r\n};\r\n\r\nexport const modifyStats = (\r\n\tentity: BoardEntity,\r\n\tsource: BoardEntity | BoardSecret | BoardTrinket | BgsPlayerEntity | BgsHeroPower,\r\n\tattackAmount: number,\r\n\thealthAmount: number,\r\n\tfriendlyBoard: BoardEntity[],\r\n\tfriendlyBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tregisterSpectator = true,\r\n\t// All stat modifications become enchantments, excepted the ones coming from gilding a minion\r\n\tisEnchantment = true,\r\n): void => {\r\n\tconst debug = attackAmount === 10;\r\n\tif (attackAmount === 0 && healthAmount === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (entity.cardId === CardIds.LocPrince_BG29_889 || entity.cardId === CardIds.LocPrince_BG29_889_G) {\r\n\t\tconst buff = entity.cardId === CardIds.LocPrince_BG29_889_G ? 2 : 1;\r\n\t\tattackAmount += 2 * buff;\r\n\t\thealthAmount += 1 * buff;\r\n\t}\r\n\r\n\tif (\r\n\t\tentity?.entityId !== source?.entityId &&\r\n\t\thasCorrectTribe(\r\n\t\t\tsource as BoardEntity,\r\n\t\t\tfriendlyBoardHero,\r\n\t\t\tRace.ELEMENTAL,\r\n\t\t\tgameState.anomalies,\r\n\t\t\tgameState.allCards,\r\n\t\t) &&\r\n\t\t// Safeguard\r\n\t\tattackAmount >= 0 &&\r\n\t\thealthAmount >= 0\r\n\t) {\r\n\t\tattackAmount += friendlyBoardHero.globalInfo.ElementalAttackBuff;\r\n\t\thealthAmount += friendlyBoardHero.globalInfo.ElementalHealthBuff;\r\n\t}\r\n\r\n\t// The only spell for now that grants stats is the Fleeting Vigor secret, and the stats it grants\r\n\t// are in scriptDataNum1 and 2\r\n\t// if (\r\n\t// \tentity?.entityId !== source?.entityId &&\r\n\t// \tgameState.allCards.getCard(source?.cardId).type?.toUpperCase() === CardType[CardType.BATTLEGROUND_SPELL] &&\r\n\t// \t// Safeguard\r\n\t// \tattackAmount >= 0 &&\r\n\t// \thealthAmount >= 0\r\n\t// ) {\r\n\t// \tattackAmount += friendlyBoardHero.globalInfo.TavernSpellAttackBuff;\r\n\t// \thealthAmount += friendlyBoardHero.globalInfo.TavernSpellHealthBuff;\r\n\t// }\r\n\r\n\tconst otherBoardHero: BgsPlayerEntity =\r\n\t\tgameState.gameState.player.player === friendlyBoardHero\r\n\t\t\t? gameState.gameState.opponent.player\r\n\t\t\t: gameState.gameState.player.player;\r\n\r\n\tconst neighbours = getNeighbours(friendlyBoard, entity);\r\n\tconst poetMultipliers =\r\n\t\tisEnchantment &&\r\n\t\thasCorrectTribe(entity, friendlyBoardHero, Race.DRAGON, gameState.anomalies, gameState.allCards)\r\n\t\t\t? neighbours.filter((e) => e.cardId === CardIds.PersistentPoet_BG29_813_G).length * 2 || 1\r\n\t\t\t: 1;\r\n\tconst tarecgosaMultiplier = isEnchantment && entity.cardId === CardIds.Tarecgosa_BG21_015_G ? 2 : 1;\r\n\r\n\tconst realAttackAmount = attackAmount * poetMultipliers * tarecgosaMultiplier;\r\n\tconst realHealthAmount = healthAmount * poetMultipliers * tarecgosaMultiplier;\r\n\r\n\tentity.attack = Math.max(0, entity.attack + realAttackAmount);\r\n\tentity.previousAttack = entity.attack;\r\n\tentity.pendingAttackBuffs = entity.pendingAttackBuffs || [];\r\n\tentity.pendingAttackBuffs.push(realAttackAmount);\r\n\tentity.health += realHealthAmount;\r\n\r\n\tif (realAttackAmount > 0) {\r\n\t\tentity.maxAttack += realAttackAmount;\r\n\r\n\t\tif (hasCorrectTribe(entity, friendlyBoardHero, Race.DRAGON, gameState.anomalies, gameState.allCards)) {\r\n\t\t\tif (entity.cardId !== CardIds.Stormbringer_BG26_966 && entity.cardId !== CardIds.Stormbringer_BG26_966_G) {\r\n\t\t\t\tconst stormbringers = friendlyBoard.filter(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.Stormbringer_BG26_966 || e.cardId === CardIds.Stormbringer_BG26_966_G,\r\n\t\t\t\t);\r\n\t\t\t\tstormbringers.forEach((stormbringer) => {\r\n\t\t\t\t\tconst multiplier = stormbringer.cardId === CardIds.Stormbringer_BG26_966_G ? 2 : 1;\r\n\t\t\t\t\tstormbringer.attack += multiplier * realAttackAmount;\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tstormbringer,\r\n\t\t\t\t\t\tstormbringer,\r\n\t\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Sinestra\r\n\t\tfriendlyBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.LadySinestra_TB_BaconShop_HERO_52_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.LadySinestra_TB_BaconShop_HERO_52_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((sinestra) => {\r\n\t\t\t\tconst buff = sinestra.cardId === CardIds.LadySinestra_TB_BaconShop_HERO_52_Buddy_G ? 2 : 1;\r\n\t\t\t\tentity.health += buff;\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tsinestra,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n\r\n\tif (realHealthAmount > 0) {\r\n\t\tentity.maxHealth += realHealthAmount;\r\n\t\tconst titanicGuardians = friendlyBoard\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TitanicGuardian_TB_BaconShop_HERO_39_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.TitanicGuardian_TB_BaconShop_HERO_39_Buddy_G,\r\n\t\t\t);\r\n\t\ttitanicGuardians.forEach((guardian) => {\r\n\t\t\tconst buff =\r\n\t\t\t\t(guardian.cardId === CardIds.TitanicGuardian_TB_BaconShop_HERO_39_Buddy_G ? 2 : 1) * realHealthAmount;\r\n\t\t\tif (buff > 0) {\r\n\t\t\t\tguardian.health += buff;\r\n\t\t\t\tguardian.maxHealth += buff;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tif (registerSpectator && !!source) {\r\n\t\tgameState.spectator.registerPowerTarget(source, entity, friendlyBoard, friendlyBoardHero, otherBoardHero);\r\n\t}\r\n\r\n\tif (\r\n\t\tentity.cardId === CardIds.Menagerist_AmalgamToken ||\r\n\t\tentity.cardId === CardIds.Amalgam ||\r\n\t\tentity.cardId === CardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A ||\r\n\t\tentity.cardId === CardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A_G ||\r\n\t\tentity.cardId === CardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D ||\r\n\t\tentity.cardId === CardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D_G\r\n\t) {\r\n\t\tconst mishmashes = friendlyBoard.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy ||\r\n\t\t\t\te.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G,\r\n\t\t);\r\n\t\tmishmashes.forEach((mishmash) => {\r\n\t\t\tmodifyStats(\r\n\t\t\t\tmishmash,\r\n\t\t\t\tmishmash,\r\n\t\t\t\t(mishmash.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G ? 2 : 1) * realAttackAmount,\r\n\t\t\t\t(mishmash.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G ? 2 : 1) * realHealthAmount,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\tonStatsUpdate(\r\n\t\tentity,\r\n\t\trealAttackAmount,\r\n\t\trealHealthAmount,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyBoardHero,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n};\r\n\r\nconst onStatsUpdate = (\r\n\tentity: BoardEntity,\r\n\trealAttackAmount: number,\r\n\trealHealthAmount: number,\r\n\tfriendlyBoard: BoardEntity[],\r\n\tfriendlyHero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tonStatUpdateMinions(entity, realAttackAmount, realHealthAmount, friendlyBoard, friendlyHero, otherHero, gameState);\r\n\tonStatUpdateQuests(entity, friendlyBoard, friendlyHero, gameState);\r\n};\r\n\r\nexport const applyAfterStatsUpdate = (gameState: FullGameState) => {\r\n\tfor (const entity of gameState.gameState.player.board) {\r\n\t\tapplyAfterStatsUpdateForEntity(entity, gameState.gameState.player, gameState.gameState.opponent, gameState);\r\n\t}\r\n\tfor (const entity of gameState.gameState.opponent.board) {\r\n\t\tapplyAfterStatsUpdateForEntity(entity, gameState.gameState.opponent, gameState.gameState.player, gameState);\r\n\t}\r\n};\r\n\r\nconst applyAfterStatsUpdateForEntity = (\r\n\tentity: BoardEntity,\r\n\tplayerState: PlayerState,\r\n\topponentState: PlayerState,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tentity.pendingAttackBuffs = [];\r\n};\r\n\r\nconst onStatUpdateQuests = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst quests = hero.questEntities ?? [];\r\n\tif (!quests.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tfor (const quest of quests) {\r\n\t\tswitch (quest.CardId) {\r\n\t\t\tcase CardIds.FindTheMurderWeapon:\r\n\t\t\t\tonQuestProgressUpdated(hero, quest, board, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PressureTheAuthorities:\r\n\t\t\t\tconst totalAttack = board.map((e) => e.attack).reduce((a, b) => a + b, 0);\r\n\t\t\t\tif (totalAttack >= 35) {\r\n\t\t\t\t\tonQuestProgressUpdated(hero, 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\r\nconst onStatUpdateMinions = (\r\n\tentity: BoardEntity,\r\n\tattackAmount: number,\r\n\thealthAmount: number,\r\n\tfriendlyBoard: BoardEntity[],\r\n\tfriendlyBoardHero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (attackAmount > 0 || healthAmount > 0) {\r\n\t\tfor (const boardEntity of friendlyBoard) {\r\n\t\t\tconst onStatsChangedImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnStatsChanged(onStatsChangedImpl)) {\r\n\t\t\t\tonStatsChangedImpl.onStatsChanged(boardEntity, {\r\n\t\t\t\t\ttarget: entity,\r\n\t\t\t\t\tattackAmount: attackAmount,\r\n\t\t\t\t\thealthAmount: healthAmount,\r\n\t\t\t\t\tboard: friendlyBoard,\r\n\t\t\t\t\thero: friendlyBoardHero,\r\n\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (hasCorrectTribe(entity, friendlyBoardHero, Race.ELEMENTAL, gameState.anomalies, gameState.allCards)) {\r\n\t\tconst masterOfRealities = friendlyBoard.filter(\r\n\t\t\t(e) => e.cardId === CardIds.MasterOfRealities_BG21_036 || e.cardId === CardIds.MasterOfRealities_BG21_036_G,\r\n\t\t);\r\n\t\tmasterOfRealities.forEach((master) => {\r\n\t\t\tmodifyStats(\r\n\t\t\t\tmaster,\r\n\t\t\t\tmaster,\r\n\t\t\t\tmaster.cardId === CardIds.MasterOfRealities_BG21_036_G ? 2 : 1,\r\n\t\t\t\tmaster.cardId === CardIds.MasterOfRealities_BG21_036_G ? 2 : 1,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\tconst tentaclesOfCthun = friendlyBoard\r\n\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy ||\r\n\t\t\t\te.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy_G,\r\n\t\t);\r\n\ttentaclesOfCthun.forEach((tentacle) => {\r\n\t\ttentacle.attack += tentacle.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy_G ? 2 : 1;\r\n\t\ttentacle.health += tentacle.cardId === CardIds.TentacleOfCthun_TB_BaconShop_HERO_29_Buddy_G ? 2 : 1;\r\n\t});\r\n};\r\n\r\nexport interface OnStatsChangedInput {\r\n\ttarget: BoardEntity;\r\n\tattackAmount: number;\r\n\thealthAmount: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleSharptoothSnapperForPlayer = exports.handleSummonsWhenSpace = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const taunt_1 = require("../keywords/taunt");
6
- const utils_1 = require("../utils");
6
+ const utils_1 = require("../services/utils");
7
+ const utils_2 = require("../utils");
7
8
  const add_minion_to_board_1 = require("./add-minion-to-board");
8
9
  const deathrattle_spawns_1 = require("./deathrattle-spawns");
9
10
  const spawns_1 = require("./spawns");
@@ -31,7 +32,15 @@ const handleSummonsWhenSpaceForPlayer = (targetEntity, playerBoard, playerEntity
31
32
  }
32
33
  for (const heroPower of targetEntity.heroPowers) {
33
34
  if (heroPower.cardId === "BG23_HERO_201p") {
34
- handleOzumatForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, targetEntity.friendly, gameState);
35
+ handleOzumatForPlayer(heroPower, playerBoard, playerEntity, opponentBoard, opponentEntity, targetEntity.friendly, gameState);
36
+ }
37
+ else if (heroPower.cardId === "BG22_HERO_002p" && heroPower.info && !heroPower.activated) {
38
+ handleFrostwolfFervorForPlayer(heroPower, playerBoard, playerEntity, opponentBoard, opponentEntity, targetEntity.friendly, gameState);
39
+ }
40
+ else if (heroPower.cardId === "BG22_HERO_003p" &&
41
+ heroPower.info &&
42
+ !heroPower.activated) {
43
+ handleStormpikeStrengthForPlayer(heroPower, playerBoard, playerEntity, opponentBoard, opponentEntity, targetEntity.friendly, gameState);
35
44
  }
36
45
  }
37
46
  targetEntity.trinkets
@@ -64,9 +73,9 @@ const handleBoomControllerForPlayer = (trinket, playerBoard, playerEntity, oppon
64
73
  if (playerBoard.length < 7 && trinket.scriptDataNum1 > 0) {
65
74
  const candidate = gameState.sharedState.deaths
66
75
  .filter((d) => d.friendly === playerEntity.friendly)
67
- .filter((d) => (0, utils_1.hasCorrectTribe)(d, playerEntity, reference_data_1.Race.MECH, gameState.anomalies, gameState.allCards))[0];
76
+ .filter((d) => (0, utils_2.hasCorrectTribe)(d, playerEntity, reference_data_1.Race.MECH, gameState.anomalies, gameState.allCards))[0];
68
77
  if (!!candidate) {
69
- const spawn = (0, utils_1.copyEntity)(candidate);
78
+ const spawn = (0, utils_2.copyEntity)(candidate);
70
79
  (0, add_minion_to_board_1.removeAurasFromSelf)(spawn, playerBoard, playerEntity, gameState);
71
80
  const initialIndexFromLeft = candidate.indexFromLeftAtTimeOfDeath;
72
81
  const indexFromRight = initialIndexFromLeft == null
@@ -85,27 +94,45 @@ const handleTwinSkyLanternsForPlayer = (trinket, playerBoard, playerEntity, oppo
85
94
  const canTrigger = spawnNumber >= 1;
86
95
  if (playerBoard.length <= 7 - spawnNumber && trinket.rememberedMinion && canTrigger) {
87
96
  trinket.scriptDataNum1 = 0;
88
- const spawn = (0, utils_1.copyEntity)(trinket.rememberedMinion);
97
+ const spawn = (0, utils_2.copyEntity)(trinket.rememberedMinion);
89
98
  (0, add_minion_to_board_1.removeAurasFromSelf)(spawn, playerBoard, playerEntity, gameState);
90
99
  const target = (0, deathrattle_spawns_1.spawnEntities)(spawn.cardId, spawnNumber, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, playerEntity.friendly, true, false, false, spawn);
91
100
  (0, spawns_1.performEntitySpawns)(target, playerBoard, playerEntity, playerEntity, 0, opponentBoard, opponentEntity, gameState);
92
101
  target.forEach((t) => gameState.spectator.registerPowerTarget(playerEntity, t, playerBoard, playerEntity, opponentEntity));
93
102
  }
94
103
  };
95
- const handleOzumatForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, friendly, gameState) => {
96
- for (const heroPower of playerEntity.heroPowers) {
97
- if (playerBoard.length < 7 && heroPower.activated === false) {
98
- const tentacularSize = +heroPower.info;
99
- const tentacular = (0, deathrattle_spawns_1.spawnEntities)("BG23_HERO_201pt", 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, friendly, true, false, false);
100
- tentacular[0].attack = tentacularSize;
101
- tentacular[0].health = tentacularSize;
102
- tentacular[0].maxHealth = tentacularSize;
103
- tentacular[0].maxAttack = tentacularSize;
104
- const indexFromRight = 0;
105
- (0, spawns_1.performEntitySpawns)(tentacular, playerBoard, playerEntity, playerEntity, indexFromRight, opponentBoard, opponentEntity, gameState);
106
- gameState.spectator.registerPowerTarget(playerEntity, tentacular[0], playerBoard, playerEntity, opponentEntity);
107
- heroPower.activated = true;
108
- }
104
+ const handleOzumatForPlayer = (heroPower, playerBoard, playerEntity, opponentBoard, opponentEntity, friendly, gameState) => {
105
+ if (playerBoard.length < 7 && heroPower.activated === false) {
106
+ const tentacularSize = +heroPower.info;
107
+ const tentacular = (0, deathrattle_spawns_1.spawnEntities)("BG23_HERO_201pt", 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, friendly, true, false, false);
108
+ tentacular[0].attack = tentacularSize;
109
+ tentacular[0].health = tentacularSize;
110
+ tentacular[0].maxHealth = tentacularSize;
111
+ tentacular[0].maxAttack = tentacularSize;
112
+ const indexFromRight = 0;
113
+ (0, spawns_1.performEntitySpawns)(tentacular, playerBoard, playerEntity, playerEntity, indexFromRight, opponentBoard, opponentEntity, gameState);
114
+ gameState.spectator.registerPowerTarget(playerEntity, tentacular[0], playerBoard, playerEntity, opponentEntity);
115
+ heroPower.activated = true;
116
+ }
117
+ };
118
+ const handleFrostwolfFervorForPlayer = (heroPower, playerBoard, playerEntity, opponentBoard, opponentEntity, friendly, gameState) => {
119
+ if (playerBoard.length < 7) {
120
+ const target = (0, utils_1.pickRandomHighestAttack)(playerBoard);
121
+ const copy = (0, utils_2.copyEntity)(target);
122
+ const indexFromRight = 0;
123
+ (0, spawns_1.performEntitySpawns)([copy], playerBoard, playerEntity, playerEntity, indexFromRight, opponentBoard, opponentEntity, gameState);
124
+ gameState.spectator.registerPowerTarget(playerEntity, copy, playerBoard, playerEntity, opponentEntity);
125
+ heroPower.activated = true;
126
+ }
127
+ };
128
+ const handleStormpikeStrengthForPlayer = (heroPower, playerBoard, playerEntity, opponentBoard, opponentEntity, friendly, gameState) => {
129
+ if (playerBoard.length < 7) {
130
+ const target = (0, utils_1.pickRandomHighestHealth)(playerBoard);
131
+ const copy = (0, utils_2.copyEntity)(target);
132
+ const indexFromRight = 0;
133
+ (0, spawns_1.performEntitySpawns)([copy], playerBoard, playerEntity, playerEntity, indexFromRight, opponentBoard, opponentEntity, gameState);
134
+ gameState.spectator.registerPowerTarget(playerEntity, copy, playerBoard, playerEntity, opponentEntity);
135
+ heroPower.activated = true;
109
136
  }
110
137
  };
111
138
  const handleBoonOfBeetlesForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
@@ -152,7 +179,7 @@ const handleSummon = (playerBoard, playerEntity, opponentBoard, opponentEntity,
152
179
  if (playerBoard.length >= 7) {
153
180
  return null;
154
181
  }
155
- const newMinion = (0, utils_1.buildSingleBoardEntity)(cardId, playerEntity, playerBoard, gameState.allCards, playerEntity.friendly, gameState.sharedState.currentEntityId++, false, gameState.cardsData, gameState.sharedState, minion, null);
182
+ const newMinion = (0, utils_2.buildSingleBoardEntity)(cardId, playerEntity, playerBoard, gameState.allCards, playerEntity.friendly, gameState.sharedState.currentEntityId++, false, gameState.cardsData, gameState.sharedState, minion, null);
156
183
  const spawned = (0, spawns_1.performEntitySpawns)([newMinion], playerBoard, playerEntity, playerEntity, indexFromRight, opponentBoard, opponentEntity, gameState, applyAuras);
157
184
  gameState.spectator.registerPowerTarget(playerEntity, newMinion, playerBoard, null, null);
158
185
  return spawned;
@@ -1 +1 @@
1
- {"version":3,"file":"summon-when-space.js","sourceRoot":"","sources":["../../src/simulation/summon-when-space.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { buildSingleBoardEntity, copyEntity, hasCorrectTribe } from '../utils';\r\nimport { removeAurasFromSelf } from './add-minion-to-board';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\n\r\nexport const handleSummonsWhenSpace = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (Math.random() < 0.5) {\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t} else {\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n};\r\n\r\n// TODO: Twin Sky Lanterns wait for 2 spaces\r\nconst handleSummonsWhenSpaceForPlayer = (\r\n\ttargetEntity: BgsPlayerEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (targetEntity.rapidReanimationMinion) {\r\n\t\thandleRapidReanimationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (targetEntity.questRewards?.includes(CardIds.StableAmalgamation_BG28_Reward_518)) {\r\n\t\thandleStableAmalgamationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (targetEntity.secrets?.some((s) => s.cardId === CardIds.BoonOfBeetles_BG28_603)) {\r\n\t\thandleBoonOfBeetlesForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tfor (const heroPower of targetEntity.heroPowers) {\r\n\t\tif (heroPower.cardId === CardIds.Ozumat_Tentacular) {\r\n\t\t\thandleOzumatForPlayer(\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\ttargetEntity.friendly,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\ttargetEntity.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.TwinSkyLanterns_BG30_MagicItem_822 ||\r\n\t\t\t\tt.cardId === CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2,\r\n\t\t)\r\n\t\t.forEach((t) => {\r\n\t\t\thandleTwinSkyLanternsForPlayer(t, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t\t});\r\n\ttargetEntity.trinkets\r\n\t\t.filter((t) => t.cardId === CardIds.BoomController_BG30_MagicItem_440)\r\n\t\t.forEach((t) => {\r\n\t\t\thandleBoomControllerForPlayer(t, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t\t});\r\n\tplayerBoard\r\n\t\t.filter(\r\n\t\t\t(e) => e.cardId === CardIds.SharptoothSnapper_BG32_201 || e.cardId === CardIds.SharptoothSnapper_BG32_201_G,\r\n\t\t)\r\n\t\t.forEach((e) => {\r\n\t\t\thandleSharptoothSnapperForPlayer(e, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t\t});\r\n};\r\n\r\nexport const handleSharptoothSnapperForPlayer = (\r\n\tentity: BoardEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\twhile (playerBoard.length < 7 && entity.abiityChargesLeft > 0) {\r\n\t\tconst candidates = spawnEntities(\r\n\t\t\tCardIds.SharptoothSnapper_PiranhaToken_BG32_201t,\r\n\t\t\t1,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t\tplayerEntity.friendly,\r\n\t\t\ttrue,\r\n\t\t);\r\n\t\tcandidates.forEach((t) => (t.attackImmediately = true));\r\n\t\tconst actualSpawns = performEntitySpawns(\r\n\t\t\tcandidates,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard.length - 1 - playerBoard.indexOf(entity),\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tentity.abiityChargesLeft--;\r\n\t}\r\n};\r\n\r\nconst handleBoomControllerForPlayer = (\r\n\ttrinket: BoardTrinket,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (playerBoard.length < 7 && trinket.scriptDataNum1 > 0) {\r\n\t\tconst candidate = gameState.sharedState.deaths\r\n\t\t\t.filter((d) => d.friendly === playerEntity.friendly)\r\n\t\t\t.filter((d) => hasCorrectTribe(d, playerEntity, Race.MECH, gameState.anomalies, gameState.allCards))[0];\r\n\t\tif (!!candidate) {\r\n\t\t\tconst spawn = copyEntity(candidate);\r\n\t\t\tremoveAurasFromSelf(spawn, playerBoard, playerEntity, gameState);\r\n\t\t\tconst initialIndexFromLeft = candidate.indexFromLeftAtTimeOfDeath;\r\n\t\t\tconst indexFromRight =\r\n\t\t\t\tinitialIndexFromLeft == null\r\n\t\t\t\t\t? 0\r\n\t\t\t\t\t: Math.min(playerBoard.length, Math.max(0, playerBoard.length - initialIndexFromLeft));\r\n\t\t\tconst target = spawnEntities(\r\n\t\t\t\tspawn.cardId,\r\n\t\t\t\t1,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerEntity.friendly,\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\tfalse,\r\n\t\t\t\tspawn,\r\n\t\t\t);\r\n\t\t\t// FIXME: here it should try to match the position at which the original minions died\r\n\t\t\tconst actualSpawns = performEntitySpawns(\r\n\t\t\t\ttarget,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tactualSpawns.forEach((t) =>\r\n\t\t\t\tgameState.spectator.registerPowerTarget(playerEntity, t, playerBoard, playerEntity, opponentEntity),\r\n\t\t\t);\r\n\t\t\ttrinket.scriptDataNum1 = 0;\r\n\t\t\t// It summons an exact copy\r\n\t\t\t// actualSpawns.forEach((entity) => {\r\n\t\t\t// \tswitch (entity.cardId) {\r\n\t\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401:\r\n\t\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\r\n\t\t\t// \t\t\tconst overstatMult = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401 ? 1 : 2;\r\n\t\t\t// \t\t\tentity.attack = Math.max(1, entity.attack - 2 * overstatMult);\r\n\t\t\t// \t\t\tentity.health = Math.max(0, entity.health - overstatMult);\r\n\t\t\t// \t\t\tbreak;\r\n\t\t\t// \t}\r\n\t\t\t// });\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleTwinSkyLanternsForPlayer = (\r\n\ttrinket: BoardTrinket,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst spawnNumber = trinket.scriptDataNum1 ?? 0;\r\n\tconst canTrigger = spawnNumber >= 1;\r\n\tif (playerBoard.length <= 7 - spawnNumber && trinket.rememberedMinion && canTrigger) {\r\n\t\ttrinket.scriptDataNum1 = 0;\r\n\t\tconst spawn = copyEntity(trinket.rememberedMinion);\r\n\t\tremoveAurasFromSelf(spawn, playerBoard, playerEntity, gameState);\r\n\t\tconst target = spawnEntities(\r\n\t\t\tspawn.cardId,\r\n\t\t\tspawnNumber,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t\tplayerEntity.friendly,\r\n\t\t\ttrue,\r\n\t\t\tfalse,\r\n\t\t\tfalse,\r\n\t\t\tspawn,\r\n\t\t);\r\n\t\tperformEntitySpawns(\r\n\t\t\ttarget,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\t0,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\ttarget.forEach((t) =>\r\n\t\t\tgameState.spectator.registerPowerTarget(playerEntity, t, playerBoard, playerEntity, opponentEntity),\r\n\t\t);\r\n\t}\r\n};\r\n\r\nconst handleOzumatForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tfriendly: boolean,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (const heroPower of playerEntity.heroPowers) {\r\n\t\tif (playerBoard.length < 7 && heroPower.activated === false) {\r\n\t\t\tconst tentacularSize = +heroPower.info;\r\n\t\t\tconst tentacular = spawnEntities(\r\n\t\t\t\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt,\r\n\t\t\t\t1,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tfriendly,\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\tfalse,\r\n\t\t\t);\r\n\t\t\ttentacular[0].attack = tentacularSize;\r\n\t\t\ttentacular[0].health = tentacularSize;\r\n\t\t\ttentacular[0].maxHealth = tentacularSize;\r\n\t\t\ttentacular[0].maxAttack = tentacularSize;\r\n\t\t\tconst indexFromRight = 0;\r\n\t\t\tperformEntitySpawns(\r\n\t\t\t\ttentacular,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\ttentacular[0],\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentEntity,\r\n\t\t\t);\r\n\t\t\theroPower.activated = true;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleBoonOfBeetlesForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst secretEntity = playerEntity.secrets.find((entity) => entity.cardId === CardIds.BoonOfBeetles_BG28_603);\r\n\tif (secretEntity && secretEntity.triggersLeft > 0) {\r\n\t\twhile (secretEntity.triggersLeft > 0) {\r\n\t\t\tconst hasSummoned = handleSummon(\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tCardIds.BoonOfBeetles_BeetleToken_BG28_603t,\r\n\t\t\t\t0,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\tif (hasSummoned) {\r\n\t\t\t\thasSummoned.forEach((entity) => {\r\n\t\t\t\t\tupdateTaunt(entity, true, playerBoard, playerEntity, opponentEntity, gameState);\r\n\t\t\t\t});\r\n\t\t\t\tsecretEntity.triggersLeft--;\r\n\t\t\t} else {\r\n\t\t\t\t// No room to summon, we stop here\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\nconst handleStableAmalgamationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst rewardEntity = playerEntity.questRewardEntities.find(\r\n\t\t(entity) => entity.cardId === CardIds.StableAmalgamation_BG28_Reward_518,\r\n\t);\r\n\tif (rewardEntity && rewardEntity.scriptDataNum1 > 0) {\r\n\t\twhile (rewardEntity.scriptDataNum1 > 0) {\r\n\t\t\tconst hasSummoned = handleSummon(\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tCardIds.StableAmalgamation_TotallyNormalHorseToken_BG28_Reward_518t,\r\n\t\t\t\t0,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\tif (hasSummoned) {\r\n\t\t\t\trewardEntity.scriptDataNum1--;\r\n\t\t\t} else {\r\n\t\t\t\t// No room to summon, we stop here\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleRapidReanimationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst indexFromRight =\r\n\t\tplayerEntity.rapidReanimationIndexFromLeft === 0\r\n\t\t\t? Math.max(0, playerBoard.length - playerEntity.rapidReanimationIndexFromLeft)\r\n\t\t\t: playerEntity.rapidReanimationIndexFromRight;\r\n\tconst hasSummoned = handleSummon(\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tplayerEntity.rapidReanimationMinion.cardId,\r\n\t\tindexFromRight,\r\n\t\ttrue, // (Goldrinn gets buffed, so it seems we reapply auras? This is a mess tbh)\r\n\t\tplayerEntity.rapidReanimationMinion,\r\n\t);\r\n\tif (hasSummoned) {\r\n\t\tplayerEntity.rapidReanimationMinion = null;\r\n\t\t// Hard-coding a correction for Ancestral Automaton\r\n\t\t// Shold not be necessary if we reapply auras\r\n\t\t// hasSummoned.forEach((entity) => {\r\n\t\t// \tswitch (entity.cardId) {\r\n\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401:\r\n\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\r\n\t\t// \t\t\tconst overstatMult = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401 ? 1 : 2;\r\n\t\t// \t\t\tentity.attack = Math.max(1, entity.attack + 2 * overstatMult);\r\n\t\t// \t\t\tentity.health = Math.max(0, entity.health + 2 * overstatMult);\r\n\t\t// \t\t\tbreak;\r\n\t\t// \t\tcase CardIds.EternalKnight_BG25_008:\r\n\t\t// \t\tcase CardIds.EternalKnight_BG25_008_G:\r\n\t\t// \t\t\tconst knightMult = entity.cardId === CardIds.EternalKnight_BG25_008 ? 1 : 2;\r\n\t\t// \t\t\tentity.attack = Math.max(1, entity.attack + 1 * knightMult);\r\n\t\t// \t\t\tentity.health = Math.max(0, entity.health + 1 * knightMult);\r\n\t\t// \t\t\tbreak;\r\n\t\t// \t}\r\n\t\t// });\r\n\t}\r\n};\r\n\r\nconst handleSummon = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tcardId: string,\r\n\tindexFromRight: number,\r\n\tapplyAuras: boolean,\r\n\tminion: BoardEntity = null,\r\n): readonly BoardEntity[] => {\r\n\tif (playerBoard.length >= 7) {\r\n\t\treturn null;\r\n\t}\r\n\tconst newMinion = buildSingleBoardEntity(\r\n\t\tcardId,\r\n\t\tplayerEntity,\r\n\t\tplayerBoard,\r\n\t\tgameState.allCards,\r\n\t\tplayerEntity.friendly,\r\n\t\tgameState.sharedState.currentEntityId++,\r\n\t\tfalse,\r\n\t\tgameState.cardsData,\r\n\t\tgameState.sharedState,\r\n\t\tminion,\r\n\t\tnull,\r\n\t);\r\n\t// Don't reapply auras in this particular case? See https://x.com/ZerotoHeroes_HS/status/1737422727118487808?s=20\r\n\tconst spawned = performEntitySpawns(\r\n\t\t[newMinion],\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\tplayerEntity,\r\n\t\tindexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tapplyAuras,\r\n\t);\r\n\tgameState.spectator.registerPowerTarget(playerEntity, newMinion, playerBoard, null, null);\r\n\treturn spawned;\r\n};\r\n"]}
1
+ {"version":3,"file":"summon-when-space.js","sourceRoot":"","sources":["../../src/simulation/summon-when-space.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsHeroPower, BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandomHighestAttack, pickRandomHighestHealth } from '../services/utils';\r\nimport { buildSingleBoardEntity, copyEntity, hasCorrectTribe } from '../utils';\r\nimport { removeAurasFromSelf } from './add-minion-to-board';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\n\r\nexport const handleSummonsWhenSpace = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (Math.random() < 0.5) {\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t} else {\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\thandleSummonsWhenSpaceForPlayer(\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n};\r\n\r\n// TODO: Twin Sky Lanterns wait for 2 spaces\r\nconst handleSummonsWhenSpaceForPlayer = (\r\n\ttargetEntity: BgsPlayerEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (targetEntity.rapidReanimationMinion) {\r\n\t\thandleRapidReanimationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (targetEntity.questRewards?.includes(CardIds.StableAmalgamation_BG28_Reward_518)) {\r\n\t\thandleStableAmalgamationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (targetEntity.secrets?.some((s) => s.cardId === CardIds.BoonOfBeetles_BG28_603)) {\r\n\t\thandleBoonOfBeetlesForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tfor (const heroPower of targetEntity.heroPowers) {\r\n\t\tif (heroPower.cardId === CardIds.Ozumat_Tentacular) {\r\n\t\t\thandleOzumatForPlayer(\r\n\t\t\t\theroPower,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\ttargetEntity.friendly,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t\t// TODO: use one of these existing tag to make it unlocked\r\n\t\telse if (heroPower.cardId === CardIds.Drekthar_LeadTheFrostwolves && heroPower.info && !heroPower.activated) {\r\n\t\t\thandleFrostwolfFervorForPlayer(\r\n\t\t\t\theroPower,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\ttargetEntity.friendly,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t} else if (\r\n\t\t\theroPower.cardId === CardIds.VanndarStormpike_LeadTheStormpikes &&\r\n\t\t\theroPower.info &&\r\n\t\t\t!heroPower.activated\r\n\t\t) {\r\n\t\t\thandleStormpikeStrengthForPlayer(\r\n\t\t\t\theroPower,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\ttargetEntity.friendly,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\ttargetEntity.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.TwinSkyLanterns_BG30_MagicItem_822 ||\r\n\t\t\t\tt.cardId === CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2,\r\n\t\t)\r\n\t\t.forEach((t) => {\r\n\t\t\thandleTwinSkyLanternsForPlayer(t, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t\t});\r\n\ttargetEntity.trinkets\r\n\t\t.filter((t) => t.cardId === CardIds.BoomController_BG30_MagicItem_440)\r\n\t\t.forEach((t) => {\r\n\t\t\thandleBoomControllerForPlayer(t, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t\t});\r\n\tplayerBoard\r\n\t\t.filter(\r\n\t\t\t(e) => e.cardId === CardIds.SharptoothSnapper_BG32_201 || e.cardId === CardIds.SharptoothSnapper_BG32_201_G,\r\n\t\t)\r\n\t\t.forEach((e) => {\r\n\t\t\thandleSharptoothSnapperForPlayer(e, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t\t});\r\n};\r\n\r\nexport const handleSharptoothSnapperForPlayer = (\r\n\tentity: BoardEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\twhile (playerBoard.length < 7 && entity.abiityChargesLeft > 0) {\r\n\t\tconst candidates = spawnEntities(\r\n\t\t\tCardIds.SharptoothSnapper_PiranhaToken_BG32_201t,\r\n\t\t\t1,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t\tplayerEntity.friendly,\r\n\t\t\ttrue,\r\n\t\t);\r\n\t\tcandidates.forEach((t) => (t.attackImmediately = true));\r\n\t\tconst actualSpawns = performEntitySpawns(\r\n\t\t\tcandidates,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard.length - 1 - playerBoard.indexOf(entity),\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tentity.abiityChargesLeft--;\r\n\t}\r\n};\r\n\r\nconst handleBoomControllerForPlayer = (\r\n\ttrinket: BoardTrinket,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (playerBoard.length < 7 && trinket.scriptDataNum1 > 0) {\r\n\t\tconst candidate = gameState.sharedState.deaths\r\n\t\t\t.filter((d) => d.friendly === playerEntity.friendly)\r\n\t\t\t.filter((d) => hasCorrectTribe(d, playerEntity, Race.MECH, gameState.anomalies, gameState.allCards))[0];\r\n\t\tif (!!candidate) {\r\n\t\t\tconst spawn = copyEntity(candidate);\r\n\t\t\tremoveAurasFromSelf(spawn, playerBoard, playerEntity, gameState);\r\n\t\t\tconst initialIndexFromLeft = candidate.indexFromLeftAtTimeOfDeath;\r\n\t\t\tconst indexFromRight =\r\n\t\t\t\tinitialIndexFromLeft == null\r\n\t\t\t\t\t? 0\r\n\t\t\t\t\t: Math.min(playerBoard.length, Math.max(0, playerBoard.length - initialIndexFromLeft));\r\n\t\t\tconst target = spawnEntities(\r\n\t\t\t\tspawn.cardId,\r\n\t\t\t\t1,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerEntity.friendly,\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\tfalse,\r\n\t\t\t\tspawn,\r\n\t\t\t);\r\n\t\t\t// FIXME: here it should try to match the position at which the original minions died\r\n\t\t\tconst actualSpawns = performEntitySpawns(\r\n\t\t\t\ttarget,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tactualSpawns.forEach((t) =>\r\n\t\t\t\tgameState.spectator.registerPowerTarget(playerEntity, t, playerBoard, playerEntity, opponentEntity),\r\n\t\t\t);\r\n\t\t\ttrinket.scriptDataNum1 = 0;\r\n\t\t\t// It summons an exact copy\r\n\t\t\t// actualSpawns.forEach((entity) => {\r\n\t\t\t// \tswitch (entity.cardId) {\r\n\t\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401:\r\n\t\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\r\n\t\t\t// \t\t\tconst overstatMult = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401 ? 1 : 2;\r\n\t\t\t// \t\t\tentity.attack = Math.max(1, entity.attack - 2 * overstatMult);\r\n\t\t\t// \t\t\tentity.health = Math.max(0, entity.health - overstatMult);\r\n\t\t\t// \t\t\tbreak;\r\n\t\t\t// \t}\r\n\t\t\t// });\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleTwinSkyLanternsForPlayer = (\r\n\ttrinket: BoardTrinket,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst spawnNumber = trinket.scriptDataNum1 ?? 0;\r\n\tconst canTrigger = spawnNumber >= 1;\r\n\tif (playerBoard.length <= 7 - spawnNumber && trinket.rememberedMinion && canTrigger) {\r\n\t\ttrinket.scriptDataNum1 = 0;\r\n\t\tconst spawn = copyEntity(trinket.rememberedMinion);\r\n\t\tremoveAurasFromSelf(spawn, playerBoard, playerEntity, gameState);\r\n\t\tconst target = spawnEntities(\r\n\t\t\tspawn.cardId,\r\n\t\t\tspawnNumber,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t\tplayerEntity.friendly,\r\n\t\t\ttrue,\r\n\t\t\tfalse,\r\n\t\t\tfalse,\r\n\t\t\tspawn,\r\n\t\t);\r\n\t\tperformEntitySpawns(\r\n\t\t\ttarget,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\t0,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\ttarget.forEach((t) =>\r\n\t\t\tgameState.spectator.registerPowerTarget(playerEntity, t, playerBoard, playerEntity, opponentEntity),\r\n\t\t);\r\n\t}\r\n};\r\n\r\nconst handleOzumatForPlayer = (\r\n\theroPower: BgsHeroPower,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tfriendly: boolean,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (playerBoard.length < 7 && heroPower.activated === false) {\r\n\t\tconst tentacularSize = +heroPower.info;\r\n\t\tconst tentacular = spawnEntities(\r\n\t\t\tCardIds.Tentacular_OzumatsTentacleToken_BG23_HERO_201pt,\r\n\t\t\t1,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t\tfriendly,\r\n\t\t\ttrue,\r\n\t\t\tfalse,\r\n\t\t\tfalse,\r\n\t\t);\r\n\t\ttentacular[0].attack = tentacularSize;\r\n\t\ttentacular[0].health = tentacularSize;\r\n\t\ttentacular[0].maxHealth = tentacularSize;\r\n\t\ttentacular[0].maxAttack = tentacularSize;\r\n\t\tconst indexFromRight = 0;\r\n\t\tperformEntitySpawns(\r\n\t\t\ttentacular,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tgameState.spectator.registerPowerTarget(playerEntity, tentacular[0], playerBoard, playerEntity, opponentEntity);\r\n\t\theroPower.activated = true;\r\n\t}\r\n};\r\n\r\nconst handleFrostwolfFervorForPlayer = (\r\n\theroPower: BgsHeroPower,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tfriendly: boolean,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (playerBoard.length < 7) {\r\n\t\tconst target = pickRandomHighestAttack(playerBoard);\r\n\t\tconst copy = copyEntity(target);\r\n\t\tconst indexFromRight = 0;\r\n\t\tperformEntitySpawns(\r\n\t\t\t[copy],\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tgameState.spectator.registerPowerTarget(playerEntity, copy, playerBoard, playerEntity, opponentEntity);\r\n\t\theroPower.activated = true;\r\n\t}\r\n};\r\n\r\nconst handleStormpikeStrengthForPlayer = (\r\n\theroPower: BgsHeroPower,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tfriendly: boolean,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (playerBoard.length < 7) {\r\n\t\tconst target = pickRandomHighestHealth(playerBoard);\r\n\t\tconst copy = copyEntity(target);\r\n\t\tconst indexFromRight = 0;\r\n\t\tperformEntitySpawns(\r\n\t\t\t[copy],\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tgameState.spectator.registerPowerTarget(playerEntity, copy, playerBoard, playerEntity, opponentEntity);\r\n\t\theroPower.activated = true;\r\n\t}\r\n};\r\n\r\nconst handleBoonOfBeetlesForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst secretEntity = playerEntity.secrets.find((entity) => entity.cardId === CardIds.BoonOfBeetles_BG28_603);\r\n\tif (secretEntity && secretEntity.triggersLeft > 0) {\r\n\t\twhile (secretEntity.triggersLeft > 0) {\r\n\t\t\tconst hasSummoned = handleSummon(\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tCardIds.BoonOfBeetles_BeetleToken_BG28_603t,\r\n\t\t\t\t0,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\tif (hasSummoned) {\r\n\t\t\t\thasSummoned.forEach((entity) => {\r\n\t\t\t\t\tupdateTaunt(entity, true, playerBoard, playerEntity, opponentEntity, gameState);\r\n\t\t\t\t});\r\n\t\t\t\tsecretEntity.triggersLeft--;\r\n\t\t\t} else {\r\n\t\t\t\t// No room to summon, we stop here\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\nconst handleStableAmalgamationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst rewardEntity = playerEntity.questRewardEntities.find(\r\n\t\t(entity) => entity.cardId === CardIds.StableAmalgamation_BG28_Reward_518,\r\n\t);\r\n\tif (rewardEntity && rewardEntity.scriptDataNum1 > 0) {\r\n\t\twhile (rewardEntity.scriptDataNum1 > 0) {\r\n\t\t\tconst hasSummoned = handleSummon(\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tCardIds.StableAmalgamation_TotallyNormalHorseToken_BG28_Reward_518t,\r\n\t\t\t\t0,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\tif (hasSummoned) {\r\n\t\t\t\trewardEntity.scriptDataNum1--;\r\n\t\t\t} else {\r\n\t\t\t\t// No room to summon, we stop here\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleRapidReanimationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst indexFromRight =\r\n\t\tplayerEntity.rapidReanimationIndexFromLeft === 0\r\n\t\t\t? Math.max(0, playerBoard.length - playerEntity.rapidReanimationIndexFromLeft)\r\n\t\t\t: playerEntity.rapidReanimationIndexFromRight;\r\n\tconst hasSummoned = handleSummon(\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tplayerEntity.rapidReanimationMinion.cardId,\r\n\t\tindexFromRight,\r\n\t\ttrue, // (Goldrinn gets buffed, so it seems we reapply auras? This is a mess tbh)\r\n\t\tplayerEntity.rapidReanimationMinion,\r\n\t);\r\n\tif (hasSummoned) {\r\n\t\tplayerEntity.rapidReanimationMinion = null;\r\n\t\t// Hard-coding a correction for Ancestral Automaton\r\n\t\t// Shold not be necessary if we reapply auras\r\n\t\t// hasSummoned.forEach((entity) => {\r\n\t\t// \tswitch (entity.cardId) {\r\n\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401:\r\n\t\t// \t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\r\n\t\t// \t\t\tconst overstatMult = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401 ? 1 : 2;\r\n\t\t// \t\t\tentity.attack = Math.max(1, entity.attack + 2 * overstatMult);\r\n\t\t// \t\t\tentity.health = Math.max(0, entity.health + 2 * overstatMult);\r\n\t\t// \t\t\tbreak;\r\n\t\t// \t\tcase CardIds.EternalKnight_BG25_008:\r\n\t\t// \t\tcase CardIds.EternalKnight_BG25_008_G:\r\n\t\t// \t\t\tconst knightMult = entity.cardId === CardIds.EternalKnight_BG25_008 ? 1 : 2;\r\n\t\t// \t\t\tentity.attack = Math.max(1, entity.attack + 1 * knightMult);\r\n\t\t// \t\t\tentity.health = Math.max(0, entity.health + 1 * knightMult);\r\n\t\t// \t\t\tbreak;\r\n\t\t// \t}\r\n\t\t// });\r\n\t}\r\n};\r\n\r\nconst handleSummon = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tcardId: string,\r\n\tindexFromRight: number,\r\n\tapplyAuras: boolean,\r\n\tminion: BoardEntity = null,\r\n): readonly BoardEntity[] => {\r\n\tif (playerBoard.length >= 7) {\r\n\t\treturn null;\r\n\t}\r\n\tconst newMinion = buildSingleBoardEntity(\r\n\t\tcardId,\r\n\t\tplayerEntity,\r\n\t\tplayerBoard,\r\n\t\tgameState.allCards,\r\n\t\tplayerEntity.friendly,\r\n\t\tgameState.sharedState.currentEntityId++,\r\n\t\tfalse,\r\n\t\tgameState.cardsData,\r\n\t\tgameState.sharedState,\r\n\t\tminion,\r\n\t\tnull,\r\n\t);\r\n\t// Don't reapply auras in this particular case? See https://x.com/ZerotoHeroes_HS/status/1737422727118487808?s=20\r\n\tconst spawned = performEntitySpawns(\r\n\t\t[newMinion],\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\tplayerEntity,\r\n\t\tindexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tapplyAuras,\r\n\t);\r\n\tgameState.spectator.registerPowerTarget(playerEntity, newMinion, playerBoard, null, null);\r\n\treturn spawned;\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"golden.js","sourceRoot":"","sources":["../../../src/simulation/utils/golden.ts"],"names":[],"mappings":"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","sourcesContent":["import { AllCardsService, CardIds, GameTag } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { eternalKnightAttack, eternalKnightHealth } from '../../cards/impl/trinket/eternal-portrait';\r\nimport { addImpliedMechanics } from '../../utils';\r\nimport { handleAddedMinionAuraEffect } from '../add-minion-to-board';\r\nimport { FullGameState } from '../internal-game-state';\r\nimport { handleMinionRemovedAuraEffect } from '../remove-minion-from-board';\r\n\r\nexport const makeMinionGolden = (\r\n\ttarget: BoardEntity,\r\n\tsource: BoardEntity | BgsPlayerEntity,\r\n\ttargetBoard: BoardEntity[],\r\n\ttargetBoardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// Typically, we are already golden\r\n\tif (isMinionGolden(target, gameState.allCards)) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tgameState.spectator.registerPowerTarget(source, target, targetBoard, null, null);\r\n\r\n\t// console.log('before transforming minion', stringifySimple(targetBoard, allCards));\r\n\thandleMinionRemovedAuraEffect(targetBoard, target, targetBoardHero, gameState);\r\n\t// Specific for making a minion golden\r\n\t// This is not handled in handleMinionRemovedAuraEffect, though I'm not entirely sure why. Maybe because it's a self-effect only?\r\n\t// Also, because of how I implemented auras and such, it's probably good to have something specific for golden\r\n\tremoveMinionAuraEffectsForGolden(target, targetBoardHero);\r\n\t// console.log('after removed effect', stringifySimple(targetBoard, allCards));\r\n\tconst refCard = gameState.allCards.getCard(target.cardId);\r\n\tlet goldenCard = gameState.allCards.getCardFromDbfId(refCard.battlegroundsPremiumDbfId);\r\n\t// Happens when there is no dedicated golden card, like for the Bettle token from Boon of Beetles\r\n\tif (!goldenCard?.id) {\r\n\t\tgoldenCard = refCard;\r\n\t}\r\n\r\n\t// A minion becoming golden ignore the current death.\r\n\t// This way of handling it is not ideal, since it will still trigger if both avenges trigger at the same time, but\r\n\t// should solve the other cases\r\n\t// Update 2024-06-21: I'm not sure what this is about exactly. See\r\n\t// http://replays.firestoneapp.com/?reviewId=5d94ebeb-3691-4509-88de-5d5418b20597&turn=11&action=2\r\n\t// The Sr. Tomb Diver dies, thus gilding the Phaerix. Two other deaths later, the avenge procs\r\n\t// This means the death of the diver counted normally\r\n\t// target.avengeCurrent = Math.min(target.avengeDefault, target.avengeCurrent + 1);\r\n\r\n\t// Only change the card ID after modifying the stats, so that some effects (like Tarecgosa) won't trigger\r\n\t// too early\r\n\t// TODO: add a replay with Tarec to illustrate the difference with Defiant Shipwright, and\r\n\t// check if there is something different with Tarec\r\n\ttarget.cardId = goldenCard.id;\r\n\r\n\t// The rule for golden minions is to add the base stats\r\n\t// TO CHECK: not sure that this is what actually happens (i.e. do minions that trigger on stats modifications\r\n\t// trigger?)\r\n\t// UPDATE 2024-06-20: Defiant Shipwright (2/5) going golden (4/10) actually ends up at 4/12 because\r\n\t// of the +2 health bonus\r\n\t// http://replays.firestoneapp.com/?reviewId=283dc44c-5fc8-40fb-af89-7d752a39f9b9&turn=7&action=1\r\n\t// BUT (2025-05-10) Tarecgosa going golden just becomes a 10/10, it doesn't get the x2 from the buff\r\n\t// Maybe that's because it's not an enchantment, so let's just hard-code this here\r\n\t// (bug: it won't work with Poets)\r\n\t// Update 2025-05-05: Whelp Smuggler going golden doesn't not trigger the other whelp smuggler stat buff\r\n\t// https://replays.firestoneapp.com/?reviewId=253ddf7c-be1b-44f4-aa78-9a23442d3687&turn=15&action=0\r\n\t// So I'm just modifying the stats here without triggering any side-effects\r\n\ttarget.attack += refCard.attack;\r\n\ttarget.health += refCard.health;\r\n\t// modifyStats(target, null, refCard.attack, refCard.health, targetBoard, targetBoardHero, gameState, true, false);\r\n\r\n\t// console.log('before adding new effect', stringifySimple(targetBoard, allCards));\r\n\thandleAddedMinionAuraEffect(targetBoard, targetBoardHero, otherBoard, otherHero, target, gameState, true, false);\r\n\tconst hasDivineShield = target.divineShield;\r\n\tconst hasReborn = target.reborn;\r\n\tconst avengeCurrent = target.avengeCurrent;\r\n\taddImpliedMechanics(target, gameState.cardsData);\r\n\r\n\t// addImpliedMechanics grants divine shield if the card has divine shield, or if the entity had\r\n\t// it at some point. That means that when we gild Zilliax: Defense Module (with Divine Shield) into\r\n\t// Zilliaw: Assembled, we restore the divine shield, while we shouldn't\r\n\ttarget.divineShield = hasDivineShield;\r\n\t// Update 2024-06-19: Hat tested on one of their build, and gilding a zilliax module should NOT\r\n\t// remove its divine shield / reborn status\r\n\t// Gilding a reborn Risen Rider results into a golden Risen Rider with reborn\r\n\t// http://replays.firestoneapp.com/?reviewId=c553c3e7-01e2-494d-80f8-69f33c08fb39&turn=7&action=4\r\n\ttarget.reborn = hasReborn || goldenCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\t// target.windfury = refGoldenCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\t// target.taunt = refGoldenCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\t// target.stealth = refGoldenCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\ttarget.avengeCurrent = avengeCurrent;\r\n\ttarget.gildedInCombat = true;\r\n\r\n\t// console.log('after adding new effect', stringifySimple(targetBoard, allCards));\r\n};\r\n\r\nexport const isMinionGolden = (entity: BoardEntity, allCards: AllCardsService): boolean => {\r\n\tconst ref = allCards.getCard(entity.cardId);\r\n\t// Some cards (like the Bettle token from Boon of Beetles) don't have a premium dbf id. However, we can still\r\n\t// gild it\r\n\treturn ref.premium;\r\n};\r\n\r\n// This feels wrong, and is probably an indicator that auras are not applied at the right time\r\nconst removeMinionAuraEffectsForGolden = (entity: BoardEntity, hero: BgsPlayerEntity) => {\r\n\tswitch (entity.cardId) {\r\n\t\tcase CardIds.EternalKnight_BG25_008:\r\n\t\tcase CardIds.EternalKnight_BG25_008_G:\r\n\t\t\tconst eternalKnightBuffToRemove = hero.globalInfo.EternalKnightsDeadThisGame;\r\n\t\t\tconst eternalKnighMultiplier = entity.cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\r\n\t\t\tentity.health = Math.max(\r\n\t\t\t\t1,\r\n\t\t\t\tentity.health - eternalKnightHealth * eternalKnighMultiplier * eternalKnightBuffToRemove,\r\n\t\t\t);\r\n\t\t\tentity.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tentity.attack - eternalKnightAttack * eternalKnighMultiplier * eternalKnightBuffToRemove,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SanlaynScribe_BGDUO31_208:\r\n\t\tcase CardIds.SanlaynScribe_BGDUO31_208_G:\r\n\t\t\tconst sanlaynBuffToRemove = hero.globalInfo.SanlaynScribesDeadThisGame;\r\n\t\t\tconst sanlaynMultiplier = entity.cardId === CardIds.SanlaynScribe_BGDUO31_208_G ? 2 : 1;\r\n\t\t\tentity.health = Math.max(1, entity.health - sanlaynMultiplier * sanlaynBuffToRemove);\r\n\t\t\tentity.attack = Math.max(0, entity.attack - sanlaynMultiplier * sanlaynBuffToRemove);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\r\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\r\n\t\t\tconst multiplierAstral = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\r\n\t\t\t// Doesn't count self\r\n\t\t\tconst statsBonusAstralToRemove = hero.globalInfo.AstralAutomatonsSummonedThisGame - 1;\r\n\t\t\tentity.health = Math.max(1, entity.health - 3 * multiplierAstral * statsBonusAstralToRemove);\r\n\t\t\tentity.attack = Math.max(0, entity.attack - 2 * multiplierAstral * statsBonusAstralToRemove);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.DrBoomsMonster_BG31_176:\r\n\t\tcase CardIds.DrBoomsMonster_BG31_176_G:\r\n\t\t\tconst multiplierDrBoom = entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 2 : 1;\r\n\t\t\tentity.health = Math.max(1, entity.health - 2 * hero.globalInfo.MagnetizedThisGame * multiplierDrBoom);\r\n\t\t\tentity.attack = Math.max(0, entity.attack - 2 * hero.globalInfo.MagnetizedThisGame * multiplierDrBoom);\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"golden.js","sourceRoot":"","sources":["../../../src/simulation/utils/golden.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '../../services/card-ids';\nimport { AllCardsService, GameTag } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { eternalKnightAttack, eternalKnightHealth } from '../../cards/impl/trinket/eternal-portrait';\r\nimport { addImpliedMechanics } from '../../utils';\r\nimport { handleAddedMinionAuraEffect } from '../add-minion-to-board';\r\nimport { FullGameState } from '../internal-game-state';\r\nimport { handleMinionRemovedAuraEffect } from '../remove-minion-from-board';\r\n\r\nexport const makeMinionGolden = (\r\n\ttarget: BoardEntity,\r\n\tsource: BoardEntity | BgsPlayerEntity,\r\n\ttargetBoard: BoardEntity[],\r\n\ttargetBoardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// Typically, we are already golden\r\n\tif (isMinionGolden(target, gameState.allCards)) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tgameState.spectator.registerPowerTarget(source, target, targetBoard, null, null);\r\n\r\n\t// console.log('before transforming minion', stringifySimple(targetBoard, allCards));\r\n\thandleMinionRemovedAuraEffect(targetBoard, target, targetBoardHero, gameState);\r\n\t// Specific for making a minion golden\r\n\t// This is not handled in handleMinionRemovedAuraEffect, though I'm not entirely sure why. Maybe because it's a self-effect only?\r\n\t// Also, because of how I implemented auras and such, it's probably good to have something specific for golden\r\n\tremoveMinionAuraEffectsForGolden(target, targetBoardHero);\r\n\t// console.log('after removed effect', stringifySimple(targetBoard, allCards));\r\n\tconst refCard = gameState.allCards.getCard(target.cardId);\r\n\tlet goldenCard = gameState.allCards.getCardFromDbfId(refCard.battlegroundsPremiumDbfId);\r\n\t// Happens when there is no dedicated golden card, like for the Bettle token from Boon of Beetles\r\n\tif (!goldenCard?.id) {\r\n\t\tgoldenCard = refCard;\r\n\t}\r\n\r\n\t// A minion becoming golden ignore the current death.\r\n\t// This way of handling it is not ideal, since it will still trigger if both avenges trigger at the same time, but\r\n\t// should solve the other cases\r\n\t// Update 2024-06-21: I'm not sure what this is about exactly. See\r\n\t// http://replays.firestoneapp.com/?reviewId=5d94ebeb-3691-4509-88de-5d5418b20597&turn=11&action=2\r\n\t// The Sr. Tomb Diver dies, thus gilding the Phaerix. Two other deaths later, the avenge procs\r\n\t// This means the death of the diver counted normally\r\n\t// target.avengeCurrent = Math.min(target.avengeDefault, target.avengeCurrent + 1);\r\n\r\n\t// Only change the card ID after modifying the stats, so that some effects (like Tarecgosa) won't trigger\r\n\t// too early\r\n\t// TODO: add a replay with Tarec to illustrate the difference with Defiant Shipwright, and\r\n\t// check if there is something different with Tarec\r\n\ttarget.cardId = goldenCard.id;\r\n\r\n\t// The rule for golden minions is to add the base stats\r\n\t// TO CHECK: not sure that this is what actually happens (i.e. do minions that trigger on stats modifications\r\n\t// trigger?)\r\n\t// UPDATE 2024-06-20: Defiant Shipwright (2/5) going golden (4/10) actually ends up at 4/12 because\r\n\t// of the +2 health bonus\r\n\t// http://replays.firestoneapp.com/?reviewId=283dc44c-5fc8-40fb-af89-7d752a39f9b9&turn=7&action=1\r\n\t// BUT (2025-05-10) Tarecgosa going golden just becomes a 10/10, it doesn't get the x2 from the buff\r\n\t// Maybe that's because it's not an enchantment, so let's just hard-code this here\r\n\t// (bug: it won't work with Poets)\r\n\t// Update 2025-05-05: Whelp Smuggler going golden doesn't not trigger the other whelp smuggler stat buff\r\n\t// https://replays.firestoneapp.com/?reviewId=253ddf7c-be1b-44f4-aa78-9a23442d3687&turn=15&action=0\r\n\t// So I'm just modifying the stats here without triggering any side-effects\r\n\ttarget.attack += refCard.attack;\r\n\ttarget.health += refCard.health;\r\n\t// modifyStats(target, null, refCard.attack, refCard.health, targetBoard, targetBoardHero, gameState, true, false);\r\n\r\n\t// console.log('before adding new effect', stringifySimple(targetBoard, allCards));\r\n\thandleAddedMinionAuraEffect(targetBoard, targetBoardHero, otherBoard, otherHero, target, gameState, true, false);\r\n\tconst hasDivineShield = target.divineShield;\r\n\tconst hasReborn = target.reborn;\r\n\tconst avengeCurrent = target.avengeCurrent;\r\n\taddImpliedMechanics(target, gameState.cardsData);\r\n\r\n\t// addImpliedMechanics grants divine shield if the card has divine shield, or if the entity had\r\n\t// it at some point. That means that when we gild Zilliax: Defense Module (with Divine Shield) into\r\n\t// Zilliaw: Assembled, we restore the divine shield, while we shouldn't\r\n\ttarget.divineShield = hasDivineShield;\r\n\t// Update 2024-06-19: Hat tested on one of their build, and gilding a zilliax module should NOT\r\n\t// remove its divine shield / reborn status\r\n\t// Gilding a reborn Risen Rider results into a golden Risen Rider with reborn\r\n\t// http://replays.firestoneapp.com/?reviewId=c553c3e7-01e2-494d-80f8-69f33c08fb39&turn=7&action=4\r\n\ttarget.reborn = hasReborn || goldenCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\t// target.windfury = refGoldenCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\t// target.taunt = refGoldenCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\t// target.stealth = refGoldenCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\ttarget.avengeCurrent = avengeCurrent;\r\n\ttarget.gildedInCombat = true;\r\n\r\n\t// console.log('after adding new effect', stringifySimple(targetBoard, allCards));\r\n};\r\n\r\nexport const isMinionGolden = (entity: BoardEntity, allCards: AllCardsService): boolean => {\r\n\tconst ref = allCards.getCard(entity.cardId);\r\n\t// Some cards (like the Bettle token from Boon of Beetles) don't have a premium dbf id. However, we can still\r\n\t// gild it\r\n\treturn ref.premium;\r\n};\r\n\r\n// This feels wrong, and is probably an indicator that auras are not applied at the right time\r\nconst removeMinionAuraEffectsForGolden = (entity: BoardEntity, hero: BgsPlayerEntity) => {\r\n\tswitch (entity.cardId) {\r\n\t\tcase CardIds.EternalKnight_BG25_008:\r\n\t\tcase CardIds.EternalKnight_BG25_008_G:\r\n\t\t\tconst eternalKnightBuffToRemove = hero.globalInfo.EternalKnightsDeadThisGame;\r\n\t\t\tconst eternalKnighMultiplier = entity.cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\r\n\t\t\tentity.health = Math.max(\r\n\t\t\t\t1,\r\n\t\t\t\tentity.health - eternalKnightHealth * eternalKnighMultiplier * eternalKnightBuffToRemove,\r\n\t\t\t);\r\n\t\t\tentity.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tentity.attack - eternalKnightAttack * eternalKnighMultiplier * eternalKnightBuffToRemove,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SanlaynScribe_BGDUO31_208:\r\n\t\tcase CardIds.SanlaynScribe_BGDUO31_208_G:\r\n\t\t\tconst sanlaynBuffToRemove = hero.globalInfo.SanlaynScribesDeadThisGame;\r\n\t\t\tconst sanlaynMultiplier = entity.cardId === CardIds.SanlaynScribe_BGDUO31_208_G ? 2 : 1;\r\n\t\t\tentity.health = Math.max(1, entity.health - sanlaynMultiplier * sanlaynBuffToRemove);\r\n\t\t\tentity.attack = Math.max(0, entity.attack - sanlaynMultiplier * sanlaynBuffToRemove);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\r\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\r\n\t\t\tconst multiplierAstral = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\r\n\t\t\t// Doesn't count self\r\n\t\t\tconst statsBonusAstralToRemove = hero.globalInfo.AstralAutomatonsSummonedThisGame - 1;\r\n\t\t\tentity.health = Math.max(1, entity.health - 3 * multiplierAstral * statsBonusAstralToRemove);\r\n\t\t\tentity.attack = Math.max(0, entity.attack - 2 * multiplierAstral * statsBonusAstralToRemove);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.DrBoomsMonster_BG31_176:\r\n\t\tcase CardIds.DrBoomsMonster_BG31_176_G:\r\n\t\t\tconst multiplierDrBoom = entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 2 : 1;\r\n\t\t\tentity.health = Math.max(1, entity.health - 2 * hero.globalInfo.MagnetizedThisGame * multiplierDrBoom);\r\n\t\t\tentity.attack = Math.max(0, entity.attack - 2 * hero.globalInfo.MagnetizedThisGame * multiplierDrBoom);\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}