@firestone-hs/simulate-bgs-battle 1.1.486 → 1.1.488

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 (286) hide show
  1. package/dist/bgs-player-entity.d.ts +2 -1
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/board-entity.d.ts +1 -0
  4. package/dist/board-entity.js.map +1 -1
  5. package/dist/cards/card.interface.d.ts +12 -0
  6. package/dist/cards/card.interface.js +3 -0
  7. package/dist/cards/card.interface.js.map +1 -0
  8. package/dist/cards/cards-data.js +16 -3
  9. package/dist/cards/cards-data.js.map +1 -1
  10. package/dist/cards/impl/anomaly/anomalous-twin.d.ts +8 -0
  11. package/dist/cards/impl/anomaly/anomalous-twin.js +24 -0
  12. package/dist/cards/impl/anomaly/anomalous-twin.js.map +1 -0
  13. package/dist/cards/impl/anomaly/blessed-or-blighted.d.ts +5 -0
  14. package/dist/cards/impl/anomaly/blessed-or-blighted.js +16 -0
  15. package/dist/cards/impl/anomaly/blessed-or-blighted.js.map +1 -0
  16. package/dist/cards/impl/hero-power/aim-high.d.ts +5 -0
  17. package/dist/cards/impl/hero-power/aim-high.js +18 -0
  18. package/dist/cards/impl/hero-power/aim-high.js.map +1 -0
  19. package/dist/cards/impl/hero-power/aim-left.d.ts +5 -0
  20. package/dist/cards/impl/hero-power/aim-left.js +16 -0
  21. package/dist/cards/impl/hero-power/aim-left.js.map +1 -0
  22. package/dist/cards/impl/hero-power/aim-low.d.ts +5 -0
  23. package/dist/cards/impl/hero-power/aim-low.js +18 -0
  24. package/dist/cards/impl/hero-power/aim-low.js.map +1 -0
  25. package/dist/cards/impl/hero-power/aim-right.d.ts +5 -0
  26. package/dist/cards/impl/hero-power/aim-right.js +16 -0
  27. package/dist/cards/impl/hero-power/aim-right.js.map +1 -0
  28. package/dist/cards/impl/hero-power/all-will-burn.d.ts +5 -0
  29. package/dist/cards/impl/hero-power/all-will-burn.js +18 -0
  30. package/dist/cards/impl/hero-power/all-will-burn.js.map +1 -0
  31. package/dist/cards/impl/hero-power/earth-invocation.d.ts +5 -0
  32. package/dist/cards/impl/hero-power/earth-invocation.js +13 -0
  33. package/dist/cards/impl/hero-power/earth-invocation.js.map +1 -0
  34. package/dist/cards/impl/hero-power/embrace-your-rage.d.ts +8 -0
  35. package/dist/cards/impl/hero-power/embrace-your-rage.js +26 -0
  36. package/dist/cards/impl/hero-power/embrace-your-rage.js.map +1 -0
  37. package/dist/cards/impl/hero-power/fire-invocation.d.ts +5 -0
  38. package/dist/cards/impl/hero-power/fire-invocation.js +13 -0
  39. package/dist/cards/impl/hero-power/fire-invocation.js.map +1 -0
  40. package/dist/cards/impl/hero-power/fragrant-phylactery.d.ts +8 -0
  41. package/dist/cards/impl/hero-power/fragrant-phylactery.js +25 -0
  42. package/dist/cards/impl/hero-power/fragrant-phylactery.js.map +1 -0
  43. package/dist/cards/impl/hero-power/glorious-gloop.d.ts +5 -0
  44. package/dist/cards/impl/hero-power/glorious-gloop.js +40 -0
  45. package/dist/cards/impl/hero-power/glorious-gloop.js.map +1 -0
  46. package/dist/cards/impl/hero-power/lightning-invocation.d.ts +5 -0
  47. package/dist/cards/impl/hero-power/lightning-invocation.js +13 -0
  48. package/dist/cards/impl/hero-power/lightning-invocation.js.map +1 -0
  49. package/dist/cards/impl/hero-power/rapid-reanimation.d.ts +8 -0
  50. package/dist/cards/impl/hero-power/rapid-reanimation.js +29 -0
  51. package/dist/cards/impl/hero-power/rapid-reanimation.js.map +1 -0
  52. package/dist/cards/impl/hero-power/reborn-rites.d.ts +5 -0
  53. package/dist/cards/impl/hero-power/reborn-rites.js +18 -0
  54. package/dist/cards/impl/hero-power/reborn-rites.js.map +1 -0
  55. package/dist/cards/impl/hero-power/swatting-insects.d.ts +5 -0
  56. package/dist/cards/impl/hero-power/swatting-insects.js +21 -0
  57. package/dist/cards/impl/hero-power/swatting-insects.js.map +1 -0
  58. package/dist/cards/impl/hero-power/tentacular.d.ts +8 -0
  59. package/dist/cards/impl/hero-power/tentacular.js +10 -0
  60. package/dist/cards/impl/hero-power/tentacular.js.map +1 -0
  61. package/dist/cards/impl/hero-power/water-invocation.d.ts +5 -0
  62. package/dist/cards/impl/hero-power/water-invocation.js +13 -0
  63. package/dist/cards/impl/hero-power/water-invocation.js.map +1 -0
  64. package/dist/cards/impl/hero-power/wax-warband.d.ts +5 -0
  65. package/dist/cards/impl/hero-power/wax-warband.js +56 -0
  66. package/dist/cards/impl/hero-power/wax-warband.js.map +1 -0
  67. package/dist/cards/impl/minion/amber-guardian.d.ts +5 -0
  68. package/dist/cards/impl/minion/amber-guardian.js +31 -0
  69. package/dist/cards/impl/minion/amber-guardian.js.map +1 -0
  70. package/dist/cards/impl/minion/audacious-anchor.d.ts +5 -0
  71. package/dist/cards/impl/minion/audacious-anchor.js +25 -0
  72. package/dist/cards/impl/minion/audacious-anchor.js.map +1 -0
  73. package/dist/cards/impl/minion/carbonic-copy.d.ts +5 -0
  74. package/dist/cards/impl/minion/carbonic-copy.js +24 -0
  75. package/dist/cards/impl/minion/carbonic-copy.js.map +1 -0
  76. package/dist/cards/impl/minion/choral-mrrrglr.d.ts +5 -0
  77. package/dist/cards/impl/minion/choral-mrrrglr.js +14 -0
  78. package/dist/cards/impl/minion/choral-mrrrglr.js.map +1 -0
  79. package/dist/cards/impl/minion/corrupted-myrmidon.d.ts +5 -0
  80. package/dist/cards/impl/minion/corrupted-myrmidon.js +13 -0
  81. package/dist/cards/impl/minion/corrupted-myrmidon.js.map +1 -0
  82. package/dist/cards/impl/minion/crabby.d.ts +5 -0
  83. package/dist/cards/impl/minion/crabby.js +18 -0
  84. package/dist/cards/impl/minion/crabby.js.map +1 -0
  85. package/dist/cards/impl/minion/diremuck-forager.d.ts +5 -0
  86. package/dist/cards/impl/minion/diremuck-forager.js +32 -0
  87. package/dist/cards/impl/minion/diremuck-forager.js.map +1 -0
  88. package/dist/cards/impl/minion/elder-taggawag.d.ts +5 -0
  89. package/dist/cards/impl/minion/elder-taggawag.js +19 -0
  90. package/dist/cards/impl/minion/elder-taggawag.js.map +1 -0
  91. package/dist/cards/impl/minion/hawkstrider-herald.d.ts +5 -0
  92. package/dist/cards/impl/minion/hawkstrider-herald.js +27 -0
  93. package/dist/cards/impl/minion/hawkstrider-herald.js.map +1 -0
  94. package/dist/cards/impl/minion/hoarding-hatespawn.d.ts +5 -0
  95. package/dist/cards/impl/minion/hoarding-hatespawn.js +22 -0
  96. package/dist/cards/impl/minion/hoarding-hatespawn.js.map +1 -0
  97. package/dist/cards/impl/minion/humming-bird.d.ts +5 -0
  98. package/dist/cards/impl/minion/humming-bird.js +15 -0
  99. package/dist/cards/impl/minion/humming-bird.js.map +1 -0
  100. package/dist/cards/impl/minion/interrogator-whitemane.d.ts +5 -0
  101. package/dist/cards/impl/minion/interrogator-whitemane.js +33 -0
  102. package/dist/cards/impl/minion/interrogator-whitemane.js.map +1 -0
  103. package/dist/cards/impl/minion/irate-rooster.d.ts +5 -0
  104. package/dist/cards/impl/minion/irate-rooster.js +20 -0
  105. package/dist/cards/impl/minion/irate-rooster.js.map +1 -0
  106. package/dist/cards/impl/minion/mantid-queen.d.ts +5 -0
  107. package/dist/cards/impl/minion/mantid-queen.js +52 -0
  108. package/dist/cards/impl/minion/mantid-queen.js.map +1 -0
  109. package/dist/cards/impl/minion/misfit-dragonling.d.ts +5 -0
  110. package/dist/cards/impl/minion/misfit-dragonling.js +15 -0
  111. package/dist/cards/impl/minion/misfit-dragonling.js.map +1 -0
  112. package/dist/cards/impl/minion/piloted-whirl-o-tron.d.ts +5 -0
  113. package/dist/cards/impl/minion/piloted-whirl-o-tron.js +13 -0
  114. package/dist/cards/impl/minion/piloted-whirl-o-tron.js.map +1 -0
  115. package/dist/cards/impl/minion/prized-promo-drake.d.ts +5 -0
  116. package/dist/cards/impl/minion/prized-promo-drake.js +22 -0
  117. package/dist/cards/impl/minion/prized-promo-drake.js.map +1 -0
  118. package/dist/cards/impl/minion/red-whelp.d.ts +5 -0
  119. package/dist/cards/impl/minion/red-whelp.js +17 -0
  120. package/dist/cards/impl/minion/red-whelp.js.map +1 -0
  121. package/dist/cards/impl/minion/sanctum-rester.d.ts +5 -0
  122. package/dist/cards/impl/minion/sanctum-rester.js +20 -0
  123. package/dist/cards/impl/minion/sanctum-rester.js.map +1 -0
  124. package/dist/cards/impl/minion/sandy.d.ts +5 -0
  125. package/dist/cards/impl/minion/sandy.js +23 -0
  126. package/dist/cards/impl/minion/sandy.js.map +1 -0
  127. package/dist/cards/impl/minion/sky-pirate-flagbearer.d.ts +5 -0
  128. package/dist/cards/impl/minion/sky-pirate-flagbearer.js +24 -0
  129. package/dist/cards/impl/minion/sky-pirate-flagbearer.js.map +1 -0
  130. package/dist/cards/impl/minion/soulsplitter.d.ts +5 -0
  131. package/dist/cards/impl/minion/soulsplitter.js +23 -0
  132. package/dist/cards/impl/minion/soulsplitter.js.map +1 -0
  133. package/dist/cards/impl/minion/sun-screener.d.ts +5 -0
  134. package/dist/cards/impl/minion/sun-screener.js +15 -0
  135. package/dist/cards/impl/minion/sun-screener.js.map +1 -0
  136. package/dist/cards/impl/minion/the-uninvited-guest.d.ts +5 -0
  137. package/dist/cards/impl/minion/the-uninvited-guest.js +24 -0
  138. package/dist/cards/impl/minion/the-uninvited-guest.js.map +1 -0
  139. package/dist/cards/impl/minion/thousandth-paper-drake.d.ts +5 -0
  140. package/dist/cards/impl/minion/thousandth-paper-drake.js +24 -0
  141. package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -0
  142. package/dist/cards/impl/minion/vaelastrasz.d.ts +5 -0
  143. package/dist/cards/impl/minion/vaelastrasz.js +17 -0
  144. package/dist/cards/impl/minion/vaelastrasz.js.map +1 -0
  145. package/dist/cards/impl/minion/yulon-fortune-granter.d.ts +5 -0
  146. package/dist/cards/impl/minion/yulon-fortune-granter.js +26 -0
  147. package/dist/cards/impl/minion/yulon-fortune-granter.js.map +1 -0
  148. package/dist/cards/impl/quest-reward/evil-twin.d.ts +5 -0
  149. package/dist/cards/impl/quest-reward/evil-twin.js +32 -0
  150. package/dist/cards/impl/quest-reward/evil-twin.js.map +1 -0
  151. package/dist/cards/impl/quest-reward/staff-of-origination.d.ts +5 -0
  152. package/dist/cards/impl/quest-reward/staff-of-origination.js +14 -0
  153. package/dist/cards/impl/quest-reward/staff-of-origination.js.map +1 -0
  154. package/dist/cards/impl/quest-reward/stolen-gold.d.ts +5 -0
  155. package/dist/cards/impl/quest-reward/stolen-gold.js +16 -0
  156. package/dist/cards/impl/quest-reward/stolen-gold.js.map +1 -0
  157. package/dist/cards/impl/trinket/artisanal-urn.d.ts +5 -0
  158. package/dist/cards/impl/trinket/artisanal-urn.js +13 -0
  159. package/dist/cards/impl/trinket/artisanal-urn.js.map +1 -0
  160. package/dist/cards/impl/trinket/automaton-portrait.d.ts +5 -0
  161. package/dist/cards/impl/trinket/automaton-portrait.js +15 -0
  162. package/dist/cards/impl/trinket/automaton-portrait.js.map +1 -0
  163. package/dist/cards/impl/trinket/bronze-timepiece.d.ts +5 -0
  164. package/dist/cards/impl/trinket/bronze-timepiece.js +17 -0
  165. package/dist/cards/impl/trinket/bronze-timepiece.js.map +1 -0
  166. package/dist/cards/impl/trinket/emerald-dreamcatcher.d.ts +5 -0
  167. package/dist/cards/impl/trinket/emerald-dreamcatcher.js +18 -0
  168. package/dist/cards/impl/trinket/emerald-dreamcatcher.js.map +1 -0
  169. package/dist/cards/impl/trinket/eternal-portrait.d.ts +5 -0
  170. package/dist/cards/impl/trinket/eternal-portrait.js +19 -0
  171. package/dist/cards/impl/trinket/eternal-portrait.js.map +1 -0
  172. package/dist/cards/impl/trinket/fishy-sticker.d.ts +5 -0
  173. package/dist/cards/impl/trinket/fishy-sticker.js +28 -0
  174. package/dist/cards/impl/trinket/fishy-sticker.js.map +1 -0
  175. package/dist/cards/impl/trinket/hoggy-bank.d.ts +5 -0
  176. package/dist/cards/impl/trinket/hoggy-bank.js +23 -0
  177. package/dist/cards/impl/trinket/hoggy-bank.js.map +1 -0
  178. package/dist/cards/impl/trinket/holly-mallet.d.ts +5 -0
  179. package/dist/cards/impl/trinket/holly-mallet.js +18 -0
  180. package/dist/cards/impl/trinket/holly-mallet.js.map +1 -0
  181. package/dist/cards/impl/trinket/ironforge-anvil.d.ts +5 -0
  182. package/dist/cards/impl/trinket/ironforge-anvil.js +23 -0
  183. package/dist/cards/impl/trinket/ironforge-anvil.js.map +1 -0
  184. package/dist/cards/impl/trinket/jarred-frostling.d.ts +5 -0
  185. package/dist/cards/impl/trinket/jarred-frostling.js +27 -0
  186. package/dist/cards/impl/trinket/jarred-frostling.js.map +1 -0
  187. package/dist/cards/impl/trinket/karazhan-chess-set.d.ts +5 -0
  188. package/dist/cards/impl/trinket/karazhan-chess-set.js +40 -0
  189. package/dist/cards/impl/trinket/karazhan-chess-set.js.map +1 -0
  190. package/dist/cards/impl/trinket/rivendare-portrait.d.ts +5 -0
  191. package/dist/cards/impl/trinket/rivendare-portrait.js +21 -0
  192. package/dist/cards/impl/trinket/rivendare-portrait.js.map +1 -0
  193. package/dist/cards/impl/trinket/rusty-trident.d.ts +5 -0
  194. package/dist/cards/impl/trinket/rusty-trident.js +23 -0
  195. package/dist/cards/impl/trinket/rusty-trident.js.map +1 -0
  196. package/dist/cards/impl/trinket/ship-in-a-bottle.d.ts +5 -0
  197. package/dist/cards/impl/trinket/ship-in-a-bottle.js +20 -0
  198. package/dist/cards/impl/trinket/ship-in-a-bottle.js.map +1 -0
  199. package/dist/cards/impl/trinket/summoning-sphere.d.ts +5 -0
  200. package/dist/cards/impl/trinket/summoning-sphere.js +31 -0
  201. package/dist/cards/impl/trinket/summoning-sphere.js.map +1 -0
  202. package/dist/cards/impl/trinket/tinyfin-onesie.d.ts +5 -0
  203. package/dist/cards/impl/trinket/tinyfin-onesie.js +15 -0
  204. package/dist/cards/impl/trinket/tinyfin-onesie.js.map +1 -0
  205. package/dist/cards/impl/trinket/training-certificate.d.ts +5 -0
  206. package/dist/cards/impl/trinket/training-certificate.js +21 -0
  207. package/dist/cards/impl/trinket/training-certificate.js.map +1 -0
  208. package/dist/cards/impl/trinket/valorous-medaillion.d.ts +5 -0
  209. package/dist/cards/impl/trinket/valorous-medaillion.js +12 -0
  210. package/dist/cards/impl/trinket/valorous-medaillion.js.map +1 -0
  211. package/dist/services/utils.d.ts +1 -0
  212. package/dist/services/utils.js +13 -1
  213. package/dist/services/utils.js.map +1 -1
  214. package/dist/simulation/add-minion-to-board.js +18 -23
  215. package/dist/simulation/add-minion-to-board.js.map +1 -1
  216. package/dist/simulation/attack.js +14 -4
  217. package/dist/simulation/attack.js.map +1 -1
  218. package/dist/simulation/auras.js +0 -2
  219. package/dist/simulation/auras.js.map +1 -1
  220. package/dist/simulation/avenge.js +24 -4
  221. package/dist/simulation/avenge.js.map +1 -1
  222. package/dist/simulation/battlecries.js +21 -5
  223. package/dist/simulation/battlecries.js.map +1 -1
  224. package/dist/simulation/blood-gems.js +8 -0
  225. package/dist/simulation/blood-gems.js.map +1 -1
  226. package/dist/simulation/deathrattle-effects.js +7 -1
  227. package/dist/simulation/deathrattle-effects.js.map +1 -1
  228. package/dist/simulation/deathrattle-on-trigger.js +5 -0
  229. package/dist/simulation/deathrattle-on-trigger.js.map +1 -1
  230. package/dist/simulation/discover.d.ts +4 -0
  231. package/dist/simulation/discover.js +32 -0
  232. package/dist/simulation/discover.js.map +1 -0
  233. package/dist/simulation/magnetize.js +2 -1
  234. package/dist/simulation/magnetize.js.map +1 -1
  235. package/dist/simulation/minion-death.d.ts +1 -1
  236. package/dist/simulation/minion-death.js +8 -8
  237. package/dist/simulation/minion-death.js.map +1 -1
  238. package/dist/simulation/remove-minion-from-board.js +0 -10
  239. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  240. package/dist/simulation/simulator.js +1 -1
  241. package/dist/simulation/simulator.js.map +1 -1
  242. package/dist/simulation/start-of-combat/phases.d.ts +1 -0
  243. package/dist/simulation/start-of-combat/phases.js +3 -0
  244. package/dist/simulation/start-of-combat/phases.js.map +1 -0
  245. package/dist/simulation/start-of-combat/soc-action-processor.d.ts +4 -0
  246. package/dist/simulation/start-of-combat/soc-action-processor.js +286 -0
  247. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -0
  248. package/dist/simulation/start-of-combat/soc-anomalies.d.ts +4 -0
  249. package/dist/simulation/start-of-combat/soc-anomalies.js +39 -0
  250. package/dist/simulation/start-of-combat/soc-anomalies.js.map +1 -0
  251. package/dist/simulation/start-of-combat/soc-hero-power.d.ts +5 -0
  252. package/dist/simulation/start-of-combat/soc-hero-power.js +77 -0
  253. package/dist/simulation/start-of-combat/soc-hero-power.js.map +1 -0
  254. package/dist/simulation/start-of-combat/soc-illidan-hero-power.d.ts +4 -0
  255. package/dist/simulation/start-of-combat/soc-illidan-hero-power.js +55 -0
  256. package/dist/simulation/start-of-combat/soc-illidan-hero-power.js.map +1 -0
  257. package/dist/simulation/start-of-combat/soc-minion.d.ts +6 -0
  258. package/dist/simulation/start-of-combat/soc-minion.js +68 -0
  259. package/dist/simulation/start-of-combat/soc-minion.js.map +1 -0
  260. package/dist/simulation/start-of-combat/soc-pre-combat-hero-power.d.ts +4 -0
  261. package/dist/simulation/start-of-combat/soc-pre-combat-hero-power.js +72 -0
  262. package/dist/simulation/start-of-combat/soc-pre-combat-hero-power.js.map +1 -0
  263. package/dist/simulation/start-of-combat/soc-quest-reward.d.ts +4 -0
  264. package/dist/simulation/start-of-combat/soc-quest-reward.js +60 -0
  265. package/dist/simulation/start-of-combat/soc-quest-reward.js.map +1 -0
  266. package/dist/simulation/start-of-combat/soc-secret.d.ts +4 -0
  267. package/dist/simulation/start-of-combat/soc-secret.js +54 -0
  268. package/dist/simulation/start-of-combat/soc-secret.js.map +1 -0
  269. package/dist/simulation/start-of-combat/soc-trinket.d.ts +4 -0
  270. package/dist/simulation/start-of-combat/soc-trinket.js +60 -0
  271. package/dist/simulation/start-of-combat/soc-trinket.js.map +1 -0
  272. package/dist/simulation/start-of-combat/start-of-combat-input.d.ts +14 -0
  273. package/dist/simulation/start-of-combat/start-of-combat-input.js +3 -0
  274. package/dist/simulation/start-of-combat/start-of-combat-input.js.map +1 -0
  275. package/dist/simulation/start-of-combat/start-of-combat.d.ts +4 -0
  276. package/dist/simulation/start-of-combat/start-of-combat.js +68 -0
  277. package/dist/simulation/start-of-combat/start-of-combat.js.map +1 -0
  278. package/dist/simulation/summon-when-space.js +5 -1
  279. package/dist/simulation/summon-when-space.js.map +1 -1
  280. package/dist/temp-card-ids.d.ts +2 -0
  281. package/dist/temp-card-ids.js +3 -0
  282. package/dist/temp-card-ids.js.map +1 -0
  283. package/package.json +3 -3
  284. package/dist/simulation/start-of-combat.d.ts +0 -8
  285. package/dist/simulation/start-of-combat.js +0 -1167
  286. package/dist/simulation/start-of-combat.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HollyMallet = void 0;
