@firestone-hs/simulate-bgs-battle 1.1.732 → 1.1.734

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 (243) hide show
  1. package/dist/cards/card.interface.d.ts +4 -4
  2. package/dist/cards/card.interface.js.map +1 -1
  3. package/dist/cards/impl/_card-mappings.js +2 -0
  4. package/dist/cards/impl/_card-mappings.js.map +1 -1
  5. package/dist/cards/impl/bg-spell/sharing-is-caring.js.map +1 -1
  6. package/dist/cards/impl/bg-spell/toxic-tumbleweed.js.map +1 -1
  7. package/dist/cards/impl/enchantments/offensive-sacrifice.js +4 -2
  8. package/dist/cards/impl/enchantments/offensive-sacrifice.js.map +1 -1
  9. package/dist/cards/impl/enchantments/resistance.js +1 -1
  10. package/dist/cards/impl/enchantments/resistance.js.map +1 -1
  11. package/dist/cards/impl/enchantments/toreths-blessing.js +1 -0
  12. package/dist/cards/impl/enchantments/toreths-blessing.js.map +1 -1
  13. package/dist/cards/impl/hero-power/aim-high.js.map +1 -1
  14. package/dist/cards/impl/hero-power/aim-left.js.map +1 -1
  15. package/dist/cards/impl/hero-power/aim-low.js.map +1 -1
  16. package/dist/cards/impl/hero-power/aim-right.js.map +1 -1
  17. package/dist/cards/impl/hero-power/avatar-of-nzoth.js +2 -13
  18. package/dist/cards/impl/hero-power/avatar-of-nzoth.js.map +1 -1
  19. package/dist/cards/impl/hero-power/earth-invocation.js.map +1 -1
  20. package/dist/cards/impl/hero-power/embrace-your-rage.js.map +1 -1
  21. package/dist/cards/impl/hero-power/fire-invocation.js.map +1 -1
  22. package/dist/cards/impl/hero-power/reborn-rites.js.map +1 -1
  23. package/dist/cards/impl/hero-power/water-invocation.js.map +1 -1
  24. package/dist/cards/impl/minion/all-seeing-elder.js.map +1 -1
  25. package/dist/cards/impl/minion/alleycat.js.map +1 -1
  26. package/dist/cards/impl/minion/amber-guardian.js.map +1 -1
  27. package/dist/cards/impl/minion/amplifying-lightspawn.js.map +1 -1
  28. package/dist/cards/impl/minion/archimonde.js.map +1 -1
  29. package/dist/cards/impl/minion/arid-atrocity.js.map +1 -1
  30. package/dist/cards/impl/minion/ashen-corruptor.js.map +1 -1
  31. package/dist/cards/impl/minion/assistant-guard.js.map +1 -1
  32. package/dist/cards/impl/minion/audacious-anchor.js.map +1 -1
  33. package/dist/cards/impl/minion/auto-assembler.js.map +1 -1
  34. package/dist/cards/impl/minion/avalanche-caller.js.map +1 -1
  35. package/dist/cards/impl/minion/baneling.js.map +1 -1
  36. package/dist/cards/impl/minion/bigwig-bandit.js.map +1 -1
  37. package/dist/cards/impl/minion/bird-buddy.js.map +1 -1
  38. package/dist/cards/impl/minion/blazing-skyfin.js.map +1 -1
  39. package/dist/cards/impl/minion/blue-whelp.js.map +1 -1
  40. package/dist/cards/impl/minion/boar-gamer.js.map +1 -1
  41. package/dist/cards/impl/minion/briarback-bookie.js.map +1 -1
  42. package/dist/cards/impl/minion/bronze-steward.js.map +1 -1
  43. package/dist/cards/impl/minion/bubble-gunner.js.map +1 -1
  44. package/dist/cards/impl/minion/buzzing-vermin.js.map +1 -1
  45. package/dist/cards/impl/minion/cadaver-caretaker.js.map +1 -1
  46. package/dist/cards/impl/minion/captain-bonerender.js.map +1 -1
  47. package/dist/cards/impl/minion/carapace-raiser.js.map +1 -1
  48. package/dist/cards/impl/minion/carbonic-copy.js.map +1 -1
  49. package/dist/cards/impl/minion/coilskar-sapper.js.map +1 -1
  50. package/dist/cards/impl/minion/coldlight-diver.js.map +1 -1
  51. package/dist/cards/impl/minion/crystal-infuser-enchantment.js.map +1 -1
  52. package/dist/cards/impl/minion/cupcake-peddler.js.map +1 -1
  53. package/dist/cards/impl/minion/deadstomper.js.map +1 -1
  54. package/dist/cards/impl/minion/deathly-striker.js.map +1 -1
  55. package/dist/cards/impl/minion/deathstrider.d.ts +2 -2
  56. package/dist/cards/impl/minion/deathstrider.js +1 -1
  57. package/dist/cards/impl/minion/deathstrider.js.map +1 -1
  58. package/dist/cards/impl/minion/deflecto-bot.js.map +1 -1
  59. package/dist/cards/impl/minion/devout-hellcaller.js.map +1 -1
  60. package/dist/cards/impl/minion/drakkari-embalmer.js.map +1 -1
  61. package/dist/cards/impl/minion/electric-synthesizer.js.map +1 -1
  62. package/dist/cards/impl/minion/elite-navigator.js.map +1 -1
  63. package/dist/cards/impl/minion/fairy-gillmother.js.map +1 -1
  64. package/dist/cards/impl/minion/falling-sky-golem.d.ts +1 -1
  65. package/dist/cards/impl/minion/falling-sky-golem.js +11 -7
  66. package/dist/cards/impl/minion/falling-sky-golem.js.map +1 -1
  67. package/dist/cards/impl/minion/firescale-hoarder.js.map +1 -1
  68. package/dist/cards/impl/minion/fireworks-fanatic.js.map +1 -1
  69. package/dist/cards/impl/minion/flotsam-flinger.js.map +1 -1
  70. package/dist/cards/impl/minion/flourishing-frostling.d.ts +2 -0
  71. package/dist/cards/impl/minion/flourishing-frostling.js +45 -0
  72. package/dist/cards/impl/minion/flourishing-frostling.js.map +1 -0
  73. package/dist/cards/impl/minion/fountain-chiller.js.map +1 -1
  74. package/dist/cards/impl/minion/friendly-geist.js.map +1 -1
  75. package/dist/cards/impl/minion/gem-rat.js.map +1 -1
  76. package/dist/cards/impl/minion/general-drakkisath.js.map +1 -1
  77. package/dist/cards/impl/minion/gentle-djinni.js.map +1 -1
  78. package/dist/cards/impl/minion/gentle-stag.js.map +1 -1
  79. package/dist/cards/impl/minion/glowing-cinder.js +2 -1
  80. package/dist/cards/impl/minion/glowing-cinder.js.map +1 -1
  81. package/dist/cards/impl/minion/gormling-gourmet.js.map +1 -1
  82. package/dist/cards/impl/minion/greedy-snaketongue.js.map +1 -1
  83. package/dist/cards/impl/minion/grimscale-elegist.js.map +1 -1
  84. package/dist/cards/impl/minion/gritty-headhunter.js.map +1 -1
  85. package/dist/cards/impl/minion/hackerfin.js.map +1 -1
  86. package/dist/cards/impl/minion/handless-forsaken.js.map +1 -1
  87. package/dist/cards/impl/minion/harmless-bonehead.js.map +1 -1
  88. package/dist/cards/impl/minion/hawkstrider-herald.js.map +1 -1
  89. package/dist/cards/impl/minion/holo-rover.js.map +1 -1
  90. package/dist/cards/impl/minion/humongozz.js.map +1 -1
  91. package/dist/cards/impl/minion/hungry-snapjaw.js.map +1 -1
  92. package/dist/cards/impl/minion/hunter-of-gatherers.js.map +1 -1
  93. package/dist/cards/impl/minion/ignition-specialist.js.map +1 -1
  94. package/dist/cards/impl/minion/immortal.js.map +1 -1
  95. package/dist/cards/impl/minion/implant-subject.js.map +1 -1
  96. package/dist/cards/impl/minion/imposing-percussionist.js.map +1 -1
  97. package/dist/cards/impl/minion/inspiring-underdog.js.map +1 -1
  98. package/dist/cards/impl/minion/interrogator-whitemane.js.map +1 -1
  99. package/dist/cards/impl/minion/kangors-apprentice.js.map +1 -1
  100. package/dist/cards/impl/minion/leeroy-the-reckless.js.map +1 -1
  101. package/dist/cards/impl/minion/lightfang-enforcer.js.map +1 -1
  102. package/dist/cards/impl/minion/lightfeather-screecher.js.map +1 -1
  103. package/dist/cards/impl/minion/living-azerite.js.map +1 -1
  104. package/dist/cards/impl/minion/lokholar-frostforger.js.map +1 -1
  105. package/dist/cards/impl/minion/lovesick-balladist.js.map +1 -1
  106. package/dist/cards/impl/minion/low-flier.js.map +1 -1
  107. package/dist/cards/impl/minion/lurker.js.map +1 -1
  108. package/dist/cards/impl/minion/manasaber.js.map +1 -1
  109. package/dist/cards/impl/minion/mantid-queen.js.map +1 -1
  110. package/dist/cards/impl/minion/marquee-ticker.js.map +1 -1
  111. package/dist/cards/impl/minion/maw-caster.js.map +1 -1
  112. package/dist/cards/impl/minion/mecha-jaraxxus.js.map +1 -1
  113. package/dist/cards/impl/minion/mechanized-gift-horse.js.map +1 -1
  114. package/dist/cards/impl/minion/mechorse.js.map +1 -1
  115. package/dist/cards/impl/minion/menagerie-jug.js.map +1 -1
  116. package/dist/cards/impl/minion/metallic-hunter.js.map +1 -1
  117. package/dist/cards/impl/minion/misfit-dragonling.js.map +1 -1
  118. package/dist/cards/impl/minion/moat-custodian.js +2 -2
  119. package/dist/cards/impl/minion/moat-custodian.js.map +1 -1
  120. package/dist/cards/impl/minion/murkbrine-expeditioner.js.map +1 -1
  121. package/dist/cards/impl/minion/murky.js.map +1 -1
  122. package/dist/cards/impl/minion/mutated-lasher.js.map +1 -1
  123. package/dist/cards/impl/minion/mythrax.js.map +1 -1
  124. package/dist/cards/impl/minion/neon-agent.js.map +1 -1
  125. package/dist/cards/impl/minion/nest-swarmer.js.map +1 -1
  126. package/dist/cards/impl/minion/nether-drake.js.map +1 -1
  127. package/dist/cards/impl/minion/nightmare-par-tea-guest.js.map +1 -1
  128. package/dist/cards/impl/minion/nimble-hatchling.js.map +1 -1
  129. package/dist/cards/impl/minion/operatic-belcher.js.map +1 -1
  130. package/dist/cards/impl/minion/outback-smolderer.js.map +1 -1
  131. package/dist/cards/impl/minion/parched-wanderer.js.map +1 -1
  132. package/dist/cards/impl/minion/polarizing-beatboxer.js +2 -1
  133. package/dist/cards/impl/minion/polarizing-beatboxer.js.map +1 -1
  134. package/dist/cards/impl/minion/primalfin-lookout.js.map +1 -1
  135. package/dist/cards/impl/minion/rapscallion-recruiter.js.map +1 -1
  136. package/dist/cards/impl/minion/razorgore-the-untamed.js.map +1 -1
  137. package/dist/cards/impl/minion/roach.js.map +1 -1
  138. package/dist/cards/impl/minion/roadboar.js.map +1 -1
  139. package/dist/cards/impl/minion/rodeo-performer.js.map +1 -1
  140. package/dist/cards/impl/minion/ruins-renovator.js.map +1 -1
  141. package/dist/cards/impl/minion/rylak-metalhead.js.map +1 -1
  142. package/dist/cards/impl/minion/salty-hog.js.map +1 -1
  143. package/dist/cards/impl/minion/sand-swirler.js +2 -1
  144. package/dist/cards/impl/minion/sand-swirler.js.map +1 -1
  145. package/dist/cards/impl/minion/sandy.js.map +1 -1
  146. package/dist/cards/impl/minion/scourge-harvester.js.map +1 -1
  147. package/dist/cards/impl/minion/selfless-hero.js.map +1 -1
  148. package/dist/cards/impl/minion/shadowdancer.js.map +1 -1
  149. package/dist/cards/impl/minion/sharp-eyed-sabretooth.js.map +1 -1
  150. package/dist/cards/impl/minion/sharptooth-snapper.js.map +1 -1
  151. package/dist/cards/impl/minion/ship-master-eudora.js.map +1 -1
  152. package/dist/cards/impl/minion/shipwrecked-rascal.js.map +1 -1
  153. package/dist/cards/impl/minion/shore-marauder.js +3 -4
  154. package/dist/cards/impl/minion/shore-marauder.js.map +1 -1
  155. package/dist/cards/impl/minion/silver-handed-recruit.js.map +1 -1
  156. package/dist/cards/impl/minion/slumber-sorcerer.js.map +1 -1
  157. package/dist/cards/impl/minion/smolderwing.js.map +1 -1
  158. package/dist/cards/impl/minion/soul-rewinder.js.map +1 -1
  159. package/dist/cards/impl/minion/spacefarer.js.map +1 -1
  160. package/dist/cards/impl/minion/spirited-whimsydrake.js.map +1 -1
  161. package/dist/cards/impl/minion/springy-spriggan.js.map +1 -1
  162. package/dist/cards/impl/minion/stitched-salvager.js.map +1 -1
  163. package/dist/cards/impl/minion/stray-satyr.js.map +1 -1
  164. package/dist/cards/impl/minion/sun-screener.js.map +1 -1
  165. package/dist/cards/impl/minion/surfing-slyvar.js.map +1 -1
  166. package/dist/cards/impl/minion/thorncaller.js.map +1 -1
  167. package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -1
  168. package/dist/cards/impl/minion/thundering-abomination.js.map +1 -1
  169. package/dist/cards/impl/minion/timewarped-swirler.js +3 -4
  170. package/dist/cards/impl/minion/timewarped-swirler.js.map +1 -1
  171. package/dist/cards/impl/minion/timewarped-warghoul.js.map +1 -1
  172. package/dist/cards/impl/minion/tunnel-blaster.js.map +1 -1
  173. package/dist/cards/impl/minion/twilight-primordium.js.map +1 -1
  174. package/dist/cards/impl/minion/ultralisk.js.map +1 -1
  175. package/dist/cards/impl/minion/valiant-tiger.js.map +1 -1
  176. package/dist/cards/impl/minion/void-earl.js.map +1 -1
  177. package/dist/cards/impl/minion/vorkai-guardian.js.map +1 -1
  178. package/dist/cards/impl/minion/wandering-wight.js.map +1 -1
  179. package/dist/cards/impl/minion/whelp-smuggler.js.map +1 -1
  180. package/dist/cards/impl/minion/whirring-protector-enchantment.js.map +1 -1
  181. package/dist/cards/impl/minion/wildfire-elemental.js.map +1 -1
  182. package/dist/cards/impl/minion/wisp-in-the-shell.js.map +1 -1
  183. package/dist/cards/impl/minion/yorik-smite.js.map +1 -1
  184. package/dist/cards/impl/minion/yrel.js.map +1 -1
  185. package/dist/cards/impl/minion/yulon-fortune-granter.js.map +1 -1
  186. package/dist/cards/impl/quest-reward/righteous-charge.js.map +1 -1
  187. package/dist/cards/impl/trinket/all-purpose-kibble.js.map +1 -1
  188. package/dist/cards/impl/trinket/arm-of-the-empire.js.map +1 -1
  189. package/dist/cards/impl/trinket/bassgill-portrait.js.map +1 -1
  190. package/dist/cards/impl/trinket/battle-horn.js.map +1 -1
  191. package/dist/cards/impl/trinket/bird-feeder.js.map +1 -1
  192. package/dist/cards/impl/trinket/crocheted-sungill.js.map +1 -1
  193. package/dist/cards/impl/trinket/deathtouch-apple.d.ts +2 -2
  194. package/dist/cards/impl/trinket/deathtouch-apple.js +0 -1
  195. package/dist/cards/impl/trinket/deathtouch-apple.js.map +1 -1
  196. package/dist/cards/impl/trinket/eclectic-shrine.js.map +1 -1
  197. package/dist/cards/impl/trinket/faerie-dragon-scale.js.map +1 -1
  198. package/dist/cards/impl/trinket/fishy-sticker.js.map +1 -1
  199. package/dist/cards/impl/trinket/herald-sticker.js.map +1 -1
  200. package/dist/cards/impl/trinket/karazhan-chess-set.js.map +1 -1
  201. package/dist/cards/impl/trinket/rivendare-portrait.js.map +1 -1
  202. package/dist/cards/impl/trinket/sthara-sticker.js.map +1 -1
  203. package/dist/cards/impl/trinket/valorous-medaillion.js.map +1 -1
  204. package/dist/cards/impl/trinket/vashjir-anemone.js.map +1 -1
  205. package/dist/cards/impl/trinket/yulon-sticker.js.map +1 -1
  206. package/dist/debug-state.js.map +1 -1
  207. package/dist/keywords/venomous.js.map +1 -1
  208. package/dist/mechanics/player-global-effects.d.ts +6 -4
  209. package/dist/mechanics/player-global-effects.js +7 -3
  210. package/dist/mechanics/player-global-effects.js.map +1 -1
  211. package/dist/services/utils.d.ts +1 -1
  212. package/dist/services/utils.js +2 -2
  213. package/dist/services/utils.js.map +1 -1
  214. package/dist/simulation/add-minion-to-board.js +0 -19
  215. package/dist/simulation/add-minion-to-board.js.map +1 -1
  216. package/dist/simulation/after-attack.d.ts +1 -1
  217. package/dist/simulation/after-attack.js +21 -3
  218. package/dist/simulation/after-attack.js.map +1 -1
  219. package/dist/simulation/attack.d.ts +1 -1
  220. package/dist/simulation/attack.js +5 -4
  221. package/dist/simulation/attack.js.map +1 -1
  222. package/dist/simulation/auras.js +9 -6
  223. package/dist/simulation/auras.js.map +1 -1
  224. package/dist/simulation/deathrattle-on-trigger.js.map +1 -1
  225. package/dist/simulation/discover.js.map +1 -1
  226. package/dist/simulation/frenzy.js.map +1 -1
  227. package/dist/simulation/global-info-helpers.d.ts +1 -0
  228. package/dist/simulation/global-info-helpers.js +39 -1
  229. package/dist/simulation/global-info-helpers.js.map +1 -1
  230. package/dist/simulation/magnetize.d.ts +2 -3
  231. package/dist/simulation/magnetize.js +15 -16
  232. package/dist/simulation/magnetize.js.map +1 -1
  233. package/dist/simulation/on-attack.js +1 -5
  234. package/dist/simulation/on-attack.js.map +1 -1
  235. package/dist/simulation/quest.js.map +1 -1
  236. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  237. package/dist/simulation/spectator/spectator.d.ts +2 -2
  238. package/dist/simulation/spectator/spectator.js +2 -1
  239. package/dist/simulation/spectator/spectator.js.map +1 -1
  240. package/dist/simulation/stats.d.ts +2 -2
  241. package/dist/simulation/stats.js +4 -5
  242. package/dist/simulation/stats.js.map +1 -1
  243. package/package.json +1 -1
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.increaseWhelpBuff = exports.increaseGoldrinnBuff = exports.increaseMechAttackBonus = exports.increasePirateAttackBonus = exports.increaseUndeadHealthBonus = exports.increaseUndeadAttackBonus = void 0;
3
+ exports.updateElementalStatsBuff = exports.increaseWhelpBuff = exports.increaseGoldrinnBuff = exports.increaseMechAttackBonus = exports.increasePirateAttackBonus = exports.increaseUndeadHealthBonus = exports.increaseUndeadAttackBonus = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const card_interface_1 = require("../cards/card.interface");
5
6
  const cards_data_1 = require("../cards/cards-data");
