@firestone-hs/simulate-bgs-battle 1.1.696 → 1.1.697

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 (339) hide show
  1. package/dist/src/bgs-player-entity.d.ts +4 -10
  2. package/dist/src/bgs-player-entity.js.map +1 -1
  3. package/dist/src/cards/card.interface.d.ts +21 -6
  4. package/dist/src/cards/card.interface.js +8 -1
  5. package/dist/src/cards/card.interface.js.map +1 -1
  6. package/dist/src/cards/cards-data.js +1 -12
  7. package/dist/src/cards/cards-data.js.map +1 -1
  8. package/dist/src/cards/impl/_card-mappings.js +152 -63
  9. package/dist/src/cards/impl/_card-mappings.js.map +1 -1
  10. package/dist/src/cards/impl/bg-spell/arcane-absorption-bg352.d.ts +2 -2
  11. package/dist/src/cards/impl/bg-spell/arcane-absorption-bg352.js +1 -8
  12. package/dist/src/cards/impl/bg-spell/arcane-absorption-bg352.js.map +1 -1
  13. package/dist/src/cards/impl/bg-spell/back-to-back.d.ts +2 -0
  14. package/dist/src/cards/impl/bg-spell/back-to-back.js +20 -0
  15. package/dist/src/cards/impl/bg-spell/back-to-back.js.map +1 -0
  16. package/dist/src/cards/impl/bg-spell/blood-gem-quilboar-divine-shield.js +2 -3
  17. package/dist/src/cards/impl/bg-spell/blood-gem-quilboar-divine-shield.js.map +1 -1
  18. package/dist/src/cards/impl/bg-spell/blood-gem-quilboar-reborn.js +2 -3
  19. package/dist/src/cards/impl/bg-spell/blood-gem-quilboar-reborn.js.map +1 -1
  20. package/dist/src/cards/impl/bg-spell/blood-gem-quilboar-taunt.js +2 -3
  21. package/dist/src/cards/impl/bg-spell/blood-gem-quilboar-taunt.js.map +1 -1
  22. package/dist/src/cards/impl/bg-spell/butchering.d.ts +2 -0
  23. package/dist/src/cards/impl/bg-spell/butchering.js +23 -0
  24. package/dist/src/cards/impl/bg-spell/butchering.js.map +1 -0
  25. package/dist/src/cards/impl/bg-spell/conflagration-bg352.js +7 -10
  26. package/dist/src/cards/impl/bg-spell/conflagration-bg352.js.map +1 -1
  27. package/dist/src/cards/impl/bg-spell/deepwater-clan.js +13 -9
  28. package/dist/src/cards/impl/bg-spell/deepwater-clan.js.map +1 -1
  29. package/dist/src/cards/impl/bg-spell/friendly-bounty.d.ts +2 -0
  30. package/dist/src/cards/impl/bg-spell/friendly-bounty.js +44 -0
  31. package/dist/src/cards/impl/bg-spell/friendly-bounty.js.map +1 -0
  32. package/dist/src/cards/impl/bg-spell/healthy-bounty.d.ts +2 -0
  33. package/dist/src/cards/impl/bg-spell/healthy-bounty.js +15 -0
  34. package/dist/src/cards/impl/bg-spell/healthy-bounty.js.map +1 -0
  35. package/dist/src/cards/impl/bg-spell/hostile-bounty.d.ts +2 -0
  36. package/dist/src/cards/impl/bg-spell/hostile-bounty.js +15 -0
  37. package/dist/src/cards/impl/bg-spell/hostile-bounty.js.map +1 -0
  38. package/dist/src/cards/impl/bg-spell/jailer-sticker-306.d.ts +2 -0
  39. package/dist/src/cards/impl/bg-spell/jailer-sticker-306.js +27 -0
  40. package/dist/src/cards/impl/bg-spell/jailer-sticker-306.js.map +1 -0
  41. package/dist/src/cards/impl/bg-spell/jailer-sticker-733.d.ts +2 -0
  42. package/dist/src/cards/impl/bg-spell/jailer-sticker-733.js +32 -0
  43. package/dist/src/cards/impl/bg-spell/jailer-sticker-733.js.map +1 -0
  44. package/dist/src/cards/impl/bg-spell/might-of-stormwind.d.ts +2 -0
  45. package/dist/src/cards/impl/bg-spell/might-of-stormwind.js +15 -0
  46. package/dist/src/cards/impl/bg-spell/might-of-stormwind.js.map +1 -0
  47. package/dist/src/cards/impl/bg-spell/natural-blessing.js +10 -0
  48. package/dist/src/cards/impl/bg-spell/natural-blessing.js.map +1 -1
  49. package/dist/src/cards/impl/bg-spell/ophidian-staff.d.ts +2 -0
  50. package/dist/src/cards/impl/bg-spell/ophidian-staff.js +20 -0
  51. package/dist/src/cards/impl/bg-spell/ophidian-staff.js.map +1 -0
  52. package/dist/src/cards/impl/bg-spell/queens-command.js +4 -4
  53. package/dist/src/cards/impl/bg-spell/queens-command.js.map +1 -1
  54. package/dist/src/cards/impl/bg-spell/selfish-bounty.d.ts +2 -0
  55. package/dist/src/cards/impl/bg-spell/selfish-bounty.js +14 -0
  56. package/dist/src/cards/impl/bg-spell/selfish-bounty.js.map +1 -0
  57. package/dist/src/cards/impl/minion/abyssal-bruiser.js +3 -4
  58. package/dist/src/cards/impl/minion/abyssal-bruiser.js.map +1 -1
  59. package/dist/src/cards/impl/minion/alert-alarmist.js +1 -2
  60. package/dist/src/cards/impl/minion/alert-alarmist.js.map +1 -1
  61. package/dist/src/cards/impl/minion/anubarak-nerubian-king.js +2 -4
  62. package/dist/src/cards/impl/minion/anubarak-nerubian-king.js.map +1 -1
  63. package/dist/src/cards/impl/minion/balinda-stonehearth.js +1 -2
  64. package/dist/src/cards/impl/minion/balinda-stonehearth.js.map +1 -1
  65. package/dist/src/cards/impl/minion/bg352-chromadrake-pool.js +5 -6
  66. package/dist/src/cards/impl/minion/bg352-chromadrake-pool.js.map +1 -1
  67. package/dist/src/cards/impl/minion/black-chromadrake.js +2 -3
  68. package/dist/src/cards/impl/minion/black-chromadrake.js.map +1 -1
  69. package/dist/src/cards/impl/minion/blue-chromadrake.js +2 -3
  70. package/dist/src/cards/impl/minion/blue-chromadrake.js.map +1 -1
  71. package/dist/src/cards/impl/minion/brazen-buccaneer.js +2 -3
  72. package/dist/src/cards/impl/minion/brazen-buccaneer.js.map +1 -1
  73. package/dist/src/cards/impl/minion/bristleback-bully.js +5 -6
  74. package/dist/src/cards/impl/minion/bristleback-bully.js.map +1 -1
  75. package/dist/src/cards/impl/minion/bronze-chromadrake.js +2 -3
  76. package/dist/src/cards/impl/minion/bronze-chromadrake.js.map +1 -1
  77. package/dist/src/cards/impl/minion/cataclysmic-harbinger.js +2 -3
  78. package/dist/src/cards/impl/minion/cataclysmic-harbinger.js.map +1 -1
  79. package/dist/src/cards/impl/minion/champion-of-the-primus.js +2 -4
  80. package/dist/src/cards/impl/minion/champion-of-the-primus.js.map +1 -1
  81. package/dist/src/cards/impl/minion/charging-czarina.js +4 -1
  82. package/dist/src/cards/impl/minion/charging-czarina.js.map +1 -1
  83. package/dist/src/cards/impl/minion/consummate-conqueror.js +1 -2
  84. package/dist/src/cards/impl/minion/consummate-conqueror.js.map +1 -1
  85. package/dist/src/cards/impl/minion/cousin-errgl.js +4 -5
  86. package/dist/src/cards/impl/minion/cousin-errgl.js.map +1 -1
  87. package/dist/src/cards/impl/minion/cruise-controller.js +3 -2
  88. package/dist/src/cards/impl/minion/cruise-controller.js.map +1 -1
  89. package/dist/src/cards/impl/minion/deepwater-chieftain.js +9 -10
  90. package/dist/src/cards/impl/minion/deepwater-chieftain.js.map +1 -1
  91. package/dist/src/cards/impl/minion/demon-fodder.js +1 -2
  92. package/dist/src/cards/impl/minion/demon-fodder.js.map +1 -1
  93. package/dist/src/cards/impl/minion/determined-defender.js +2 -3
  94. package/dist/src/cards/impl/minion/determined-defender.js.map +1 -1
  95. package/dist/src/cards/impl/minion/diremuck-forager.d.ts +2 -4
  96. package/dist/src/cards/impl/minion/diremuck-forager.js +3 -3
  97. package/dist/src/cards/impl/minion/diremuck-forager.js.map +1 -1
  98. package/dist/src/cards/impl/minion/draconic-warden.js +3 -4
  99. package/dist/src/cards/impl/minion/draconic-warden.js.map +1 -1
  100. package/dist/src/cards/impl/minion/dustbone-devastator.js +4 -6
  101. package/dist/src/cards/impl/minion/dustbone-devastator.js.map +1 -1
  102. package/dist/src/cards/impl/minion/earthsong-shaman.js +2 -3
  103. package/dist/src/cards/impl/minion/earthsong-shaman.js.map +1 -1
  104. package/dist/src/cards/impl/minion/egg-of-the-endtimes.js +1 -2
  105. package/dist/src/cards/impl/minion/egg-of-the-endtimes.js.map +1 -1
  106. package/dist/src/cards/impl/minion/enchanted-sentinel.js +2 -3
  107. package/dist/src/cards/impl/minion/enchanted-sentinel.js.map +1 -1
  108. package/dist/src/cards/impl/minion/falling-sky-golem.js +3 -4
  109. package/dist/src/cards/impl/minion/falling-sky-golem.js.map +1 -1
  110. package/dist/src/cards/impl/minion/firelands-fugitive.js +5 -6
  111. package/dist/src/cards/impl/minion/firelands-fugitive.js.map +1 -1
  112. package/dist/src/cards/impl/minion/forsaken-weaver.js +2 -1
  113. package/dist/src/cards/impl/minion/forsaken-weaver.js.map +1 -1
  114. package/dist/src/cards/impl/minion/gluttonous-trogg.js +1 -2
  115. package/dist/src/cards/impl/minion/gluttonous-trogg.js.map +1 -1
  116. package/dist/src/cards/impl/minion/goldrinn-the-great-wolf.js +2 -5
  117. package/dist/src/cards/impl/minion/goldrinn-the-great-wolf.js.map +1 -1
  118. package/dist/src/cards/impl/minion/green-chromadrake.js +2 -3
  119. package/dist/src/cards/impl/minion/green-chromadrake.js.map +1 -1
  120. package/dist/src/cards/impl/minion/hired-ritualist.js +1 -2
  121. package/dist/src/cards/impl/minion/hired-ritualist.js.map +1 -1
  122. package/dist/src/cards/impl/minion/hog-watcher.js +1 -2
  123. package/dist/src/cards/impl/minion/hog-watcher.js.map +1 -1
  124. package/dist/src/cards/impl/minion/humming-bird.js +2 -4
  125. package/dist/src/cards/impl/minion/humming-bird.js.map +1 -1
  126. package/dist/src/cards/impl/minion/incubation-researcher.js +2 -3
  127. package/dist/src/cards/impl/minion/incubation-researcher.js.map +1 -1
  128. package/dist/src/cards/impl/minion/laboratory-assistant.d.ts +2 -2
  129. package/dist/src/cards/impl/minion/laboratory-assistant.js +1 -5
  130. package/dist/src/cards/impl/minion/laboratory-assistant.js.map +1 -1
  131. package/dist/src/cards/impl/minion/leyline-surfacer.js +9 -10
  132. package/dist/src/cards/impl/minion/leyline-surfacer.js.map +1 -1
  133. package/dist/src/cards/impl/minion/living-azerite.d.ts +2 -2
  134. package/dist/src/cards/impl/minion/living-azerite.js +17 -0
  135. package/dist/src/cards/impl/minion/living-azerite.js.map +1 -1
  136. package/dist/src/cards/impl/minion/lurking-leviathan.js +2 -3
  137. package/dist/src/cards/impl/minion/lurking-leviathan.js.map +1 -1
  138. package/dist/src/cards/impl/minion/maelstrom-emergent.js +1 -2
  139. package/dist/src/cards/impl/minion/maelstrom-emergent.js.map +1 -1
  140. package/dist/src/cards/impl/minion/mama-mrrglton.js +2 -3
  141. package/dist/src/cards/impl/minion/mama-mrrglton.js.map +1 -1
  142. package/dist/src/cards/impl/minion/nalaa-the-redeemer.js +5 -1
  143. package/dist/src/cards/impl/minion/nalaa-the-redeemer.js.map +1 -1
  144. package/dist/src/cards/impl/minion/nerubian-deathswarmer.js +2 -6
  145. package/dist/src/cards/impl/minion/nerubian-deathswarmer.js.map +1 -1
  146. package/dist/src/cards/impl/minion/old-soul.js +1 -2
  147. package/dist/src/cards/impl/minion/old-soul.js.map +1 -1
  148. package/dist/src/cards/impl/minion/oranomonos-the-wilted.js +2 -4
  149. package/dist/src/cards/impl/minion/oranomonos-the-wilted.js.map +1 -1
  150. package/dist/src/cards/impl/minion/papa-mrrglton.js +2 -3
  151. package/dist/src/cards/impl/minion/papa-mrrglton.js.map +1 -1
  152. package/dist/src/cards/impl/minion/plaguerunner.js +4 -6
  153. package/dist/src/cards/impl/minion/plaguerunner.js.map +1 -1
  154. package/dist/src/cards/impl/minion/pufferquil.js +1 -2
  155. package/dist/src/cards/impl/minion/pufferquil.js.map +1 -1
  156. package/dist/src/cards/impl/minion/red-chromadrake.js +2 -3
  157. package/dist/src/cards/impl/minion/red-chromadrake.js.map +1 -1
  158. package/dist/src/cards/impl/minion/redtusk-thornraiser.js +5 -6
  159. package/dist/src/cards/impl/minion/redtusk-thornraiser.js.map +1 -1
  160. package/dist/src/cards/impl/minion/ring-bearer.js +2 -3
  161. package/dist/src/cards/impl/minion/ring-bearer.js.map +1 -1
  162. package/dist/src/cards/impl/minion/roving-sailor.js +2 -3
  163. package/dist/src/cards/impl/minion/roving-sailor.js.map +1 -1
  164. package/dist/src/cards/impl/minion/ruthless-queensguard.js +6 -7
  165. package/dist/src/cards/impl/minion/ruthless-queensguard.js.map +1 -1
  166. package/dist/src/cards/impl/minion/scarlet-survivor.js +1 -2
  167. package/dist/src/cards/impl/minion/scarlet-survivor.js.map +1 -1
  168. package/dist/src/cards/impl/minion/seafloor-recruiter.js +2 -3
  169. package/dist/src/cards/impl/minion/seafloor-recruiter.js.map +1 -1
  170. package/dist/src/cards/impl/minion/sewer-lord.js +2 -3
  171. package/dist/src/cards/impl/minion/sewer-lord.js.map +1 -1
  172. package/dist/src/cards/impl/minion/ship-jumper.js +2 -3
  173. package/dist/src/cards/impl/minion/ship-jumper.js.map +1 -1
  174. package/dist/src/cards/impl/minion/skeletal-strafer.js +3 -4
  175. package/dist/src/cards/impl/minion/skeletal-strafer.js.map +1 -1
  176. package/dist/src/cards/impl/minion/tide-raiser.js +2 -3
  177. package/dist/src/cards/impl/minion/tide-raiser.js.map +1 -1
  178. package/dist/src/cards/impl/minion/timewarped-caretaker.js +2 -4
  179. package/dist/src/cards/impl/minion/timewarped-caretaker.js.map +1 -1
  180. package/dist/src/cards/impl/minion/timewarped-deathswarmer.js +2 -5
  181. package/dist/src/cards/impl/minion/timewarped-deathswarmer.js.map +1 -1
  182. package/dist/src/cards/impl/minion/timewarped-goldrinn.js +3 -7
  183. package/dist/src/cards/impl/minion/timewarped-goldrinn.js.map +1 -1
  184. package/dist/src/cards/impl/minion/twisted-wrathguard.js +1 -2
  185. package/dist/src/cards/impl/minion/twisted-wrathguard.js.map +1 -1
  186. package/dist/src/cards/impl/minion/very-hungry-winterfinner.js +2 -3
  187. package/dist/src/cards/impl/minion/very-hungry-winterfinner.js.map +1 -1
  188. package/dist/src/cards/impl/minion/vinespeaker.js +2 -3
  189. package/dist/src/cards/impl/minion/vinespeaker.js.map +1 -1
  190. package/dist/src/cards/impl/minion/void-pup-trainer.js +1 -2
  191. package/dist/src/cards/impl/minion/void-pup-trainer.js.map +1 -1
  192. package/dist/src/cards/impl/minion/woodland-defiler.js +1 -2
  193. package/dist/src/cards/impl/minion/woodland-defiler.js.map +1 -1
  194. package/dist/src/cards/impl/minion/wyvern-outrider.js +1 -2
  195. package/dist/src/cards/impl/minion/wyvern-outrider.js.map +1 -1
  196. package/dist/src/cards/impl/trinket/archaic-scroll.d.ts +2 -0
  197. package/dist/src/cards/impl/trinket/archaic-scroll.js +21 -0
  198. package/dist/src/cards/impl/trinket/archaic-scroll.js.map +1 -0
  199. package/dist/src/cards/impl/trinket/artisanal-urn.js +2 -1
  200. package/dist/src/cards/impl/trinket/artisanal-urn.js.map +1 -1
  201. package/dist/src/cards/impl/trinket/bewitched-ribbon.d.ts +2 -0
  202. package/dist/src/cards/impl/trinket/bewitched-ribbon.js +15 -0
  203. package/dist/src/cards/impl/trinket/bewitched-ribbon.js.map +1 -0
  204. package/dist/src/cards/impl/trinket/blood-amulet.d.ts +2 -0
  205. package/dist/src/cards/impl/trinket/blood-amulet.js +15 -0
  206. package/dist/src/cards/impl/trinket/blood-amulet.js.map +1 -0
  207. package/dist/src/cards/impl/trinket/bloodbound-earrings.d.ts +2 -0
  208. package/dist/src/cards/impl/trinket/bloodbound-earrings.js +22 -0
  209. package/dist/src/cards/impl/trinket/bloodbound-earrings.js.map +1 -0
  210. package/dist/src/cards/impl/trinket/bluegill-flippers.d.ts +2 -0
  211. package/dist/src/cards/impl/trinket/bluegill-flippers.js +21 -0
  212. package/dist/src/cards/impl/trinket/bluegill-flippers.js.map +1 -0
  213. package/dist/src/cards/impl/trinket/bubble-crown.d.ts +2 -0
  214. package/dist/src/cards/impl/trinket/bubble-crown.js +18 -0
  215. package/dist/src/cards/impl/trinket/bubble-crown.js.map +1 -0
  216. package/dist/src/cards/impl/trinket/cloud-serpent-horn.d.ts +2 -0
  217. package/dist/src/cards/impl/trinket/cloud-serpent-horn.js +26 -0
  218. package/dist/src/cards/impl/trinket/cloud-serpent-horn.js.map +1 -0
  219. package/dist/src/cards/impl/trinket/comfy-coffin.d.ts +2 -0
  220. package/dist/src/cards/impl/trinket/comfy-coffin.js +12 -0
  221. package/dist/src/cards/impl/trinket/comfy-coffin.js.map +1 -0
  222. package/dist/src/cards/impl/trinket/copper-coil.d.ts +2 -0
  223. package/dist/src/cards/impl/trinket/copper-coil.js +15 -0
  224. package/dist/src/cards/impl/trinket/copper-coil.js.map +1 -0
  225. package/dist/src/cards/impl/trinket/coral-spear.d.ts +2 -0
  226. package/dist/src/cards/impl/trinket/coral-spear.js +22 -0
  227. package/dist/src/cards/impl/trinket/coral-spear.js.map +1 -0
  228. package/dist/src/cards/impl/trinket/dramaloc-sticker.d.ts +2 -0
  229. package/dist/src/cards/impl/trinket/dramaloc-sticker.js +36 -0
  230. package/dist/src/cards/impl/trinket/dramaloc-sticker.js.map +1 -0
  231. package/dist/src/cards/impl/trinket/fang-anklet.d.ts +2 -0
  232. package/dist/src/cards/impl/trinket/fang-anklet.js +30 -0
  233. package/dist/src/cards/impl/trinket/fang-anklet.js.map +1 -0
  234. package/dist/src/cards/impl/trinket/felburned-ledger.d.ts +2 -0
  235. package/dist/src/cards/impl/trinket/felburned-ledger.js +12 -0
  236. package/dist/src/cards/impl/trinket/felburned-ledger.js.map +1 -0
  237. package/dist/src/cards/impl/trinket/fridge-magnet.d.ts +2 -0
  238. package/dist/src/cards/impl/trinket/fridge-magnet.js +13 -0
  239. package/dist/src/cards/impl/trinket/fridge-magnet.js.map +1 -0
  240. package/dist/src/cards/impl/trinket/gilnean-thorned-rose.d.ts +2 -0
  241. package/dist/src/cards/impl/trinket/gilnean-thorned-rose.js +19 -0
  242. package/dist/src/cards/impl/trinket/gilnean-thorned-rose.js.map +1 -0
  243. package/dist/src/cards/impl/trinket/glowscale-portrait.d.ts +2 -0
  244. package/dist/src/cards/impl/trinket/glowscale-portrait.js +21 -0
  245. package/dist/src/cards/impl/trinket/glowscale-portrait.js.map +1 -0
  246. package/dist/src/cards/impl/trinket/heart-of-the-forest.d.ts +2 -0
  247. package/dist/src/cards/impl/trinket/heart-of-the-forest.js +17 -0
  248. package/dist/src/cards/impl/trinket/heart-of-the-forest.js.map +1 -0
  249. package/dist/src/cards/impl/trinket/jar-o-gems.d.ts +2 -0
  250. package/dist/src/cards/impl/trinket/jar-o-gems.js +23 -0
  251. package/dist/src/cards/impl/trinket/jar-o-gems.js.map +1 -0
  252. package/dist/src/cards/impl/trinket/lorewalker-scroll.d.ts +2 -0
  253. package/dist/src/cards/impl/trinket/lorewalker-scroll.js +22 -0
  254. package/dist/src/cards/impl/trinket/lorewalker-scroll.js.map +1 -0
  255. package/dist/src/cards/impl/trinket/miniature-ship.d.ts +2 -0
  256. package/dist/src/cards/impl/trinket/miniature-ship.js +19 -0
  257. package/dist/src/cards/impl/trinket/miniature-ship.js.map +1 -0
  258. package/dist/src/cards/impl/trinket/powder-keg-enchantment.d.ts +2 -0
  259. package/dist/src/cards/impl/trinket/powder-keg-enchantment.js +16 -0
  260. package/dist/src/cards/impl/trinket/powder-keg-enchantment.js.map +1 -0
  261. package/dist/src/cards/impl/trinket/powder-keg.d.ts +2 -0
  262. package/dist/src/cards/impl/trinket/powder-keg.js +23 -0
  263. package/dist/src/cards/impl/trinket/powder-keg.js.map +1 -0
  264. package/dist/src/cards/impl/trinket/protective-ring.d.ts +2 -0
  265. package/dist/src/cards/impl/trinket/protective-ring.js +19 -0
  266. package/dist/src/cards/impl/trinket/protective-ring.js.map +1 -0
  267. package/dist/src/cards/impl/trinket/quilligraphy-set.d.ts +3 -0
  268. package/dist/src/cards/impl/trinket/quilligraphy-set.js +19 -0
  269. package/dist/src/cards/impl/trinket/quilligraphy-set.js.map +1 -0
  270. package/dist/src/cards/impl/trinket/reinforced-shield.d.ts +2 -0
  271. package/dist/src/cards/impl/trinket/reinforced-shield.js +15 -0
  272. package/dist/src/cards/impl/trinket/reinforced-shield.js.map +1 -0
  273. package/dist/src/cards/impl/trinket/slamma-sticker.d.ts +2 -0
  274. package/dist/src/cards/impl/trinket/slamma-sticker.js +18 -0
  275. package/dist/src/cards/impl/trinket/slamma-sticker.js.map +1 -0
  276. package/dist/src/cards/impl/trinket/stegodon-portrait.d.ts +2 -0
  277. package/dist/src/cards/impl/trinket/stegodon-portrait.js +19 -0
  278. package/dist/src/cards/impl/trinket/stegodon-portrait.js.map +1 -0
  279. package/dist/src/cards/impl/trinket/tarecgosa-sticker.d.ts +2 -0
  280. package/dist/src/cards/impl/trinket/tarecgosa-sticker.js +7 -0
  281. package/dist/src/cards/impl/trinket/tarecgosa-sticker.js.map +1 -0
  282. package/dist/src/cards/impl/trinket/thornspike-pauldron.d.ts +2 -0
  283. package/dist/src/cards/impl/trinket/thornspike-pauldron.js +11 -0
  284. package/dist/src/cards/impl/trinket/thornspike-pauldron.js.map +1 -0
  285. package/dist/src/cards/impl/trinket/tide-raiser-portrait.d.ts +2 -0
  286. package/dist/src/cards/impl/trinket/tide-raiser-portrait.js +16 -0
  287. package/dist/src/cards/impl/trinket/tide-raiser-portrait.js.map +1 -0
  288. package/dist/src/cards/impl/trinket/tiger-carving-token.d.ts +2 -0
  289. package/dist/src/cards/impl/trinket/tiger-carving-token.js +16 -0
  290. package/dist/src/cards/impl/trinket/tiger-carving-token.js.map +1 -0
  291. package/dist/src/cards/impl/trinket/trusty-crowbar.d.ts +2 -0
  292. package/dist/src/cards/impl/trinket/trusty-crowbar.js +19 -0
  293. package/dist/src/cards/impl/trinket/trusty-crowbar.js.map +1 -0
  294. package/dist/src/cards/impl/trinket/unholy-sanctum.js +1 -1
  295. package/dist/src/cards/impl/trinket/unholy-sanctum.js.map +1 -1
  296. package/dist/src/cards/impl/trinket/wicked-tome.d.ts +2 -0
  297. package/dist/src/cards/impl/trinket/wicked-tome.js +13 -0
  298. package/dist/src/cards/impl/trinket/wicked-tome.js.map +1 -0
  299. package/dist/src/cards/impl/trinket/wildfeather-duster.d.ts +2 -0
  300. package/dist/src/cards/impl/trinket/wildfeather-duster.js +25 -0
  301. package/dist/src/cards/impl/trinket/wildfeather-duster.js.map +1 -0
  302. package/dist/src/mechanics/cast-tavern-spell.js +13 -0
  303. package/dist/src/mechanics/cast-tavern-spell.js.map +1 -1
  304. package/dist/src/mechanics/tavern-spell-repeat.js +4 -5
  305. package/dist/src/mechanics/tavern-spell-repeat.js.map +1 -1
  306. package/dist/src/services/card-ids.d.ts +724 -5
  307. package/dist/src/services/card-ids.js.map +1 -1
  308. package/dist/src/simulation/add-minion-to-board.d.ts +8 -0
  309. package/dist/src/simulation/add-minion-to-board.js +28 -18
  310. package/dist/src/simulation/add-minion-to-board.js.map +1 -1
  311. package/dist/src/simulation/after-attack.js +14 -14
  312. package/dist/src/simulation/after-attack.js.map +1 -1
  313. package/dist/src/simulation/auras.js +6 -1
  314. package/dist/src/simulation/auras.js.map +1 -1
  315. package/dist/src/simulation/avenge.js +0 -18
  316. package/dist/src/simulation/avenge.js.map +1 -1
  317. package/dist/src/simulation/blood-gems.d.ts +1 -0
  318. package/dist/src/simulation/blood-gems.js +11 -1
  319. package/dist/src/simulation/blood-gems.js.map +1 -1
  320. package/dist/src/simulation/cards-in-hand.js +14 -4
  321. package/dist/src/simulation/cards-in-hand.js.map +1 -1
  322. package/dist/src/simulation/damage-effects.d.ts +6 -0
  323. package/dist/src/simulation/damage-effects.js +11 -9
  324. package/dist/src/simulation/damage-effects.js.map +1 -1
  325. package/dist/src/simulation/damage-to-hero.js +12 -0
  326. package/dist/src/simulation/damage-to-hero.js.map +1 -1
  327. package/dist/src/simulation/death-effects.js +25 -2
  328. package/dist/src/simulation/death-effects.js.map +1 -1
  329. package/dist/src/simulation/global-info-helpers.d.ts +7 -0
  330. package/dist/src/simulation/global-info-helpers.js +25 -0
  331. package/dist/src/simulation/global-info-helpers.js.map +1 -0
  332. package/dist/src/simulation/magnetize.js +28 -1
  333. package/dist/src/simulation/magnetize.js.map +1 -1
  334. package/dist/src/simulation/start-of-combat/soc-action-processor.js +0 -4
  335. package/dist/src/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  336. package/dist/src/temp-card-ids.d.ts +1 -118
  337. package/dist/src/temp-card-ids.js +1 -118
  338. package/dist/src/temp-card-ids.js.map +1 -1
  339. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"damage-effects.js","sourceRoot":"","sources":["../../../src/simulation/damage-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: friendlyBoard,\r\n\t\t\thero: friendlyHero,\r\n\t\t\totherHero: enemyHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, friendlyBoard, friendlyHero, enemyHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyHero,\r\n\t\t\t\tenemyHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, friendlyBoard, friendlyHero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\tenemyBoard,\r\n\t\t\t\t\tenemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tspawnedEntities,\r\n\t\tgameState,\r\n\t);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard.length - (friendlyBoard.indexOf(damagedEntity) + 1),\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = friendlyBoard[friendlyBoard.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? undefined;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of friendlyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: friendlyBoard,\r\n\t\t\t\t\thero: friendlyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of enemyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: enemyBoard,\r\n\t\t\t\t\thero: enemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 3 * stats, 1 * stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\thero.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_BG30_MagicItem_427 ||\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t,\r\n\t\t)\r\n\t\t.forEach((carving) => {\r\n\t\t\tconst target = pickRandomAlive(board);\r\n\t\t\tif (!!target) {\r\n\t\t\t\tconst buff = carving.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t ? 4 : 2;\r\n\t\t\t\tmodifyStats(target, carving, buff, 0, board, hero, gameState);\r\n\t\t\t}\r\n\t\t});\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"damage-effects.js","sourceRoot":"","sources":["../../../src/simulation/damage-effects.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,4DAAiH;AACjH,iEAA4D;AAC5D,6DAA+D;AAE/D,6CAA+C;AAC/C,oCAA0E;AAC1E,6DAAqD;AACrD,qCAAuC;AAEvC,qCAA+C;AAC/C,mCAAsC;AAE/B,MAAM,eAAe,GAAG,CAC9B,aAA0B,EAC1B,KAAoB,EACpB,IAAqB,EACrB,UAAyB,EACzB,SAA0B,EAC1B,YAA2C,EAC3C,MAAc,EACd,SAAwB,EACC,EAAE;;IAC3B,MAAM,eAAe,GAAkB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAClB,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,0CAAE,QAAQ,MAAK,aAAa,CAAC,QAAQ;QAC9C,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,CAAC,CAAC,0CAAE,QAAQ,MAAK,aAAa,CAAC,QAAQ;YACtD,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GACf,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,0CAAE,QAAQ,MAAK,aAAa,CAAC,QAAQ;QAC9C,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,0CAAE,QAAQ,MAAK,aAAa,CAAC,QAAQ;YACjD,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,YAAY,GAAG,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,MAAM,SAAS,GAAG,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,IAAI,aAAa,CAAC,iBAAiB,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;QACrG,IAAA,oBAAW,EAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACnE,aAAa,CAAC,iBAAiB,EAAE,CAAC;KAClC;IAED,MAAM,mBAAmB,GAAG,6BAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,IAAA,6BAAY,EAAC,mBAAmB,CAAC,EAAE;QACtC,mBAAmB,CAAC,SAAS,CAAC,aAAa,EAAE;YAC5C,aAAa,EAAE,aAAa;YAC5B,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,SAAS;YACpB,SAAS;SACT,CAAC,CAAC;KACH;IAED,QAAQ,aAAa,CAAC,MAAM,EAAE;QAC7B,gBAAoC;QACpC;YACC,IAAI,aAAa,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBACxC,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChG,IAAA,qCAA6B,EAC5B,aAAa,EACb,aAAa,EACb,YAAY,EACZ,qBAAqB,GAAG,CAAC,EACzB,qBAAqB,GAAG,CAAC,EACzB,SAAS,CACT,CAAC;gBACF,aAAa,CAAC,iBAAiB,EAAE,CAAC;aAClC;YACD,MAAM;QACP,gBAAkC;QAClC;YACC,IAAA,kCAAkB,EAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC3F,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,aAAa,EACb,aAAa,EACb,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;YACF,MAAM;QACP,gBAAgC;QAChC;YACC,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,IAAA,mBAAW,EAAC,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACrG,MAAM;QACP,gBAAkC;QAClC;YACC,eAAe,CAAC,IAAI,CACnB,GAAG,IAAA,kCAAa,EACf,aAAa,CAAC,MAAM,iBAAmC;gBACtD,CAAC;gBACD,CAAC,YAAmD,EACrD,CAAC,EACD,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,SAAS,EACT,aAAa,CAAC,QAAQ,EACtB,KAAK,CACL,CACD,CAAC;YACF,MAAM;KACP;IAED,wBAAwB,CACvB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,eAAe,EACf,SAAS,CACT,CAAC;IACF,MAAM,WAAW,GAAG,IAAA,4BAAmB,EACtC,eAAe,EACf,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EACjE,UAAU,EACV,SAAS,EACT,SAAS,CACT,CAAC;IAEF,MAAM,mBAAmB,GAAG,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;QACzB,CAAC,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAA,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,WAAW,mCAAI,SAAS,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,CAAC,EAAE;QACf,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;YACnC,MAAM,mBAAmB,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,IAAA,mCAAkB,EAAC,mBAAmB,CAAC,EAAE;gBAC5C,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE;oBAC3C,aAAa,EAAE,aAAa;oBAC5B,YAAY,EAAE,YAAY;oBAC1B,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,aAAa;oBACpB,IAAI,EAAE,YAAY;oBAClB,SAAS;iBACT,CAAC,CAAC;aACH;SACD;QACD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;YAChC,MAAM,mBAAmB,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,IAAA,mCAAkB,EAAC,mBAAmB,CAAC,EAAE;gBAC5C,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE;oBAC3C,aAAa,EAAE,aAAa;oBAC5B,YAAY,EAAE,YAAY;oBAC1B,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,UAAU;oBACjB,IAAI,EAAE,SAAS;oBACf,SAAS;iBACT,CAAC,CAAC;aACH;SACD;KACD;IACD,OAAO,WAAW,CAAC;AACpB,CAAC,CAAC;AAtJW,QAAA,eAAe,mBAsJ1B;AAEF,MAAM,wBAAwB,GAAG,CAChC,MAAmB,EACnB,KAAoB,EACpB,IAAqB,EACrB,UAAyB,EACzB,SAA0B,EAC1B,eAA8B,EAC9B,SAAwB,EACvB,EAAE;;IACH,IAAI,IAAA,uBAAe,EAAC,MAAM,EAAE,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;QACvF,KAAK;aACH,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,eAAyC;YACjD,CAAC,CAAC,MAAM,iBAA2C,CACpD;aACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,iBAA2C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/E,IAAI,CAAC,CAAC,MAAM,EAAE;gBACb,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;aACrE;QACF,CAAC,CAAC,CAAC;QACJ,KAAK;aACH,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,eAAsC,IAAI,CAAC,CAAC,MAAM,iBAAwC,CACnG;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC;aAC7C,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAA,mBAAW,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;KACJ;IAED,KAAK,MAAM,OAAO,IAAI,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,EAAE;QAC1C,MAAM,WAAW,GAAG,6BAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,IAAA,qDAAoC,EAAC,WAAW,CAAC,EAAE;YACtD,WAAW,CAAC,0BAA0B,CAAC,OAAO,EAAE;gBAC/C,aAAa,EAAE,MAAM;gBACrB,KAAK;gBACL,IAAI;gBACJ,SAAS;aACT,CAAC,CAAC;SACH;KACD;AACF,CAAC,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasAfterFriendlyMinionDamagedTrinket, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: friendlyBoard,\r\n\t\t\thero: friendlyHero,\r\n\t\t\totherHero: enemyHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, friendlyBoard, friendlyHero, enemyHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyHero,\r\n\t\t\t\tenemyHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, friendlyBoard, friendlyHero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\tenemyBoard,\r\n\t\t\t\t\tenemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tspawnedEntities,\r\n\t\tgameState,\r\n\t);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard.length - (friendlyBoard.indexOf(damagedEntity) + 1),\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = friendlyBoard[friendlyBoard.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? undefined;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of friendlyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: friendlyBoard,\r\n\t\t\t\t\thero: friendlyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of enemyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: enemyBoard,\r\n\t\t\t\t\thero: enemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 3 * stats, 1 * stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfor (const trinket of hero.trinkets ?? []) {\r\n\t\tconst trinketImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasAfterFriendlyMinionDamagedTrinket(trinketImpl)) {\r\n\t\t\ttrinketImpl.afterFriendlyMinionDamaged(trinket, {\r\n\t\t\t\tdamagedEntity: entity,\r\n\t\t\t\tboard,\r\n\t\t\t\thero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\n/** Fired from the friendly hero’s perspective when any friendly board minion takes damage. */\r\nexport interface AfterFriendlyMinionDamagedInput {\r\n\tdamagedEntity: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -4,6 +4,7 @@ exports.dealDamageToHero = void 0;
4
4
  const card_interface_1 = require("../cards/card.interface");
5
5
  const _card_mappings_1 = require("../cards/impl/_card-mappings");
6
6
  const dealDamageToHero = (source, hero, board, damage, gameState) => {
7
+ var _a;
7
8
  for (const entity of board) {
8
9
  const afterHeroDamagedImpl = _card_mappings_1.cardMappings[entity.cardId];
9
10
  if ((0, card_interface_1.hasAfterHeroDamaged)(afterHeroDamagedImpl)) {
@@ -26,6 +27,17 @@ const dealDamageToHero = (source, hero, board, damage, gameState) => {
26
27
  });
27
28
  }
28
29
  }
30
+ for (const trinket of (_a = hero.trinkets) !== null && _a !== void 0 ? _a : []) {
31
+ const afterHeroDamagedImpl = _card_mappings_1.cardMappings[trinket.cardId];
32
+ if ((0, card_interface_1.hasAfterHeroDamaged)(afterHeroDamagedImpl)) {
33
+ afterHeroDamagedImpl.afterHeroDamaged(trinket, {
34
+ damage: damage,
35
+ board: board,
36
+ hero: hero,
37
+ gameState,
38
+ });
39
+ }
40
+ }
29
41
  };
30
42
  exports.dealDamageToHero = dealDamageToHero;
31
43
  //# sourceMappingURL=damage-to-hero.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"damage-to-hero.js","sourceRoot":"","sources":["../../../src/simulation/damage-to-hero.ts"],"names":[],"mappings":";;;AAEA,4DAAkF;AAClF,iEAA4D;AAGrD,MAAM,gBAAgB,GAAG,CAC/B,MAAmB,EACnB,IAAqB,EACrB,KAAoB,EACpB,MAAc,EACd,SAAwB,EACvB,EAAE;IACH,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,MAAM,oBAAoB,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,IAAA,oCAAmB,EAAC,oBAAoB,CAAC,EAAE;YAC9C,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBAC7C,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS;aACT,CAAC,CAAC;SACH;QAED,MAAM,mBAAmB,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,IAAA,mCAAkB,EAAC,mBAAmB,CAAC,EAAE;YAC5C,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC3C,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,MAAM;gBACpB,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS;aACT,CAAC,CAAC;SACH;KACD;AACF,CAAC,CAAC;AA9BW,QAAA,gBAAgB,oBA8B3B","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasAfterHeroDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const dealDamageToHero = (\r\n\tsource: BoardEntity,\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tfor (const entity of board) {\r\n\t\tconst afterHeroDamagedImpl = cardMappings[entity.cardId];\r\n\t\tif (hasAfterHeroDamaged(afterHeroDamagedImpl)) {\r\n\t\t\tafterHeroDamagedImpl.afterHeroDamaged(entity, {\r\n\t\t\t\tdamage: damage,\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\tdamagedEntity: hero,\r\n\t\t\t\tdamageDealer: source,\r\n\t\t\t\tdamage: damage,\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface AfterHeroDamagedInput {\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"damage-to-hero.js","sourceRoot":"","sources":["../../../src/simulation/damage-to-hero.ts"],"names":[],"mappings":";;;AAEA,4DAAkF;AAClF,iEAA4D;AAGrD,MAAM,gBAAgB,GAAG,CAC/B,MAAmB,EACnB,IAAqB,EACrB,KAAoB,EACpB,MAAc,EACd,SAAwB,EACvB,EAAE;;IACH,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,MAAM,oBAAoB,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,IAAA,oCAAmB,EAAC,oBAAoB,CAAC,EAAE;YAC9C,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBAC7C,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS;aACT,CAAC,CAAC;SACH;QAED,MAAM,mBAAmB,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,IAAA,mCAAkB,EAAC,mBAAmB,CAAC,EAAE;YAC5C,mBAAmB,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC3C,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,MAAM;gBACpB,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS;aACT,CAAC,CAAC;SACH;KACD;IACD,KAAK,MAAM,OAAO,IAAI,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,EAAE;QAC1C,MAAM,oBAAoB,GAAG,6BAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,IAAA,oCAAmB,EAAC,oBAAoB,CAAC,EAAE;YAC9C,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBAC9C,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,IAAI;gBACV,SAAS;aACT,CAAC,CAAC;SACH;KACD;AACF,CAAC,CAAC;AAzCW,QAAA,gBAAgB,oBAyC3B","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasAfterHeroDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const dealDamageToHero = (\r\n\tsource: BoardEntity,\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tfor (const entity of board) {\r\n\t\tconst afterHeroDamagedImpl = cardMappings[entity.cardId];\r\n\t\tif (hasAfterHeroDamaged(afterHeroDamagedImpl)) {\r\n\t\t\tafterHeroDamagedImpl.afterHeroDamaged(entity, {\r\n\t\t\t\tdamage: damage,\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\tdamagedEntity: hero,\r\n\t\t\t\tdamageDealer: source,\r\n\t\t\t\tdamage: damage,\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\tfor (const trinket of hero.trinkets ?? []) {\r\n\t\tconst afterHeroDamagedImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasAfterHeroDamaged(afterHeroDamagedImpl)) {\r\n\t\t\tafterHeroDamagedImpl.afterHeroDamaged(trinket, {\r\n\t\t\t\tdamage: damage,\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface AfterHeroDamagedInput {\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.applyOnDeathEffects = exports.applyAfterDeathEffects = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const blood_gems_1 = require("./blood-gems");
4
6
  const utils_1 = require("../services/utils");
5
7
  const cards_in_hand_1 = require("./cards-in-hand");
6
8
  const deathrattle_spawns_1 = require("./deathrattle-spawns");
@@ -15,7 +17,7 @@ const applyAfterDeathEffects = (deadEntity, deadEntityIndexFromRight, boardWithD
15
17
  };
16
18
  exports.applyAfterDeathEffects = applyAfterDeathEffects;
17
19
  const handleSecrets = (deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState) => {
18
- var _a;
20
+ var _a, _b;
19
21
  const allSpawns = [];
20
22
  for (const trinket of boardWithDeadEntityHero.trinkets) {
21
23
  switch (trinket.cardId) {
@@ -29,9 +31,30 @@ const handleSecrets = (deadEntity, deadEntityIndexFromRight, boardWithDeadEntity
29
31
  (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [randomBeast], gameState);
30
32
  }
31
33
  break;
34
+ case "BG35_MagicItem_302":
35
+ trinket.scriptDataNum1 = (trinket.scriptDataNum1 || 0) + 1;
36
+ if (trinket.scriptDataNum1 >= 7) {
37
+ trinket.scriptDataNum1 = 0;
38
+ const randomMech = gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MECH, (_a = boardWithDeadEntityHero.tavernTier) !== null && _a !== void 0 ? _a : 6, []);
39
+ if (randomMech) {
40
+ (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [randomMech], gameState);
41
+ }
42
+ }
43
+ break;
44
+ case "BG35_MagicItem_430":
45
+ if (deadEntity.taunt) {
46
+ const scrapsmiths = boardWithDeadEntity.filter((e) => e.health > 0 &&
47
+ !e.definitelyDead &&
48
+ (e.cardId === "BG24_707" ||
49
+ e.cardId === "BG24_707_G"));
50
+ for (const scrapsmith of scrapsmiths) {
51
+ (0, blood_gems_1.playBloodGemsOn)(trinket, scrapsmith, 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);
52
+ }
53
+ }
54
+ break;
32
55
  }
33
56
  }
34
- for (const secret of ((_a = boardWithDeadEntityHero.secrets) !== null && _a !== void 0 ? _a : []).filter((s) => !s.triggered)) {
57
+ for (const secret of ((_b = boardWithDeadEntityHero.secrets) !== null && _b !== void 0 ? _b : []).filter((s) => !s.triggered)) {
35
58
  switch (secret.cardId) {
36
59
  case "TB_Bacon_Secrets_08":
37
60
  secret.triggered = true;
@@ -1 +1 @@
1
- {"version":3,"file":"death-effects.js","sourceRoot":"","sources":["../../../src/simulation/death-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive } from '../services/utils';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const applyAfterDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\tconst spawnsFromSecrets = handleSecrets(\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tallSpawns.push(...spawnsFromSecrets);\r\n\tperformEntitySpawns(\r\n\t\tallSpawns,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\treturn allSpawns;\r\n};\r\n\r\nconst handleSecrets = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\r\n\tfor (const trinket of boardWithDeadEntityHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.LuckyTabby_BG30_MagicItem_931:\r\n\t\t\t\tif (!trinket.scriptDataNum1) {\r\n\t\t\t\t\ttrinket.scriptDataNum1 = 6;\r\n\t\t\t\t}\r\n\t\t\t\ttrinket.scriptDataNum1--;\r\n\t\t\t\tif (trinket.scriptDataNum1 === 0) {\r\n\t\t\t\t\tconst randomBeast = pickRandom(gameState.cardsData.beastSpawns);\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomBeast], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const secret of (boardWithDeadEntityHero.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.Avenge_TB_Bacon_Secrets_08:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst avengeTarget = pickRandomAlive(boardWithDeadEntity);\r\n\t\t\t\tmodifyStats(avengeTarget, secret, 3, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_TB_Bacon_Secrets_10:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst redemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\t// { ...newSpawn } as BoardEntity,\r\n\t\t\t\t);\r\n\t\t\t\tredemptionSpawns[0].health = 1;\r\n\t\t\t\tallSpawns.push(...redemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, redemptionSpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_BetterRedemption_TB_Bacon_Secrets_10b:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst betterRedemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tfor (const spawn of betterRedemptionSpawns) {\r\n\t\t\t\t\tspawn.health = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.maxHealth = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.attack = deadEntity.attack;\r\n\t\t\t\t\tspawn.maxAttack = deadEntity.maxAttack;\r\n\t\t\t\t\tspawn.enchantments = deadEntity.enchantments;\r\n\t\t\t\t\tspawn.divineShield = deadEntity.hadDivineShield;\r\n\t\t\t\t}\r\n\t\t\t\tallSpawns.push(...betterRedemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tsecret,\r\n\t\t\t\t\tbetterRedemptionSpawns[0],\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Effigy_TB_Bacon_Secrets_05:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst minionTier = gameState.cardsData.getTavernLevel(deadEntity.cardId);\r\n\t\t\t\tconst newMinion = gameState.cardsData.getRandomMinionForTavernTier(minionTier);\r\n\t\t\t\tconst effigySpawns = spawnEntities(\r\n\t\t\t\t\tnewMinion,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tallSpawns.push(...effigySpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, effigySpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn allSpawns;\r\n};\r\n\r\nexport const applyOnDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// Nothing yet\r\n\treturn [];\r\n};\r\n"]}
1
+ {"version":3,"file":"death-effects.js","sourceRoot":"","sources":["../../../src/simulation/death-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { playBloodGemsOn } from './blood-gems';\r\nimport { pickRandom, pickRandomAlive } from '../services/utils';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const applyAfterDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\tconst spawnsFromSecrets = handleSecrets(\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tallSpawns.push(...spawnsFromSecrets);\r\n\tperformEntitySpawns(\r\n\t\tallSpawns,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\treturn allSpawns;\r\n};\r\n\r\nconst handleSecrets = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\r\n\tfor (const trinket of boardWithDeadEntityHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.LuckyTabby_BG30_MagicItem_931:\r\n\t\t\t\tif (!trinket.scriptDataNum1) {\r\n\t\t\t\t\ttrinket.scriptDataNum1 = 6;\r\n\t\t\t\t}\r\n\t\t\t\ttrinket.scriptDataNum1--;\r\n\t\t\t\tif (trinket.scriptDataNum1 === 0) {\r\n\t\t\t\t\tconst randomBeast = pickRandom(gameState.cardsData.beastSpawns);\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomBeast], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.StormcoilSticker_BG35_MagicItem_302:\r\n\t\t\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 || 0) + 1;\r\n\t\t\t\tif (trinket.scriptDataNum1 >= 7) {\r\n\t\t\t\t\ttrinket.scriptDataNum1 = 0;\r\n\t\t\t\t\tconst randomMech = gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\t\t\tRace.MECH,\r\n\t\t\t\t\t\tboardWithDeadEntityHero.tavernTier ?? 6,\r\n\t\t\t\t\t\t[],\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (randomMech) {\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomMech], gameState);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ScrapsmithPortrait_BG35_MagicItem_430:\r\n\t\t\t\tif (deadEntity.taunt) {\r\n\t\t\t\t\tconst scrapsmiths = boardWithDeadEntity.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\te.health > 0 &&\r\n\t\t\t\t\t\t\t!e.definitelyDead &&\r\n\t\t\t\t\t\t\t(e.cardId === CardIds.BristlemaneScrapsmith_BG24_707 ||\r\n\t\t\t\t\t\t\t\te.cardId === CardIds.BristlemaneScrapsmith_BG24_707_G),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tfor (const scrapsmith of scrapsmiths) {\r\n\t\t\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\t\t\ttrinket,\r\n\t\t\t\t\t\t\tscrapsmith,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const secret of (boardWithDeadEntityHero.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.Avenge_TB_Bacon_Secrets_08:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst avengeTarget = pickRandomAlive(boardWithDeadEntity);\r\n\t\t\t\tmodifyStats(avengeTarget, secret, 3, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_TB_Bacon_Secrets_10:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst redemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\t// { ...newSpawn } as BoardEntity,\r\n\t\t\t\t);\r\n\t\t\t\tredemptionSpawns[0].health = 1;\r\n\t\t\t\tallSpawns.push(...redemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, redemptionSpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_BetterRedemption_TB_Bacon_Secrets_10b:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst betterRedemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tfor (const spawn of betterRedemptionSpawns) {\r\n\t\t\t\t\tspawn.health = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.maxHealth = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.attack = deadEntity.attack;\r\n\t\t\t\t\tspawn.maxAttack = deadEntity.maxAttack;\r\n\t\t\t\t\tspawn.enchantments = deadEntity.enchantments;\r\n\t\t\t\t\tspawn.divineShield = deadEntity.hadDivineShield;\r\n\t\t\t\t}\r\n\t\t\t\tallSpawns.push(...betterRedemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tsecret,\r\n\t\t\t\t\tbetterRedemptionSpawns[0],\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Effigy_TB_Bacon_Secrets_05:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst minionTier = gameState.cardsData.getTavernLevel(deadEntity.cardId);\r\n\t\t\t\tconst newMinion = gameState.cardsData.getRandomMinionForTavernTier(minionTier);\r\n\t\t\t\tconst effigySpawns = spawnEntities(\r\n\t\t\t\t\tnewMinion,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tallSpawns.push(...effigySpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, effigySpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn allSpawns;\r\n};\r\n\r\nexport const applyOnDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// Nothing yet\r\n\treturn [];\r\n};\r\n"]}
@@ -0,0 +1,7 @@
1
+ import { BgsPlayerEntity } from '../bgs-player-entity';
2
+ import { BoardEntity } from '../board-entity';
3
+ import { BoardSecret } from '../board-secret';
4
+ import { FullGameState } from './internal-game-state';
5
+ export declare const increaseUndeadAttackBonus: (source: BoardEntity | BgsPlayerEntity | BoardSecret, board: BoardEntity[], hero: BgsPlayerEntity, amount: number, gameState: FullGameState, countsAsStatsGain?: boolean) => void;
6
+ export declare const increasePirateAttackBonus: (source: BoardEntity | BgsPlayerEntity | BoardSecret, board: BoardEntity[], hero: BgsPlayerEntity, amount: number, gameState: FullGameState) => void;
7
+ export declare const increaseGoldrinnBuff: (source: BoardEntity | BgsPlayerEntity | BoardSecret, board: BoardEntity[], hero: BgsPlayerEntity, attack: number, health: number, gameState: FullGameState) => void;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.increaseGoldrinnBuff = exports.increasePirateAttackBonus = exports.increaseUndeadAttackBonus = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const utils_1 = require("../utils");
6
+ const increaseUndeadAttackBonus = (source, board, hero, amount, gameState, countsAsStatsGain = false) => {
7
+ var _a;
8
+ hero.globalInfo.UndeadAttackBonus = ((_a = hero.globalInfo.UndeadAttackBonus) !== null && _a !== void 0 ? _a : 0) + amount;
9
+ (0, utils_1.addStatsToBoard)(source, board, hero, amount, 0, gameState, reference_data_1.Race[reference_data_1.Race.UNDEAD], countsAsStatsGain);
10
+ };
11
+ exports.increaseUndeadAttackBonus = increaseUndeadAttackBonus;
12
+ const increasePirateAttackBonus = (source, board, hero, amount, gameState) => {
13
+ var _a;
14
+ hero.globalInfo.PirateAttackBonus = ((_a = hero.globalInfo.PirateAttackBonus) !== null && _a !== void 0 ? _a : 0) + amount;
15
+ (0, utils_1.addStatsToBoard)(source, board, hero, amount, 0, gameState, reference_data_1.Race[reference_data_1.Race.PIRATE], false);
16
+ };
17
+ exports.increasePirateAttackBonus = increasePirateAttackBonus;
18
+ const increaseGoldrinnBuff = (source, board, hero, attack, health, gameState) => {
19
+ var _a, _b;
20
+ hero.globalInfo.GoldrinnBuffAtk = ((_a = hero.globalInfo.GoldrinnBuffAtk) !== null && _a !== void 0 ? _a : 0) + attack;
21
+ hero.globalInfo.GoldrinnBuffHealth = ((_b = hero.globalInfo.GoldrinnBuffHealth) !== null && _b !== void 0 ? _b : 0) + health;
22
+ (0, utils_1.addStatsToBoard)(source, board, hero, attack, health, gameState, reference_data_1.Race[reference_data_1.Race.BEAST]);
23
+ };
24
+ exports.increaseGoldrinnBuff = increaseGoldrinnBuff;
25
+ //# sourceMappingURL=global-info-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-info-helpers.js","sourceRoot":"","sources":["../../../src/simulation/global-info-helpers.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,oCAA2C;AAGpC,MAAM,yBAAyB,GAAG,CACxC,MAAmD,EACnD,KAAoB,EACpB,IAAqB,EACrB,MAAc,EACd,SAAwB,EACxB,iBAAiB,GAAG,KAAK,EAClB,EAAE;;IACT,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,mCAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IACtF,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,qBAAI,CAAC,qBAAI,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAClG,CAAC,CAAC;AAVW,QAAA,yBAAyB,6BAUpC;AAEK,MAAM,yBAAyB,GAAG,CACxC,MAAmD,EACnD,KAAoB,EACpB,IAAqB,EACrB,MAAc,EACd,SAAwB,EACjB,EAAE;;IACT,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,mCAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IACtF,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,qBAAI,CAAC,qBAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AACtF,CAAC,CAAC;AATW,QAAA,yBAAyB,6BASpC;AAEK,MAAM,oBAAoB,GAAG,CACnC,MAAmD,EACnD,KAAoB,EACpB,IAAqB,EACrB,MAAc,EACd,MAAc,EACd,SAAwB,EACjB,EAAE;;IACT,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,eAAe,mCAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IAClF,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IACxF,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAI,CAAC,qBAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACnF,CAAC,CAAC;AAXW,QAAA,oBAAoB,wBAW/B","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { addStatsToBoard } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const increaseUndeadAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n\tcountsAsStatsGain = false,\r\n): void => {\r\n\thero.globalInfo.UndeadAttackBonus = (hero.globalInfo.UndeadAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.UNDEAD], countsAsStatsGain);\r\n};\r\n\r\nexport const increasePirateAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.PirateAttackBonus = (hero.globalInfo.PirateAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.PIRATE], false);\r\n};\r\n\r\nexport const increaseGoldrinnBuff = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.GoldrinnBuffAtk = (hero.globalInfo.GoldrinnBuffAtk ?? 0) + attack;\r\n\thero.globalInfo.GoldrinnBuffHealth = (hero.globalInfo.GoldrinnBuffHealth ?? 0) + health;\r\n\taddStatsToBoard(source, board, hero, attack, health, gameState, Race[Race.BEAST]);\r\n};\r\n"]}
@@ -7,7 +7,7 @@ const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
7
  const utils_1 = require("../utils");
8
8
  const stats_1 = require("./stats");
9
9
  const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero, otherBoard, otherHero, gameState, isFirstTimeMagnetize = true) => {
10
- var _a, _b, _c, _d, _e, _f, _g;
10
+ var _a, _b, _c, _d, _e, _f, _g, _h;
11
11
  const electromagneticDevices = hero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_709").length;
12
12
  const greaterElecromagneticDevices = hero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_709t").length;
13
13
  const magnetMult = board.some((e) => e.cardId === "BG34_177_G")
@@ -47,6 +47,18 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
47
47
  });
48
48
  }
49
49
  }
50
+ for (const trinket of hero.trinkets) {
51
+ const onBeforeMagnetizeImpl = _card_mappings_1.cardMappings[trinket.cardId];
52
+ if ((0, card_interface_1.hasOnBeforeMagnetize)(onBeforeMagnetizeImpl)) {
53
+ onBeforeMagnetizeImpl.onBeforeMagnetize(trinket, {
54
+ board: board,
55
+ hero: hero,
56
+ magnetizedCard: modularCard,
57
+ magnetizeTarget: target,
58
+ gameState: gameState,
59
+ });
60
+ }
61
+ }
50
62
  (0, stats_1.modifyStats)(target, source, modularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, modularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, board, hero, gameState);
51
63
  target.taunt = target.taunt || ((_a = modularCard.mechanics) === null || _a === void 0 ? void 0 : _a.includes(reference_data_1.GameTag[reference_data_1.GameTag.TAUNT]));
52
64
  target.divineShield =
@@ -116,6 +128,21 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
116
128
  });
117
129
  }