4
+ const divine_shield_1 = require("../../../divine-shield");
5
+ exports.HollyMallet = {
6
+ startOfCombat: (trinket, input) => {
7
+ if (input.playerBoard.length > 0) {
8
+ (0, divine_shield_1.updateDivineShield)(input.playerBoard[0], input.playerBoard, input.playerEntity, input.opponentEntity, true, input.gameState);
9
+ input.gameState.spectator.registerPowerTarget(input.playerEntity, input.playerBoard[0], input.playerBoard, null, null);
10
+ if (input.playerBoard.length > 1) {
11
+ (0, divine_shield_1.updateDivineShield)(input.playerBoard[input.playerBoard.length - 1], input.playerBoard, input.playerEntity, input.opponentEntity, true, input.gameState);
12
+ input.gameState.spectator.registerPowerTarget(input.playerEntity, input.playerBoard[input.playerBoard.length - 1], input.playerBoard, null, null);
13
+ }
14
+ return true;
15
+ }
16
+ },
17
+ };
18
+ //# sourceMappingURL=holly-mallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holly-mallet.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/holly-mallet.ts"],"names":[],"mappings":";;;AACA,0DAA4D;AAG/C,QAAA,WAAW,GAAG;IAC1B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAA,kCAAkB,EACjB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EACpB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,EACpB,IAAI,EACJ,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EACpB,KAAK,CAAC,WAAW,EACjB,IAAI,EACJ,IAAI,CACJ,CAAC;YACF,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,IAAA,kCAAkB,EACjB,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAC/C,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,EACpB,IAAI,EACJ,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAC/C,KAAK,CAAC,WAAW,EACjB,IAAI,EACJ,IAAI,CACJ,CAAC;aACF;YACD,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { updateDivineShield } from '../../../divine-shield';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\n\r\nexport const HollyMallet = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\tupdateDivineShield(\r\n\t\t\t\tinput.playerBoard[0],\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t\ttrue,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.playerBoard[0],\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tnull,\r\n\t\t\t\tnull,\r\n\t\t\t);\r\n\t\t\tif (input.playerBoard.length > 1) {\r\n\t\t\t\tupdateDivineShield(\r\n\t\t\t\t\tinput.playerBoard[input.playerBoard.length - 1],\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.playerBoard[input.playerBoard.length - 1],\r\n\t\t\t\t\tinput.playerBoard,\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}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const IronforgeAnvil: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IronforgeAnvil = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ const utils_1 = require("../../../utils");
6
+ exports.IronforgeAnvil = {
7
+ startOfCombat: (trinket, input) => {
8
+ if (input.playerBoard.length > 0) {
9
+ const candidates = input.playerBoard.filter((e) => {
10
+ const tribes = (0, utils_1.getEffectiveTribesForEntity)(e, input.playerEntity, input.gameState.allCards);
11
+ return tribes.length === 0;
12
+ });
13
+ if (candidates.length > 0) {
14
+ candidates.forEach((entity) => {
15
+ (0, stats_1.setEntityStats)(entity, 3 * entity.attack, 3 * entity.health, input.playerBoard, input.playerEntity, input.gameState);
16
+ input.gameState.spectator.registerPowerTarget(trinket, entity, input.playerBoard, null, null);
17
+ });
18
+ return true;
19
+ }
20
+ }
21
+ },
22
+ };
23
+ //# sourceMappingURL=ironforge-anvil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ironforge-anvil.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/ironforge-anvil.ts"],"names":[],"mappings":";;;AAEA,qDAA2D;AAC3D,0CAA6D;AAEhD,QAAA,cAAc,GAAG;IAC7B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjD,MAAM,MAAM,GAAG,IAAA,mCAA2B,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC5F,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC7B,IAAA,sBAAc,EACb,MAAM,EACN,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;oBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/F,CAAC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;aACZ;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\nimport { getEffectiveTribesForEntity } from '../../../utils';\r\n\r\nexport const IronforgeAnvil = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\tconst candidates = input.playerBoard.filter((e) => {\r\n\t\t\t\tconst tribes = getEffectiveTribesForEntity(e, input.playerEntity, input.gameState.allCards);\r\n\t\t\t\treturn tribes.length === 0;\r\n\t\t\t});\r\n\t\t\tif (candidates.length > 0) {\r\n\t\t\t\tcandidates.forEach((entity) => {\r\n\t\t\t\t\tsetEntityStats(\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t3 * entity.attack,\r\n\t\t\t\t\t\t3 * entity.health,\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.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, entity, input.playerBoard, null, null);\r\n\t\t\t\t});\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const JarredFrostling: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JarredFrostling = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const utils_1 = require("../../../services/utils");
6
+ const utils_2 = require("../../../utils");
7
+ exports.JarredFrostling = {
8
+ startOfCombat: (trinket, input) => {
9
+ const elementals = (0, utils_1.shuffleArray)(input.playerBoard.filter((e) => (0, utils_2.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.ELEMENTAL, input.gameState.allCards)));
10
+ if (!!(elementals === null || elementals === void 0 ? void 0 : elementals.length)) {
11
+ const targets = elementals.slice(0, 2);
12
+ targets.forEach((e) => {
13
+ var _a;
14
+ e.enchantments = (_a = e.enchantments) !== null && _a !== void 0 ? _a : [];
15
+ e.enchantments.push({
16
+ cardId: "BG30_MagicItem_952e",
17
+ originEntityId: trinket.entityId,
18
+ repeats: 1,
19
+ timing: input.gameState.sharedState.currentEntityId++,
20
+ });
21
+ input.gameState.spectator.registerPowerTarget(input.playerEntity, e, input.playerBoard, null, null);
22
+ });
23
+ return true;
24
+ }
25
+ },
26
+ };
27
+ //# sourceMappingURL=jarred-frostling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jarred-frostling.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/jarred-frostling.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAE7D,mDAAuD;AAEvD,0CAAiD;AAEpC,QAAA,eAAe,GAAG;IAC9B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,IAAA,oBAAY,EAC9B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAChF,CACD,CAAC;QACF,IAAI,CAAC,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE;YACzB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;gBACrB,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;gBACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;oBACnB,MAAM,uBAAoE;oBAC1E,cAAc,EAAE,OAAO,CAAC,QAAQ;oBAChC,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;iBACrD,CAAC,CAAC;gBACH,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrG,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const JarredFrostling = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst elementals = shuffleArray(\r\n\t\t\tinput.playerBoard.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.playerEntity, Race.ELEMENTAL, input.gameState.allCards),\r\n\t\t\t),\r\n\t\t);\r\n\t\tif (!!elementals?.length) {\r\n\t\t\tconst targets = elementals.slice(0, 2);\r\n\t\t\ttargets.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.JarredFrostling_FrostyGlobeEnchantment_BG30_MagicItem_952e,\r\n\t\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(input.playerEntity, e, input.playerBoard, null, null);\r\n\t\t\t});\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const KarazhanChessSet: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KarazhanChessSet = void 0;
4
+ const add_minion_to_board_1 = require("../../../simulation/add-minion-to-board");
5
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
6
+ const spawns_1 = require("../../../simulation/spawns");
7
+ const utils_1 = require("../../../utils");
8
+ exports.KarazhanChessSet = {
9
+ startOfCombat: (trinket, input) => {
10
+ let hasTriggered = false;
11
+ if (input.playerBoard.length > 0) {
12
+ let minionsToCopy = 1;
13
+ for (let i = 0; i < Math.min(input.playerBoard.length, 7); i++) {
14
+ if (minionsToCopy <= 0) {
15
+ break;
16
+ }
17
+ const entityToCoy = input.playerBoard[i];
18
+ const copy = (0, utils_1.copyEntity)(entityToCoy);
19
+ (0, add_minion_to_board_1.removeAurasFromSelf)(copy, input.playerBoard, input.playerEntity, input.gameState);
20
+ const newMinions = (0, deathrattle_spawns_1.spawnEntities)(copy.cardId, 1, input.playerBoard, input.playerEntity, input.opponentBoard, input.opponentEntity, input.gameState.allCards, input.gameState.cardsData, input.gameState.sharedState, input.gameState.spectator, input.playerEntity.friendly, false, false, false, copy);
21
+ const spawns = (0, spawns_1.performEntitySpawns)(newMinions, input.playerBoard, input.playerEntity, input.playerEntity, input.playerBoard.length - i - 1, input.opponentBoard, input.opponentEntity, input.gameState);
22
+ i += spawns.length;
23
+ minionsToCopy--;
24
+ hasTriggered = true;
25
+ }
26
+ }
27
+ input.currentAttacker =
28
+ input.playerBoard.length > input.opponentBoard.length
29
+ ? input.playerIsFriendly
30
+ ? 0
31
+ : 1
32
+ : input.opponentBoard.length > input.playerBoard.length
33
+ ? input.playerIsFriendly
34
+ ? 1
35
+ : 0
36
+ : Math.round(Math.random());
37
+ return hasTriggered;
38
+ },
39
+ };
40
+ //# sourceMappingURL=karazhan-chess-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"karazhan-chess-set.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/karazhan-chess-set.ts"],"names":[],"mappings":";;;AAEA,iFAA8E;AAC9E,+EAAuE;AACvE,uDAAiE;AAEjE,0CAA4C;AAE/B,QAAA,gBAAgB,GAAG;IAC/B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC/D,IAAI,aAAa,IAAI,CAAC,EAAE;oBACvB,MAAM;iBACN;gBACD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAgB,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;gBAClD,IAAA,yCAAmB,EAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBAClF,MAAM,UAAU,GAAG,IAAA,kCAAa,EAC/B,IAAI,CAAC,MAAM,EACX,CAAC,EACD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CAAC,QAAQ,EACxB,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,WAAW,EAC3B,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,YAAY,CAAC,QAAQ,EAC3B,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,CACJ,CAAC;gBACF,MAAM,MAAM,GAAG,IAAA,4BAAmB,EACjC,UAAU,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAChC,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;gBAKF,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;gBACnB,aAAa,EAAE,CAAC;gBAChB,YAAY,GAAG,IAAI,CAAC;aACpB;SACD;QACD,KAAK,CAAC,eAAe;YACpB,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM;gBACpD,CAAC,CAAC,KAAK,CAAC,gBAAgB;oBACvB,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM;oBACvD,CAAC,CAAC,KAAK,CAAC,gBAAgB;wBACvB,CAAC,CAAC,CAAC;wBACH,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9B,OAAO,YAAY,CAAC;IACrB,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { removeAurasFromSelf } from '../../../simulation/add-minion-to-board';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { copyEntity } from '../../../utils';\r\n\r\nexport const KarazhanChessSet = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tlet hasTriggered = false;\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\tlet minionsToCopy = 1;\r\n\t\t\tfor (let i = 0; i < Math.min(input.playerBoard.length, 7); i++) {\r\n\t\t\t\tif (minionsToCopy <= 0) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tconst entityToCoy = input.playerBoard[i];\r\n\t\t\t\tconst copy: BoardEntity = copyEntity(entityToCoy);\r\n\t\t\t\tremoveAurasFromSelf(copy, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t\t\tconst newMinions = spawnEntities(\r\n\t\t\t\t\tcopy.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\tinput.gameState.cardsData,\r\n\t\t\t\t\tinput.gameState.sharedState,\r\n\t\t\t\t\tinput.gameState.spectator,\r\n\t\t\t\t\tinput.playerEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tcopy,\r\n\t\t\t\t);\r\n\t\t\t\tconst spawns = performEntitySpawns(\r\n\t\t\t\t\tnewMinions,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.playerBoard.length - i - 1,\r\n\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\t// TODO: according to http://replays.firestoneapp.com/?reviewId=576aa3bb-caa1-4e46-9d16-08a001fdd941&turn=23&action=3\r\n\t\t\t\t// it looks like the stats are simply copied from the original entity to the copy, instead\r\n\t\t\t\t// of summoning a copy and applying all the auras stuff\r\n\t\t\t\t// I've asked on Discord (2024-08-21) for clarification\r\n\t\t\t\ti += spawns.length;\r\n\t\t\t\tminionsToCopy--;\r\n\t\t\t\thasTriggered = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tinput.currentAttacker =\r\n\t\t\tinput.playerBoard.length > input.opponentBoard.length\r\n\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t? 0\r\n\t\t\t\t\t: 1\r\n\t\t\t\t: input.opponentBoard.length > input.playerBoard.length\r\n\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t? 1\r\n\t\t\t\t\t: 0\r\n\t\t\t\t: Math.round(Math.random());\r\n\t\treturn hasTriggered;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const RivendarePortrait: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RivendarePortrait = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.RivendarePortrait = {
6
+ startOfCombat: (trinket, input) => {
7
+ if (trinket.scriptDataNum1 != 99) {
8
+ const rivendareTrinkets = input.playerEntity.trinkets.filter((t) => t.cardId === "BG30_MagicItem_310");
9
+ const buffBonus = rivendareTrinkets.length;
10
+ input.playerBoard
11
+ .filter((e) => e.cardId === "BG25_354" || e.cardId === "BG25_354_G")
12
+ .forEach((e) => {
13
+ (0, stats_1.modifyStats)(e, 0, buffBonus * e.health, input.playerBoard, input.playerEntity, input.gameState);
14
+ input.gameState.spectator.registerPowerTarget(trinket, e, input.playerBoard, null, null);
15
+ });
16
+ rivendareTrinkets.forEach((t) => (t.scriptDataNum1 = 99));
17
+ return true;
18
+ }
19
+ },
20
+ };
21
+ //# sourceMappingURL=rivendare-portrait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rivendare-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/rivendare-portrait.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAE3C,QAAA,iBAAiB,GAAG;IAChC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QAGzD,IAAI,OAAO,CAAC,cAAc,IAAI,EAAE,EAAE;YACjC,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAiD,CAChE,CAAC;YACF,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAC3C,KAAK,CAAC,WAAW;iBACf,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,eAAoC,IAAI,CAAC,CAAC,MAAM,iBAAsC,CAC/F;iBACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAA,mBAAW,EAAC,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBAChG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;YACJ,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\n\r\nexport const RivendarePortrait = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\t// Portraits are a bit weird, as having 2 of them makes stats go x3 instead of x4,\r\n\t\t// so we process them all in one go\r\n\t\tif (trinket.scriptDataNum1 != 99) {\r\n\t\t\tconst rivendareTrinkets = input.playerEntity.trinkets.filter(\r\n\t\t\t\t(t) => t.cardId === CardIds.RivendarePortrait_BG30_MagicItem_310,\r\n\t\t\t);\r\n\t\t\tconst buffBonus = rivendareTrinkets.length;\r\n\t\t\tinput.playerBoard\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\te.cardId === CardIds.TitusRivendare_BG25_354 || e.cardId === CardIds.TitusRivendare_BG25_354_G,\r\n\t\t\t\t)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tmodifyStats(e, 0, buffBonus * e.health, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, e, input.playerBoard, null, null);\r\n\t\t\t\t});\r\n\t\t\trivendareTrinkets.forEach((t) => (t.scriptDataNum1 = 99));\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const RustyTrident: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RustyTrident = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const utils_1 = require("../../../utils");
6
+ exports.RustyTrident = {
7
+ startOfCombat: (trinket, input) => {
8
+ input.playerBoard
9
+ .filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.NAGA, input.gameState.allCards))
10
+ .forEach((e) => {
11
+ var _a;
12
+ e.enchantments = (_a = e.enchantments) !== null && _a !== void 0 ? _a : [];
13
+ e.enchantments.push({
14
+ cardId: "BG30_MagicItem_917e",
15
+ originEntityId: trinket.entityId,
16
+ repeats: 1,
17
+ timing: input.gameState.sharedState.currentEntityId++,
18
+ });
19
+ });
20
+ return true;
21
+ },
22
+ };
23
+ //# sourceMappingURL=rusty-trident.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rusty-trident.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/rusty-trident.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAG7D,0CAAiD;AAEpC,QAAA,YAAY,GAAG;IAC3B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,KAAK,CAAC,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aAC1F,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;YACd,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnB,MAAM,uBAAsE;gBAC5E,cAAc,EAAE,OAAO,CAAC,QAAQ;gBAChC,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const RustyTrident = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tinput.playerBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, input.playerEntity, Race.NAGA, input.gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.RustyTrident_TridentsTreasureEnchantment_BG30_MagicItem_917e,\r\n\t\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const ShipInABottle: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShipInABottle = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
7
+ const spawns_1 = require("../../../simulation/spawns");
8
+ exports.ShipInABottle = {
9
+ startOfCombat: (trinket, input) => {
10
+ if (input.playerBoard.length < 7) {
11
+ const target = (0, utils_1.pickRandom)(input.gameState.cardsData.pirateSpawns);
12
+ (0, cards_in_hand_1.addCardsInHand)(input.playerEntity, input.playerBoard, [target], input.gameState);
13
+ const newMinions = (0, deathrattle_spawns_1.spawnEntities)(target, 1, input.playerBoard, input.playerEntity, input.opponentBoard, input.opponentEntity, input.gameState.allCards, input.gameState.cardsData, input.gameState.sharedState, input.gameState.spectator, input.playerEntity.friendly, false);
14
+ const spawns = (0, spawns_1.performEntitySpawns)(newMinions, input.playerBoard, input.playerEntity, input.playerEntity, 0, input.opponentBoard, input.opponentEntity, input.gameState);
15
+ spawns.forEach((spawn) => (spawn.attackImmediately = true));
16
+ return true;
17
+ }
18
+ },
19
+ };
20
+ //# sourceMappingURL=ship-in-a-bottle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-in-a-bottle.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/ship-in-a-bottle.ts"],"names":[],"mappings":";;;AACA,mDAAqD;AACrD,qEAAmE;AACnE,+EAAuE;AACvE,uDAAiE;AAGpD,QAAA,aAAa,GAAG;IAC5B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAClE,IAAA,8BAAc,EAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACjF,MAAM,UAAU,GAAG,IAAA,kCAAa,EAC/B,MAAM,EACN,CAAC,EACD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CAAC,QAAQ,EACxB,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,WAAW,EAC3B,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,YAAY,CAAC,QAAQ,EAC3B,KAAK,CACL,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,4BAAmB,EACjC,UAAU,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,YAAY,EAClB,CAAC,EACD,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\n\r\nexport const ShipInABottle = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length < 7) {\r\n\t\t\tconst target = pickRandom(input.gameState.cardsData.pirateSpawns);\r\n\t\t\taddCardsInHand(input.playerEntity, input.playerBoard, [target], input.gameState);\r\n\t\t\tconst newMinions = spawnEntities(\r\n\t\t\t\ttarget,\r\n\t\t\t\t1,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentBoard,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\tinput.gameState.cardsData,\r\n\t\t\t\tinput.gameState.sharedState,\r\n\t\t\t\tinput.gameState.spectator,\r\n\t\t\t\tinput.playerEntity.friendly,\r\n\t\t\t\tfalse,\r\n\t\t\t);\r\n\t\t\tconst spawns = performEntitySpawns(\r\n\t\t\t\tnewMinions,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\t0,\r\n\t\t\t\tinput.opponentBoard,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tspawns.forEach((spawn) => (spawn.attackImmediately = true));\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const SummoningSphere: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SummoningSphere = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
6
+ const spawns_1 = require("../../../simulation/spawns");
7
+ const utils_2 = require("../../../utils");
8
+ exports.SummoningSphere = {
9
+ startOfCombat: (trinket, input) => {
10
+ var _a;
11
+ const teammateState = (0, utils_2.getTeammateInitialState)(input.gameState.gameState, input.playerEntity);
12
+ if (!((_a = teammateState === null || teammateState === void 0 ? void 0 : teammateState.board) === null || _a === void 0 ? void 0 : _a.length)) {
13
+ return;
14
+ }
15
+ const highestHealthMinion = (0, utils_1.shuffleArray)([...teammateState.board]).sort((a, b) => b.health - a.health)[0];
16
+ const clone = (0, utils_2.addImpliedMechanics)({
17
+ ...highestHealthMinion,
18
+ lastAffectedByEntity: null,
19
+ definitelyDead: false,
20
+ attackImmediately: false,
21
+ }, input.gameState.cardsData);
22
+ const newMinions = (0, deathrattle_spawns_1.spawnEntities)(clone.cardId, 1, input.playerBoard, input.playerEntity, input.opponentBoard, input.opponentEntity, input.gameState.allCards, input.gameState.cardsData, input.gameState.sharedState, input.gameState.spectator, highestHealthMinion.friendly, true, false, false, clone);
23
+ const indexFromRight = 0;
24
+ const spawned = (0, spawns_1.performEntitySpawns)(newMinions, input.playerBoard, input.playerEntity, highestHealthMinion, indexFromRight, input.opponentBoard, input.opponentEntity, input.gameState);
25
+ if (spawned.length > 0) {
26
+ input.gameState.spectator.registerPowerTarget(input.playerEntity, clone, input.playerBoard, input.playerEntity, input.opponentEntity);
27
+ return true;
28
+ }
29
+ },
30
+ };
31
+ //# sourceMappingURL=summoning-sphere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summoning-sphere.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/summoning-sphere.ts"],"names":[],"mappings":";;;AAEA,mDAAuD;AACvD,+EAAuE;AACvE,uDAAiE;AAEjE,0CAA8E;AAEjE,QAAA,eAAe,GAAG;IAC9B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;;QACzD,MAAM,aAAa,GAAG,IAAA,+BAAuB,EAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7F,IAAI,CAAC,CAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,0CAAE,MAAM,CAAA,EAAE;YAClC,OAAO;SACP;QACD,MAAM,mBAAmB,GAAG,IAAA,oBAAY,EAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,MAAM,KAAK,GAAgB,IAAA,2BAAmB,EAC7C;YACC,GAAG,mBAAmB;YACtB,oBAAoB,EAAE,IAAI;YAC1B,cAAc,EAAE,KAAK;YACrB,iBAAiB,EAAE,KAAK;SACxB,EACD,KAAK,CAAC,SAAS,CAAC,SAAS,CACzB,CAAC;QACF,MAAM,UAAU,GAAG,IAAA,kCAAa,EAC/B,KAAK,CAAC,MAAM,EACZ,CAAC,EACD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CAAC,QAAQ,EACxB,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,WAAW,EAC3B,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,mBAAmB,CAAC,QAAQ,EAC5B,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,CACL,CAAC;QACF,MAAM,cAAc,GAAG,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,IAAA,4BAAmB,EAClC,UAAU,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,mBAAmB,EACnB,cAAc,EACd,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,YAAY,EAClB,KAAK,EACL,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACpB,CAAC;YACF,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { addImpliedMechanics, getTeammateInitialState } from '../../../utils';\r\n\r\nexport const SummoningSphere = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst teammateState = getTeammateInitialState(input.gameState.gameState, input.playerEntity);\r\n\t\tif (!teammateState?.board?.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst highestHealthMinion = shuffleArray([...teammateState.board]).sort((a, b) => b.health - a.health)[0];\r\n\t\tconst clone: BoardEntity = addImpliedMechanics(\r\n\t\t\t{\r\n\t\t\t\t...highestHealthMinion,\r\n\t\t\t\tlastAffectedByEntity: null,\r\n\t\t\t\tdefinitelyDead: false,\r\n\t\t\t\tattackImmediately: false,\r\n\t\t\t},\r\n\t\t\tinput.gameState.cardsData,\r\n\t\t);\r\n\t\tconst newMinions = spawnEntities(\r\n\t\t\tclone.cardId,\r\n\t\t\t1,\r\n\t\t\tinput.playerBoard,\r\n\t\t\tinput.playerEntity,\r\n\t\t\tinput.opponentBoard,\r\n\t\t\tinput.opponentEntity,\r\n\t\t\tinput.gameState.allCards,\r\n\t\t\tinput.gameState.cardsData,\r\n\t\t\tinput.gameState.sharedState,\r\n\t\t\tinput.gameState.spectator,\r\n\t\t\thighestHealthMinion.friendly,\r\n\t\t\ttrue,\r\n\t\t\tfalse,\r\n\t\t\tfalse,\r\n\t\t\tclone,\r\n\t\t);\r\n\t\tconst indexFromRight = 0;\r\n\t\tconst spawned = performEntitySpawns(\r\n\t\t\tnewMinions,\r\n\t\t\tinput.playerBoard,\r\n\t\t\tinput.playerEntity,\r\n\t\t\thighestHealthMinion,\r\n\t\t\tindexFromRight,\r\n\t\t\tinput.opponentBoard,\r\n\t\t\tinput.opponentEntity,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tif (spawned.length > 0) {\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tclone,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const TinyfinOnesie: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TinyfinOnesie = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.TinyfinOnesie = {
6
+ startOfCombat: (trinket, input) => {
7
+ var _a;
8
+ const highestHealthMinionInHand = (_a = input.playerEntity.hand) === null || _a === void 0 ? void 0 : _a.sort((a, b) => b.health - a.health)[0];
9
+ if (highestHealthMinionInHand && input.playerBoard.length > 0) {
10
+ (0, stats_1.modifyStats)(input.playerBoard[0], highestHealthMinionInHand.attack, highestHealthMinionInHand.health, input.playerBoard, input.playerEntity, input.gameState);
11
+ return true;
12
+ }
13
+ },
14
+ };
15
+ //# sourceMappingURL=tinyfin-onesie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinyfin-onesie.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/tinyfin-onesie.ts"],"names":[],"mappings":";;;AAEA,qDAAwD;AAE3C,QAAA,aAAa,GAAG;IAC5B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;;QACzD,MAAM,yBAAyB,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClG,IAAI,yBAAyB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,IAAA,mBAAW,EACV,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EACpB,yBAAyB,CAAC,MAAM,EAChC,yBAAyB,CAAC,MAAM,EAChC,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\n\r\nexport const TinyfinOnesie = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst highestHealthMinionInHand = input.playerEntity.hand?.sort((a, b) => b.health - a.health)[0];\r\n\t\tif (highestHealthMinionInHand && input.playerBoard.length > 0) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\tinput.playerBoard[0],\r\n\t\t\t\thighestHealthMinionInHand.attack,\r\n\t\t\t\thighestHealthMinionInHand.health,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const TrainingCertificate: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrainingCertificate = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.TrainingCertificate = {
6
+ startOfCombat: (trinket, input) => {
7
+ if (input.playerBoard.length > 0) {
8
+ const minionsByAttack = [...input.playerBoard].sort((a, b) => a.attack - b.attack);
9
+ const firstTarget = minionsByAttack[0];
10
+ (0, stats_1.setEntityStats)(firstTarget, 2 * firstTarget.maxAttack, 2 * firstTarget.maxHealth, input.playerBoard, input.playerEntity, input.gameState);
11
+ input.gameState.spectator.registerPowerTarget(trinket, firstTarget, input.playerBoard, null, null);
12
+ if (input.playerBoard.length > 1) {
13
+ const secondTarget = minionsByAttack[1];
14
+ (0, stats_1.setEntityStats)(secondTarget, 2 * secondTarget.maxAttack, 2 * secondTarget.maxHealth, input.playerBoard, input.playerEntity, input.gameState);
15
+ input.gameState.spectator.registerPowerTarget(trinket, secondTarget, input.playerBoard, null, null);
16
+ }
17
+ return true;
18
+ }
19
+ },
20
+ };
21
+ //# sourceMappingURL=training-certificate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"training-certificate.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/training-certificate.ts"],"names":[],"mappings":";;;AAEA,qDAA2D;AAE9C,QAAA,mBAAmB,GAAG;IAClC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACnF,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACvC,IAAA,sBAAc,EACb,WAAW,EACX,CAAC,GAAG,WAAW,CAAC,SAAS,EACzB,CAAC,GAAG,WAAW,CAAC,SAAS,EACzB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACnG,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAA,sBAAc,EACb,YAAY,EACZ,CAAC,GAAG,YAAY,CAAC,SAAS,EAC1B,CAAC,GAAG,YAAY,CAAC,SAAS,EAC1B,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACpG;YACD,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\n\r\nexport const TrainingCertificate = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\tconst minionsByAttack = [...input.playerBoard].sort((a, b) => a.attack - b.attack);\r\n\t\t\tconst firstTarget = minionsByAttack[0];\r\n\t\t\tsetEntityStats(\r\n\t\t\t\tfirstTarget,\r\n\t\t\t\t2 * firstTarget.maxAttack,\r\n\t\t\t\t2 * firstTarget.maxHealth,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, firstTarget, input.playerBoard, null, null);\r\n\t\t\tif (input.playerBoard.length > 1) {\r\n\t\t\t\tconst secondTarget = minionsByAttack[1];\r\n\t\t\t\tsetEntityStats(\r\n\t\t\t\t\tsecondTarget,\r\n\t\t\t\t\t2 * secondTarget.maxAttack,\r\n\t\t\t\t\t2 * secondTarget.maxHealth,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, secondTarget, input.playerBoard, null, null);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BoardTrinket } from '../../../bgs-player-entity';
2
+ import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
+ export declare const ValorousMedallion: {
4
+ startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
5
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValorousMedallion = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ exports.ValorousMedallion = {
6
+ startOfCombat: (trinket, input) => {
7
+ const medallionBuff = trinket.cardId === "BG30_MagicItem_970" ? 2 : 6;
8
+ (0, utils_1.addStatsToBoard)(trinket, input.playerBoard, input.playerEntity, medallionBuff, medallionBuff, input.gameState);
9
+ return true;
10
+ },
11
+ };
12
+ //# sourceMappingURL=valorous-medaillion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valorous-medaillion.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/valorous-medaillion.ts"],"names":[],"mappings":";;;AAGA,0CAAiD;AAEpC,QAAA,iBAAiB,GAAG;IAChC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,yBAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAA,uBAAe,EAAC,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/G,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { addStatsToBoard } from '../../../utils';\r\n\r\nexport const ValorousMedallion = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst medallionBuff = trinket.cardId === CardIds.ValorousMedallion_BG30_MagicItem_970 ? 2 : 6;\r\n\t\taddStatsToBoard(trinket, input.playerBoard, input.playerEntity, medallionBuff, medallionBuff, input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -7,6 +7,7 @@ export declare const groupByFunction: <T>(keyExtractor: (obj: T) => string | num
7
7
  export { partitionArray, sleep };
8
8
  export declare const pickRandom: <T>(array: readonly T[]) => T;
9
9
  export declare const pickRandomAlive: (board: BoardEntity[]) => BoardEntity;
10
+ export declare const pickMultipleRandomAlive: (board: BoardEntity[], quantity: number) => BoardEntity[];
10
11
  export declare const pickRandomLowestHealth: (board: BoardEntity[]) => BoardEntity;
11
12
  export declare const encode: (input: string) => string;
12
13
  export declare const decode: (base64: string) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shuffleArray = exports.pickMultipleRandomDifferent = exports.decode = exports.encode = exports.pickRandomLowestHealth = exports.pickRandomAlive = exports.pickRandom = exports.sleep = exports.partitionArray = exports.groupByFunction = void 0;
3
+ exports.shuffleArray = exports.pickMultipleRandomDifferent = exports.decode = exports.encode = exports.pickRandomLowestHealth = exports.pickMultipleRandomAlive = exports.pickRandomAlive = exports.pickRandom = exports.sleep = exports.partitionArray = exports.groupByFunction = void 0;
4
4
  function partitionArray(array, partitionSize) {
5
5
  const workingCopy = [...array];
6
6
  const result = [];
@@ -37,6 +37,18 @@ const pickRandomAlive = (board) => {
37
37
  return chosenEntity;
38
38
  };
39
39
  exports.pickRandomAlive = pickRandomAlive;
40
+ const pickMultipleRandomAlive = (board, quantity) => {
41
+ const picked = [];
42
+ for (let i = 0; i < quantity; i++) {
43
+ const targetBoard = board.filter((e) => e.health > 0 && !e.definitelyDead).filter((e) => !picked.includes(e));
44
+ const chosenEntity = (0, exports.pickRandom)(targetBoard);
45
+ if (!!chosenEntity) {
46
+ picked.push(chosenEntity);
47
+ }
48
+ }
49
+ return picked;
50
+ };
51
+ exports.pickMultipleRandomAlive = pickMultipleRandomAlive;
40
52
  const pickRandomLowestHealth = (board) => {
41
53
  const targetBoard = board.filter((e) => e.health > 0 && !e.definitelyDead);
42
54
  const lowestHealth = Math.min(...targetBoard.map((e) => e.health));
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/services/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoardEntity } from '../board-entity';\r\n\r\nfunction partitionArray<T>(array: readonly T[], partitionSize: number): readonly T[][] {\r\n\tconst workingCopy: T[] = [...array];\r\n\tconst result: T[][] = [];\r\n\twhile (workingCopy.length) {\r\n\t\tresult.push(workingCopy.splice(0, partitionSize));\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nasync function sleep(ms) {\r\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nexport const groupByFunction =\r\n\t<T>(keyExtractor: (obj: T) => string | number) =>\r\n\t(array: readonly T[]): { [key: string]: readonly T[] } => {\r\n\t\treturn (array ?? []).reduce((objectsByKeyValue, obj) => {\r\n\t\t\tconst value = keyExtractor(obj);\r\n\t\t\tobjectsByKeyValue[value] = objectsByKeyValue[value] ?? [];\r\n\t\t\t// Using push instead of concat is thousands of times faster on big arrays\r\n\t\t\tobjectsByKeyValue[value].push(obj);\r\n\t\t\treturn objectsByKeyValue;\r\n\t\t}, {});\r\n\t};\r\n\r\nexport { partitionArray, sleep };\r\n\r\nexport const pickRandom = <T>(array: readonly T[]): T => {\r\n\tif (!array?.length) {\r\n\t\treturn null;\r\n\t}\r\n\treturn array[Math.floor(Math.random() * array.length)];\r\n};\r\n\r\nexport const pickRandomAlive = (board: BoardEntity[]): BoardEntity => {\r\n\tconst targetBoard = board.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\tconst chosenEntity = pickRandom(targetBoard);\r\n\treturn chosenEntity;\r\n};\r\n\r\nexport const pickRandomLowestHealth = (board: BoardEntity[]): BoardEntity => {\r\n\tconst targetBoard = board.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\tconst lowestHealth = Math.min(...targetBoard.map((e) => e.health));\r\n\tconst entitiesWithLowestHealth = targetBoard.filter((e) => e.health === lowestHealth);\r\n\tconst chosenEntity = pickRandom(entitiesWithLowestHealth);\r\n\treturn chosenEntity;\r\n};\r\n\r\nexport const encode = (input: string): string => {\r\n\t// return compressToEncodedURIComponent(input);\r\n\tconst buff = Buffer.from(input, 'utf-8');\r\n\tconst base64 = buff.toString('base64');\r\n\treturn base64;\r\n};\r\n\r\nexport const decode = (base64: string): string => {\r\n\tconst buff = Buffer.from(base64, 'base64');\r\n\tconst str = buff.toString('utf-8');\r\n\treturn str;\r\n};\r\n\r\nexport const pickMultipleRandomDifferent = <T>(list: T[], n: number): T[] => {\r\n\tconst shuffled = shuffleArray([...list]);\r\n\treturn shuffled.slice(0, n);\r\n};\r\n\r\n// https://stackoverflow.com/a/2450976/548701\r\nexport const shuffleArray = <T>(array: T[]): T[] => {\r\n\tlet currentIndex = array.length;\r\n\tlet randomIndex = 0;\r\n\r\n\t// While there remain elements to shuffle...\r\n\twhile (currentIndex != 0) {\r\n\t\t// Pick a remaining element...\r\n\t\trandomIndex = Math.floor(Math.random() * currentIndex);\r\n\t\tcurrentIndex--;\r\n\r\n\t\t// And swap it with the current element.\r\n\t\t[array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];\r\n\t}\r\n\r\n\treturn array;\r\n};\r\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/services/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoardEntity } from '../board-entity';\r\n\r\nfunction partitionArray<T>(array: readonly T[], partitionSize: number): readonly T[][] {\r\n\tconst workingCopy: T[] = [...array];\r\n\tconst result: T[][] = [];\r\n\twhile (workingCopy.length) {\r\n\t\tresult.push(workingCopy.splice(0, partitionSize));\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nasync function sleep(ms) {\r\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\nexport const groupByFunction =\r\n\t<T>(keyExtractor: (obj: T) => string | number) =>\r\n\t(array: readonly T[]): { [key: string]: readonly T[] } => {\r\n\t\treturn (array ?? []).reduce((objectsByKeyValue, obj) => {\r\n\t\t\tconst value = keyExtractor(obj);\r\n\t\t\tobjectsByKeyValue[value] = objectsByKeyValue[value] ?? [];\r\n\t\t\t// Using push instead of concat is thousands of times faster on big arrays\r\n\t\t\tobjectsByKeyValue[value].push(obj);\r\n\t\t\treturn objectsByKeyValue;\r\n\t\t}, {});\r\n\t};\r\n\r\nexport { partitionArray, sleep };\r\n\r\nexport const pickRandom = <T>(array: readonly T[]): T => {\r\n\tif (!array?.length) {\r\n\t\treturn null;\r\n\t}\r\n\treturn array[Math.floor(Math.random() * array.length)];\r\n};\r\n\r\nexport const pickRandomAlive = (board: BoardEntity[]): BoardEntity => {\r\n\tconst targetBoard = board.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\tconst chosenEntity = pickRandom(targetBoard);\r\n\treturn chosenEntity;\r\n};\r\n\r\nexport const pickMultipleRandomAlive = (board: BoardEntity[], quantity: number): BoardEntity[] => {\r\n\tconst picked: BoardEntity[] = [];\r\n\tfor (let i = 0; i < quantity; i++) {\r\n\t\tconst targetBoard = board.filter((e) => e.health > 0 && !e.definitelyDead).filter((e) => !picked.includes(e));\r\n\t\tconst chosenEntity = pickRandom(targetBoard);\r\n\t\tif (!!chosenEntity) {\r\n\t\t\tpicked.push(chosenEntity);\r\n\t\t}\r\n\t}\r\n\treturn picked;\r\n};\r\n\r\nexport const pickRandomLowestHealth = (board: BoardEntity[]): BoardEntity => {\r\n\tconst targetBoard = board.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\tconst lowestHealth = Math.min(...targetBoard.map((e) => e.health));\r\n\tconst entitiesWithLowestHealth = targetBoard.filter((e) => e.health === lowestHealth);\r\n\tconst chosenEntity = pickRandom(entitiesWithLowestHealth);\r\n\treturn chosenEntity;\r\n};\r\n\r\nexport const encode = (input: string): string => {\r\n\t// return compressToEncodedURIComponent(input);\r\n\tconst buff = Buffer.from(input, 'utf-8');\r\n\tconst base64 = buff.toString('base64');\r\n\treturn base64;\r\n};\r\n\r\nexport const decode = (base64: string): string => {\r\n\tconst buff = Buffer.from(base64, 'base64');\r\n\tconst str = buff.toString('utf-8');\r\n\treturn str;\r\n};\r\n\r\nexport const pickMultipleRandomDifferent = <T>(list: T[], n: number): T[] => {\r\n\tconst shuffled = shuffleArray([...list]);\r\n\treturn shuffled.slice(0, n);\r\n};\r\n\r\n// https://stackoverflow.com/a/2450976/548701\r\nexport const shuffleArray = <T>(array: T[]): T[] => {\r\n\tlet currentIndex = array.length;\r\n\tlet randomIndex = 0;\r\n\r\n\t// While there remain elements to shuffle...\r\n\twhile (currentIndex != 0) {\r\n\t\t// Pick a remaining element...\r\n\t\trandomIndex = Math.floor(Math.random() * currentIndex);\r\n\t\tcurrentIndex--;\r\n\r\n\t\t// And swap it with the current element.\r\n\t\t[array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];\r\n\t}\r\n\r\n\treturn array;\r\n};\r\n"]}
@@ -172,6 +172,12 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState) => {
172
172
  case "BG24_Reward_125":
173
173
  spawned.attack += 4;
174
174
  break;
175
+ case "BG30_MagicItem_921":
176
+ if (spawned.cardId === "BG30_119" ||
177
+ spawned.cardId === "BG30_119_G") {
178
+ spawned.attack += 8;
179
+ }
180
+ break;
175
181
  }
176
182
  }
177
183
  }
@@ -220,13 +226,6 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState) => {
220
226
  spawned.attack += entity.cardId === "TB_BaconUps_008" ? 4 : 2;
221
227
  }
222
228
  break;
223
- case "BG26_805":
224
- case "BG26_805_G":
225
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.allCards) &&
226
- entity.entityId !== spawned.entityId) {
227
- spawned.attack += entity.cardId === "BG26_805_G" ? 4 : 2;
228
- }
229
- break;
230
229
  case "BG_NEW1_027":
231
230
  case "TB_BaconUps_136":
232
231
  if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.PIRATE, gameState.allCards) &&
@@ -276,6 +275,12 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState) => {
276
275
  const statsBonusFrostling = multiplierFrostling * boardHero.globalInfo.FrostlingBonus;
277
276
  (0, stats_1.modifyStats)(spawned, 2 * statsBonusFrostling, statsBonusFrostling, board, boardHero, gameState);
278
277
  break;
278
+ case "BGS_081":
279
+ case "TB_BaconUps_143":
280
+ const multiplierLooter = spawned.cardId === "TB_BaconUps_143" ? 2 : 1;
281
+ const statsBonusLooter = multiplierLooter * boardHero.globalInfo.PiratesSummonedThisGame;
282
+ (0, stats_1.modifyStats)(spawned, 2 * statsBonusLooter, 2 * multiplierLooter, board, boardHero, gameState);
283
+ break;
279
284
  case "BG_TTN_401":
280
285
  case "BG_TTN_401_G":
281
286
  const multiplierAstral = spawned.cardId === "BG_TTN_401_G" ? 2 : 1;
@@ -304,6 +309,12 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState) => {
304
309
  case "BG24_Reward_125":
305
310
  entity.attack = Math.max(0, entity.attack - 7);
306
311
  break;
312
+ case "BG30_MagicItem_921":
313
+ if (entity.cardId === "BG30_119" ||
314
+ entity.cardId === "BG30_119_G") {
315
+ entity.attack = Math.max(0, entity.attack - 8);
316
+ }
317
+ break;
307
318
  }