7
+ const _card_mappings_1 = require("../cards/impl/_card-mappings");
6
8
  const utils_1 = require("../utils");
7
9
  const stats_1 = require("./stats");
8
10
  const increaseUndeadAttackBonus = (source, board, hero, amount, gameState, countsAsStatsGain = true) => {
@@ -46,4 +48,40 @@ const increaseWhelpBuff = (source, board, hero, attack, health, gameState) => {
46
48
  });
47
49
  };
48
50
  exports.increaseWhelpBuff = increaseWhelpBuff;
51
+ const updateElementalStatsBuff = (source, board, hero, attack, health, gameState) => {
52
+ var _a, _b;
53
+ const previousAttackValue = (_a = hero.globalInfo.ElementalAttackBuff) !== null && _a !== void 0 ? _a : 0;
54
+ const previousHealthValue = (_b = hero.globalInfo.ElementalHealthBuff) !== null && _b !== void 0 ? _b : 0;
55
+ const newAttackValue = previousAttackValue + attack;
56
+ const newHealthValue = previousHealthValue + health;
57
+ hero.globalInfo.ElementalAttackBuff = newAttackValue;
58
+ hero.globalInfo.ElementalHealthBuff = newHealthValue;
59
+ for (const entity of board) {
60
+ const cardImpl = _card_mappings_1.cardMappings[entity.cardId];
61
+ if ((0, card_interface_1.hasOnGlobalInfoUpdated)(cardImpl)) {
62
+ const values = [];
63
+ if (attack !== 0) {
64
+ values.push({
65
+ type: 'ElementalAttackBuff',
66
+ oldValue: previousAttackValue,
67
+ newValue: newAttackValue,
68
+ });
69
+ }
70
+ if (health !== 0) {
71
+ values.push({
72
+ type: 'ElementalHealthBuff',
73
+ oldValue: previousHealthValue,
74
+ newValue: newHealthValue,
75
+ });
76
+ }
77
+ cardImpl.onGlobalInfoUpdated(entity, {
78
+ values: values,
79
+ hero: hero,
80
+ board: board,
81
+ gameState: gameState,
82
+ });
83
+ }
84
+ }
85
+ };
86
+ exports.updateElementalStatsBuff = updateElementalStatsBuff;
49
87
  //# sourceMappingURL=global-info-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-info-helpers.js","sourceRoot":"","sources":["../../src/simulation/global-info-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { isWhelp } from '../cards/cards-data';\r\nimport { addStatsToBoard } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const increaseUndeadAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n\t// 2026-04-25 Amalgam getting buffed also boosts Mishmash\r\n\t// https://replays.firestoneapp.com/?reviewId=845efb54-f37d-4cb7-9947-cc72fc12d800&turn=19&action=3\r\n\tcountsAsStatsGain = true,\r\n): void => {\r\n\thero.globalInfo.UndeadAttackBonus = (hero.globalInfo.UndeadAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.UNDEAD], countsAsStatsGain);\r\n};\r\n\r\nexport const increaseUndeadHealthBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.UndeadHealthBonus = (hero.globalInfo.UndeadHealthBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, 0, amount, gameState, Race[Race.UNDEAD], false);\r\n};\r\n\r\nexport const increasePirateAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.PirateAttackBonus = (hero.globalInfo.PirateAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.PIRATE], false);\r\n};\r\n\r\nexport const increaseMechAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.MechAttackBonus = (hero.globalInfo.MechAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.MECH], false);\r\n};\r\n\r\nexport const increaseGoldrinnBuff = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.GoldrinnBuffAtk = (hero.globalInfo.GoldrinnBuffAtk ?? 0) + attack;\r\n\thero.globalInfo.GoldrinnBuffHealth = (hero.globalInfo.GoldrinnBuffHealth ?? 0) + health;\r\n\taddStatsToBoard(source, board, hero, attack, health, gameState, Race[Race.BEAST]);\r\n};\r\n\r\nexport const increaseWhelpBuff = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.WhelpAttackBuff = (hero.globalInfo.WhelpAttackBuff ?? 0) + attack;\r\n\thero.globalInfo.WhelpHealthBuff = (hero.globalInfo.WhelpHealthBuff ?? 0) + health;\r\n\tconst targets = board.filter((entity) => isWhelp(entity.cardId, gameState.allCards));\r\n\ttargets.forEach((target) => {\r\n\t\tmodifyStats(target, target, attack, health, board, hero, gameState, false);\r\n\t});\r\n};\r\n"]}