118
130
  }
131
+ for (const trinket of (_h = hero.trinkets) !== null && _h !== void 0 ? _h : []) {
132
+ const onAfterMagnetizeImpl = _card_mappings_1.cardMappings[trinket.cardId];
133
+ if ((0, card_interface_1.hasOnAfterMagnetize)(onAfterMagnetizeImpl)) {
134
+ onAfterMagnetizeImpl.onAfterMagnetize(trinket, {
135
+ board: board,
136
+ hero: hero,
137
+ source: source,
138
+ otherHero: otherHero,
139
+ otherBoard: otherBoard,
140
+ magnetizedCard: modularCard,
141
+ magnetizeTarget: target,
142
+ gameState: gameState,
143
+ });
144
+ }
145
+ }
119
146
  }
120
147
  }
121
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../../src/simulation/magnetize.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport {\r\n\thasOnAfterMagnetize,\r\n\thasOnAfterMagnetizeSelf,\r\n\thasOnAfterMagnetizeToSelf,\r\n\thasOnBeforeMagnetize,\r\n\thasOnBeforeMagnetizeSelf,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { Mutable } from '../services/utils';\r\nimport { buildSingleBoardEntity } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\tinputTargets: BoardEntity[] | (() => BoardEntity[]),\r\n\tsource: BoardEntity,\r\n\tcardsToMagnetize: string[] | ReferenceCard[],\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tisFirstTimeMagnetize = true,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst magnetMult = board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177_G)\r\n\t\t? 3\r\n\t\t: board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177)\r\n\t\t? 2\r\n\t\t: 1;\r\n\tfor (let i = 0; i < magnetMult; i++) {\r\n\t\tconst actualTargets = typeof inputTargets === 'function' ? inputTargets() : inputTargets;\r\n\t\tfor (const target of actualTargets) {\r\n\t\t\tfor (const cardToMagnetize of cardsToMagnetize) {\r\n\t\t\t\tconst modularCard =\r\n\t\t\t\t\ttypeof cardToMagnetize === 'string'\r\n\t\t\t\t\t\t? { ...gameState.allCards.getCard(cardToMagnetize) }\r\n\t\t\t\t\t\t: cardToMagnetize;\r\n\t\t\t\tconst modularBoardEntity = buildSingleBoardEntity(\r\n\t\t\t\t\tmodularCard.id,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\thero.friendly,\r\n\t\t\t\t\tgameState.sharedState.currentEntityId++,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treferenceCardToUse: modularCard,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tconst onBeforeMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnBeforeMagnetizeSelf(onBeforeMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonBeforeMagnetizeSelfImpl.onBeforeMagnetizeSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\tisFirstTimeMagnetize: isFirstTimeMagnetize,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tsource,\r\n\t\t\t\t\tmodularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tmodularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\ttarget.taunt = target.taunt || modularCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\t\t\t\ttarget.divineShield =\r\n\t\t\t\t\ttarget.divineShield || modularCard.mechanics?.includes(GameTag[GameTag.DIVINE_SHIELD]);\r\n\t\t\t\ttarget.poisonous = target.poisonous || modularCard.mechanics?.includes(GameTag[GameTag.POISONOUS]);\r\n\t\t\t\ttarget.venomous = target.venomous || modularCard.mechanics?.includes(GameTag[GameTag.VENOMOUS]);\r\n\t\t\t\ttarget.windfury = target.windfury || modularCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\t\t\t\ttarget.reborn = target.reborn || modularCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\t\t\t\ttarget.stealth = target.stealth || modularCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\r\n\t\t\t\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\t\t\t\tif (magneticEnchantment) {\r\n\t\t\t\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\t\t\t\ttarget.enchantments.push({\r\n\t\t\t\t\t\tcardId: enchantment,\r\n\t\t\t\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (\r\n\t\t\t\t\t[CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(\r\n\t\t\t\t\t\tcardToMagnetize as CardIds,\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst mult = cardToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\t\t\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Dr Boom's Monster?\r\n\t\t\t\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\t\t\t\tfor (const entity of board) {\r\n\t\t\t\t\tconst drBoomBases =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tconst drBoomGoldens =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnAfterMagnetizeToSelf(onAfterMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeSelfImpl.onAfterMagnetizeToSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[modularCard.id];\r\n\t\t\t\tif (hasOnAfterMagnetizeSelf(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetizeSelf(target, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const getMagnetizations = (entity: BoardEntity, gameState: FullGameState) => {\r\n\treturn entity.enchantments.filter((e) =>\r\n\t\tgameState.allCards.getCard(e.cardId).mechanics?.includes(GameTag[GameTag.MODULAR]),\r\n\t).length;\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: Mutable<ReferenceCard>;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnBeforeMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n\tisFirstTimeMagnetize: boolean;\r\n}\r\n\r\nexport interface OnAfterMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnAfterMagnetizeInput {\r\n\tsource: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tmagnetizedCard: ReferenceCard;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../../src/simulation/magnetize.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport {\r\n\thasOnAfterMagnetize,\r\n\thasOnAfterMagnetizeSelf,\r\n\thasOnAfterMagnetizeToSelf,\r\n\thasOnBeforeMagnetize,\r\n\thasOnBeforeMagnetizeSelf,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { Mutable } from '../services/utils';\r\nimport { buildSingleBoardEntity } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\tinputTargets: BoardEntity[] | (() => BoardEntity[]),\r\n\tsource: BoardEntity,\r\n\tcardsToMagnetize: string[] | ReferenceCard[],\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tisFirstTimeMagnetize = true,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst magnetMult = board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177_G)\r\n\t\t? 3\r\n\t\t: board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177)\r\n\t\t? 2\r\n\t\t: 1;\r\n\tfor (let i = 0; i < magnetMult; i++) {\r\n\t\tconst actualTargets = typeof inputTargets === 'function' ? inputTargets() : inputTargets;\r\n\t\tfor (const target of actualTargets) {\r\n\t\t\tfor (const cardToMagnetize of cardsToMagnetize) {\r\n\t\t\t\tconst modularCard =\r\n\t\t\t\t\ttypeof cardToMagnetize === 'string'\r\n\t\t\t\t\t\t? { ...gameState.allCards.getCard(cardToMagnetize) }\r\n\t\t\t\t\t\t: cardToMagnetize;\r\n\t\t\t\tconst modularBoardEntity = buildSingleBoardEntity(\r\n\t\t\t\t\tmodularCard.id,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\thero.friendly,\r\n\t\t\t\t\tgameState.sharedState.currentEntityId++,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treferenceCardToUse: modularCard,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tconst onBeforeMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnBeforeMagnetizeSelf(onBeforeMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonBeforeMagnetizeSelfImpl.onBeforeMagnetizeSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\tisFirstTimeMagnetize: isFirstTimeMagnetize,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (const trinket of hero.trinkets) {\r\n\t\t\t\t\tconst onBeforeMagnetizeImpl = cardMappings[trinket.cardId];\r\n\t\t\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(trinket, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tsource,\r\n\t\t\t\t\tmodularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tmodularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\ttarget.taunt = target.taunt || modularCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\t\t\t\ttarget.divineShield =\r\n\t\t\t\t\ttarget.divineShield || modularCard.mechanics?.includes(GameTag[GameTag.DIVINE_SHIELD]);\r\n\t\t\t\ttarget.poisonous = target.poisonous || modularCard.mechanics?.includes(GameTag[GameTag.POISONOUS]);\r\n\t\t\t\ttarget.venomous = target.venomous || modularCard.mechanics?.includes(GameTag[GameTag.VENOMOUS]);\r\n\t\t\t\ttarget.windfury = target.windfury || modularCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\t\t\t\ttarget.reborn = target.reborn || modularCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\t\t\t\ttarget.stealth = target.stealth || modularCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\r\n\t\t\t\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\t\t\t\tif (magneticEnchantment) {\r\n\t\t\t\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\t\t\t\ttarget.enchantments.push({\r\n\t\t\t\t\t\tcardId: enchantment,\r\n\t\t\t\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (\r\n\t\t\t\t\t[CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(\r\n\t\t\t\t\t\tcardToMagnetize as CardIds,\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst mult = cardToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\t\t\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Dr Boom's Monster?\r\n\t\t\t\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\t\t\t\tfor (const entity of board) {\r\n\t\t\t\t\tconst drBoomBases =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tconst drBoomGoldens =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnAfterMagnetizeToSelf(onAfterMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeSelfImpl.onAfterMagnetizeToSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[modularCard.id];\r\n\t\t\t\tif (hasOnAfterMagnetizeSelf(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetizeSelf(target, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (const trinket of hero.trinkets ?? []) {\r\n\t\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[trinket.cardId];\r\n\t\t\t\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(trinket, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const getMagnetizations = (entity: BoardEntity, gameState: FullGameState) => {\r\n\treturn entity.enchantments.filter((e) =>\r\n\t\tgameState.allCards.getCard(e.cardId).mechanics?.includes(GameTag[GameTag.MODULAR]),\r\n\t).length;\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: Mutable<ReferenceCard>;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnBeforeMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n\tisFirstTimeMagnetize: boolean;\r\n}\r\n\r\nexport interface OnAfterMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnAfterMagnetizeInput {\r\n\tsource: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tmagnetizedCard: ReferenceCard;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -26,7 +26,6 @@ const amber_guardian_1 = require("../../cards/impl/minion/amber-guardian");
26
26
  const audacious_anchor_1 = require("../../cards/impl/minion/audacious-anchor");
27
27
  const carbonic_copy_1 = require("../../cards/impl/minion/carbonic-copy");
28
28
  const corrupted_myrmidon_1 = require("../../cards/impl/minion/corrupted-myrmidon");
29
- const diremuck_forager_1 = require("../../cards/impl/minion/diremuck-forager");
30
29
  const elder_taggawag_1 = require("../../cards/impl/minion/elder-taggawag");
31
30
  const hawkstrider_herald_1 = require("../../cards/impl/minion/hawkstrider-herald");
32
31
  const mantid_queen_1 = require("../../cards/impl/minion/mantid-queen");
@@ -188,9 +187,6 @@ const getStartOfCombatAction = (cardId) => {
188
187
  case "BG27_503":
189
188
  case "BG27_503_G":
190
189
  return carbonic_copy_1.CarbonicCopy;
191
- case "BG27_556":
192
- case "BG27_556_G":
193
- return diremuck_forager_1.DiremuckForager;
194
190
  case "BG27_079":
195
191
  case "BG27_079_G":
196
192
  return hawkstrider_herald_1.HawkstriderHerald;
@@ -1 +1 @@
1
- {"version":3,"file":"soc-action-processor.js","sourceRoot":"","sources":["../../../../src/simulation/start-of-combat/soc-action-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\nimport { hasStartOfCombat, StartOfCombatCard, StartOfCombatTiming } from '../../cards/card.interface';\r\nimport { cardMappings } from '../../cards/impl/_card-mappings';\r\nimport { AnomalousTwin } from '../../cards/impl/anomaly/anomalous-twin';\r\nimport { BlessedOrBlighted } from '../../cards/impl/anomaly/blessed-or-blighted';\r\nimport { BoonOfBeetles } from '../../cards/impl/bg-spell/boon-of-beetles';\r\nimport { ToxicTumbleweed } from '../../cards/impl/bg-spell/toxic-tumbleweed';\r\nimport { UpperHand } from '../../cards/impl/bg-spell/upper-hand';\r\nimport { AimHigh } from '../../cards/impl/hero-power/aim-high';\r\nimport { AimLeft } from '../../cards/impl/hero-power/aim-left';\r\nimport { AimLow } from '../../cards/impl/hero-power/aim-low';\r\nimport { AimRight } from '../../cards/impl/hero-power/aim-right';\r\nimport { AllWillBurn } from '../../cards/impl/hero-power/all-will-burn';\r\nimport { EarthInvocation } from '../../cards/impl/hero-power/earth-invocation';\r\nimport { EmbraceYourRage } from '../../cards/impl/hero-power/embrace-your-rage';\r\nimport { FireInvocation } from '../../cards/impl/hero-power/fire-invocation';\r\nimport { LightningInvocation } from '../../cards/impl/hero-power/lightning-invocation';\r\nimport { RapidReanimation } from '../../cards/impl/hero-power/rapid-reanimation';\r\nimport { RebornRites } from '../../cards/impl/hero-power/reborn-rites';\r\nimport { Tentacular } from '../../cards/impl/hero-power/tentacular';\r\nimport { WaterInvocation } from '../../cards/impl/hero-power/water-invocation';\r\nimport { WaxWarband } from '../../cards/impl/hero-power/wax-warband';\r\nimport { AmberGuardian } from '../../cards/impl/minion/amber-guardian';\r\nimport { AudaciousAnchor } from '../../cards/impl/minion/audacious-anchor';\r\nimport { CarbonicCopy } from '../../cards/impl/minion/carbonic-copy';\r\nimport { CorruptedMyrmidon } from '../../cards/impl/minion/corrupted-myrmidon';\r\nimport { DiremuckForager } from '../../cards/impl/minion/diremuck-forager';\r\nimport { ElderTaggawag } from '../../cards/impl/minion/elder-taggawag';\r\nimport { HawkstriderHerald } from '../../cards/impl/minion/hawkstrider-herald';\r\nimport { MantidQueen } from '../../cards/impl/minion/mantid-queen';\r\nimport { Sandy } from '../../cards/impl/minion/sandy';\r\nimport { SunScreener } from '../../cards/impl/minion/sun-screener';\r\nimport { TheUninvitedGuest } from '../../cards/impl/minion/the-uninvited-guest';\r\nimport { ThousandthPaperDrake } from '../../cards/impl/minion/thousandth-paper-drake';\r\nimport { YulonFortuneGranter } from '../../cards/impl/minion/yulon-fortune-granter';\r\nimport { EvilTwin } from '../../cards/impl/quest-reward/evil-twin';\r\nimport { StaffOfOrigination } from '../../cards/impl/quest-reward/staff-of-origination';\r\nimport { StolenGold } from '../../cards/impl/quest-reward/stolen-gold';\r\nimport { FleetingVigor } from '../../cards/impl/spell/fleeting-vigor';\r\nimport { AutomatonPortrait } from '../../cards/impl/trinket/automaton-portrait';\r\nimport { BronzeTimepiece } from '../../cards/impl/trinket/bronze-timepiece';\r\nimport { EmeraldDreamcatcher } from '../../cards/impl/trinket/emerald-dreamcatcher';\r\nimport { EternalPortrait } from '../../cards/impl/trinket/eternal-portrait';\r\nimport { FishySticker } from '../../cards/impl/trinket/fishy-sticker';\r\nimport { HoggyBank } from '../../cards/impl/trinket/hoggy-bank';\r\nimport { HollyMallet } from '../../cards/impl/trinket/holly-mallet';\r\nimport { IronforgeAnvil } from '../../cards/impl/trinket/ironforge-anvil';\r\nimport { JarredFrostling } from '../../cards/impl/trinket/jarred-frostling';\r\nimport { KarazhanChessSet } from '../../cards/impl/trinket/karazhan-chess-set';\r\nimport { RivendarePortrait } from '../../cards/impl/trinket/rivendare-portrait';\r\nimport { RustyTrident } from '../../cards/impl/trinket/rusty-trident';\r\nimport { ShipInABottle } from '../../cards/impl/trinket/ship-in-a-bottle';\r\nimport { SummoningSphere } from '../../cards/impl/trinket/summoning-sphere';\r\nimport { TinyfinOnesie } from '../../cards/impl/trinket/tinyfin-onesie';\r\nimport { TrainingCertificate } from '../../cards/impl/trinket/training-certificate';\r\nimport { ValorousMedallion } from '../../cards/impl/trinket/valorous-medaillion';\r\nimport { CardIds } from '../../services/card-ids';\r\nimport { processMinionDeath } from '../attack';\r\nimport { handleSummonsWhenSpace } from '../summon-when-space';\r\nimport { SoCInput } from './start-of-combat-input';\r\n\r\nexport const performStartOfCombatAction = (\r\n\tcardId: string,\r\n\tentity: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\tinput: SoCInput,\r\n\tprocessDeaths: boolean,\r\n\ttiming?: StartOfCombatTiming,\r\n): boolean => {\r\n\tlet hasTriggered:\r\n\t\t| boolean\r\n\t\t| {\r\n\t\t\t\thasTriggered: boolean;\r\n\t\t\t\tshouldRecomputeCurrentAttacker: boolean;\r\n\t\t } = false;\r\n\tconst promoPortraitCount = getPromoPortraitCount(input.playerEntity);\r\n\tfor (let i = promoPortraitCount; i >= 0; i--) {\r\n\t\tconst card = getStartOfCombatAction(cardId);\r\n\t\tif (!!timing && card?.startOfCombatTiming !== timing) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst action = card?.startOfCombat;\r\n\t\tif (!!action) {\r\n\t\t\thasTriggered = action(entity, input);\r\n\t\t\t// Always proc it (for promo portrait), and use the hasTriggered for finer control\r\n\t\t\tonStartOfCombatTriggered(i, cardId, input.playerEntity);\r\n\t\t\tif (!!hasTriggered) {\r\n\t\t\t\tif (processDeaths) {\r\n\t\t\t\t\tprocessMinionDeath(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\t// See https://replays.firestoneapp.com/?reviewId=2eacbbc2-7dfa-487b-951d-0fa6d31d175e&turn=25&action=1\r\n\t\t\t\t\t\t// It looks like it doesn't look for the \"summons when space\" between Stitched Salvager's SoC and\r\n\t\t\t\t\t\t// Hawkstrider Herald SoC\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\t// https://replays.firestoneapp.com/?reviewId=6293597f-28fa-472e-ba8c-35f6b7deef58&turn=31&action=6\r\n\t\t\t\t\t// The first RapidReanimation triggers, resummons the target, then the second RapidReanimation triggers\r\n\t\t\t\t\t// So we need to process the resummon as soon as the minion dies, and before processing the second RapidReanimation\r\n\t\t\t\t\thandleSummonsWhenSpace(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof hasTriggered !== 'boolean' && hasTriggered.shouldRecomputeCurrentAttacker) {\r\n\t\t\t\t\tinput.currentAttacker =\r\n\t\t\t\t\t\tinput.playerBoard.length > input.opponentBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 0\r\n\t\t\t\t\t\t\t\t: 1\r\n\t\t\t\t\t\t\t: input.opponentBoard.length > input.playerBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 1\r\n\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t\t: Math.round(Math.random());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn !!hasTriggered;\r\n};\r\n\r\n// TODO: load all cards on start, then do some programmatic mapping\r\nconst getStartOfCombatAction = (cardId: string): StartOfCombatCard => {\r\n\tswitch (cardId) {\r\n\t\t// Quest rewards\r\n\t\tcase CardIds.EvilTwin:\r\n\t\t\treturn EvilTwin;\r\n\t\tcase CardIds.StaffOfOrigination_BG24_Reward_312:\r\n\t\t\treturn StaffOfOrigination;\r\n\t\tcase CardIds.StolenGold:\r\n\t\t\treturn StolenGold;\r\n\r\n\t\t// Trinkets\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\t\treturn HollyMallet;\r\n\t\tcase CardIds.TrainingCertificate_BG30_MagicItem_962:\r\n\t\t\treturn TrainingCertificate;\r\n\t\tcase CardIds.ValorousMedallion_BG30_MagicItem_970:\r\n\t\tcase CardIds.ValorousMedallion_ValorousMedallionToken_BG30_MagicItem_970t:\r\n\t\t\treturn ValorousMedallion;\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\t\treturn EmeraldDreamcatcher;\r\n\t\tcase CardIds.JarredFrostling_BG30_MagicItem_952:\r\n\t\t\treturn JarredFrostling;\r\n\t\tcase CardIds.RustyTrident_BG30_MagicItem_917:\r\n\t\t\treturn RustyTrident;\r\n\t\tcase CardIds.HoggyBank_BG30_MagicItem_411:\r\n\t\t\treturn HoggyBank;\r\n\t\tcase CardIds.AutomatonPortrait_BG30_MagicItem_303:\r\n\t\t\treturn AutomatonPortrait;\r\n\t\tcase CardIds.ShipInABottle_BG30_MagicItem_407:\r\n\t\t\treturn ShipInABottle;\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\t\treturn EternalPortrait;\r\n\t\tcase CardIds.RivendarePortrait_BG30_MagicItem_310:\r\n\t\t\treturn RivendarePortrait;\r\n\t\tcase CardIds.TinyfinOnesie_BG30_MagicItem_441:\r\n\t\t\treturn TinyfinOnesie;\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\t\treturn BronzeTimepiece;\r\n\t\tcase CardIds.IronforgeAnvil_BG30_MagicItem_403:\r\n\t\t\treturn IronforgeAnvil;\r\n\t\tcase CardIds.KarazhanChessSet_BG30_MagicItem_972:\r\n\t\t\treturn KarazhanChessSet;\r\n\t\t// case CardIds.FishySticker_BG30_MagicItem_821:\r\n\t\tcase CardIds.FishySticker_FishyStickerToken_BG30_MagicItem_821t2:\r\n\t\t\treturn FishySticker;\r\n\t\tcase CardIds.SummoningSphere_BGDUO_MagicItem_003:\r\n\t\t\treturn SummoningSphere;\r\n\r\n\t\t// Hero powers\r\n\t\tcase CardIds.EarthInvocationToken:\r\n\t\t\treturn EarthInvocation;\r\n\t\tcase CardIds.WaterInvocationToken:\r\n\t\t\treturn WaterInvocation;\r\n\t\tcase CardIds.FireInvocationToken:\r\n\t\t\treturn FireInvocation;\r\n\t\tcase CardIds.LightningInvocationToken:\r\n\t\t\treturn LightningInvocation;\r\n\t\tcase CardIds.AllWillBurn:\r\n\t\t\treturn AllWillBurn;\r\n\t\tcase CardIds.EmbraceYourRage:\r\n\t\t\treturn EmbraceYourRage;\r\n\t\tcase CardIds.Ozumat_Tentacular:\r\n\t\t\treturn Tentacular;\r\n\t\tcase CardIds.RebornRites:\r\n\t\t\treturn RebornRites;\r\n\t\tcase CardIds.TeronGorefiend_RapidReanimation:\r\n\t\t\treturn RapidReanimation;\r\n\t\tcase CardIds.WaxWarband:\r\n\t\t\treturn WaxWarband;\r\n\t\tcase CardIds.AimLeftToken:\r\n\t\t\treturn AimLeft;\r\n\t\tcase CardIds.AimRightToken:\r\n\t\t\treturn AimRight;\r\n\t\tcase CardIds.AimLowToken:\r\n\t\t\treturn AimLow;\r\n\t\tcase CardIds.AimHighToken:\r\n\t\t\treturn AimHigh;\r\n\r\n\t\t// Anomalies\r\n\t\tcase CardIds.BlessedOrBlighted_BG27_Anomaly_726:\r\n\t\t\treturn BlessedOrBlighted;\r\n\t\tcase CardIds.AnomalousTwin_BG27_Anomaly_560:\r\n\t\t\treturn AnomalousTwin;\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn BoonOfBeetles;\r\n\r\n\t\t// Spells\r\n\t\tcase CardIds.ToxicTumbleweed_BG28_641:\r\n\t\t\treturn ToxicTumbleweed;\r\n\t\tcase CardIds.UpperHand_BG28_573:\r\n\t\t\treturn UpperHand;\r\n\t\tcase CardIds.FleetingVigor_BG28_519:\r\n\t\t\treturn FleetingVigor;\r\n\r\n\t\t// Minions\r\n\t\tcase CardIds.AmberGuardian_BG24_500:\r\n\t\tcase CardIds.AmberGuardian_BG24_500_G:\r\n\t\t\treturn AmberGuardian;\r\n\t\t// case CardIds.SanctumRester_BG26_356:\r\n\t\t// case CardIds.SanctumRester_BG26_356_G:\r\n\t\t// \treturn SanctumRester;\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012:\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012_G:\r\n\t\t\treturn CorruptedMyrmidon;\r\n\t\tcase CardIds.MantidQueen_BG22_402:\r\n\t\tcase CardIds.MantidQueen_BG22_402_G:\r\n\t\t\treturn MantidQueen;\r\n\t\tcase CardIds.CarbonicCopy_BG27_503:\r\n\t\tcase CardIds.CarbonicCopy_BG27_503_G:\r\n\t\t\treturn CarbonicCopy;\r\n\t\tcase CardIds.DiremuckForager_BG27_556:\r\n\t\tcase CardIds.DiremuckForager_BG27_556_G:\r\n\t\t\treturn DiremuckForager;\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079:\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079_G:\r\n\t\t\treturn HawkstriderHerald;\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904:\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904_G:\r\n\t\t\treturn AudaciousAnchor;\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810:\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810_G:\r\n\t\t\treturn ThousandthPaperDrake;\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811:\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811_G:\r\n\t\t\treturn YulonFortuneGranter;\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872:\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872_G:\r\n\t\t// \treturn HoardingHatespawn;\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875:\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875_G:\r\n\t\t\treturn TheUninvitedGuest;\r\n\t\tcase CardIds.Sandy_BGDUO_125:\r\n\t\tcase CardIds.Sandy_BGDUO_125_G:\r\n\t\t\treturn Sandy;\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy:\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy_G:\r\n\t\t\treturn ElderTaggawag;\r\n\t\tcase CardIds.SunScreener_BG30_101:\r\n\t\tcase CardIds.SunScreener_BG30_101_G:\r\n\t\t\treturn SunScreener;\r\n\r\n\t\tdefault:\r\n\t\t\tconst candidate = cardMappings[cardId];\r\n\t\t\tif (hasStartOfCombat(candidate)) {\r\n\t\t\t\treturn candidate;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t}\r\n};\r\n\r\nconst onStartOfCombatTriggered = (iteration: number, triggeredCardId: string, playerEntity: BgsPlayerEntity) => {\r\n\t// Some procs are iso-functional, and don't update the promo portrait\r\n\tconst promoPortraits = playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t);\r\n\tif (promoPortraits.length === 0 || iteration === 0 || iteration > promoPortraits.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tswitch (triggeredCardId) {\r\n\t\tcase CardIds.StolenGold:\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\tcase CardIds.SwattingInsects:\r\n\t\tcase CardIds.RebornRites:\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tconst promoPortrait = promoPortraits[iteration - 1];\r\n\tpromoPortrait.scriptDataNum1--;\r\n};\r\n\r\nconst getPromoPortraitCount = (playerEntity: BgsPlayerEntity) => {\r\n\treturn playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n};\r\n"]}
1
+ {"version":3,"file":"soc-action-processor.js","sourceRoot":"","sources":["../../../../src/simulation/start-of-combat/soc-action-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\nimport { hasStartOfCombat, StartOfCombatCard, StartOfCombatTiming } from '../../cards/card.interface';\r\nimport { cardMappings } from '../../cards/impl/_card-mappings';\r\nimport { AnomalousTwin } from '../../cards/impl/anomaly/anomalous-twin';\r\nimport { BlessedOrBlighted } from '../../cards/impl/anomaly/blessed-or-blighted';\r\nimport { BoonOfBeetles } from '../../cards/impl/bg-spell/boon-of-beetles';\r\nimport { ToxicTumbleweed } from '../../cards/impl/bg-spell/toxic-tumbleweed';\r\nimport { UpperHand } from '../../cards/impl/bg-spell/upper-hand';\r\nimport { AimHigh } from '../../cards/impl/hero-power/aim-high';\r\nimport { AimLeft } from '../../cards/impl/hero-power/aim-left';\r\nimport { AimLow } from '../../cards/impl/hero-power/aim-low';\r\nimport { AimRight } from '../../cards/impl/hero-power/aim-right';\r\nimport { AllWillBurn } from '../../cards/impl/hero-power/all-will-burn';\r\nimport { EarthInvocation } from '../../cards/impl/hero-power/earth-invocation';\r\nimport { EmbraceYourRage } from '../../cards/impl/hero-power/embrace-your-rage';\r\nimport { FireInvocation } from '../../cards/impl/hero-power/fire-invocation';\r\nimport { LightningInvocation } from '../../cards/impl/hero-power/lightning-invocation';\r\nimport { RapidReanimation } from '../../cards/impl/hero-power/rapid-reanimation';\r\nimport { RebornRites } from '../../cards/impl/hero-power/reborn-rites';\r\nimport { Tentacular } from '../../cards/impl/hero-power/tentacular';\r\nimport { WaterInvocation } from '../../cards/impl/hero-power/water-invocation';\r\nimport { WaxWarband } from '../../cards/impl/hero-power/wax-warband';\r\nimport { AmberGuardian } from '../../cards/impl/minion/amber-guardian';\r\nimport { AudaciousAnchor } from '../../cards/impl/minion/audacious-anchor';\r\nimport { CarbonicCopy } from '../../cards/impl/minion/carbonic-copy';\r\nimport { CorruptedMyrmidon } from '../../cards/impl/minion/corrupted-myrmidon';\r\nimport { ElderTaggawag } from '../../cards/impl/minion/elder-taggawag';\r\nimport { HawkstriderHerald } from '../../cards/impl/minion/hawkstrider-herald';\r\nimport { MantidQueen } from '../../cards/impl/minion/mantid-queen';\r\nimport { Sandy } from '../../cards/impl/minion/sandy';\r\nimport { SunScreener } from '../../cards/impl/minion/sun-screener';\r\nimport { TheUninvitedGuest } from '../../cards/impl/minion/the-uninvited-guest';\r\nimport { ThousandthPaperDrake } from '../../cards/impl/minion/thousandth-paper-drake';\r\nimport { YulonFortuneGranter } from '../../cards/impl/minion/yulon-fortune-granter';\r\nimport { EvilTwin } from '../../cards/impl/quest-reward/evil-twin';\r\nimport { StaffOfOrigination } from '../../cards/impl/quest-reward/staff-of-origination';\r\nimport { StolenGold } from '../../cards/impl/quest-reward/stolen-gold';\r\nimport { FleetingVigor } from '../../cards/impl/spell/fleeting-vigor';\r\nimport { AutomatonPortrait } from '../../cards/impl/trinket/automaton-portrait';\r\nimport { BronzeTimepiece } from '../../cards/impl/trinket/bronze-timepiece';\r\nimport { EmeraldDreamcatcher } from '../../cards/impl/trinket/emerald-dreamcatcher';\r\nimport { EternalPortrait } from '../../cards/impl/trinket/eternal-portrait';\r\nimport { FishySticker } from '../../cards/impl/trinket/fishy-sticker';\r\nimport { HoggyBank } from '../../cards/impl/trinket/hoggy-bank';\r\nimport { HollyMallet } from '../../cards/impl/trinket/holly-mallet';\r\nimport { IronforgeAnvil } from '../../cards/impl/trinket/ironforge-anvil';\r\nimport { JarredFrostling } from '../../cards/impl/trinket/jarred-frostling';\r\nimport { KarazhanChessSet } from '../../cards/impl/trinket/karazhan-chess-set';\r\nimport { RivendarePortrait } from '../../cards/impl/trinket/rivendare-portrait';\r\nimport { RustyTrident } from '../../cards/impl/trinket/rusty-trident';\r\nimport { ShipInABottle } from '../../cards/impl/trinket/ship-in-a-bottle';\r\nimport { SummoningSphere } from '../../cards/impl/trinket/summoning-sphere';\r\nimport { TinyfinOnesie } from '../../cards/impl/trinket/tinyfin-onesie';\r\nimport { TrainingCertificate } from '../../cards/impl/trinket/training-certificate';\r\nimport { ValorousMedallion } from '../../cards/impl/trinket/valorous-medaillion';\r\nimport { CardIds } from '../../services/card-ids';\r\nimport { processMinionDeath } from '../attack';\r\nimport { handleSummonsWhenSpace } from '../summon-when-space';\r\nimport { SoCInput } from './start-of-combat-input';\r\n\r\nexport const performStartOfCombatAction = (\r\n\tcardId: string,\r\n\tentity: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\tinput: SoCInput,\r\n\tprocessDeaths: boolean,\r\n\ttiming?: StartOfCombatTiming,\r\n): boolean => {\r\n\tlet hasTriggered:\r\n\t\t| boolean\r\n\t\t| {\r\n\t\t\t\thasTriggered: boolean;\r\n\t\t\t\tshouldRecomputeCurrentAttacker: boolean;\r\n\t\t } = false;\r\n\tconst promoPortraitCount = getPromoPortraitCount(input.playerEntity);\r\n\tfor (let i = promoPortraitCount; i >= 0; i--) {\r\n\t\tconst card = getStartOfCombatAction(cardId);\r\n\t\tif (!!timing && card?.startOfCombatTiming !== timing) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst action = card?.startOfCombat;\r\n\t\tif (!!action) {\r\n\t\t\thasTriggered = action(entity, input);\r\n\t\t\t// Always proc it (for promo portrait), and use the hasTriggered for finer control\r\n\t\t\tonStartOfCombatTriggered(i, cardId, input.playerEntity);\r\n\t\t\tif (!!hasTriggered) {\r\n\t\t\t\tif (processDeaths) {\r\n\t\t\t\t\tprocessMinionDeath(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\t// See https://replays.firestoneapp.com/?reviewId=2eacbbc2-7dfa-487b-951d-0fa6d31d175e&turn=25&action=1\r\n\t\t\t\t\t\t// It looks like it doesn't look for the \"summons when space\" between Stitched Salvager's SoC and\r\n\t\t\t\t\t\t// Hawkstrider Herald SoC\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\t// https://replays.firestoneapp.com/?reviewId=6293597f-28fa-472e-ba8c-35f6b7deef58&turn=31&action=6\r\n\t\t\t\t\t// The first RapidReanimation triggers, resummons the target, then the second RapidReanimation triggers\r\n\t\t\t\t\t// So we need to process the resummon as soon as the minion dies, and before processing the second RapidReanimation\r\n\t\t\t\t\thandleSummonsWhenSpace(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof hasTriggered !== 'boolean' && hasTriggered.shouldRecomputeCurrentAttacker) {\r\n\t\t\t\t\tinput.currentAttacker =\r\n\t\t\t\t\t\tinput.playerBoard.length > input.opponentBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 0\r\n\t\t\t\t\t\t\t\t: 1\r\n\t\t\t\t\t\t\t: input.opponentBoard.length > input.playerBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 1\r\n\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t\t: Math.round(Math.random());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn !!hasTriggered;\r\n};\r\n\r\n// TODO: load all cards on start, then do some programmatic mapping\r\nconst getStartOfCombatAction = (cardId: string): StartOfCombatCard => {\r\n\tswitch (cardId) {\r\n\t\t// Quest rewards\r\n\t\tcase CardIds.EvilTwin:\r\n\t\t\treturn EvilTwin;\r\n\t\tcase CardIds.StaffOfOrigination_BG24_Reward_312:\r\n\t\t\treturn StaffOfOrigination;\r\n\t\tcase CardIds.StolenGold:\r\n\t\t\treturn StolenGold;\r\n\r\n\t\t// Trinkets\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\t\treturn HollyMallet;\r\n\t\tcase CardIds.TrainingCertificate_BG30_MagicItem_962:\r\n\t\t\treturn TrainingCertificate;\r\n\t\tcase CardIds.ValorousMedallion_BG30_MagicItem_970:\r\n\t\tcase CardIds.ValorousMedallion_ValorousMedallionToken_BG30_MagicItem_970t:\r\n\t\t\treturn ValorousMedallion;\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\t\treturn EmeraldDreamcatcher;\r\n\t\tcase CardIds.JarredFrostling_BG30_MagicItem_952:\r\n\t\t\treturn JarredFrostling;\r\n\t\tcase CardIds.RustyTrident_BG30_MagicItem_917:\r\n\t\t\treturn RustyTrident;\r\n\t\tcase CardIds.HoggyBank_BG30_MagicItem_411:\r\n\t\t\treturn HoggyBank;\r\n\t\tcase CardIds.AutomatonPortrait_BG30_MagicItem_303:\r\n\t\t\treturn AutomatonPortrait;\r\n\t\tcase CardIds.ShipInABottle_BG30_MagicItem_407:\r\n\t\t\treturn ShipInABottle;\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\t\treturn EternalPortrait;\r\n\t\tcase CardIds.RivendarePortrait_BG30_MagicItem_310:\r\n\t\t\treturn RivendarePortrait;\r\n\t\tcase CardIds.TinyfinOnesie_BG30_MagicItem_441:\r\n\t\t\treturn TinyfinOnesie;\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\t\treturn BronzeTimepiece;\r\n\t\tcase CardIds.IronforgeAnvil_BG30_MagicItem_403:\r\n\t\t\treturn IronforgeAnvil;\r\n\t\tcase CardIds.KarazhanChessSet_BG30_MagicItem_972:\r\n\t\t\treturn KarazhanChessSet;\r\n\t\t// case CardIds.FishySticker_BG30_MagicItem_821:\r\n\t\tcase CardIds.FishySticker_FishyStickerToken_BG30_MagicItem_821t2:\r\n\t\t\treturn FishySticker;\r\n\t\tcase CardIds.SummoningSphere_BGDUO_MagicItem_003:\r\n\t\t\treturn SummoningSphere;\r\n\r\n\t\t// Hero powers\r\n\t\tcase CardIds.EarthInvocationToken:\r\n\t\t\treturn EarthInvocation;\r\n\t\tcase CardIds.WaterInvocationToken:\r\n\t\t\treturn WaterInvocation;\r\n\t\tcase CardIds.FireInvocationToken:\r\n\t\t\treturn FireInvocation;\r\n\t\tcase CardIds.LightningInvocationToken:\r\n\t\t\treturn LightningInvocation;\r\n\t\tcase CardIds.AllWillBurn:\r\n\t\t\treturn AllWillBurn;\r\n\t\tcase CardIds.EmbraceYourRage:\r\n\t\t\treturn EmbraceYourRage;\r\n\t\tcase CardIds.Ozumat_Tentacular:\r\n\t\t\treturn Tentacular;\r\n\t\tcase CardIds.RebornRites:\r\n\t\t\treturn RebornRites;\r\n\t\tcase CardIds.TeronGorefiend_RapidReanimation:\r\n\t\t\treturn RapidReanimation;\r\n\t\tcase CardIds.WaxWarband:\r\n\t\t\treturn WaxWarband;\r\n\t\tcase CardIds.AimLeftToken:\r\n\t\t\treturn AimLeft;\r\n\t\tcase CardIds.AimRightToken:\r\n\t\t\treturn AimRight;\r\n\t\tcase CardIds.AimLowToken:\r\n\t\t\treturn AimLow;\r\n\t\tcase CardIds.AimHighToken:\r\n\t\t\treturn AimHigh;\r\n\r\n\t\t// Anomalies\r\n\t\tcase CardIds.BlessedOrBlighted_BG27_Anomaly_726:\r\n\t\t\treturn BlessedOrBlighted;\r\n\t\tcase CardIds.AnomalousTwin_BG27_Anomaly_560:\r\n\t\t\treturn AnomalousTwin;\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn BoonOfBeetles;\r\n\r\n\t\t// Spells\r\n\t\tcase CardIds.ToxicTumbleweed_BG28_641:\r\n\t\t\treturn ToxicTumbleweed;\r\n\t\tcase CardIds.UpperHand_BG28_573:\r\n\t\t\treturn UpperHand;\r\n\t\tcase CardIds.FleetingVigor_BG28_519:\r\n\t\t\treturn FleetingVigor;\r\n\r\n\t\t// Minions\r\n\t\tcase CardIds.AmberGuardian_BG24_500:\r\n\t\tcase CardIds.AmberGuardian_BG24_500_G:\r\n\t\t\treturn AmberGuardian;\r\n\t\t// case CardIds.SanctumRester_BG26_356:\r\n\t\t// case CardIds.SanctumRester_BG26_356_G:\r\n\t\t// \treturn SanctumRester;\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012:\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012_G:\r\n\t\t\treturn CorruptedMyrmidon;\r\n\t\tcase CardIds.MantidQueen_BG22_402:\r\n\t\tcase CardIds.MantidQueen_BG22_402_G:\r\n\t\t\treturn MantidQueen;\r\n\t\tcase CardIds.CarbonicCopy_BG27_503:\r\n\t\tcase CardIds.CarbonicCopy_BG27_503_G:\r\n\t\t\treturn CarbonicCopy;\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079:\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079_G:\r\n\t\t\treturn HawkstriderHerald;\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904:\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904_G:\r\n\t\t\treturn AudaciousAnchor;\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810:\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810_G:\r\n\t\t\treturn ThousandthPaperDrake;\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811:\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811_G:\r\n\t\t\treturn YulonFortuneGranter;\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872:\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872_G:\r\n\t\t// \treturn HoardingHatespawn;\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875:\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875_G:\r\n\t\t\treturn TheUninvitedGuest;\r\n\t\tcase CardIds.Sandy_BGDUO_125:\r\n\t\tcase CardIds.Sandy_BGDUO_125_G:\r\n\t\t\treturn Sandy;\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy:\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy_G:\r\n\t\t\treturn ElderTaggawag;\r\n\t\tcase CardIds.SunScreener_BG30_101:\r\n\t\tcase CardIds.SunScreener_BG30_101_G:\r\n\t\t\treturn SunScreener;\r\n\r\n\t\tdefault:\r\n\t\t\tconst candidate = cardMappings[cardId];\r\n\t\t\tif (hasStartOfCombat(candidate)) {\r\n\t\t\t\treturn candidate;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t}\r\n};\r\n\r\nconst onStartOfCombatTriggered = (iteration: number, triggeredCardId: string, playerEntity: BgsPlayerEntity) => {\r\n\t// Some procs are iso-functional, and don't update the promo portrait\r\n\tconst promoPortraits = playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t);\r\n\tif (promoPortraits.length === 0 || iteration === 0 || iteration > promoPortraits.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tswitch (triggeredCardId) {\r\n\t\tcase CardIds.StolenGold:\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\tcase CardIds.SwattingInsects:\r\n\t\tcase CardIds.RebornRites:\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tconst promoPortrait = promoPortraits[iteration - 1];\r\n\tpromoPortrait.scriptDataNum1--;\r\n};\r\n\r\nconst getPromoPortraitCount = (playerEntity: BgsPlayerEntity) => {\r\n\treturn playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n};\r\n"]}