@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,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.performStartOfCombatAction = void 0;
4
+ const anomalous_twin_1 = require("../../cards/impl/anomaly/anomalous-twin");
5
+ const blessed_or_blighted_1 = require("../../cards/impl/anomaly/blessed-or-blighted");
6
+ const aim_high_1 = require("../../cards/impl/hero-power/aim-high");
7
+ const aim_left_1 = require("../../cards/impl/hero-power/aim-left");
8
+ const aim_low_1 = require("../../cards/impl/hero-power/aim-low");
9
+ const aim_right_1 = require("../../cards/impl/hero-power/aim-right");
10
+ const all_will_burn_1 = require("../../cards/impl/hero-power/all-will-burn");
11
+ const earth_invocation_1 = require("../../cards/impl/hero-power/earth-invocation");
12
+ const embrace_your_rage_1 = require("../../cards/impl/hero-power/embrace-your-rage");
13
+ const fire_invocation_1 = require("../../cards/impl/hero-power/fire-invocation");
14
+ const fragrant_phylactery_1 = require("../../cards/impl/hero-power/fragrant-phylactery");
15
+ const glorious_gloop_1 = require("../../cards/impl/hero-power/glorious-gloop");
16
+ const lightning_invocation_1 = require("../../cards/impl/hero-power/lightning-invocation");
17
+ const rapid_reanimation_1 = require("../../cards/impl/hero-power/rapid-reanimation");
18
+ const reborn_rites_1 = require("../../cards/impl/hero-power/reborn-rites");
19
+ const swatting_insects_1 = require("../../cards/impl/hero-power/swatting-insects");
20
+ const tentacular_1 = require("../../cards/impl/hero-power/tentacular");
21
+ const water_invocation_1 = require("../../cards/impl/hero-power/water-invocation");
22
+ const wax_warband_1 = require("../../cards/impl/hero-power/wax-warband");
23
+ const amber_guardian_1 = require("../../cards/impl/minion/amber-guardian");
24
+ const audacious_anchor_1 = require("../../cards/impl/minion/audacious-anchor");
25
+ const carbonic_copy_1 = require("../../cards/impl/minion/carbonic-copy");
26
+ const choral_mrrrglr_1 = require("../../cards/impl/minion/choral-mrrrglr");
27
+ const corrupted_myrmidon_1 = require("../../cards/impl/minion/corrupted-myrmidon");
28
+ const crabby_1 = require("../../cards/impl/minion/crabby");
29
+ const diremuck_forager_1 = require("../../cards/impl/minion/diremuck-forager");
30
+ const elder_taggawag_1 = require("../../cards/impl/minion/elder-taggawag");
31
+ const hawkstrider_herald_1 = require("../../cards/impl/minion/hawkstrider-herald");
32
+ const hoarding_hatespawn_1 = require("../../cards/impl/minion/hoarding-hatespawn");
33
+ const humming_bird_1 = require("../../cards/impl/minion/humming-bird");
34
+ const interrogator_whitemane_1 = require("../../cards/impl/minion/interrogator-whitemane");
35
+ const irate_rooster_1 = require("../../cards/impl/minion/irate-rooster");
36
+ const mantid_queen_1 = require("../../cards/impl/minion/mantid-queen");
37
+ const misfit_dragonling_1 = require("../../cards/impl/minion/misfit-dragonling");
38
+ const piloted_whirl_o_tron_1 = require("../../cards/impl/minion/piloted-whirl-o-tron");
39
+ const prized_promo_drake_1 = require("../../cards/impl/minion/prized-promo-drake");
40
+ const red_whelp_1 = require("../../cards/impl/minion/red-whelp");
41
+ const sanctum_rester_1 = require("../../cards/impl/minion/sanctum-rester");
42
+ const sandy_1 = require("../../cards/impl/minion/sandy");
43
+ const sky_pirate_flagbearer_1 = require("../../cards/impl/minion/sky-pirate-flagbearer");
44
+ const soulsplitter_1 = require("../../cards/impl/minion/soulsplitter");
45
+ const sun_screener_1 = require("../../cards/impl/minion/sun-screener");
46
+ const the_uninvited_guest_1 = require("../../cards/impl/minion/the-uninvited-guest");
47
+ const thousandth_paper_drake_1 = require("../../cards/impl/minion/thousandth-paper-drake");
48
+ const vaelastrasz_1 = require("../../cards/impl/minion/vaelastrasz");
49
+ const yulon_fortune_granter_1 = require("../../cards/impl/minion/yulon-fortune-granter");
50
+ const evil_twin_1 = require("../../cards/impl/quest-reward/evil-twin");
51
+ const staff_of_origination_1 = require("../../cards/impl/quest-reward/staff-of-origination");
52
+ const stolen_gold_1 = require("../../cards/impl/quest-reward/stolen-gold");
53
+ const artisanal_urn_1 = require("../../cards/impl/trinket/artisanal-urn");
54
+ const automaton_portrait_1 = require("../../cards/impl/trinket/automaton-portrait");
55
+ const bronze_timepiece_1 = require("../../cards/impl/trinket/bronze-timepiece");
56
+ const emerald_dreamcatcher_1 = require("../../cards/impl/trinket/emerald-dreamcatcher");
57
+ const eternal_portrait_1 = require("../../cards/impl/trinket/eternal-portrait");
58
+ const fishy_sticker_1 = require("../../cards/impl/trinket/fishy-sticker");
59
+ const hoggy_bank_1 = require("../../cards/impl/trinket/hoggy-bank");
60
+ const holly_mallet_1 = require("../../cards/impl/trinket/holly-mallet");
61
+ const ironforge_anvil_1 = require("../../cards/impl/trinket/ironforge-anvil");
62
+ const jarred_frostling_1 = require("../../cards/impl/trinket/jarred-frostling");
63
+ const karazhan_chess_set_1 = require("../../cards/impl/trinket/karazhan-chess-set");
64
+ const rivendare_portrait_1 = require("../../cards/impl/trinket/rivendare-portrait");
65
+ const rusty_trident_1 = require("../../cards/impl/trinket/rusty-trident");
66
+ const ship_in_a_bottle_1 = require("../../cards/impl/trinket/ship-in-a-bottle");
67
+ const summoning_sphere_1 = require("../../cards/impl/trinket/summoning-sphere");
68
+ const tinyfin_onesie_1 = require("../../cards/impl/trinket/tinyfin-onesie");
69
+ const training_certificate_1 = require("../../cards/impl/trinket/training-certificate");
70
+ const valorous_medaillion_1 = require("../../cards/impl/trinket/valorous-medaillion");
71
+ const performStartOfCombatAction = (cardId, entity, input) => {
72
+ var _a;
73
+ let hasTriggered = false;
74
+ const promoPortraitCount = getPromoPortraitCount(input.playerEntity);
75
+ for (let i = promoPortraitCount; i >= 0; i--) {
76
+ const action = (_a = getStartOfCombatAction(cardId)) === null || _a === void 0 ? void 0 : _a.startOfCombat;
77
+ if (!!action) {
78
+ hasTriggered = action(entity, input);
79
+ if (!!hasTriggered) {
80
+ onStartOfCombatTriggered(i, cardId, input.playerEntity);
81
+ if (typeof hasTriggered !== 'boolean' && hasTriggered.shouldRecomputeCurrentAttacker) {
82
+ input.currentAttacker =
83
+ input.playerBoard.length > input.opponentBoard.length
84
+ ? 0
85
+ : input.opponentBoard.length > input.playerBoard.length
86
+ ? 1
87
+ : Math.round(Math.random());
88
+ }
89
+ }
90
+ }
91
+ }
92
+ return !!hasTriggered;
93
+ };
94
+ exports.performStartOfCombatAction = performStartOfCombatAction;
95
+ const getStartOfCombatAction = (cardId) => {
96
+ switch (cardId) {
97
+ case "BG24_Reward_111":
98
+ return evil_twin_1.EvilTwin;
99
+ case "BG24_Reward_312":
100
+ return staff_of_origination_1.StaffOfOrigination;
101
+ case "BG24_Reward_109":
102
+ return stolen_gold_1.StolenGold;
103
+ case "BG30_MagicItem_902":
104
+ return holly_mallet_1.HollyMallet;
105
+ case "BG30_MagicItem_962":
106
+ return training_certificate_1.TrainingCertificate;
107
+ case "BG30_MagicItem_970":
108
+ case "BG30_MagicItem_970t":
109
+ return valorous_medaillion_1.ValorousMedallion;
110
+ case "BG30_MagicItem_542":
111
+ return emerald_dreamcatcher_1.EmeraldDreamcatcher;
112
+ case "BG30_MagicItem_952":
113
+ return jarred_frostling_1.JarredFrostling;
114
+ case "BG30_MagicItem_917":
115
+ return rusty_trident_1.RustyTrident;
116
+ case "BG30_MagicItem_411":
117
+ return hoggy_bank_1.HoggyBank;
118
+ case "BG30_MagicItem_303":
119
+ return automaton_portrait_1.AutomatonPortrait;
120
+ case "BG30_MagicItem_407":
121
+ return ship_in_a_bottle_1.ShipInABottle;
122
+ case "BG30_MagicItem_301":
123
+ return eternal_portrait_1.EternalPortrait;
124
+ case "BG30_MagicItem_989":
125
+ case "BG30_MagicItem_989t":
126
+ return artisanal_urn_1.ArtisanalUrn;
127
+ case "BG30_MagicItem_310":
128
+ return rivendare_portrait_1.RivendarePortrait;
129
+ case "BG30_MagicItem_441":
130
+ return tinyfin_onesie_1.TinyfinOnesie;
131
+ case "BG30_MagicItem_995":
132
+ return bronze_timepiece_1.BronzeTimepiece;
133
+ case "BG30_MagicItem_403":
134
+ return ironforge_anvil_1.IronforgeAnvil;
135
+ case "BG30_MagicItem_972":
136
+ return karazhan_chess_set_1.KarazhanChessSet;
137
+ case "BG30_MagicItem_821":
138
+ case "BG30_MagicItem_821t2":
139
+ return fishy_sticker_1.FishySticker;
140
+ case "BGDUO_MagicItem_003":
141
+ return summoning_sphere_1.SummoningSphere;
142
+ case "TB_BaconShop_HP_086":
143
+ return swatting_insects_1.SwattingInsects;
144
+ case "BG22_HERO_001p_t1":
145
+ return earth_invocation_1.EarthInvocation;
146
+ case "BG22_HERO_001p_t3":
147
+ return water_invocation_1.WaterInvocation;
148
+ case "BG22_HERO_001p_t2":
149
+ return fire_invocation_1.FireInvocation;
150
+ case "BG22_HERO_001p_t4":
151
+ return lightning_invocation_1.LightningInvocation;
152
+ case "TB_BaconShop_HP_061":
153
+ return all_will_burn_1.AllWillBurn;
154
+ case "BG20_HERO_282p":
155
+ return fragrant_phylactery_1.FragrantPhylactery;
156
+ case "TB_BaconShop_HP_103":
157
+ return embrace_your_rage_1.EmbraceYourRage;
158
+ case "BG23_HERO_201p":
159
+ return tentacular_1.Tentacular;
160
+ case "TB_BaconShop_HP_024":
161
+ return reborn_rites_1.RebornRites;
162
+ case "BG25_HERO_103p":
163
+ return rapid_reanimation_1.RapidReanimation;
164
+ case "TB_BaconShop_HP_037a":
165
+ return wax_warband_1.WaxWarband;
166
+ case "BGDUO_HERO_101p":
167
+ return glorious_gloop_1.GloriousGloop;
168
+ case "BG22_HERO_000p_t1":
169
+ return aim_left_1.AimLeft;
170
+ case "BG22_HERO_000p_t4":
171
+ return aim_right_1.AimRight;
172
+ case "BG22_HERO_000p_t2":
173
+ return aim_low_1.AimLow;
174
+ case "BG22_HERO_000p_t3":
175
+ return aim_high_1.AimHigh;
176
+ case "BG27_Anomaly_726":
177
+ return blessed_or_blighted_1.BlessedOrBlighted;
178
+ case "BG27_Anomaly_560":
179
+ return anomalous_twin_1.AnomalousTwin;
180
+ case "BGS_019":
181
+ case "TB_BaconUps_102":
182
+ return red_whelp_1.RedWhelp;
183
+ case "BG21_014":
184
+ case "BG21_014_G":
185
+ return prized_promo_drake_1.PrizedPromoDrake;
186
+ case "BG26_354":
187
+ case "BG26_354_G":
188
+ return choral_mrrrglr_1.ChoralMrrrglr;
189
+ case "BG24_500":
190
+ case "BG24_500_G":
191
+ return amber_guardian_1.AmberGuardian;
192
+ case "BG26_356":
193
+ case "BG26_356_G":
194
+ return sanctum_rester_1.SanctumRester;
195
+ case "BG25_023":
196
+ case "BG25_023_G":
197
+ return soulsplitter_1.Soulsplitter;
198
+ case "BG22_HERO_000_Buddy":
199
+ case "BG22_HERO_000_Buddy_G":
200
+ return crabby_1.Crabby;
201
+ case "BG23_012":
202
+ case "BG23_012_G":
203
+ return corrupted_myrmidon_1.CorruptedMyrmidon;
204
+ case "BG24_704":
205
+ case "BG24_704_G":
206
+ return interrogator_whitemane_1.InterrogatorWhitemane;
207
+ case "BG22_402":
208
+ case "BG22_402_G":
209
+ return mantid_queen_1.MantidQueen;
210
+ case "BG27_503":
211
+ case "BG27_503_G":
212
+ return carbonic_copy_1.CarbonicCopy;
213
+ case "BG27_556":
214
+ case "BG27_556_G":
215
+ return diremuck_forager_1.DiremuckForager;
216
+ case "BG27_079":
217
+ case "BG27_079_G":
218
+ return hawkstrider_herald_1.HawkstriderHerald;
219
+ case "BG28_904":
220
+ case "BG28_904_G":
221
+ return audacious_anchor_1.AudaciousAnchor;
222
+ case "BG21_HERO_030_Buddy":
223
+ case "BG21_HERO_030_Buddy_G":
224
+ return piloted_whirl_o_tron_1.PilotedWhirlOTron;
225
+ case "BG29_990":
226
+ case "BG29_990_G":
227
+ return irate_rooster_1.IrateRooster;
228
+ case "BG29_814":
229
+ case "BG29_814_G":
230
+ return misfit_dragonling_1.MisfitDragonling;
231
+ case "BG29_810":
232
+ case "BG29_810_G":
233
+ return thousandth_paper_drake_1.ThousandthPaperDrake;
234
+ case "BG29_811":
235
+ case "BG29_811_G":
236
+ return yulon_fortune_granter_1.YulonFortuneGranter;
237
+ case "BG29_872":
238
+ case "BG29_872_G":
239
+ return hoarding_hatespawn_1.HoardingHatespawn;
240
+ case "BG29_875":
241
+ case "BG29_875_G":
242
+ return the_uninvited_guest_1.TheUninvitedGuest;
243
+ case "BGDUO_125":
244
+ case "BGDUO_125_G":
245
+ return sandy_1.Sandy;
246
+ case "TB_BaconShop_HERO_56_Buddy":
247
+ case "TB_BaconShop_HERO_56_Buddy_G":
248
+ return vaelastrasz_1.Vaelastrasz;
249
+ case "TB_BaconShop_HERO_14_Buddy":
250
+ case "TB_BaconShop_HERO_14_Buddy_G":
251
+ return elder_taggawag_1.ElderTaggawag;
252
+ case "BG30_101":
253
+ case "BG30_101_G":
254
+ return sun_screener_1.SunScreener;
255
+ case "BG30_119":
256
+ case "BG30_119_G":
257
+ return sky_pirate_flagbearer_1.SkyPirateFlagbearer;
258
+ case "BG26_805":
259
+ case "BG26_805_G":
260
+ return humming_bird_1.HummingBird;
261
+ default:
262
+ return null;
263
+ }
264
+ };
265
+ const onStartOfCombatTriggered = (iteration, triggeredCardId, playerEntity) => {
266
+ const promoPortraits = playerEntity.trinkets.filter((t) => t.cardId === "BG30_MagicItem_918" && t.scriptDataNum1 > 0);
267
+ if (promoPortraits.length === 0 || iteration === 0 || iteration >= promoPortraits.length) {
268
+ return;
269
+ }
270
+ switch (triggeredCardId) {
271
+ case "BG24_Reward_109":
272
+ case "BG30_MagicItem_902":
273
+ case "BG30_MagicItem_542":
274
+ case "BG30_MagicItem_301":
275
+ case "BG30_MagicItem_995":
276
+ case "TB_BaconShop_HP_086":
277
+ case "TB_BaconShop_HP_024":
278
+ return;
279
+ }
280
+ const promoPortrait = promoPortraits[iteration - 1];
281
+ promoPortrait.scriptDataNum1--;
282
+ };
283
+ const getPromoPortraitCount = (playerEntity) => {
284
+ return playerEntity.trinkets.filter((t) => t.cardId === "BG30_MagicItem_918" && t.scriptDataNum1 > 0).length;
285
+ };
286
+ //# sourceMappingURL=soc-action-processor.js.map
@@ -0,0 +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 { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { StartOfCombatCard } from '../../cards/card.interface';\r\nimport { AnomalousTwin } from '../../cards/impl/anomaly/anomalous-twin';\r\nimport { BlessedOrBlighted } from '../../cards/impl/anomaly/blessed-or-blighted';\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 { FragrantPhylactery } from '../../cards/impl/hero-power/fragrant-phylactery';\r\nimport { GloriousGloop } from '../../cards/impl/hero-power/glorious-gloop';\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 { SwattingInsects } from '../../cards/impl/hero-power/swatting-insects';\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 { ChoralMrrrglr } from '../../cards/impl/minion/choral-mrrrglr';\r\nimport { CorruptedMyrmidon } from '../../cards/impl/minion/corrupted-myrmidon';\r\nimport { Crabby } from '../../cards/impl/minion/crabby';\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 { HoardingHatespawn } from '../../cards/impl/minion/hoarding-hatespawn';\r\nimport { HummingBird } from '../../cards/impl/minion/humming-bird';\r\nimport { InterrogatorWhitemane } from '../../cards/impl/minion/interrogator-whitemane';\r\nimport { IrateRooster } from '../../cards/impl/minion/irate-rooster';\r\nimport { MantidQueen } from '../../cards/impl/minion/mantid-queen';\r\nimport { MisfitDragonling } from '../../cards/impl/minion/misfit-dragonling';\r\nimport { PilotedWhirlOTron } from '../../cards/impl/minion/piloted-whirl-o-tron';\r\nimport { PrizedPromoDrake } from '../../cards/impl/minion/prized-promo-drake';\r\nimport { RedWhelp } from '../../cards/impl/minion/red-whelp';\r\nimport { SanctumRester } from '../../cards/impl/minion/sanctum-rester';\r\nimport { Sandy } from '../../cards/impl/minion/sandy';\r\nimport { SkyPirateFlagbearer } from '../../cards/impl/minion/sky-pirate-flagbearer';\r\nimport { Soulsplitter } from '../../cards/impl/minion/soulsplitter';\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 { Vaelastrasz } from '../../cards/impl/minion/vaelastrasz';\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 { ArtisanalUrn } from '../../cards/impl/trinket/artisanal-urn';\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 { SoCInput } from './start-of-combat-input';\r\n\r\nexport const performStartOfCombatAction = (cardId: string, entity: BoardEntity | BoardTrinket, input: SoCInput) => {\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 action = getStartOfCombatAction(cardId)?.startOfCombat;\r\n\t\tif (!!action) {\r\n\t\t\thasTriggered = action(entity, input);\r\n\t\t\tif (!!hasTriggered) {\r\n\t\t\t\tonStartOfCombatTriggered(i, cardId, input.playerEntity);\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? 0\r\n\t\t\t\t\t\t\t: input.opponentBoard.length > input.playerBoard.length\r\n\t\t\t\t\t\t\t? 1\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.ArtisanalUrn_BG30_MagicItem_989:\r\n\t\tcase CardIds.ArtisanalUrn_ArtisanalUrnToken_BG30_MagicItem_989t:\r\n\t\t\treturn ArtisanalUrn;\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\tcase 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.SwattingInsects:\r\n\t\t\treturn SwattingInsects;\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.TamsinRoame_FragrantPhylactery:\r\n\t\t\treturn FragrantPhylactery;\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.FlobbidinousFloop_GloriousGloop_BGDUO_HERO_101p:\r\n\t\t\treturn GloriousGloop;\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\r\n\t\t// Minions\r\n\t\tcase CardIds.RedWhelp_BGS_019:\r\n\t\tcase CardIds.RedWhelp_TB_BaconUps_102:\r\n\t\t\treturn RedWhelp;\r\n\t\tcase CardIds.PrizedPromoDrake_BG21_014:\r\n\t\tcase CardIds.PrizedPromoDrake_BG21_014_G:\r\n\t\t\treturn PrizedPromoDrake;\r\n\t\tcase CardIds.ChoralMrrrglr_BG26_354:\r\n\t\tcase CardIds.ChoralMrrrglr_BG26_354_G:\r\n\t\t\treturn ChoralMrrrglr;\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\tcase CardIds.SanctumRester_BG26_356:\r\n\t\tcase CardIds.SanctumRester_BG26_356_G:\r\n\t\t\treturn SanctumRester;\r\n\t\tcase CardIds.Soulsplitter_BG25_023:\r\n\t\tcase CardIds.Soulsplitter_BG25_023_G:\r\n\t\t\treturn Soulsplitter;\r\n\t\tcase CardIds.Crabby_BG22_HERO_000_Buddy:\r\n\t\tcase CardIds.Crabby_BG22_HERO_000_Buddy_G:\r\n\t\t\treturn Crabby;\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.InterrogatorWhitemane_BG24_704:\r\n\t\tcase CardIds.InterrogatorWhitemane_BG24_704_G:\r\n\t\t\treturn InterrogatorWhitemane;\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.PilotedWhirlOTron_BG21_HERO_030_Buddy:\r\n\t\tcase CardIds.PilotedWhirlOTron_BG21_HERO_030_Buddy_G:\r\n\t\t\treturn PilotedWhirlOTron;\r\n\t\tcase CardIds.IrateRooster_BG29_990:\r\n\t\tcase CardIds.IrateRooster_BG29_990_G:\r\n\t\t\treturn IrateRooster;\r\n\t\tcase CardIds.MisfitDragonling_BG29_814:\r\n\t\tcase CardIds.MisfitDragonling_BG29_814_G:\r\n\t\t\treturn MisfitDragonling;\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\tcase CardIds.HoardingHatespawn_BG29_872:\r\n\t\tcase 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.Vaelastrasz_TB_BaconShop_HERO_56_Buddy:\r\n\t\tcase CardIds.Vaelastrasz_TB_BaconShop_HERO_56_Buddy_G:\r\n\t\t\treturn Vaelastrasz;\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\t\tcase CardIds.SkyPirateFlagbearer_BG30_119:\r\n\t\tcase CardIds.SkyPirateFlagbearer_BG30_119_G:\r\n\t\t\treturn SkyPirateFlagbearer;\r\n\t\tcase CardIds.HummingBird_BG26_805:\r\n\t\tcase CardIds.HummingBird_BG26_805_G:\r\n\t\t\treturn HummingBird;\r\n\r\n\t\tdefault:\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\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"]}
@@ -0,0 +1,4 @@
1
+ import { BgsPlayerEntity } from '../../bgs-player-entity';
2
+ import { BoardEntity } from '../../board-entity';
3
+ import { FullGameState } from '../internal-game-state';
4
+ export declare const handleStartOfCombatAnomalies: (playerEntity: BgsPlayerEntity, playerBoard: BoardEntity[], opponentEntity: BgsPlayerEntity, opponentBoard: BoardEntity[], currentAttacker: number, gameState: FullGameState) => number;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleStartOfCombatAnomalies = void 0;
4
+ const summon_when_space_1 = require("../summon-when-space");
5
+ const soc_action_processor_1 = require("./soc-action-processor");
6
+ const handleStartOfCombatAnomalies = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
7
+ currentAttacker = handleStartOfCombatAnomaliesForPlayer({
8
+ playerEntity,
9
+ playerBoard,
10
+ opponentEntity,
11
+ opponentBoard,
12
+ currentAttacker,
13
+ gameState,
14
+ playerIsFriendly: true,
15
+ });
16
+ currentAttacker = handleStartOfCombatAnomaliesForPlayer({
17
+ opponentEntity,
18
+ opponentBoard,
19
+ playerEntity,
20
+ playerBoard,
21
+ currentAttacker,
22
+ gameState,
23
+ playerIsFriendly: false,
24
+ });
25
+ (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
26
+ return currentAttacker;
27
+ };
28
+ exports.handleStartOfCombatAnomalies = handleStartOfCombatAnomalies;
29
+ const handleStartOfCombatAnomaliesForPlayer = (input) => {
30
+ var _a;
31
+ if (!((_a = input.gameState.anomalies) === null || _a === void 0 ? void 0 : _a.length) || input.playerEntity.startOfCombatDone) {
32
+ return input.currentAttacker;
33
+ }
34
+ for (const anomaly of input.gameState.anomalies) {
35
+ (0, soc_action_processor_1.performStartOfCombatAction)(anomaly, null, input);
36
+ }
37
+ return input.currentAttacker;
38
+ };
39
+ //# sourceMappingURL=soc-anomalies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soc-anomalies.js","sourceRoot":"","sources":["../../../src/simulation/start-of-combat/soc-anomalies.ts"],"names":[],"mappings":";;;AAGA,4DAA8D;AAC9D,iEAAoE;AAG7D,MAAM,4BAA4B,GAAG,CAC3C,YAA6B,EAC7B,WAA0B,EAC1B,cAA+B,EAC/B,aAA4B,EAC5B,eAAuB,EACvB,SAAwB,EACf,EAAE;IACX,eAAe,GAAG,qCAAqC,CAAC;QACvD,YAAY;QACZ,WAAW;QACX,cAAc;QACd,aAAa;QACb,eAAe;QACf,SAAS;QACT,gBAAgB,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,eAAe,GAAG,qCAAqC,CAAC;QACvD,cAAc;QACd,aAAa;QACb,YAAY;QACZ,WAAW;QACX,eAAe;QACf,SAAS;QACT,gBAAgB,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,IAAA,0CAAsB,EAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC5F,OAAO,eAAe,CAAC;AACxB,CAAC,CAAC;AA5BW,QAAA,4BAA4B,gCA4BvC;AAEF,MAAM,qCAAqC,GAAG,CAAC,KAAe,EAAU,EAAE;;IACzE,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,SAAS,CAAC,SAAS,0CAAE,MAAM,CAAA,IAAI,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE;QAC/E,OAAO,KAAK,CAAC,eAAe,CAAC;KAC7B;IAED,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;QAChD,IAAA,iDAA0B,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KACjD;IAED,OAAO,KAAK,CAAC,eAAe,CAAC;AAC9B,CAAC,CAAC","sourcesContent":["import { BgsPlayerEntity } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { FullGameState } from '../internal-game-state';\r\nimport { handleSummonsWhenSpace } from '../summon-when-space';\r\nimport { performStartOfCombatAction } from './soc-action-processor';\r\nimport { SoCInput } from './start-of-combat-input';\r\n\r\nexport const handleStartOfCombatAnomalies = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\tcurrentAttacker: number,\r\n\tgameState: FullGameState,\r\n): number => {\r\n\tcurrentAttacker = handleStartOfCombatAnomaliesForPlayer({\r\n\t\tplayerEntity,\r\n\t\tplayerBoard,\r\n\t\topponentEntity,\r\n\t\topponentBoard,\r\n\t\tcurrentAttacker,\r\n\t\tgameState,\r\n\t\tplayerIsFriendly: true,\r\n\t});\r\n\tcurrentAttacker = handleStartOfCombatAnomaliesForPlayer({\r\n\t\topponentEntity,\r\n\t\topponentBoard,\r\n\t\tplayerEntity,\r\n\t\tplayerBoard,\r\n\t\tcurrentAttacker,\r\n\t\tgameState,\r\n\t\tplayerIsFriendly: false,\r\n\t});\r\n\thandleSummonsWhenSpace(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\treturn currentAttacker;\r\n};\r\n\r\nconst handleStartOfCombatAnomaliesForPlayer = (input: SoCInput): number => {\r\n\tif (!input.gameState.anomalies?.length || input.playerEntity.startOfCombatDone) {\r\n\t\treturn input.currentAttacker;\r\n\t}\r\n\r\n\tfor (const anomaly of input.gameState.anomalies) {\r\n\t\tperformStartOfCombatAction(anomaly, null, input);\r\n\t}\r\n\r\n\treturn input.currentAttacker;\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BgsPlayerEntity } from '../../bgs-player-entity';
2
+ import { BoardEntity } from '../../board-entity';
3
+ import { FullGameState } from '../internal-game-state';
4
+ export declare const handleStartOfCombatHeroPowers: (playerEntity: BgsPlayerEntity, playerBoard: BoardEntity[], opponentEntity: BgsPlayerEntity, opponentBoard: BoardEntity[], currentAttacker: number, gameState: FullGameState) => number;
5
+ export declare const getHeroPowerForHero: (heroCardId: string) => string;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHeroPowerForHero = exports.handleStartOfCombatHeroPowers = void 0;
4
+ const attack_1 = require("../attack");
5
+ const summon_when_space_1 = require("../summon-when-space");
6
+ const soc_action_processor_1 = require("./soc-action-processor");
7
+ const handleStartOfCombatHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
8
+ if (Math.random() < 0.5) {
9
+ currentAttacker = handlePlayerStartOfCombatHeroPowers({
10
+ playerEntity,
11
+ playerBoard,
12
+ opponentEntity,
13
+ opponentBoard,
14
+ currentAttacker,
15
+ playerIsFriendly: true,
16
+ gameState,
17
+ });
18
+ currentAttacker = handlePlayerStartOfCombatHeroPowers({
19
+ opponentEntity,
20
+ opponentBoard,
21
+ playerEntity,
22
+ playerBoard,
23
+ currentAttacker,
24
+ playerIsFriendly: false,
25
+ gameState,
26
+ });
27
+ }
28
+ else {
29
+ currentAttacker = handlePlayerStartOfCombatHeroPowers({
30
+ opponentEntity,
31
+ opponentBoard,
32
+ playerEntity,
33
+ playerBoard,
34
+ currentAttacker,
35
+ playerIsFriendly: false,
36
+ gameState,
37
+ });
38
+ currentAttacker = handlePlayerStartOfCombatHeroPowers({
39
+ playerEntity,
40
+ playerBoard,
41
+ opponentEntity,
42
+ opponentBoard,
43
+ currentAttacker,
44
+ playerIsFriendly: true,
45
+ gameState,
46
+ });
47
+ }
48
+ (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
49
+ return currentAttacker;
50
+ };
51
+ exports.handleStartOfCombatHeroPowers = handleStartOfCombatHeroPowers;
52
+ const handlePlayerStartOfCombatHeroPowers = (input) => {
53
+ if (input.playerEntity.startOfCombatDone || input.playerEntity.hpLeft <= 0) {
54
+ return input.currentAttacker;
55
+ }
56
+ const playerHeroPowerId = input.playerEntity.heroPowerId || (0, exports.getHeroPowerForHero)(input.playerEntity.cardId);
57
+ (0, soc_action_processor_1.performStartOfCombatAction)(playerHeroPowerId, null, input);
58
+ (0, attack_1.processMinionDeath)(input.playerBoard, input.playerEntity, input.opponentBoard, input.opponentEntity, input.gameState);
59
+ return input.currentAttacker;
60
+ };
61
+ const getHeroPowerForHero = (heroCardId) => {
62
+ switch (heroCardId) {
63
+ case "TB_BaconShop_HERO_08":
64
+ return "TB_BaconShop_HP_069";
65
+ case "TB_BaconShop_HERO_22":
66
+ return "TB_BaconShop_HP_024";
67
+ case "BG25_HERO_100":
68
+ return "TB_BaconShop_HP_018";
69
+ case "TB_BaconShop_HERO_52":
70
+ return "TB_BaconShop_HP_061";
71
+ case "BG25_HERO_103":
72
+ return "BG25_HERO_103p";
73
+ }
74
+ return null;
75
+ };
76
+ exports.getHeroPowerForHero = getHeroPowerForHero;
77
+ //# sourceMappingURL=soc-hero-power.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soc-hero-power.js","sourceRoot":"","sources":["../../../src/simulation/start-of-combat/soc-hero-power.ts"],"names":[],"mappings":";;;AAGA,sCAA+C;AAE/C,4DAA8D;AAC9D,iEAAoE;AAG7D,MAAM,6BAA6B,GAAG,CAC5C,YAA6B,EAC7B,WAA0B,EAC1B,cAA+B,EAC/B,aAA4B,EAC5B,eAAuB,EACvB,SAAwB,EACf,EAAE;IAGX,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;QACxB,eAAe,GAAG,mCAAmC,CAAC;YACrD,YAAY;YACZ,WAAW;YACX,cAAc;YACd,aAAa;YACb,eAAe;YACf,gBAAgB,EAAE,IAAI;YACtB,SAAS;SACT,CAAC,CAAC;QACH,eAAe,GAAG,mCAAmC,CAAC;YACrD,cAAc;YACd,aAAa;YACb,YAAY;YACZ,WAAW;YACX,eAAe;YACf,gBAAgB,EAAE,KAAK;YACvB,SAAS;SACT,CAAC,CAAC;KACH;SAAM;QACN,eAAe,GAAG,mCAAmC,CAAC;YACrD,cAAc;YACd,aAAa;YACb,YAAY;YACZ,WAAW;YACX,eAAe;YACf,gBAAgB,EAAE,KAAK;YACvB,SAAS;SACT,CAAC,CAAC;QACH,eAAe,GAAG,mCAAmC,CAAC;YACrD,YAAY;YACZ,WAAW;YACX,cAAc;YACd,aAAa;YACb,eAAe;YACf,gBAAgB,EAAE,IAAI;YACtB,SAAS;SACT,CAAC,CAAC;KACH;IACD,IAAA,0CAAsB,EAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC5F,OAAO,eAAe,CAAC;AACxB,CAAC,CAAC;AAnDW,QAAA,6BAA6B,iCAmDxC;AAEF,MAAM,mCAAmC,GAAG,CAAC,KAAe,EAAU,EAAE;IACvE,IAAI,KAAK,CAAC,YAAY,CAAC,iBAAiB,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;QAC3E,OAAO,KAAK,CAAC,eAAe,CAAC;KAC7B;IAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,IAAI,IAAA,2BAAmB,EAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3G,IAAA,iDAA0B,EAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,IAAA,2BAAkB,EACjB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;IACF,OAAO,KAAK,CAAC,eAAe,CAAC;AAC9B,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAU,EAAE;IACjE,QAAQ,UAAU,EAAE;QACnB;YACC,6BAAuB;QACxB;YACC,6BAA2B;QAC5B;YACC,6BAA0B;QAC3B;YACC,6BAA2B;QAC5B;YACC,wBAA+C;KAChD;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAdW,QAAA,mBAAmB,uBAc9B","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { processMinionDeath } from '../attack';\r\nimport { FullGameState } from '../internal-game-state';\r\nimport { handleSummonsWhenSpace } from '../summon-when-space';\r\nimport { performStartOfCombatAction } from './soc-action-processor';\r\nimport { SoCInput } from './start-of-combat-input';\r\n\r\nexport const handleStartOfCombatHeroPowers = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\tcurrentAttacker: number,\r\n\tgameState: FullGameState,\r\n): number => {\r\n\t// Apparently it's a toin coss about whether to handle Illidan first or Al'Akir first\r\n\t// Auras are only relevant for Illidan, and already applied there\r\n\tif (Math.random() < 0.5) {\r\n\t\tcurrentAttacker = handlePlayerStartOfCombatHeroPowers({\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\tplayerIsFriendly: true,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t\tcurrentAttacker = handlePlayerStartOfCombatHeroPowers({\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\tplayerIsFriendly: false,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t} else {\r\n\t\tcurrentAttacker = handlePlayerStartOfCombatHeroPowers({\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\tplayerIsFriendly: false,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t\tcurrentAttacker = handlePlayerStartOfCombatHeroPowers({\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\tplayerIsFriendly: true,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\thandleSummonsWhenSpace(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\treturn currentAttacker;\r\n};\r\n\r\nconst handlePlayerStartOfCombatHeroPowers = (input: SoCInput): number => {\r\n\tif (input.playerEntity.startOfCombatDone || input.playerEntity.hpLeft <= 0) {\r\n\t\treturn input.currentAttacker;\r\n\t}\r\n\r\n\tconst playerHeroPowerId = input.playerEntity.heroPowerId || getHeroPowerForHero(input.playerEntity.cardId);\r\n\tperformStartOfCombatAction(playerHeroPowerId, null, input);\r\n\tprocessMinionDeath(\r\n\t\tinput.playerBoard,\r\n\t\tinput.playerEntity,\r\n\t\tinput.opponentBoard,\r\n\t\tinput.opponentEntity,\r\n\t\tinput.gameState,\r\n\t);\r\n\treturn input.currentAttacker;\r\n};\r\n\r\nexport const getHeroPowerForHero = (heroCardId: string): string => {\r\n\tswitch (heroCardId) {\r\n\t\tcase CardIds.IllidanStormrage_TB_BaconShop_HERO_08:\r\n\t\t\treturn CardIds.Wingmen;\r\n\t\tcase CardIds.TheLichKing_TB_BaconShop_HERO_22:\r\n\t\t\treturn CardIds.RebornRites;\r\n\t\tcase CardIds.ProfessorPutricide_BG25_HERO_100:\r\n\t\t\treturn CardIds.RagePotion;\r\n\t\tcase CardIds.Deathwing_TB_BaconShop_HERO_52:\r\n\t\t\treturn CardIds.AllWillBurn;\r\n\t\tcase CardIds.TeronGorefiend_BG25_HERO_103:\r\n\t\t\treturn CardIds.TeronGorefiend_RapidReanimation;\r\n\t}\r\n\treturn null;\r\n};\r\n"]}
@@ -0,0 +1,4 @@
1
+ import { BgsPlayerEntity } from '../../bgs-player-entity';
2
+ import { BoardEntity } from '../../board-entity';
3
+ import { FullGameState } from '../internal-game-state';
4
+ export declare const handleIllidanHeroPowers: (playerEntity: BgsPlayerEntity, playerBoard: BoardEntity[], opponentEntity: BgsPlayerEntity, opponentBoard: BoardEntity[], currentAttacker: number, gameState: FullGameState) => number;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleIllidanHeroPowers = void 0;
4
+ const attack_1 = require("../attack");
5
+ const stats_1 = require("../stats");
6
+ const summon_when_space_1 = require("../summon-when-space");
7
+ const soc_hero_power_1 = require("./soc-hero-power");
8
+ const handleIllidanHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, gameState) => {
9
+ if (Math.random() < 0.5) {
10
+ currentAttacker = handlePlayerIllidanHeroPowers(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
11
+ currentAttacker = handlePlayerIllidanHeroPowers(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
12
+ }
13
+ else {
14
+ currentAttacker = handlePlayerIllidanHeroPowers(opponentEntity, opponentBoard, playerEntity, playerBoard, currentAttacker, false, gameState);
15
+ currentAttacker = handlePlayerIllidanHeroPowers(playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, true, gameState);
16
+ }
17
+ (0, attack_1.processMinionDeath)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
18
+ (0, summon_when_space_1.handleSummonsWhenSpace)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
19
+ return currentAttacker;
20
+ };
21
+ exports.handleIllidanHeroPowers = handleIllidanHeroPowers;
22
+ const handlePlayerIllidanHeroPowers = (playerEntity, playerBoard, opponentEntity, opponentBoard, currentAttacker, friendly, gameState) => {
23
+ if (playerEntity.hpLeft <= 0) {
24
+ return currentAttacker;
25
+ }
26
+ const playerHeroPowerId = playerEntity.heroPowerId || (0, soc_hero_power_1.getHeroPowerForHero)(playerEntity.cardId);
27
+ if (playerHeroPowerId === "TB_BaconShop_HP_069" && playerBoard.length > 0) {
28
+ handleIllidanForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, currentAttacker);
29
+ currentAttacker = friendly ? 1 : 0;
30
+ }
31
+ return currentAttacker;
32
+ };
33
+ const handleIllidanForPlayer = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, currentAttacker) => {
34
+ if (playerEntity.startOfCombatDone) {
35
+ return;
36
+ }
37
+ const minionsAtStart = playerBoard.length;
38
+ const firstAttacker = playerBoard[0];
39
+ const secondAttacker = minionsAtStart > 1 ? playerBoard[playerBoard.length - 1] : null;
40
+ (0, stats_1.modifyStats)(firstAttacker, 2, 1, playerBoard, playerEntity, gameState);
41
+ gameState.spectator.registerPowerTarget(firstAttacker, firstAttacker, playerBoard, playerEntity, opponentEntity);
42
+ if (!!secondAttacker && !secondAttacker.definitelyDead && secondAttacker.health > 0) {
43
+ (0, stats_1.modifyStats)(secondAttacker, 2, 1, playerBoard, playerEntity, gameState);
44
+ gameState.spectator.registerPowerTarget(secondAttacker, secondAttacker, playerBoard, playerEntity, opponentEntity);
45
+ }
46
+ firstAttacker.attackImmediately = true;
47
+ (0, attack_1.simulateAttack)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
48
+ firstAttacker.hasAttacked = 0;
49
+ if (!!secondAttacker && !secondAttacker.definitelyDead && secondAttacker.health > 0) {
50
+ secondAttacker.attackImmediately = true;
51
+ (0, attack_1.simulateAttack)(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
52
+ secondAttacker.hasAttacked = 0;
53
+ }
54
+ };
55
+ //# sourceMappingURL=soc-illidan-hero-power.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soc-illidan-hero-power.js","sourceRoot":"","sources":["../../../src/simulation/start-of-combat/soc-illidan-hero-power.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { processMinionDeath, simulateAttack } from '../attack';\r\nimport { FullGameState } from '../internal-game-state';\r\nimport { modifyStats } from '../stats';\r\nimport { handleSummonsWhenSpace } from '../summon-when-space';\r\nimport { getHeroPowerForHero } from './soc-hero-power';\r\n\r\nexport const handleIllidanHeroPowers = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\tcurrentAttacker: number,\r\n\tgameState: FullGameState,\r\n): number => {\r\n\t// console.log('current attacker before', currentAttacker);\r\n\t// Apparently it's a toin coss about whether to handle Illidan first or Al'Akir first\r\n\t// Auras are only relevant for Illidan, and already applied there\r\n\tif (Math.random() < 0.5) {\r\n\t\tcurrentAttacker = handlePlayerIllidanHeroPowers(\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\ttrue,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tcurrentAttacker = handlePlayerIllidanHeroPowers(\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\tfalse,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t} else {\r\n\t\tcurrentAttacker = handlePlayerIllidanHeroPowers(\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\tfalse,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tcurrentAttacker = handlePlayerIllidanHeroPowers(\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerBoard,\r\n\t\t\topponentEntity,\r\n\t\t\topponentBoard,\r\n\t\t\tcurrentAttacker,\r\n\t\t\ttrue,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\tprocessMinionDeath(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\thandleSummonsWhenSpace(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\treturn currentAttacker;\r\n};\r\n\r\nconst handlePlayerIllidanHeroPowers = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\tcurrentAttacker: number,\r\n\tfriendly: boolean,\r\n\tgameState: FullGameState,\r\n): number => {\r\n\tif (playerEntity.hpLeft <= 0) {\r\n\t\treturn currentAttacker;\r\n\t}\r\n\tconst playerHeroPowerId = playerEntity.heroPowerId || getHeroPowerForHero(playerEntity.cardId);\r\n\tif (playerHeroPowerId === CardIds.Wingmen && playerBoard.length > 0) {\r\n\t\t// After Illidan triggers, it's always the other opponent's turn\r\n\t\t// https://x.com/LoewenMitchell/status/1752714583360639131?s=20\r\n\t\thandleIllidanForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, currentAttacker);\r\n\t\tcurrentAttacker = friendly ? 1 : 0;\r\n\t}\r\n\treturn currentAttacker;\r\n};\r\n\r\n// TODO: not exactly correct, because of \"attack immediately\", but it's close enough\r\nconst handleIllidanForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tcurrentAttacker: number,\r\n): void => {\r\n\tif (playerEntity.startOfCombatDone) {\r\n\t\treturn;\r\n\t}\r\n\t// Otherwise, if the first minion dies on the attack, and the board has only 2 minions, we\r\n\t// miss the second one\r\n\tconst minionsAtStart = playerBoard.length;\r\n\tconst firstAttacker = playerBoard[0];\r\n\tconst secondAttacker = minionsAtStart > 1 ? playerBoard[playerBoard.length - 1] : null;\r\n\r\n\t// Stats updates\r\n\tmodifyStats(firstAttacker, 2, 1, playerBoard, playerEntity, gameState);\r\n\tgameState.spectator.registerPowerTarget(firstAttacker, firstAttacker, playerBoard, playerEntity, opponentEntity);\r\n\tif (!!secondAttacker && !secondAttacker.definitelyDead && secondAttacker.health > 0) {\r\n\t\tmodifyStats(secondAttacker, 2, 1, playerBoard, playerEntity, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\tsecondAttacker,\r\n\t\t\tsecondAttacker,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentEntity,\r\n\t\t);\r\n\t}\r\n\r\n\t// Attacks\r\n\tfirstAttacker.attackImmediately = true;\r\n\tsimulateAttack(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t// See http://replays.firestoneapp.com/?reviewId=f16b7a49-c2a2-4ac5-a9eb-a75f83246f70&turn=6&action=8\r\n\tfirstAttacker.hasAttacked = 0;\r\n\tif (!!secondAttacker && !secondAttacker.definitelyDead && secondAttacker.health > 0) {\r\n\t\tsecondAttacker.attackImmediately = true;\r\n\t\tsimulateAttack(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t\tsecondAttacker.hasAttacked = 0;\r\n\t}\r\n\r\n\t// // See http://replays.firestoneapp.com/?reviewId=7e9ec42c-a8f6-43d2-9f39-cc486dfa2395&turn=6&action=5\r\n\t// if (firstAttacker.definitelyDead || firstAttacker.health <= 0) {\r\n\t// \tcurrentAttacker = (currentAttacker + 1) % 2;\r\n\t// }\r\n\t// return currentAttacker;\r\n};\r\n"]}
@@ -0,0 +1,6 @@
1
+ import { BgsPlayerEntity } from '../../bgs-player-entity';
2
+ import { BoardEntity } from '../../board-entity';
3
+ import { FullGameState } from '../internal-game-state';
4
+ import { SoCInput } from './start-of-combat-input';
5
+ export declare const handleStartOfCombatMinions: (playerEntity: BgsPlayerEntity, playerBoard: BoardEntity[], opponentEntity: BgsPlayerEntity, opponentBoard: BoardEntity[], currentAttacker: number, playerBoardBefore: BoardEntity[], opponentBoardBefore: BoardEntity[], gameState: FullGameState) => number;
6
+ export declare const performStartOfCombatMinionsForPlayer: (minion: BoardEntity, input: SoCInput) => boolean;