1
+ {"version":3,"file":"global-info-helpers.js","sourceRoot":"","sources":["../../src/simulation/global-info-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { hasOnGlobalInfoUpdated } from '../cards/card.interface';\r\nimport { isWhelp } from '../cards/cards-data';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { addStatsToBoard } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const increaseUndeadAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n\t// 2026-04-25 Amalgam getting buffed also boosts Mishmash\r\n\t// https://replays.firestoneapp.com/?reviewId=845efb54-f37d-4cb7-9947-cc72fc12d800&turn=19&action=3\r\n\tcountsAsStatsGain = true,\r\n): void => {\r\n\thero.globalInfo.UndeadAttackBonus = (hero.globalInfo.UndeadAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.UNDEAD], countsAsStatsGain);\r\n};\r\n\r\nexport const increaseUndeadHealthBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.UndeadHealthBonus = (hero.globalInfo.UndeadHealthBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, 0, amount, gameState, Race[Race.UNDEAD], false);\r\n};\r\n\r\nexport const increasePirateAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.PirateAttackBonus = (hero.globalInfo.PirateAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.PIRATE], false);\r\n};\r\n\r\nexport const increaseMechAttackBonus = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tamount: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.MechAttackBonus = (hero.globalInfo.MechAttackBonus ?? 0) + amount;\r\n\taddStatsToBoard(source, board, hero, amount, 0, gameState, Race[Race.MECH], false);\r\n};\r\n\r\nexport const increaseGoldrinnBuff = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.GoldrinnBuffAtk = (hero.globalInfo.GoldrinnBuffAtk ?? 0) + attack;\r\n\thero.globalInfo.GoldrinnBuffHealth = (hero.globalInfo.GoldrinnBuffHealth ?? 0) + health;\r\n\taddStatsToBoard(source, board, hero, attack, health, gameState, Race[Race.BEAST]);\r\n};\r\n\r\nexport const increaseWhelpBuff = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thero.globalInfo.WhelpAttackBuff = (hero.globalInfo.WhelpAttackBuff ?? 0) + attack;\r\n\thero.globalInfo.WhelpHealthBuff = (hero.globalInfo.WhelpHealthBuff ?? 0) + health;\r\n\tconst targets = board.filter((entity) => isWhelp(entity.cardId, gameState.allCards));\r\n\ttargets.forEach((target) => {\r\n\t\tmodifyStats(target, target, attack, health, board, hero, gameState, false);\r\n\t});\r\n};\r\n\r\nexport const updateElementalStatsBuff = (\r\n\tsource: BoardEntity | BgsPlayerEntity | BoardSecret,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst previousAttackValue = hero.globalInfo.ElementalAttackBuff ?? 0;\r\n\tconst previousHealthValue = hero.globalInfo.ElementalHealthBuff ?? 0;\r\n\tconst newAttackValue = previousAttackValue + attack;\r\n\tconst newHealthValue = previousHealthValue + health;\r\n\thero.globalInfo.ElementalAttackBuff = newAttackValue;\r\n\thero.globalInfo.ElementalHealthBuff = newHealthValue;\r\n\tfor (const entity of board) {\r\n\t\tconst cardImpl = cardMappings[entity.cardId];\r\n\t\tif (hasOnGlobalInfoUpdated(cardImpl)) {\r\n\t\t\tconst values = [];\r\n\t\t\tif (attack !== 0) {\r\n\t\t\t\tvalues.push({\r\n\t\t\t\t\ttype: 'ElementalAttackBuff',\r\n\t\t\t\t\toldValue: previousAttackValue,\r\n\t\t\t\t\tnewValue: newAttackValue,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (health !== 0) {\r\n\t\t\t\tvalues.push({\r\n\t\t\t\t\ttype: 'ElementalHealthBuff',\r\n\t\t\t\t\toldValue: previousHealthValue,\r\n\t\t\t\t\tnewValue: newHealthValue,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tcardImpl.onGlobalInfoUpdated(entity, {\r\n\t\t\t\tvalues: values,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tboard: board,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n"]}
@@ -1,14 +1,13 @@
1
1
  import { ReferenceCard } from '@firestone-hs/reference-data';
2
2
  import { BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';
3
3
  import { BoardEntity } from '../board-entity';
4
- import { Mutable } from '../services/utils';
5
4
  import { FullGameState } from './internal-game-state';
6
5
  export declare const magnetizeToTarget: (inputTargets: BoardEntity[] | (() => BoardEntity[]), source: BoardEntity | BoardTrinket, cardsToMagnetize: string[] | ReferenceCard[], board: BoardEntity[], hero: BgsPlayerEntity, otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState, isFirstTimeMagnetize?: boolean) => void;
7
6
  export declare const getMagnetizations: (entity: BoardEntity, gameState: FullGameState) => number;
8
7
  export interface OnBeforeMagnetizeInput {
9
8
  board: BoardEntity[];
10
9
  hero: BgsPlayerEntity;
11
- magnetizedCard: Mutable<ReferenceCard>;
10
+ magnetizedCard: BoardEntity;
12
11
  magnetizeTarget: BoardEntity;
13
12
  gameState: FullGameState;
14
13
  }
@@ -31,7 +30,7 @@ export interface OnAfterMagnetizeInput {
31
30
  hero: BgsPlayerEntity;
32
31
  otherHero: BgsPlayerEntity;
33
32
  otherBoard: BoardEntity[];
34
- magnetizedCard: ReferenceCard;
33
+ magnetizedCard: BoardEntity;
35
34
  magnetizeTarget: BoardEntity;
36
35
  gameState: FullGameState;
37
36
  }
@@ -7,7 +7,7 @@ const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
7
  const utils_1 = require("../utils");
8
8
  const stats_1 = require("./stats");
9
9
  const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero, otherBoard, otherHero, gameState, isFirstTimeMagnetize = true) => {
10
- var _a, _b, _c, _d, _e, _f, _g, _h;
10
+ var _a;
11
11
  const electromagneticDevices = hero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_709").length;
12
12
  const greaterElecromagneticDevices = hero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_709t").length;
13
13
  const magnetMult = board.some((e) => e.cardId === "BG34_177_G")
@@ -41,7 +41,7 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
41
41
  onBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {
42
42
  board: board,
43
43
  hero: hero,
44
- magnetizedCard: modularCard,
44
+ magnetizedCard: modularBoardEntity,
45
45
  magnetizeTarget: target,
46
46
  gameState: gameState,
47
47
  });