308
319
  }
309
320
  }
@@ -347,13 +358,6 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState) => {
347
358
  entity.attack = Math.max(0, entity.attack - (boardEntity.cardId === "TB_BaconUps_008" ? 4 : 2));
348
359
  }
349
360
  break;
350
- case "BG26_805":
351
- case "BG26_805_G":
352
- if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.BEAST, gameState.allCards) &&
353
- entity.entityId !== boardEntity.entityId) {
354
- entity.attack = Math.max(0, entity.attack - (entity.cardId === "BG26_805_G" ? 4 : 2));
355
- }
356
- break;
357
361
  case "BG_NEW1_027":
358
362
  case "TB_BaconUps_136":
359
363
  if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.PIRATE, gameState.allCards) &&
@@ -451,15 +455,6 @@ const handleMinionAddedAuraEffect = (spawnedCardId, spawned, board, boardHero, g
451
455
  e.attack += spawned.cardId === "TB_BaconUps_008" ? 4 : 2;
452
456
  });
453
457
  break;
454
- case "BG26_805":
455
- case "BG26_805_G":
456
- board
457
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.BEAST, gameState.allCards))
458
- .filter((e) => e.entityId !== spawned.entityId)
459
- .forEach((e) => {
460
- e.attack += spawned.cardId === "BG26_805_G" ? 4 : 2;
461
- });
462
- break;
463
458
  case "BG21_039":
464
459
  case "BG21_039_G":
465
460
  board