@@ -53,21 +53,20 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
53
53
  onBeforeMagnetizeImpl.onBeforeMagnetize(trinket, {
54
54
  board: board,
55
55
  hero: hero,
56
- magnetizedCard: modularCard,
56
+ magnetizedCard: modularBoardEntity,
57
57
  magnetizeTarget: target,
58
58
  gameState: gameState,
59
59
  });
60
60
  }
61
61
  }
62
62
  (0, stats_1.modifyStats)(target, source, modularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, modularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, board, hero, gameState);
63
- target.taunt = target.taunt || ((_a = modularCard.mechanics) === null || _a === void 0 ? void 0 : _a.includes(reference_data_1.GameTag[reference_data_1.GameTag.TAUNT]));
64
- target.divineShield =
65
- target.divineShield || ((_b = modularCard.mechanics) === null || _b === void 0 ? void 0 : _b.includes(reference_data_1.GameTag[reference_data_1.GameTag.DIVINE_SHIELD]));
66
- target.poisonous = target.poisonous || ((_c = modularCard.mechanics) === null || _c === void 0 ? void 0 : _c.includes(reference_data_1.GameTag[reference_data_1.GameTag.POISONOUS]));
67
- target.venomous = target.venomous || ((_d = modularCard.mechanics) === null || _d === void 0 ? void 0 : _d.includes(reference_data_1.GameTag[reference_data_1.GameTag.VENOMOUS]));
68
- target.windfury = target.windfury || ((_e = modularCard.mechanics) === null || _e === void 0 ? void 0 : _e.includes(reference_data_1.GameTag[reference_data_1.GameTag.WINDFURY]));
69
- target.reborn = target.reborn || ((_f = modularCard.mechanics) === null || _f === void 0 ? void 0 : _f.includes(reference_data_1.GameTag[reference_data_1.GameTag.REBORN]));
70
- target.stealth = target.stealth || ((_g = modularCard.mechanics) === null || _g === void 0 ? void 0 : _g.includes(reference_data_1.GameTag[reference_data_1.GameTag.STEALTH]));
63
+ target.taunt = target.taunt || modularBoardEntity.taunt;
64
+ target.divineShield = target.divineShield || modularBoardEntity.divineShield;
65
+ target.poisonous = target.poisonous || modularBoardEntity.poisonous;
66
+ target.venomous = target.venomous || modularBoardEntity.venomous;
67
+ target.windfury = target.windfury || modularBoardEntity.windfury;
68
+ target.reborn = target.reborn || modularBoardEntity.reborn;
69
+ target.stealth = target.stealth || modularBoardEntity.stealth;
71
70
  const magneticEnchantment = modularCard.enchantmentDbfId;
72
71
  if (magneticEnchantment) {
73
72
  const enchantment = gameState.allCards.getCard(magneticEnchantment).id;
@@ -100,7 +99,7 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
100
99
  gameState: gameState,
101
100
  });
102
101
  }
103
- const onAfterMagnetizeImpl = _card_mappings_1.cardMappings[modularCard.id];
102
+ const onAfterMagnetizeImpl = _card_mappings_1.cardMappings[modularBoardEntity.cardId];
104
103
  if ((0, card_interface_1.hasOnAfterMagnetizeSelf)(onAfterMagnetizeImpl)) {
105
104
  onAfterMagnetizeImpl.onAfterMagnetizeSelf(target, {
106
105
  board: board,
@@ -108,7 +107,7 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
108
107
  source: source,
109
108
  otherHero: otherHero,
110
109
  otherBoard: otherBoard,
111
- magnetizedCard: modularCard,
110
+ magnetizedCard: modularBoardEntity,
112
111
  magnetizeTarget: target,
113
112
  gameState: gameState,
114
113
  });
@@ -122,13 +121,13 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
122
121
  source: source,
123
122
  otherHero: otherHero,
124
123
  otherBoard: otherBoard,
125
- magnetizedCard: modularCard,
124
+ magnetizedCard: modularBoardEntity,
126
125
  magnetizeTarget: target,
127
126
  gameState: gameState,
128
127
  });
129
128
  }
130
129
  }
131
- for (const trinket of (_h = hero.trinkets) !== null && _h !== void 0 ? _h : []) {
130
+ for (const trinket of (_a = hero.trinkets) !== null && _a !== void 0 ? _a : []) {
132
131
  const onAfterMagnetizeImpl = _card_mappings_1.cardMappings[trinket.cardId];
133
132
  if ((0, card_interface_1.hasOnAfterMagnetize)(onAfterMagnetizeImpl)) {
134
133
  onAfterMagnetizeImpl.onAfterMagnetize(trinket, {
@@ -137,7 +136,7 @@ const magnetizeToTarget = (inputTargets, source, cardsToMagnetize, board, hero,
137
136
  source: source,
138
137
  otherHero: otherHero,
139
138
  otherBoard: otherBoard,
140
- magnetizedCard: modularCard,
139
+ magnetizedCard: modularBoardEntity,
141
140
  magnetizeTarget: target,
142
141
  gameState: gameState,
143
142
  });
@@ -1 +1 @@
1
- {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../src/simulation/magnetize.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport {\r\n\thasOnAfterMagnetize,\r\n\thasOnAfterMagnetizeSelf,\r\n\thasOnAfterMagnetizeToSelf,\r\n\thasOnBeforeMagnetize,\r\n\thasOnBeforeMagnetizeSelf,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { Mutable } from '../services/utils';\r\nimport { buildSingleBoardEntity } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\tinputTargets: BoardEntity[] | (() => BoardEntity[]),\r\n\tsource: BoardEntity | BoardTrinket,\r\n\tcardsToMagnetize: string[] | ReferenceCard[],\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tisFirstTimeMagnetize = true,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst magnetMult = board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177_G)\r\n\t\t? 3\r\n\t\t: board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177)\r\n\t\t? 2\r\n\t\t: 1;\r\n\tfor (let i = 0; i < magnetMult; i++) {\r\n\t\tconst actualTargets = typeof inputTargets === 'function' ? inputTargets() : inputTargets;\r\n\t\tfor (const target of actualTargets) {\r\n\t\t\tfor (const cardToMagnetize of cardsToMagnetize) {\r\n\t\t\t\tconst modularCard =\r\n\t\t\t\t\ttypeof cardToMagnetize === 'string'\r\n\t\t\t\t\t\t? { ...gameState.allCards.getCard(cardToMagnetize) }\r\n\t\t\t\t\t\t: cardToMagnetize;\r\n\t\t\t\tconst modularBoardEntity = buildSingleBoardEntity(\r\n\t\t\t\t\tmodularCard.id,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\thero.friendly,\r\n\t\t\t\t\tgameState.sharedState.currentEntityId++,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treferenceCardToUse: modularCard,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tconst onBeforeMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnBeforeMagnetizeSelf(onBeforeMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonBeforeMagnetizeSelfImpl.onBeforeMagnetizeSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\tisFirstTimeMagnetize: isFirstTimeMagnetize,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (const trinket of hero.trinkets) {\r\n\t\t\t\t\tconst onBeforeMagnetizeImpl = cardMappings[trinket.cardId];\r\n\t\t\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(trinket, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tsource,\r\n\t\t\t\t\tmodularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tmodularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\ttarget.taunt = target.taunt || modularCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\t\t\t\ttarget.divineShield =\r\n\t\t\t\t\ttarget.divineShield || modularCard.mechanics?.includes(GameTag[GameTag.DIVINE_SHIELD]);\r\n\t\t\t\ttarget.poisonous = target.poisonous || modularCard.mechanics?.includes(GameTag[GameTag.POISONOUS]);\r\n\t\t\t\ttarget.venomous = target.venomous || modularCard.mechanics?.includes(GameTag[GameTag.VENOMOUS]);\r\n\t\t\t\ttarget.windfury = target.windfury || modularCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\t\t\t\ttarget.reborn = target.reborn || modularCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\t\t\t\ttarget.stealth = target.stealth || modularCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\r\n\t\t\t\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\t\t\t\tif (magneticEnchantment) {\r\n\t\t\t\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\t\t\t\ttarget.enchantments.push({\r\n\t\t\t\t\t\tcardId: enchantment,\r\n\t\t\t\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (\r\n\t\t\t\t\t[CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(\r\n\t\t\t\t\t\tcardToMagnetize as CardIds,\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst mult = cardToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\t\t\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Dr Boom's Monster?\r\n\t\t\t\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\t\t\t\tfor (const entity of board) {\r\n\t\t\t\t\tconst drBoomBases =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tconst drBoomGoldens =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnAfterMagnetizeToSelf(onAfterMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeSelfImpl.onAfterMagnetizeToSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[modularCard.id];\r\n\t\t\t\tif (hasOnAfterMagnetizeSelf(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetizeSelf(target, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (const trinket of hero.trinkets ?? []) {\r\n\t\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[trinket.cardId];\r\n\t\t\t\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(trinket, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const getMagnetizations = (entity: BoardEntity, gameState: FullGameState) => {\r\n\treturn entity.enchantments.filter((e) =>\r\n\t\tgameState.allCards.getCard(e.cardId).mechanics?.includes(GameTag[GameTag.MODULAR]),\r\n\t).length;\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: Mutable<ReferenceCard>;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnBeforeMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n\tisFirstTimeMagnetize: boolean;\r\n}\r\n\r\nexport interface OnAfterMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnAfterMagnetizeInput {\r\n\tsource: BoardEntity | BoardTrinket;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tmagnetizedCard: ReferenceCard;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../src/simulation/magnetize.ts"],"names":[],"mappings":";;;AAAA,iEAAsE;AAGtE,4DAMiC;AACjC,iEAA4D;AAE5D,oCAAkD;AAElD,mCAAsC;AAE/B,MAAM,iBAAiB,GAAG,CAChC,YAAmD,EACnD,MAAkC,EAClC,gBAA4C,EAC5C,KAAoB,EACpB,IAAqB,EACrB,UAAyB,EACzB,SAA0B,EAC1B,SAAwB,EACxB,oBAAoB,GAAG,IAAI,EAC1B,EAAE;;IACH,MAAM,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAqD,CACpE,CAAC,MAAM,CAAC;IACT,MAAM,4BAA4B,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACxD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,0BAAiF,CAChG,CAAC,MAAM,CAAC;IAET,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAwC,CAAC;QACrF,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAsC,CAAC;YACnE,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,CAAC;IACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,aAAa,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QACzF,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;YACnC,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;gBAC/C,MAAM,WAAW,GAChB,OAAO,eAAe,KAAK,QAAQ;oBAClC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;oBACpD,CAAC,CAAC,eAAe,CAAC;gBACpB,MAAM,kBAAkB,GAAG,IAAA,8BAAsB,EAChD,WAAW,CAAC,EAAE,EACd,IAAI,EACJ,KAAK,EACL,SAAS,CAAC,QAAQ,EAClB,IAAI,CAAC,QAAQ,EACb,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,EACvC,KAAK,EACL,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,WAAW,EACrB,IAAI,EACJ,IAAI,EACJ;oBACC,kBAAkB,EAAE,WAAW;iBAC/B,CACD,CAAC;gBACF,MAAM,yBAAyB,GAAG,6BAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAC1E,IAAI,IAAA,yCAAwB,EAAC,yBAAyB,CAAC,EAAE;oBACxD,yBAAyB,CAAC,qBAAqB,CAAC,kBAAkB,EAAE;wBACnE,KAAK,EAAE,KAAK;wBACZ,IAAI,EAAE,IAAI;wBACV,eAAe,EAAE,MAAM;wBACvB,SAAS,EAAE,SAAS;wBACpB,oBAAoB,EAAE,oBAAoB;qBAC1C,CAAC,CAAC;iBACH;gBAED,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE;oBAChC,MAAM,qBAAqB,GAAG,6BAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAC/D,IAAI,IAAA,qCAAoB,EAAC,qBAAqB,CAAC,EAAE;wBAChD,qBAAqB,CAAC,iBAAiB,CAAC,WAAW,EAAE;4BACpD,KAAK,EAAE,KAAK;4BACZ,IAAI,EAAE,IAAI;4BACV,cAAc,EAAE,kBAAkB;4BAClC,eAAe,EAAE,MAAM;4BACvB,SAAS,EAAE,SAAS;yBACpB,CAAC,CAAC;qBACH;iBACD;gBACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACpC,MAAM,qBAAqB,GAAG,6BAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,IAAA,qCAAoB,EAAC,qBAAqB,CAAC,EAAE;wBAChD,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,EAAE;4BAChD,KAAK,EAAE,KAAK;4BACZ,IAAI,EAAE,IAAI;4BACV,cAAc,EAAE,kBAAkB;4BAClC,eAAe,EAAE,MAAM;4BACvB,SAAS,EAAE,SAAS;yBACpB,CAAC,CAAC;qBACH;iBACD;gBAED,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,sBAAsB,GAAG,CAAC,GAAG,4BAA4B,EACzF,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,sBAAsB,GAAG,CAAC,GAAG,4BAA4B,EACzF,KAAK,EACL,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC;gBACxD,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,kBAAkB,CAAC,YAAY,CAAC;gBAC7E,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC,SAAS,CAAC;gBACpE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC;gBACjE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC;gBACjE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC;gBAC3D,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC;gBAE9D,MAAM,mBAAmB,GAAG,WAAW,CAAC,gBAAgB,CAAC;gBACzD,IAAI,mBAAmB,EAAE;oBACxB,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;oBACvE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;wBACxB,MAAM,EAAE,WAAW;wBACnB,cAAc,EAAE,WAAW,CAAC,KAAK;wBACjC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;qBAC/C,CAAC,CAAC;iBACH;gBACD,IACC,0BAAoE,CAAC,QAAQ,CAC5E,eAA0B,CAC1B,EACA;oBACD,MAAM,IAAI,GAAG,eAAe,eAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAC/D,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC;iBAC/D;gBAGD,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,GAAG,CAAC,CAAC;gBAC5E,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;oBAC3B,MAAM,WAAW,GAChB,CAAC,MAAM,CAAC,MAAM,eAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC3D,MAAM,CAAC,YAAY,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,gBAA+D,CAC9E,CAAC,MAAM,CAAC;oBACV,MAAM,aAAa,GAClB,CAAC,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7D,MAAM,CAAC,YAAY,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,kBAAiE,CAChF,CAAC,MAAM,CAAC;oBACV,MAAM,CAAC,MAAM,IAAI,WAAW,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;oBACrD,MAAM,CAAC,MAAM,IAAI,WAAW,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;iBACrD;gBAED,MAAM,wBAAwB,GAAG,6BAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACzE,IAAI,IAAA,0CAAyB,EAAC,wBAAwB,CAAC,EAAE;oBACxD,wBAAwB,CAAC,sBAAsB,CAAC,kBAAkB,EAAE;wBACnE,KAAK,EAAE,KAAK;wBACZ,IAAI,EAAE,IAAI;wBACV,eAAe,EAAE,MAAM;wBACvB,SAAS,EAAE,SAAS;qBACpB,CAAC,CAAC;iBACH;gBAED,MAAM,oBAAoB,GAAG,6BAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACrE,IAAI,IAAA,wCAAuB,EAAC,oBAAoB,CAAC,EAAE;oBAClD,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE;wBACjD,KAAK,EAAE,KAAK;wBACZ,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,UAAU;wBACtB,cAAc,EAAE,kBAAkB;wBAClC,eAAe,EAAE,MAAM;wBACvB,SAAS,EAAE,SAAS;qBACpB,CAAC,CAAC;iBACH;gBAED,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE;oBAChC,MAAM,oBAAoB,GAAG,6BAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAC9D,IAAI,IAAA,oCAAmB,EAAC,oBAAoB,CAAC,EAAE;wBAC9C,oBAAoB,CAAC,gBAAgB,CAAC,WAAW,EAAE;4BAClD,KAAK,EAAE,KAAK;4BACZ,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,MAAM;4BACd,SAAS,EAAE,SAAS;4BACpB,UAAU,EAAE,UAAU;4BACtB,cAAc,EAAE,kBAAkB;4BAClC,eAAe,EAAE,MAAM;4BACvB,SAAS,EAAE,SAAS;yBACpB,CAAC,CAAC;qBACH;iBACD;gBACD,KAAK,MAAM,OAAO,IAAI,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,EAAE;oBAC1C,MAAM,oBAAoB,GAAG,6BAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC1D,IAAI,IAAA,oCAAmB,EAAC,oBAAoB,CAAC,EAAE;wBAC9C,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,EAAE;4BAC9C,KAAK,EAAE,KAAK;4BACZ,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,MAAM;4BACd,SAAS,EAAE,SAAS;4BACpB,UAAU,EAAE,UAAU;4BACtB,cAAc,EAAE,kBAAkB;4BAClC,eAAe,EAAE,MAAM;4BACvB,SAAS,EAAE,SAAS;yBACpB,CAAC,CAAC;qBACH;iBACD;aACD;SACD;KACD;AACF,CAAC,CAAC;AAjMW,QAAA,iBAAiB,qBAiM5B;AAEK,MAAM,iBAAiB,GAAG,CAAC,MAAmB,EAAE,SAAwB,EAAE,EAAE;IAClF,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WACvC,OAAA,MAAA,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,0CAAE,QAAQ,CAAC,wBAAO,CAAC,wBAAO,CAAC,OAAO,CAAC,CAAC,CAAA,EAAA,CAClF,CAAC,MAAM,CAAC;AACV,CAAC,CAAC;AAJW,QAAA,iBAAiB,qBAI5B","sourcesContent":["import { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport {\r\n\thasOnAfterMagnetize,\r\n\thasOnAfterMagnetizeSelf,\r\n\thasOnAfterMagnetizeToSelf,\r\n\thasOnBeforeMagnetize,\r\n\thasOnBeforeMagnetizeSelf,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { buildSingleBoardEntity } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\tinputTargets: BoardEntity[] | (() => BoardEntity[]),\r\n\tsource: BoardEntity | BoardTrinket,\r\n\tcardsToMagnetize: string[] | ReferenceCard[],\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tisFirstTimeMagnetize = true,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst magnetMult = board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177_G)\r\n\t\t? 3\r\n\t\t: board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177)\r\n\t\t? 2\r\n\t\t: 1;\r\n\tfor (let i = 0; i < magnetMult; i++) {\r\n\t\tconst actualTargets = typeof inputTargets === 'function' ? inputTargets() : inputTargets;\r\n\t\tfor (const target of actualTargets) {\r\n\t\t\tfor (const cardToMagnetize of cardsToMagnetize) {\r\n\t\t\t\tconst modularCard =\r\n\t\t\t\t\ttypeof cardToMagnetize === 'string'\r\n\t\t\t\t\t\t? { ...gameState.allCards.getCard(cardToMagnetize) }\r\n\t\t\t\t\t\t: cardToMagnetize;\r\n\t\t\t\tconst modularBoardEntity = buildSingleBoardEntity(\r\n\t\t\t\t\tmodularCard.id,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\thero.friendly,\r\n\t\t\t\t\tgameState.sharedState.currentEntityId++,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treferenceCardToUse: modularCard,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tconst onBeforeMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnBeforeMagnetizeSelf(onBeforeMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonBeforeMagnetizeSelfImpl.onBeforeMagnetizeSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\tisFirstTimeMagnetize: isFirstTimeMagnetize,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularBoardEntity,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (const trinket of hero.trinkets) {\r\n\t\t\t\t\tconst onBeforeMagnetizeImpl = cardMappings[trinket.cardId];\r\n\t\t\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(trinket, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularBoardEntity,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tsource,\r\n\t\t\t\t\tmodularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tmodularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\ttarget.taunt = target.taunt || modularBoardEntity.taunt;\r\n\t\t\t\ttarget.divineShield = target.divineShield || modularBoardEntity.divineShield;\r\n\t\t\t\ttarget.poisonous = target.poisonous || modularBoardEntity.poisonous;\r\n\t\t\t\ttarget.venomous = target.venomous || modularBoardEntity.venomous;\r\n\t\t\t\ttarget.windfury = target.windfury || modularBoardEntity.windfury;\r\n\t\t\t\ttarget.reborn = target.reborn || modularBoardEntity.reborn;\r\n\t\t\t\ttarget.stealth = target.stealth || modularBoardEntity.stealth;\r\n\r\n\t\t\t\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\t\t\t\tif (magneticEnchantment) {\r\n\t\t\t\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\t\t\t\ttarget.enchantments.push({\r\n\t\t\t\t\t\tcardId: enchantment,\r\n\t\t\t\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (\r\n\t\t\t\t\t[CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(\r\n\t\t\t\t\t\tcardToMagnetize as CardIds,\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst mult = cardToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\t\t\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Dr Boom's Monster?\r\n\t\t\t\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\t\t\t\tfor (const entity of board) {\r\n\t\t\t\t\tconst drBoomBases =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tconst drBoomGoldens =\r\n\t\t\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge,\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnAfterMagnetizeToSelf(onAfterMagnetizeSelfImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeSelfImpl.onAfterMagnetizeToSelf(modularBoardEntity, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\t\t\tif (hasOnAfterMagnetizeSelf(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetizeSelf(target, {\r\n\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\tmagnetizedCard: modularBoardEntity,\r\n\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (const boardEntity of board) {\r\n\t\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\t\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(boardEntity, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularBoardEntity,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (const trinket of hero.trinkets ?? []) {\r\n\t\t\t\t\tconst onAfterMagnetizeImpl = cardMappings[trinket.cardId];\r\n\t\t\t\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\t\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(trinket, {\r\n\t\t\t\t\t\t\tboard: board,\r\n\t\t\t\t\t\t\thero: hero,\r\n\t\t\t\t\t\t\tsource: source,\r\n\t\t\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\t\t\tmagnetizedCard: modularBoardEntity,\r\n\t\t\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const getMagnetizations = (entity: BoardEntity, gameState: FullGameState) => {\r\n\treturn entity.enchantments.filter((e) =>\r\n\t\tgameState.allCards.getCard(e.cardId).mechanics?.includes(GameTag[GameTag.MODULAR]),\r\n\t).length;\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: BoardEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnBeforeMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n\tisFirstTimeMagnetize: boolean;\r\n}\r\n\r\nexport interface OnAfterMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnAfterMagnetizeInput {\r\n\tsource: BoardEntity | BoardTrinket;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tmagnetizedCard: BoardEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -70,11 +70,7 @@ const applyOnAttackEffects = (attacker, attackingBoard, attackingBoardHero, defe
70
70
  const { dmgDoneByAttacker: dmgDoneByRally, dmgDoneByDefender: dmgDoneByRallyDefender } = (0, rally_1.triggerRally)(attackingBoard, attackingBoardHero, attacker, defendingBoard, defendingBoardHero, defendingEntity, gameState);
71
71
  damageDoneByAttacker += dmgDoneByRally;
72
72
  damageDoneByDefender += dmgDoneByRallyDefender;
73
- if (attacker.cardId === "BG29_888" || attacker.cardId === "BG29_888_G") {
74
- const multiplier = attacker.cardId === "BG29_888_G" ? 2 : 1;
75
- (0, stats_1.modifyStats)(attacker, attacker, 2 * multiplier, 0, attackingBoard, attackingBoardHero, gameState);
76
- }
77
- else if (attacker.cardId === "BG24_708" ||
73
+ if (attacker.cardId === "BG24_708" ||
78
74
  attacker.cardId === "BG24_708_G") {
79
75
  attackingBoard
80
76
  .filter((e) => (0, utils_1.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.PIRATE, gameState.anomalies, gameState.allCards))
@@ -1 +1 @@
1
- {"version":3,"file":"on-attack.js","sourceRoot":"","sources":["../../src/simulation/on-attack.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,4DAA4E;AAC5E,iEAA4D;AAC5D,+CAAkD;AAClD,8CAAkD;AAElD,oCAA2C;AAE3C,mCAAsC;AAG/B,MAAM,oBAAoB,GAAG,CACnC,QAAqB,EACrB,cAA6B,EAC7B,kBAAmC,EACnC,eAA4B,EAC5B,cAA6B,EAC7B,kBAAmC,EACnC,SAAwB,EACyC,EAAE;;IACnE,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAE7B,KAAK,MAAM,OAAO,IAAI,MAAA,kBAAkB,CAAC,QAAQ,mCAAI,EAAE,EAAE;QACxD,MAAM,YAAY,GAAG,6BAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,IAAA,kDAAiC,EAAC,YAAY,CAAC,EAAE;YACpD,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAC,8BAA8B,CAAC,OAAO,EAAE;gBACrG,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,kBAAkB;gBACjC,cAAc,EAAE,cAAc;gBAC9B,eAAe,EAAE,eAAe;gBAChC,aAAa,EAAE,kBAAkB;gBACjC,cAAc,EAAE,cAAc;gBAC9B,SAAS;gBACT,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ;aAC7C,CAAC,CAAC;YACH,oBAAoB,IAAI,iBAAiB,CAAC;YAC1C,oBAAoB,IAAI,iBAAiB,CAAC;SAC1C;KACD;IAKD,KAAK,MAAM,WAAW,IAAI,cAAc,CAAC,KAAK,EAAE,EAAE;QACjD,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC7B,SAAS;SACT;QACD,MAAM,YAAY,GAAG,6BAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,IAAA,kDAAiC,EAAC,YAAY,CAAC,EAAE;YACpD,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAC,8BAA8B,CAAC,WAAW,EAAE;gBACzG,QAAQ,EAAE,QAAQ;gBAClB,aAAa,EAAE,kBAAkB;gBACjC,cAAc,EAAE,cAAc;gBAC9B,eAAe,EAAE,eAAe;gBAChC,aAAa,EAAE,kBAAkB;gBACjC,cAAc,EAAE,cAAc;gBAC9B,SAAS;gBACT,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ;aAC7C,CAAC,CAAC;YACH,oBAAoB,IAAI,iBAAiB,CAAC;YAC1C,oBAAoB,IAAI,iBAAiB,CAAC;SAC1C;QACD,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;QAC9C,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;YACvC,MAAM,YAAY,GAAG,6BAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,IAAA,kDAAiC,EAAC,YAAY,CAAC,EAAE;gBACpD,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAC,8BAA8B,CAC3F,WAAW,EACX;oBACC,QAAQ,EAAE,QAAQ;oBAClB,aAAa,EAAE,kBAAkB;oBACjC,cAAc,EAAE,cAAc;oBAC9B,eAAe,EAAE,eAAe;oBAChC,aAAa,EAAE,kBAAkB;oBACjC,cAAc,EAAE,cAAc;oBAC9B,SAAS;oBACT,gBAAgB,EAAE,kBAAkB,CAAC,QAAQ;iBAC7C,CACD,CAAC;gBACF,oBAAoB,IAAI,iBAAiB,CAAC;gBAC1C,oBAAoB,IAAI,iBAAiB,CAAC;aAC1C;SACD;KACD;IAID,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,IAAA,oBAAY,EACpG,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,SAAS,CACT,CAAC;IACF,oBAAoB,IAAI,cAAc,CAAC;IACvC,oBAAoB,IAAI,sBAAsB,CAAC;IAwB/C,IAAI,QAAQ,CAAC,MAAM,eAAkC,IAAI,QAAQ,CAAC,MAAM,iBAAoC,EAAE;QAC7G,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAA,mBAAW,EAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;KAClG;SAAM,IACN,QAAQ,CAAC,MAAM,eAAqC;QACpD,QAAQ,CAAC,MAAM,iBAAuC,EACrD;QACD,cAAc;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,kBAAkB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;aAC3G,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,IAAA,mBAAW,EACV,CAAC,EACD,QAAQ,EACR,QAAQ,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC9D,QAAQ,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC9D,cAAc,EACd,kBAAkB,EAClB,SAAS,CACT,CAAC;QACH,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,QAAQ,CAAC,MAAM,eAAgC,IAAI,QAAQ,CAAC,MAAM,iBAAkC,EAAE;QAChH,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,iBAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,MAAM,EAAE;gBACb,IAAA,qBAAY,EAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;gBAC9F,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,QAAQ,EACR,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,kBAAkB,CAClB,CAAC;aACF;SACD;KACD;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,CAAC,MAAM,iCAAyD;QACjE,CAAC,CAAC,MAAM,mCAA2D,CAAC;QACrE,CAAC,CAAC,iBAAiB,GAAG,CAAC,CACxB,CAAC;IAEF,IAAI,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,uBAAuB,IAAI,IAAI,EAAE;QAC5D,QAAQ,CAAC,uBAAuB,GAAG,CAAC,CAAC;QAErC,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE;YAC/B,IACC,CAAC,CAAC,MAAM,iCAAyD;gBACjE,CAAC,CAAC,MAAM,mCAA2D,EAClE;gBACD,CAAC,CAAC,iBAAiB,EAAE,CAAC;aACtB;SACD;KACD;IAED,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,QAAQ,EAAE;QAClD,QAAQ,OAAO,CAAC,MAAM,EAAE;YACvB;gBACC,IAAA,mBAAW,EAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;gBACpF,MAAM;SACP;KACD;IAED,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;AACvD,CAAC,CAAC;AAlLW,QAAA,oBAAoB,wBAkL/B","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnWheneverAnotherMinionAttacks } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { triggerRally } from '../mechanics/rally';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\n// Whenever it attacks\r\nexport const applyOnAttackEffects = (\r\n\tattacker: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): { damageDoneByAttacker: number; damageDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets ?? []) {\r\n\t\tconst onAttackImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(trinket, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\t// \"Whenever friendly minion attacks\" triggers before the rally itself?\r\n\t// https://replays.firestoneapp.com/?reviewId=04e6a624-ccd5-4068-9420-884843f3685f&turn=25&action=1\r\n\t// (slice() gives us a snapshot in case a handler mutates the board mid-iteration)\r\n\tfor (const boardEntity of attackingBoard.slice()) {\r\n\t\tif (boardEntity === attacker) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tconst onAttackImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(boardEntity, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = boardEntity.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// This assumes that only \"Rally\" effects trigger on attack\r\n\t// 2025-08-20: this is false. \"Whenever a friendly minion attacks\" is not a rally effect\r\n\tconst { dmgDoneByAttacker: dmgDoneByRally, dmgDoneByDefender: dmgDoneByRallyDefender } = triggerRally(\r\n\t\tattackingBoard,\r\n\t\tattackingBoardHero,\r\n\t\tattacker,\r\n\t\tdefendingBoard,\r\n\t\tdefendingBoardHero,\r\n\t\tdefendingEntity,\r\n\t\tgameState,\r\n\t);\r\n\tdamageDoneByAttacker += dmgDoneByRally;\r\n\tdamageDoneByDefender += dmgDoneByRallyDefender;\r\n\r\n\t// if (attacker.cardId === CardIds.GlyphGuardian_BGS_045) {\r\n\t// \t// For now the utility method only works additively, so we hack around it\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t2 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else if (attacker.cardId === CardIds.GlyphGuardian_TB_BaconUps_115) {\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t3 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else\r\n\tif (attacker.cardId === CardIds.GlimGuardian_BG29_888 || attacker.cardId === CardIds.GlimGuardian_BG29_888_G) {\r\n\t\tconst multiplier = attacker.cardId === CardIds.GlimGuardian_BG29_888_G ? 2 : 1;\r\n\t\tmodifyStats(attacker, attacker, 2 * multiplier, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t} else if (\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708 ||\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G\r\n\t) {\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, attackingBoardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t} else if (attacker.cardId === CardIds.HatefulHag_BG29_120 || attacker.cardId === CardIds.HatefulHag_BG29_120_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.HatefulHag_BG29_120_G ? 2 : 1;\r\n\t\tconst attackerIndex = attackingBoard.indexOf(attacker);\r\n\t\tfor (let i = 1; i <= loops; i++) {\r\n\t\t\tconst target = attackingBoard[attackerIndex + i];\r\n\t\t\tif (!!target) {\r\n\t\t\t\tupdateReborn(target, true, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tdefendingBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst eclipsion = attackingBoard.find(\r\n\t\t(e) =>\r\n\t\t\t(e.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G) &&\r\n\t\t\te.abiityChargesLeft > 0,\r\n\t);\r\n\t// Only once per minion\r\n\tif (!!eclipsion && attacker.immuneWhenAttackCharges == null) {\r\n\t\tattacker.immuneWhenAttackCharges = 1;\r\n\t\t// If we have 2 eclipsions, the first minion that attacks eats both charges\r\n\t\tfor (const e of attackingBoard) {\r\n\t\t\tif (\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G\r\n\t\t\t) {\r\n\t\t\t\te.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.CeremonialSword_BG30_MagicItem_925:\r\n\t\t\t\tmodifyStats(attacker, trinket, 4, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { damageDoneByAttacker, damageDoneByDefender };\r\n};\r\n\r\nexport interface OnAttackInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n\tplayerIsFriendly: boolean;\r\n}\r\n"]}
1
+ {"version":3,"file":"on-attack.js","sourceRoot":"","sources":["../../src/simulation/on-attack.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnWheneverAnotherMinionAttacks } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { triggerRally } from '../mechanics/rally';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\n// Whenever it attacks\r\nexport const applyOnAttackEffects = (\r\n\tattacker: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): { damageDoneByAttacker: number; damageDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets ?? []) {\r\n\t\tconst onAttackImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(trinket, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\t// \"Whenever friendly minion attacks\" triggers before the rally itself?\r\n\t// https://replays.firestoneapp.com/?reviewId=04e6a624-ccd5-4068-9420-884843f3685f&turn=25&action=1\r\n\t// (slice() gives us a snapshot in case a handler mutates the board mid-iteration)\r\n\tfor (const boardEntity of attackingBoard.slice()) {\r\n\t\tif (boardEntity === attacker) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tconst onAttackImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(boardEntity, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = boardEntity.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// This assumes that only \"Rally\" effects trigger on attack\r\n\t// 2025-08-20: this is false. \"Whenever a friendly minion attacks\" is not a rally effect\r\n\tconst { dmgDoneByAttacker: dmgDoneByRally, dmgDoneByDefender: dmgDoneByRallyDefender } = triggerRally(\r\n\t\tattackingBoard,\r\n\t\tattackingBoardHero,\r\n\t\tattacker,\r\n\t\tdefendingBoard,\r\n\t\tdefendingBoardHero,\r\n\t\tdefendingEntity,\r\n\t\tgameState,\r\n\t);\r\n\tdamageDoneByAttacker += dmgDoneByRally;\r\n\tdamageDoneByDefender += dmgDoneByRallyDefender;\r\n\r\n\t// if (attacker.cardId === CardIds.GlyphGuardian_BGS_045) {\r\n\t// \t// For now the utility method only works additively, so we hack around it\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t2 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else if (attacker.cardId === CardIds.GlyphGuardian_TB_BaconUps_115) {\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t3 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else\r\n\tif (\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708 ||\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G\r\n\t) {\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, attackingBoardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t} else if (attacker.cardId === CardIds.HatefulHag_BG29_120 || attacker.cardId === CardIds.HatefulHag_BG29_120_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.HatefulHag_BG29_120_G ? 2 : 1;\r\n\t\tconst attackerIndex = attackingBoard.indexOf(attacker);\r\n\t\tfor (let i = 1; i <= loops; i++) {\r\n\t\t\tconst target = attackingBoard[attackerIndex + i];\r\n\t\t\tif (!!target) {\r\n\t\t\t\tupdateReborn(target, true, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tdefendingBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst eclipsion = attackingBoard.find(\r\n\t\t(e) =>\r\n\t\t\t(e.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G) &&\r\n\t\t\te.abiityChargesLeft > 0,\r\n\t);\r\n\t// Only once per minion\r\n\tif (!!eclipsion && attacker.immuneWhenAttackCharges == null) {\r\n\t\tattacker.immuneWhenAttackCharges = 1;\r\n\t\t// If we have 2 eclipsions, the first minion that attacks eats both charges\r\n\t\tfor (const e of attackingBoard) {\r\n\t\t\tif (\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G\r\n\t\t\t) {\r\n\t\t\t\te.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.CeremonialSword_BG30_MagicItem_925:\r\n\t\t\t\tmodifyStats(attacker, trinket, 4, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { damageDoneByAttacker, damageDoneByDefender };\r\n};\r\n\r\nexport interface OnAttackInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n\tplayerIsFriendly: boolean;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"quest.js","sourceRoot":"","sources":["../../src/simulation/quest.ts"],"names":[],"mappings":";;;AAKO,MAAM,sBAAsB,GAAG,CACrC,YAA6B,EAC7B,KAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;IACH,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;QAChD,OAAO;KACP;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACtE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QACjD,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC;KACtE,CAAC,CAAC;IAGH,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjG,4BAA4B,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC;AAEF,MAAM,4BAA4B,GAAG,CACpC,YAAoB,EACpB,KAAoB,EACpB,YAA6B,EAC7B,SAAwB,EACvB,EAAE;IACH,QAAQ,YAAY,EAAE;QACrB;YACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM;QACP;YACC,MAAM;KACP;AACF,CAAC,CAAC","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { BgsPlayerEntity, BgsQuestEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const onQuestProgressUpdated = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tquest: BgsQuestEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tquest.ProgressCurrent++;\r\n\tif (quest.ProgressCurrent < quest.ProgressTotal) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst rewardCardId = gameState.allCards.getCard(quest.RewardDbfId).id;\r\n\tplayerEntity.questRewards.push(rewardCardId);\r\n\tplayerEntity.questRewardEntities.push({\r\n\t\tcardId: rewardCardId,\r\n\t\tentityId: gameState.sharedState.currentEntityId++,\r\n\t\tavengeDefault: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tavengeCurrent: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tscriptDataNum1: gameState.cardsData.defaultScriptDataNum(rewardCardId),\r\n\t});\r\n\r\n\t// Remove the quest from the list of quests\r\n\tplayerEntity.questEntities = playerEntity.questEntities.filter((q) => q.CardId !== quest.CardId);\r\n\r\n\tupdateStateAfterQuestCreated(rewardCardId, board, playerEntity, gameState);\r\n};\r\n\r\nconst updateStateAfterQuestCreated = (\r\n\trewardCardId: string,\r\n\tboard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tswitch (rewardCardId) {\r\n\t\tcase CardIds.TheSmokingGun:\r\n\t\t\tboard.forEach((e) => {\r\n\t\t\t\te.attack += 4;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"quest.js","sourceRoot":"","sources":["../../src/simulation/quest.ts"],"names":[],"mappings":";;;AAKO,MAAM,sBAAsB,GAAG,CACrC,YAA6B,EAC7B,KAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;IACH,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;QAChD,OAAO;KACP;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACtE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QACjD,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC;KACtE,CAAC,CAAC;IAGH,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjG,4BAA4B,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC;AAEF,MAAM,4BAA4B,GAAG,CACpC,YAAoB,EACpB,KAAoB,EACpB,YAA6B,EAC7B,SAAwB,EACvB,EAAE;IACH,QAAQ,YAAY,EAAE;QACrB;YACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM;QACP;YACC,MAAM;KACP;AACF,CAAC,CAAC","sourcesContent":["import { CardIds } from '../services/card-ids';\r\nimport { BgsPlayerEntity, BgsQuestEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const onQuestProgressUpdated = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tquest: BgsQuestEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tquest.ProgressCurrent++;\r\n\tif (quest.ProgressCurrent < quest.ProgressTotal) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst rewardCardId = gameState.allCards.getCard(quest.RewardDbfId).id;\r\n\tplayerEntity.questRewards.push(rewardCardId);\r\n\tplayerEntity.questRewardEntities.push({\r\n\t\tcardId: rewardCardId,\r\n\t\tentityId: gameState.sharedState.currentEntityId++,\r\n\t\tavengeDefault: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tavengeCurrent: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tscriptDataNum1: gameState.cardsData.defaultScriptDataNum(rewardCardId),\r\n\t});\r\n\r\n\t// Remove the quest from the list of quests\r\n\tplayerEntity.questEntities = playerEntity.questEntities.filter((q) => q.CardId !== quest.CardId);\r\n\r\n\tupdateStateAfterQuestCreated(rewardCardId, board, playerEntity, gameState);\r\n};\r\n\r\nconst updateStateAfterQuestCreated = (\r\n\trewardCardId: string,\r\n\tboard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tswitch (rewardCardId) {\r\n\t\tcase CardIds.TheSmokingGun:\r\n\t\t\tboard.forEach((e) => {\r\n\t\t\t\te.attack += 4;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-minion-from-board.js","sourceRoot":"","sources":["../../src/simulation/remove-minion-from-board.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnDespawned } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const removeMinionFromBoard = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tindex: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst removedEntity = board.splice(index, 1)[0];\r\n\thandleMinionRemovedAuraEffect(board, removedEntity, boardHero, gameState);\r\n};\r\n\r\nexport const handleMinionRemovedAuraEffect = (\r\n\tboard: BoardEntity[],\r\n\tremoved: BoardEntity,\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tapplyAttackAuras = true,\r\n\tapplyHealthAuras = true,\r\n): void => {\r\n\tconst onDespawnedImpl = cardMappings[removed.cardId];\r\n\tif (hasOnDespawned(onDespawnedImpl)) {\r\n\t\tonDespawnedImpl.onDespawned(removed, {\r\n\t\t\thero: boardHero,\r\n\t\t\tboard: board,\r\n\t\t\tgameState,\r\n\t\t\tapplyAttackAuras,\r\n\t\t\tapplyHealthAuras,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (removed.cardId) {\r\n\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\r\n\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\r\n\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\r\n\t\t\t// console.debug('removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t\te.health = Math.max(1, e.health - diff);\r\n\t\t\t\t});\r\n\t\t\t// console.debug('after removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tbreak;\r\n\t\t// case CardIds.Kathranatir_BG21_039:\r\n\t\t// case CardIds.Kathranatir_BG21_039_G:\r\n\t\t// \tboard\r\n\t\t// \t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards))\r\n\t\t// \t\t.forEach((e) => {\r\n\t\t// \t\t\tconst diff = removed.cardId === CardIds.Kathranatir_BG21_039_G ? 4 : 2;\r\n\t\t// \t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t// \t\t});\r\n\t\t// \tbreak;\r\n\t\tcase CardIds.CyborgDrake_BG25_043:\r\n\t\tcase CardIds.CyborgDrake_BG25_043_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => e.divineShield)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SoreLoser_BG27_030:\r\n\t\tcase CardIds.SoreLoser_BG27_030_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = (removed.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"remove-minion-from-board.js","sourceRoot":"","sources":["../../src/simulation/remove-minion-from-board.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnDespawned } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const removeMinionFromBoard = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tindex: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst removedEntity = board.splice(index, 1)[0];\r\n\t// Don't remove the auras, so that the dead minion keeps them, which can be useful when we want to compute\r\n\t// deathrattle triggers that are based on the minion's stats\r\n\thandleMinionRemovedAuraEffect(board, removedEntity, boardHero, gameState);\r\n};\r\n\r\nexport const handleMinionRemovedAuraEffect = (\r\n\tboard: BoardEntity[],\r\n\tremoved: BoardEntity,\r\n\tboardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tapplyAttackAuras = true,\r\n\tapplyHealthAuras = true,\r\n): void => {\r\n\tconst onDespawnedImpl = cardMappings[removed.cardId];\r\n\tif (hasOnDespawned(onDespawnedImpl)) {\r\n\t\tonDespawnedImpl.onDespawned(removed, {\r\n\t\t\thero: boardHero,\r\n\t\t\tboard: board,\r\n\t\t\tgameState,\r\n\t\t\tapplyAttackAuras,\r\n\t\t\tapplyHealthAuras,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (removed.cardId) {\r\n\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\r\n\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\r\n\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\r\n\t\t\t// console.debug('removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t\te.health = Math.max(1, e.health - diff);\r\n\t\t\t\t});\r\n\t\t\t// console.debug('after removing southsea captain', stringifySimpleCard(removed, allCards), stringifySimple(board, allCards));\r\n\t\t\tbreak;\r\n\t\t// case CardIds.Kathranatir_BG21_039:\r\n\t\t// case CardIds.Kathranatir_BG21_039_G:\r\n\t\t// \tboard\r\n\t\t// \t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards))\r\n\t\t// \t\t.forEach((e) => {\r\n\t\t// \t\t\tconst diff = removed.cardId === CardIds.Kathranatir_BG21_039_G ? 4 : 2;\r\n\t\t// \t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t// \t\t});\r\n\t\t// \tbreak;\r\n\t\tcase CardIds.CyborgDrake_BG25_043:\r\n\t\tcase CardIds.CyborgDrake_BG25_043_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => e.divineShield)\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = removed.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SoreLoser_BG27_030:\r\n\t\tcase CardIds.SoreLoser_BG27_030_G:\r\n\t\t\tboard\r\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards))\r\n\t\t\t\t.forEach((e) => {\r\n\t\t\t\t\tconst diff = (removed.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\r\n\t\t\t\t\te.attack = Math.max(0, e.attack - diff);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { BgsGameState } from '../../bgs-battle-info';
2
2
  import { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';
3
- import { BoardEntity } from '../../board-entity';
3
+ import { BoardEnchantment, BoardEntity } from '../../board-entity';
4
4
  import { BoardSecret } from '../../board-secret';
5
5
  import { GameSample } from './game-sample';
6
6
  export declare class Spectator {
@@ -27,7 +27,7 @@ export declare class Spectator {
27
27
  registerPlayerAttack(friendlyBoard: readonly BoardEntity[], opponentBoard: readonly BoardEntity[], damage: number): void;
28
28
  registerOpponentAttack(friendlyBoard: readonly BoardEntity[], opponentBoard: readonly BoardEntity[], damage: number): void;
29
29
  registerDamageDealt(damagingEntity: BoardEntity, damagedEntity: BoardEntity, damageTaken: number, damagedEntityBoard: BoardEntity[]): void;
30
- registerPowerTarget(sourceEntity: BoardEntity | BgsPlayerEntity | BoardSecret | BoardTrinket, targetEntity: BoardEntity | BgsPlayerEntity, targetBoard: BoardEntity[], hero1: BgsPlayerEntity, hero2: BgsPlayerEntity): void;
30
+ registerPowerTarget(sourceEntity: BoardEntity | BgsPlayerEntity | BoardSecret | BoardTrinket | BoardEnchantment, targetEntity: BoardEntity | BgsPlayerEntity, targetBoard: BoardEntity[], hero1: BgsPlayerEntity, hero2: BgsPlayerEntity): void;
31
31
  registerPowerTargets(sourceEntity: BoardEntity | BgsPlayerEntity | BoardSecret | BoardTrinket, targetEntities: (BoardEntity | BgsPlayerEntity)[], targetBoard: BoardEntity[], hero1: BgsPlayerEntity, hero2: BgsPlayerEntity): void;
32
32
  registerMinionsSpawn(sourceEntity: BoardEntity | BgsPlayerEntity | BoardTrinket, boardOnWhichToSpawn: BoardEntity[], spawnedEntities: readonly BoardEntity[]): void;
33
33
  registerDeadEntities(deadMinionIndexes1: number[], deadEntities1: BoardEntity[], board1: BoardEntity[], deadMinionIndexes2: number[], deadEntities2: BoardEntity[], board2: BoardEntity[]): void;
@@ -183,6 +183,7 @@ class Spectator {
183
183
  this.addAction(action);
184
184
  }
185
185
  registerPowerTarget(sourceEntity, targetEntity, targetBoard, hero1, hero2) {
186
+ var _a;
186
187
  if (!this.recording) {
187
188
  return;
188
189
  }
@@ -195,7 +196,7 @@ class Spectator {
195
196
  const opponentHero = (hero1 === null || hero1 === void 0 ? void 0 : hero1.friendly) ? hero2 : (hero2 === null || hero2 === void 0 ? void 0 : hero2.friendly) ? hero1 : null;
196
197
  const action = (0, game_action_1.buildGameAction)(friendlyHero, opponentHero, {
197
198
  type: 'power-target',
198
- sourceEntityId: sourceEntity.entityId,
199
+ sourceEntityId: (_a = sourceEntity === null || sourceEntity === void 0 ? void 0 : sourceEntity.originEntityId) !== null && _a !== void 0 ? _a : sourceEntity.entityId,
199
200
  targetEntityId: targetEntity.entityId,
200
201
  playerBoard: this.sanitize(friendlyBoard),
201
202
  opponentBoard: this.sanitize(opponentBoard),