@firestone-hs/simulate-bgs-battle 1.1.551 → 1.1.553

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 (125) hide show
  1. package/dist/cards/impl/hero-power/rapid-reanimation.js +2 -0
  2. package/dist/cards/impl/hero-power/rapid-reanimation.js.map +1 -1
  3. package/dist/cards/impl/hero-power/wax-warband.js +3 -3
  4. package/dist/cards/impl/hero-power/wax-warband.js.map +1 -1
  5. package/dist/cards/impl/minion/admiral-eliza-goreblade.js +1 -1
  6. package/dist/cards/impl/minion/admiral-eliza-goreblade.js.map +1 -1
  7. package/dist/cards/impl/minion/amber-guardian.js +1 -1
  8. package/dist/cards/impl/minion/amber-guardian.js.map +1 -1
  9. package/dist/cards/impl/minion/battlecruiser.js +22 -24
  10. package/dist/cards/impl/minion/battlecruiser.js.map +1 -1
  11. package/dist/cards/impl/minion/bellowing-tyrant.js +1 -1
  12. package/dist/cards/impl/minion/bellowing-tyrant.js.map +1 -1
  13. package/dist/cards/impl/minion/captain-bonerender.js +21 -5
  14. package/dist/cards/impl/minion/captain-bonerender.js.map +1 -1
  15. package/dist/cards/impl/minion/clunker-junker.js +1 -1
  16. package/dist/cards/impl/minion/clunker-junker.js.map +1 -1
  17. package/dist/cards/impl/minion/deflecto-bot.js +1 -1
  18. package/dist/cards/impl/minion/deflecto-bot.js.map +1 -1
  19. package/dist/cards/impl/minion/electric-synthesizer.js +2 -2
  20. package/dist/cards/impl/minion/electric-synthesizer.js.map +1 -1
  21. package/dist/cards/impl/minion/fountain-chiller.js +1 -1
  22. package/dist/cards/impl/minion/fountain-chiller.js.map +1 -1
  23. package/dist/cards/impl/minion/hungry-snapjaw.js +1 -1
  24. package/dist/cards/impl/minion/hungry-snapjaw.js.map +1 -1
  25. package/dist/cards/impl/minion/kangors-apprentice.js +1 -1
  26. package/dist/cards/impl/minion/kangors-apprentice.js.map +1 -1
  27. package/dist/cards/impl/minion/king-bagurgle.js +1 -1
  28. package/dist/cards/impl/minion/king-bagurgle.js.map +1 -1
  29. package/dist/cards/impl/minion/lovesick-balladist.js +1 -1
  30. package/dist/cards/impl/minion/lovesick-balladist.js.map +1 -1
  31. package/dist/cards/impl/minion/mummifier.js +1 -1
  32. package/dist/cards/impl/minion/mummifier.js.map +1 -1
  33. package/dist/cards/impl/minion/murky.js +2 -2
  34. package/dist/cards/impl/minion/murky.js.map +1 -1
  35. package/dist/cards/impl/minion/operatic-belcher.js +1 -1
  36. package/dist/cards/impl/minion/operatic-belcher.js.map +1 -1
  37. package/dist/cards/impl/minion/parched-wanderer.js +1 -1
  38. package/dist/cards/impl/minion/parched-wanderer.js.map +1 -1
  39. package/dist/cards/impl/minion/peggy-sturdybone.js +1 -1
  40. package/dist/cards/impl/minion/peggy-sturdybone.js.map +1 -1
  41. package/dist/cards/impl/minion/prized-promo-drake.js +1 -1
  42. package/dist/cards/impl/minion/prized-promo-drake.js.map +1 -1
  43. package/dist/cards/impl/minion/razorgore-the-untamed.js +1 -1
  44. package/dist/cards/impl/minion/razorgore-the-untamed.js.map +1 -1
  45. package/dist/cards/impl/minion/red-whelp.js +1 -1
  46. package/dist/cards/impl/minion/red-whelp.js.map +1 -1
  47. package/dist/cards/impl/minion/ripsnarl-captain.js +1 -1
  48. package/dist/cards/impl/minion/ripsnarl-captain.js.map +1 -1
  49. package/dist/cards/impl/minion/sanctum-rester.js +1 -1
  50. package/dist/cards/impl/minion/sanctum-rester.js.map +1 -1
  51. package/dist/cards/impl/minion/sky-pirate-flagbearer.js +1 -1
  52. package/dist/cards/impl/minion/sky-pirate-flagbearer.js.map +1 -1
  53. package/dist/cards/impl/minion/smolderwing.js +1 -1
  54. package/dist/cards/impl/minion/smolderwing.js.map +1 -1
  55. package/dist/cards/impl/minion/soulsplitter.js +1 -1
  56. package/dist/cards/impl/minion/soulsplitter.js.map +1 -1
  57. package/dist/cards/impl/minion/spacefarer.js +1 -1
  58. package/dist/cards/impl/minion/spacefarer.js.map +1 -1
  59. package/dist/cards/impl/minion/swampstriker.js +3 -1
  60. package/dist/cards/impl/minion/swampstriker.js.map +1 -1
  61. package/dist/cards/impl/minion/thousandth-paper-drake.js +1 -1
  62. package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -1
  63. package/dist/cards/impl/minion/three-lil-quilboar.js +1 -1
  64. package/dist/cards/impl/minion/three-lil-quilboar.js.map +1 -1
  65. package/dist/cards/impl/minion/twilight-primordium.js +2 -2
  66. package/dist/cards/impl/minion/twilight-primordium.js.map +1 -1
  67. package/dist/cards/impl/minion/ultraviolet-ascendant.js +1 -1
  68. package/dist/cards/impl/minion/ultraviolet-ascendant.js.map +1 -1
  69. package/dist/cards/impl/minion/whelp-smuggler.js +1 -1
  70. package/dist/cards/impl/minion/whelp-smuggler.js.map +1 -1
  71. package/dist/cards/impl/trinket/emerald-dreamcatcher.js +1 -1
  72. package/dist/cards/impl/trinket/emerald-dreamcatcher.js.map +1 -1
  73. package/dist/cards/impl/trinket/hoggy-bank.js +1 -1
  74. package/dist/cards/impl/trinket/hoggy-bank.js.map +1 -1
  75. package/dist/cards/impl/trinket/ironforge-anvil.js +1 -1
  76. package/dist/cards/impl/trinket/ironforge-anvil.js.map +1 -1
  77. package/dist/cards/impl/trinket/jarred-frostling.js +1 -1
  78. package/dist/cards/impl/trinket/jarred-frostling.js.map +1 -1
  79. package/dist/cards/impl/trinket/rusty-trident.js +1 -1
  80. package/dist/cards/impl/trinket/rusty-trident.js.map +1 -1
  81. package/dist/input-sanitation.js +6 -6
  82. package/dist/input-sanitation.js.map +1 -1
  83. package/dist/keywords/divine-shield.js +1 -1
  84. package/dist/keywords/divine-shield.js.map +1 -1
  85. package/dist/simulation/add-minion-to-board.js +30 -29
  86. package/dist/simulation/add-minion-to-board.js.map +1 -1
  87. package/dist/simulation/after-attack.js +1 -1
  88. package/dist/simulation/after-attack.js.map +1 -1
  89. package/dist/simulation/attack.d.ts +1 -1
  90. package/dist/simulation/attack.js +2 -1
  91. package/dist/simulation/attack.js.map +1 -1
  92. package/dist/simulation/auras.d.ts +1 -1
  93. package/dist/simulation/auras.js +11 -11
  94. package/dist/simulation/auras.js.map +1 -1
  95. package/dist/simulation/avenge.js +4 -4
  96. package/dist/simulation/avenge.js.map +1 -1
  97. package/dist/simulation/battlecries.js +6 -6
  98. package/dist/simulation/battlecries.js.map +1 -1
  99. package/dist/simulation/damage-effects.js +2 -2
  100. package/dist/simulation/damage-effects.js.map +1 -1
  101. package/dist/simulation/deathrattle-effects.js +14 -14
  102. package/dist/simulation/deathrattle-effects.js.map +1 -1
  103. package/dist/simulation/deathrattle-orchestration.js +3 -3
  104. package/dist/simulation/deathrattle-orchestration.js.map +1 -1
  105. package/dist/simulation/deathrattle-spawns.js +2 -2
  106. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  107. package/dist/simulation/minion-death.js +3 -2
  108. package/dist/simulation/minion-death.js.map +1 -1
  109. package/dist/simulation/on-attack.js +2 -2
  110. package/dist/simulation/on-attack.js.map +1 -1
  111. package/dist/simulation/remove-minion-from-board.d.ts +1 -3
  112. package/dist/simulation/remove-minion-from-board.js +6 -6
  113. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  114. package/dist/simulation/spawns.js +4 -2
  115. package/dist/simulation/spawns.js.map +1 -1
  116. package/dist/simulation/stats.js +3 -3
  117. package/dist/simulation/stats.js.map +1 -1
  118. package/dist/simulation/summon-when-space.js +2 -18
  119. package/dist/simulation/summon-when-space.js.map +1 -1
  120. package/dist/simulation/utils/golden.js +1 -1
  121. package/dist/simulation/utils/golden.js.map +1 -1
  122. package/dist/utils.d.ts +4 -4
  123. package/dist/utils.js +24 -21
  124. package/dist/utils.js.map +1 -1
  125. package/package.json +1 -1
@@ -8,7 +8,7 @@ exports.EmeraldDreamcatcher = {
8
8
  startOfCombat: (trinket, input) => {
9
9
  const highestAttack = Math.max(...input.playerBoard.map((entity) => entity.attack));
10
10
  input.playerBoard
11
- .filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.DRAGON, input.gameState.allCards))
11
+ .filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.DRAGON, input.gameState.anomalies, input.gameState.allCards))
12
12
  .forEach((e) => {
13
13
  (0, stats_1.setEntityStats)(e, highestAttack, null, input.playerBoard, input.playerEntity, input.gameState);
14
14
  });
@@ -1 +1 @@
1
- {"version":3,"file":"emerald-dreamcatcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/emerald-dreamcatcher.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,qDAA2D;AAC3D,0CAAiD;AAEpC,QAAA,mBAAmB,GAAG;IAClC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,KAAK,CAAC,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aAC5F,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,IAAA,sBAAc,EAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const EmeraldDreamcatcher = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst highestAttack = Math.max(...input.playerBoard.map((entity) => entity.attack));\r\n\t\tinput.playerBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, input.playerEntity, Race.DRAGON, input.gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tsetEntityStats(e, highestAttack, null, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t\t});\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"emerald-dreamcatcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/emerald-dreamcatcher.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,qDAA2D;AAC3D,0CAAiD;AAEpC,QAAA,mBAAmB,GAAG;IAClC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,KAAK,CAAC,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,YAAY,EAClB,qBAAI,CAAC,MAAM,EACX,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD;aACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACd,IAAA,sBAAc,EAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const EmeraldDreamcatcher = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst highestAttack = Math.max(...input.playerBoard.map((entity) => entity.attack));\r\n\t\tinput.playerBoard\r\n\t\t\t.filter((e) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tRace.DRAGON,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t),\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tsetEntityStats(e, highestAttack, null, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t\t});\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -6,7 +6,7 @@ const utils_1 = require("../../../utils");
6
6
  exports.HoggyBank = {
7
7
  startOfCombat: (trinket, input) => {
8
8
  input.playerBoard
9
- .filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.QUILBOAR, input.gameState.allCards))
9
+ .filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.QUILBOAR, input.gameState.anomalies, input.gameState.allCards))
10
10
  .forEach((e) => {
11
11
  var _a;
12
12
  e.enchantments = (_a = e.enchantments) !== null && _a !== void 0 ? _a : [];
@@ -1 +1 @@
1
- {"version":3,"file":"hoggy-bank.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/hoggy-bank.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAG7D,0CAAiD;AAEpC,QAAA,SAAS,GAAG;IACxB,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,KAAK,CAAC,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aAC9F,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;YACd,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnB,MAAM,uBAA+D;gBACrE,cAAc,EAAE,OAAO,CAAC,QAAQ;gBAChC,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const HoggyBank = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tinput.playerBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, input.playerEntity, Race.QUILBOAR, input.gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.HoggyBank_GemInTheBankEnchantment_BG30_MagicItem_411e,\r\n\t\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"hoggy-bank.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/hoggy-bank.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAG7D,0CAAiD;AAEpC,QAAA,SAAS,GAAG;IACxB,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,KAAK,CAAC,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,YAAY,EAClB,qBAAI,CAAC,QAAQ,EACb,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD;aACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;YACd,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnB,MAAM,uBAA+D;gBACrE,cAAc,EAAE,OAAO,CAAC,QAAQ;gBAChC,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const HoggyBank = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tinput.playerBoard\r\n\t\t\t.filter((e) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tRace.QUILBOAR,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t),\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.HoggyBank_GemInTheBankEnchantment_BG30_MagicItem_411e,\r\n\t\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -7,7 +7,7 @@ exports.IronforgeAnvil = {
7
7
  startOfCombat: (trinket, input) => {
8
8
  if (input.playerBoard.length > 0) {
9
9
  const candidates = input.playerBoard.filter((e) => {
10
- const tribes = (0, utils_1.getEffectiveTribesForEntity)(e, input.playerEntity, input.gameState.allCards);
10
+ const tribes = (0, utils_1.getEffectiveTribesForEntity)(e, input.playerEntity, input.gameState.anomalies, input.gameState.allCards);
11
11
  return tribes.length === 0;
12
12
  });
13
13
  if (candidates.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"ironforge-anvil.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/ironforge-anvil.ts"],"names":[],"mappings":";;;AAEA,qDAA2D;AAC3D,0CAA6D;AAEhD,QAAA,cAAc,GAAG;IAC7B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjD,MAAM,MAAM,GAAG,IAAA,mCAA2B,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC5F,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC7B,IAAA,sBAAc,EACb,MAAM,EACN,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;oBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/F,CAAC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;aACZ;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\nimport { getEffectiveTribesForEntity } from '../../../utils';\r\n\r\nexport const IronforgeAnvil = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\tconst candidates = input.playerBoard.filter((e) => {\r\n\t\t\t\tconst tribes = getEffectiveTribesForEntity(e, input.playerEntity, input.gameState.allCards);\r\n\t\t\t\treturn tribes.length === 0;\r\n\t\t\t});\r\n\t\t\tif (candidates.length > 0) {\r\n\t\t\t\tcandidates.forEach((entity) => {\r\n\t\t\t\t\tsetEntityStats(\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t3 * entity.attack,\r\n\t\t\t\t\t\t3 * entity.health,\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, entity, input.playerBoard, null, null);\r\n\t\t\t\t});\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"ironforge-anvil.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/ironforge-anvil.ts"],"names":[],"mappings":";;;AAEA,qDAA2D;AAC3D,0CAA6D;AAEhD,QAAA,cAAc,GAAG;IAC7B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjD,MAAM,MAAM,GAAG,IAAA,mCAA2B,EACzC,CAAC,EACD,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CAAC;gBACF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC7B,IAAA,sBAAc,EACb,MAAM,EACN,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;oBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/F,CAAC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;aACZ;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\nimport { getEffectiveTribesForEntity } from '../../../utils';\r\n\r\nexport const IronforgeAnvil = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\tconst candidates = input.playerBoard.filter((e) => {\r\n\t\t\t\tconst tribes = getEffectiveTribesForEntity(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t);\r\n\t\t\t\treturn tribes.length === 0;\r\n\t\t\t});\r\n\t\t\tif (candidates.length > 0) {\r\n\t\t\t\tcandidates.forEach((entity) => {\r\n\t\t\t\t\tsetEntityStats(\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t3 * entity.attack,\r\n\t\t\t\t\t\t3 * entity.health,\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, entity, input.playerBoard, null, null);\r\n\t\t\t\t});\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -6,7 +6,7 @@ const utils_1 = require("../../../services/utils");
6
6
  const utils_2 = require("../../../utils");
7
7
  exports.JarredFrostling = {
8
8
  startOfCombat: (trinket, input) => {
9
- const elementals = (0, utils_1.shuffleArray)(input.playerBoard.filter((e) => (0, utils_2.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.ELEMENTAL, input.gameState.allCards)));
9
+ const elementals = (0, utils_1.shuffleArray)(input.playerBoard.filter((e) => (0, utils_2.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.ELEMENTAL, input.gameState.anomalies, input.gameState.allCards)));
10
10
  if (!!(elementals === null || elementals === void 0 ? void 0 : elementals.length)) {
11
11
  const targets = elementals.slice(0, 2);
12
12
  targets.forEach((e) => {
@@ -1 +1 @@
1
- {"version":3,"file":"jarred-frostling.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/jarred-frostling.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAE7D,mDAAuD;AAEvD,0CAAiD;AAEpC,QAAA,eAAe,GAAG;IAC9B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,IAAA,oBAAY,EAC9B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAChF,CACD,CAAC;QACF,IAAI,CAAC,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE;YACzB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;gBACrB,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;gBACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;oBACnB,MAAM,uBAAoE;oBAC1E,cAAc,EAAE,OAAO,CAAC,QAAQ;oBAChC,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;iBACrD,CAAC,CAAC;gBACH,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrG,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const JarredFrostling = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst elementals = shuffleArray(\r\n\t\t\tinput.playerBoard.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.playerEntity, Race.ELEMENTAL, input.gameState.allCards),\r\n\t\t\t),\r\n\t\t);\r\n\t\tif (!!elementals?.length) {\r\n\t\t\tconst targets = elementals.slice(0, 2);\r\n\t\t\ttargets.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.JarredFrostling_FrostyGlobeEnchantment_BG30_MagicItem_952e,\r\n\t\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(input.playerEntity, e, input.playerBoard, null, null);\r\n\t\t\t});\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"jarred-frostling.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/jarred-frostling.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAE7D,mDAAuD;AAEvD,0CAAiD;AAEpC,QAAA,eAAe,GAAG;IAC9B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,IAAA,oBAAY,EAC9B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,YAAY,EAClB,qBAAI,CAAC,SAAS,EACd,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,CACD,CAAC;QACF,IAAI,CAAC,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE;YACzB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;gBACrB,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;gBACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;oBACnB,MAAM,uBAAoE;oBAC1E,cAAc,EAAE,OAAO,CAAC,QAAQ;oBAChC,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;iBACrD,CAAC,CAAC;gBACH,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrG,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\n\r\nexport const JarredFrostling = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst elementals = shuffleArray(\r\n\t\t\tinput.playerBoard.filter((e) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tRace.ELEMENTAL,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t),\r\n\t\t\t),\r\n\t\t);\r\n\t\tif (!!elementals?.length) {\r\n\t\t\tconst targets = elementals.slice(0, 2);\r\n\t\t\ttargets.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.JarredFrostling_FrostyGlobeEnchantment_BG30_MagicItem_952e,\r\n\t\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(input.playerEntity, e, input.playerBoard, null, null);\r\n\t\t\t});\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -7,7 +7,7 @@ exports.RustyTrident = {
7
7
  cardIds: ["BG30_MagicItem_917"],
8
8
  startOfCombat: (trinket, input) => {
9
9
  input.playerBoard
10
- .filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.NAGA, input.gameState.allCards))
10
+ .filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.NAGA, input.gameState.anomalies, input.gameState.allCards))
11
11
  .forEach((e) => {
12
12
  var _a, _b;
13
13
  e.enchantments = (_a = e.enchantments) !== null && _a !== void 0 ? _a : [];
@@ -1 +1 @@
1
- {"version":3,"file":"rusty-trident.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/rusty-trident.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAG7D,0CAAiD;AAGpC,QAAA,YAAY,GAAsB;IAC9C,OAAO,EAAE,sBAAyC;IAClD,aAAa,EAAE,CAAC,OAAuC,EAAE,KAAe,EAAE,EAAE;QAC3E,KAAK,CAAC,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aAC1F,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;YACd,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnB,MAAM,uBAAsE;gBAC5E,cAAc,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,CAAC;gBACtC,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const RustyTrident: StartOfCombatCard = {\r\n\tcardIds: [CardIds.RustyTrident_BG30_MagicItem_917],\r\n\tstartOfCombat: (trinket: BoardTrinket | BgsPlayerEntity, input: SoCInput) => {\r\n\t\tinput.playerBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, input.playerEntity, Race.NAGA, input.gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.RustyTrident_TridentsTreasureEnchantment_BG30_MagicItem_917e,\r\n\t\t\t\t\toriginEntityId: trinket?.entityId ?? 0,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"rusty-trident.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/rusty-trident.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAG7D,0CAAiD;AAGpC,QAAA,YAAY,GAAsB;IAC9C,OAAO,EAAE,sBAAyC;IAClD,aAAa,EAAE,CAAC,OAAuC,EAAE,KAAe,EAAE,EAAE;QAC3E,KAAK,CAAC,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACtG;aACA,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;YACd,CAAC,CAAC,YAAY,GAAG,MAAA,CAAC,CAAC,YAAY,mCAAI,EAAE,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnB,MAAM,uBAAsE;gBAC5E,cAAc,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,CAAC;gBACtC,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const RustyTrident: StartOfCombatCard = {\r\n\tcardIds: [CardIds.RustyTrident_BG30_MagicItem_917],\r\n\tstartOfCombat: (trinket: BoardTrinket | BgsPlayerEntity, input: SoCInput) => {\r\n\t\tinput.playerBoard\r\n\t\t\t.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.playerEntity, Race.NAGA, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\te.enchantments = e.enchantments ?? [];\r\n\t\t\t\te.enchantments.push({\r\n\t\t\t\t\tcardId: CardIds.RustyTrident_TridentsTreasureEnchantment_BG30_MagicItem_917e,\r\n\t\t\t\t\toriginEntityId: trinket?.entityId ?? 0,\r\n\t\t\t\t\trepeats: 1,\r\n\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -7,10 +7,10 @@ const enchantments_1 = require("./simulation/enchantments");
7
7
  const utils_1 = require("./utils");
8
8
  const buildFinalInput = (battleInput, cards, cardsData) => {
9
9
  const entityIdContainer = { entityId: 999999999 };
10
- const { board: playerBoard, hand: playerHand, player: playerEntity, } = buildFinalInputForPlayer(battleInput.playerBoard, true, cards, cardsData, entityIdContainer);
11
- const { board: playerTeammateBoard, hand: playerTeammateHand, player: playerTeammateEntity, } = buildFinalInputForPlayer(battleInput.playerTeammateBoard, true, cards, cardsData, entityIdContainer);
12
- const { board: opponentBoard, hand: opponentHand, player: opponentEntity, } = buildFinalInputForPlayer(battleInput.opponentBoard, false, cards, cardsData, entityIdContainer);
13
- const { board: opponentTeammateBoard, hand: opponentTeammateHand, player: opponentTeammateEntity, } = buildFinalInputForPlayer(battleInput.opponentTeammateBoard, false, cards, cardsData, entityIdContainer);
10
+ const { board: playerBoard, hand: playerHand, player: playerEntity, } = buildFinalInputForPlayer(battleInput.playerBoard, true, battleInput.gameState.anomalies, cards, cardsData, entityIdContainer);
11
+ const { board: playerTeammateBoard, hand: playerTeammateHand, player: playerTeammateEntity, } = buildFinalInputForPlayer(battleInput.playerTeammateBoard, true, battleInput.gameState.anomalies, cards, cardsData, entityIdContainer);
12
+ const { board: opponentBoard, hand: opponentHand, player: opponentEntity, } = buildFinalInputForPlayer(battleInput.opponentBoard, false, battleInput.gameState.anomalies, cards, cardsData, entityIdContainer);
13
+ const { board: opponentTeammateBoard, hand: opponentTeammateHand, player: opponentTeammateEntity, } = buildFinalInputForPlayer(battleInput.opponentTeammateBoard, false, battleInput.gameState.anomalies, cards, cardsData, entityIdContainer);
14
14
  const inputReady = {
15
15
  playerBoard: {
16
16
  board: playerBoard,
@@ -49,7 +49,7 @@ const buildFinalInput = (battleInput, cards, cardsData) => {
49
49
  return inputReady;
50
50
  };
51
51
  exports.buildFinalInput = buildFinalInput;
52
- const buildFinalInputForPlayer = (playerInfo, isPlayer, cards, cardsData, entityIdContainer) => {
52
+ const buildFinalInputForPlayer = (playerInfo, isPlayer, anomalies, cards, cardsData, entityIdContainer) => {
53
53
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
54
54
  if (!playerInfo) {
55
55
  return { board: [], hand: [], player: null };
@@ -73,7 +73,7 @@ const buildFinalInputForPlayer = (playerInfo, isPlayer, cards, cardsData, entity
73
73
  ];
74
74
  playerInfo.player.cardId = isGhost ? "TB_BaconShop_HERO_KelThuzad" : playerInfo.player.cardId;
75
75
  playerInfo.player.hpLeft = Math.max(1, playerInfo.player.hpLeft);
76
- (0, auras_1.setMissingAuras)(board, playerInfo.player, cards);
76
+ (0, auras_1.setMissingAuras)(board, playerInfo.player, anomalies, cards);
77
77
  (0, auras_1.setImplicitDataHero)(playerInfo.player, cardsData, isPlayer, entityIdContainer);
78
78
  return { board, hand, player: playerInfo.player };
79
79
  };
@@ -1 +1 @@
1
- {"version":3,"file":"input-sanitation.js","sourceRoot":"","sources":["../src/input-sanitation.ts"],"names":[],"mappings":"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","sourcesContent":["import { AllCardsService, CardIds, normalizeHeroCardId } from '@firestone-hs/reference-data';\r\nimport { BgsBattleInfo } from './bgs-battle-info';\r\nimport { BgsBoardInfo } from './bgs-board-info';\r\nimport { BgsHeroPower, BgsPlayerEntity } from './bgs-player-entity';\r\nimport { BoardEntity } from './board-entity';\r\nimport { CardsData } from './cards/cards-data';\r\nimport { setImplicitDataHero, setMissingAuras } from './simulation/auras';\r\nimport { fixEnchantments } from './simulation/enchantments';\r\nimport { addImpliedMechanics } from './utils';\r\n\r\nexport const buildFinalInput = (\r\n\tbattleInput: BgsBattleInfo,\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n): BgsBattleInfo => {\r\n\tconst entityIdContainer = { entityId: 999_999_999 };\r\n\r\n\tconst {\r\n\t\tboard: playerBoard,\r\n\t\thand: playerHand,\r\n\t\tplayer: playerEntity,\r\n\t} = buildFinalInputForPlayer(battleInput.playerBoard, true, cards, cardsData, entityIdContainer);\r\n\tconst {\r\n\t\tboard: playerTeammateBoard,\r\n\t\thand: playerTeammateHand,\r\n\t\tplayer: playerTeammateEntity,\r\n\t} = buildFinalInputForPlayer(battleInput.playerTeammateBoard, true, cards, cardsData, entityIdContainer);\r\n\r\n\tconst {\r\n\t\tboard: opponentBoard,\r\n\t\thand: opponentHand,\r\n\t\tplayer: opponentEntity,\r\n\t} = buildFinalInputForPlayer(battleInput.opponentBoard, false, cards, cardsData, entityIdContainer);\r\n\tconst {\r\n\t\tboard: opponentTeammateBoard,\r\n\t\thand: opponentTeammateHand,\r\n\t\tplayer: opponentTeammateEntity,\r\n\t} = buildFinalInputForPlayer(battleInput.opponentTeammateBoard, false, cards, cardsData, entityIdContainer);\r\n\r\n\t// We do this so that we can have mutated objects inside the simulation and still\r\n\t// be able to start from a fresh copy for each simulation\r\n\tconst inputReady: BgsBattleInfo = {\r\n\t\tplayerBoard: {\r\n\t\t\tboard: playerBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...playerEntity,\r\n\t\t\t\thand: playerHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\tplayerTeammateBoard: !!playerTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: playerTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...playerTeammateEntity,\r\n\t\t\t\t\t\thand: playerTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\topponentBoard: {\r\n\t\t\tboard: opponentBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...opponentEntity,\r\n\t\t\t\thand: opponentHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\topponentTeammateBoard: !!opponentTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: opponentTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...opponentTeammateEntity,\r\n\t\t\t\t\t\thand: opponentTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\tgameState: battleInput.gameState,\r\n\t} as BgsBattleInfo;\r\n\treturn inputReady;\r\n};\r\n\r\nconst buildFinalInputForPlayer = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n\tentityIdContainer: { entityId: number },\r\n): { board: BoardEntity[]; hand: BoardEntity[]; player: BgsPlayerEntity } => {\r\n\tif (!playerInfo) {\r\n\t\treturn { board: [], hand: [], player: null };\r\n\t}\r\n\r\n\tconst { board, hand } = buildFinalInputBoard(playerInfo, isPlayer, cardsData, cards);\r\n\tconst isGhost = playerInfo.player?.hpLeft != null && playerInfo.player.hpLeft <= 0;\r\n\tplayerInfo.player.secrets = (playerInfo.player.secrets ?? playerInfo.secrets)?.filter((e) => !!e?.cardId) ?? [];\r\n\t// Add the scriptDataNum1 only on the start of combat phase, so that it doesn't trigger too soon\r\n\tplayerInfo.player.secrets.forEach((secret) => (secret.scriptDataNum1 = 0));\r\n\t// Trinkets don't seem to trigger when facing the ghost\r\n\t// http://replays.firestoneapp.com/?reviewId=4ad32e03-2620-4fb1-8b43-cad55afd30fc&turn=27&action=2\r\n\t// One of the trinkets is Blood Golem Sticker, and no Blood Golem is summoned\r\n\t// Looks like that's not always the case:\r\n\t// http://replays.firestoneapp.com/?reviewId=9958e8d3-4388-4e6f-9b36-35f3a08be2f6&turn=25&action=4\r\n\t// playerInfo.player.trinkets = isGhost ? [] : playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? [];\r\n\tplayerInfo.player.trinkets = (playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? []).sort(\r\n\t\t(a, b) => a.entityId - b.entityId,\r\n\t);\r\n\tplayerInfo.player.friendly = isPlayer;\r\n\tplayerInfo.player.globalInfo = playerInfo.player.globalInfo ?? {};\r\n\tplayerInfo.player.globalInfo.PirateAttackBonus = playerInfo.player.globalInfo.PirateAttackBonus ?? 0;\r\n\tplayerInfo.player.heroPowers = playerInfo.player.heroPowers?.map((hp, index) =>\r\n\t\tsanitizeHeroPower(hp, index, playerInfo.player, cards),\r\n\t) ?? [\r\n\t\t{\r\n\t\t\tcardId: playerInfo.player.heroPowerId,\r\n\t\t\tentityId: playerInfo.player.heroPowerEntityId,\r\n\t\t\tused: playerInfo.player.heroPowerUsed,\r\n\t\t\tinfo: playerInfo.player.heroPowerInfo,\r\n\t\t\tinfo2: playerInfo.player.heroPowerInfo2,\r\n\t\t} as BgsHeroPower,\r\n\t];\r\n\t// playerInfo.player.heroPowerId =\r\n\t// \tplayerInfo.player.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t// \t(normalizeHeroCardId(playerInfo.player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t// \t\t? playerInfo.player.questRewardEntities?.[0]?.cardId\r\n\t// \t\t: null) ??\r\n\t// \tplayerInfo.player.heroPowerId;\r\n\tplayerInfo.player.cardId = isGhost ? CardIds.Kelthuzad_TB_BaconShop_HERO_KelThuzad : playerInfo.player.cardId;\r\n\tplayerInfo.player.hpLeft = Math.max(1, playerInfo.player.hpLeft);\r\n\t// When using the simulator, the aura is not applied when receiving the board state.\r\n\tsetMissingAuras(board, playerInfo.player, cards);\r\n\t// Avenge, maxHealth, etc.\r\n\t// setImplicitData(playerBoard, cardsData);\r\n\t// setImplicitData(opponentBoard, cardsData);\r\n\t// Avenge, globalInfo\r\n\tsetImplicitDataHero(playerInfo.player, cardsData, isPlayer, entityIdContainer);\r\n\treturn { board, hand, player: playerInfo.player };\r\n};\r\n\r\nconst sanitizeHeroPower = (\r\n\thp: BgsHeroPower,\r\n\tindex: number,\r\n\tplayer: BgsPlayerEntity,\r\n\tcards: AllCardsService,\r\n): BgsHeroPower => {\r\n\tif (index !== 0) {\r\n\t\treturn hp;\r\n\t}\r\n\r\n\thp.cardId =\r\n\t\tplayer.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t\t(normalizeHeroCardId(player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t\t\t? player.questRewardEntities?.[0]?.cardId\r\n\t\t\t: null) ??\r\n\t\thp.cardId;\r\n\treturn hp;\r\n};\r\n\r\nconst buildFinalInputBoard = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tcardsData: CardsData,\r\n\tcards: AllCardsService,\r\n): { board: BoardEntity[]; hand: BoardEntity[] } => {\r\n\tconst board = playerInfo.board\r\n\t\t.map((entity) => fixEnchantments(entity, cards))\r\n\t\t.map((entity) => ({ ...entity, inInitialState: true }))\r\n\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity));\r\n\tconst hand =\r\n\t\tplayerInfo.player.hand\r\n\t\t\t?.map((entity) => ({ ...entity, inInitialState: true }))\r\n\t\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity)) ?? [];\r\n\r\n\treturn { board, hand };\r\n};\r\n"]}
1
+ {"version":3,"file":"input-sanitation.js","sourceRoot":"","sources":["../src/input-sanitation.ts"],"names":[],"mappings":"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","sourcesContent":["import { AllCardsService, CardIds, normalizeHeroCardId } from '@firestone-hs/reference-data';\r\nimport { BgsBattleInfo } from './bgs-battle-info';\r\nimport { BgsBoardInfo } from './bgs-board-info';\r\nimport { BgsHeroPower, BgsPlayerEntity } from './bgs-player-entity';\r\nimport { BoardEntity } from './board-entity';\r\nimport { CardsData } from './cards/cards-data';\r\nimport { setImplicitDataHero, setMissingAuras } from './simulation/auras';\r\nimport { fixEnchantments } from './simulation/enchantments';\r\nimport { addImpliedMechanics } from './utils';\r\n\r\nexport const buildFinalInput = (\r\n\tbattleInput: BgsBattleInfo,\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n): BgsBattleInfo => {\r\n\tconst entityIdContainer = { entityId: 999_999_999 };\r\n\r\n\tconst {\r\n\t\tboard: playerBoard,\r\n\t\thand: playerHand,\r\n\t\tplayer: playerEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.playerBoard,\r\n\t\ttrue,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\tconst {\r\n\t\tboard: playerTeammateBoard,\r\n\t\thand: playerTeammateHand,\r\n\t\tplayer: playerTeammateEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.playerTeammateBoard,\r\n\t\ttrue,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\r\n\tconst {\r\n\t\tboard: opponentBoard,\r\n\t\thand: opponentHand,\r\n\t\tplayer: opponentEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.opponentBoard,\r\n\t\tfalse,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\tconst {\r\n\t\tboard: opponentTeammateBoard,\r\n\t\thand: opponentTeammateHand,\r\n\t\tplayer: opponentTeammateEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.opponentTeammateBoard,\r\n\t\tfalse,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\r\n\t// We do this so that we can have mutated objects inside the simulation and still\r\n\t// be able to start from a fresh copy for each simulation\r\n\tconst inputReady: BgsBattleInfo = {\r\n\t\tplayerBoard: {\r\n\t\t\tboard: playerBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...playerEntity,\r\n\t\t\t\thand: playerHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\tplayerTeammateBoard: !!playerTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: playerTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...playerTeammateEntity,\r\n\t\t\t\t\t\thand: playerTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\topponentBoard: {\r\n\t\t\tboard: opponentBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...opponentEntity,\r\n\t\t\t\thand: opponentHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\topponentTeammateBoard: !!opponentTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: opponentTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...opponentTeammateEntity,\r\n\t\t\t\t\t\thand: opponentTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\tgameState: battleInput.gameState,\r\n\t} as BgsBattleInfo;\r\n\treturn inputReady;\r\n};\r\n\r\nconst buildFinalInputForPlayer = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tanomalies: readonly string[],\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n\tentityIdContainer: { entityId: number },\r\n): { board: BoardEntity[]; hand: BoardEntity[]; player: BgsPlayerEntity } => {\r\n\tif (!playerInfo) {\r\n\t\treturn { board: [], hand: [], player: null };\r\n\t}\r\n\r\n\tconst { board, hand } = buildFinalInputBoard(playerInfo, isPlayer, cardsData, cards);\r\n\tconst isGhost = playerInfo.player?.hpLeft != null && playerInfo.player.hpLeft <= 0;\r\n\tplayerInfo.player.secrets = (playerInfo.player.secrets ?? playerInfo.secrets)?.filter((e) => !!e?.cardId) ?? [];\r\n\t// Add the scriptDataNum1 only on the start of combat phase, so that it doesn't trigger too soon\r\n\tplayerInfo.player.secrets.forEach((secret) => (secret.scriptDataNum1 = 0));\r\n\t// Trinkets don't seem to trigger when facing the ghost\r\n\t// http://replays.firestoneapp.com/?reviewId=4ad32e03-2620-4fb1-8b43-cad55afd30fc&turn=27&action=2\r\n\t// One of the trinkets is Blood Golem Sticker, and no Blood Golem is summoned\r\n\t// Looks like that's not always the case:\r\n\t// http://replays.firestoneapp.com/?reviewId=9958e8d3-4388-4e6f-9b36-35f3a08be2f6&turn=25&action=4\r\n\t// playerInfo.player.trinkets = isGhost ? [] : playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? [];\r\n\tplayerInfo.player.trinkets = (playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? []).sort(\r\n\t\t(a, b) => a.entityId - b.entityId,\r\n\t);\r\n\tplayerInfo.player.friendly = isPlayer;\r\n\tplayerInfo.player.globalInfo = playerInfo.player.globalInfo ?? {};\r\n\tplayerInfo.player.globalInfo.PirateAttackBonus = playerInfo.player.globalInfo.PirateAttackBonus ?? 0;\r\n\tplayerInfo.player.heroPowers = playerInfo.player.heroPowers?.map((hp, index) =>\r\n\t\tsanitizeHeroPower(hp, index, playerInfo.player, cards),\r\n\t) ?? [\r\n\t\t{\r\n\t\t\tcardId: playerInfo.player.heroPowerId,\r\n\t\t\tentityId: playerInfo.player.heroPowerEntityId,\r\n\t\t\tused: playerInfo.player.heroPowerUsed,\r\n\t\t\tinfo: playerInfo.player.heroPowerInfo,\r\n\t\t\tinfo2: playerInfo.player.heroPowerInfo2,\r\n\t\t} as BgsHeroPower,\r\n\t];\r\n\t// playerInfo.player.heroPowerId =\r\n\t// \tplayerInfo.player.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t// \t(normalizeHeroCardId(playerInfo.player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t// \t\t? playerInfo.player.questRewardEntities?.[0]?.cardId\r\n\t// \t\t: null) ??\r\n\t// \tplayerInfo.player.heroPowerId;\r\n\tplayerInfo.player.cardId = isGhost ? CardIds.Kelthuzad_TB_BaconShop_HERO_KelThuzad : playerInfo.player.cardId;\r\n\tplayerInfo.player.hpLeft = Math.max(1, playerInfo.player.hpLeft);\r\n\t// When using the simulator, the aura is not applied when receiving the board state.\r\n\tsetMissingAuras(board, playerInfo.player, anomalies, cards);\r\n\t// Avenge, maxHealth, etc.\r\n\t// setImplicitData(playerBoard, cardsData);\r\n\t// setImplicitData(opponentBoard, cardsData);\r\n\t// Avenge, globalInfo\r\n\tsetImplicitDataHero(playerInfo.player, cardsData, isPlayer, entityIdContainer);\r\n\treturn { board, hand, player: playerInfo.player };\r\n};\r\n\r\nconst sanitizeHeroPower = (\r\n\thp: BgsHeroPower,\r\n\tindex: number,\r\n\tplayer: BgsPlayerEntity,\r\n\tcards: AllCardsService,\r\n): BgsHeroPower => {\r\n\tif (index !== 0) {\r\n\t\treturn hp;\r\n\t}\r\n\r\n\thp.cardId =\r\n\t\tplayer.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t\t(normalizeHeroCardId(player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t\t\t? player.questRewardEntities?.[0]?.cardId\r\n\t\t\t: null) ??\r\n\t\thp.cardId;\r\n\treturn hp;\r\n};\r\n\r\nconst buildFinalInputBoard = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tcardsData: CardsData,\r\n\tcards: AllCardsService,\r\n): { board: BoardEntity[]; hand: BoardEntity[] } => {\r\n\tconst board = playerInfo.board\r\n\t\t.map((entity) => fixEnchantments(entity, cards))\r\n\t\t.map((entity) => ({ ...entity, inInitialState: true }))\r\n\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity));\r\n\tconst hand =\r\n\t\tplayerInfo.player.hand\r\n\t\t\t?.map((entity) => ({ ...entity, inInitialState: true }))\r\n\t\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity)) ?? [];\r\n\r\n\treturn { board, hand };\r\n};\r\n"]}
@@ -28,7 +28,7 @@ const updateDivineShield = (entity, board, hero, otherHero, newValue, gameState)
28
28
  const adapter = hero.trinkets
29
29
  .filter((t) => t.cardId === "BG30_MagicItem_910")
30
30
  .filter((t) => t.scriptDataNum1 > 0)[0];
31
- if (!!adapter && (0, utils_2.hasCorrectTribe)(entity, hero, reference_data_1.Race.MECH, gameState.allCards)) {
31
+ if (!!adapter && (0, utils_2.hasCorrectTribe)(entity, hero, reference_data_1.Race.MECH, gameState.anomalies, gameState.allCards)) {
32
32
  (0, exports.updateDivineShield)(entity, board, hero, otherHero, true, gameState);
33
33
  adapter.scriptDataNum1--;
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"divine-shield.js","sourceRoot":"","sources":["../../src/keywords/divine-shield.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, CardType, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnDivineShieldUpdated } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { pickRandom } from '../services/utils';\r\nimport { addCardsInHand } from '../simulation/cards-in-hand';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { modifyStats } from '../simulation/stats';\r\nimport { grantRandomStats, hasCorrectTribe } from '../utils';\r\n\r\nexport const updateDivineShield = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tnewValue: boolean,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// if ((entity.divineShield ?? false) === newValue) {\r\n\t// \treturn;\r\n\t// }\r\n\tentity.hadDivineShield = newValue || entity.divineShield || entity.hadDivineShield;\r\n\tentity.divineShield = newValue;\r\n\tif (entity.divineShield) {\r\n\t\tconst boardForDrake = board;\r\n\t\tconst statsBonus =\r\n\t\t\t6 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043).length +\r\n\t\t\t12 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043_G).length;\r\n\t\t// Don't trigger all \"on attack changed\" effects, since it's an aura\r\n\t\tentity.attack += statsBonus;\r\n\t} else {\r\n\t\t// Also consider itself\r\n\t\tconst boardForDrake = board;\r\n\t\tconst statsBonus =\r\n\t\t\t6 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043).length +\r\n\t\t\t12 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043_G).length;\r\n\t\tentity.attack -= statsBonus;\r\n\t}\r\n\r\n\t// Lost divine shield\r\n\tif (entity.hadDivineShield && !entity.divineShield) {\r\n\t\tconst adapter = hero.trinkets\r\n\t\t\t.filter((t) => t.cardId === CardIds.MechagonAdapter_BG30_MagicItem_910)\r\n\t\t\t.filter((t) => t.scriptDataNum1 > 0)[0];\r\n\t\tif (!!adapter && hasCorrectTribe(entity, hero, Race.MECH, gameState.allCards)) {\r\n\t\t\tupdateDivineShield(entity, board, hero, otherHero, true, gameState);\r\n\t\t\tadapter.scriptDataNum1--;\r\n\t\t}\r\n\r\n\t\tfor (const boardEntity of board) {\r\n\t\t\tconst onDivineShieldUpdatedImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnDivineShieldUpdated(onDivineShieldUpdatedImpl)) {\r\n\t\t\t\tonDivineShieldUpdatedImpl.onDivineShieldUpdated(boardEntity, {\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\ttarget: entity,\r\n\t\t\t\t\tpreviousValue: entity.hadDivineShield,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < board.length; i++) {\r\n\t\t\tif (board[i].cardId === CardIds.BolvarFireblood_ICC_858) {\r\n\t\t\t\tmodifyStats(board[i], 2, 0, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (board[i].cardId === CardIds.BolvarFireblood_TB_BaconUps_047) {\r\n\t\t\t\tmodifyStats(board[i], 4, 0, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (board[i].cardId === CardIds.DrakonidEnforcer_BGS_067) {\r\n\t\t\t\tmodifyStats(board[i], 2, 2, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (board[i].cardId === CardIds.DrakonidEnforcer_TB_BaconUps_117) {\r\n\t\t\t\tmodifyStats(board[i], 4, 4, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (\r\n\t\t\t\tboard[i].entityId !== entity.entityId &&\r\n\t\t\t\t(board[i].cardId === CardIds.HolyMecherel_BG20_401 ||\r\n\t\t\t\t\tboard[i].cardId === CardIds.HolyMecherel_BG20_401_G)\r\n\t\t\t) {\r\n\t\t\t\tupdateDivineShield(board[i], board, hero, otherHero, true, gameState);\r\n\t\t\t} else if (board[i].cardId === CardIds.Gemsplitter_BG21_037) {\r\n\t\t\t\taddCardsInHand(hero, board, [CardIds.BloodGem], gameState);\r\n\t\t\t} else if (board[i].cardId === CardIds.Gemsplitter_BG21_037_G) {\r\n\t\t\t\taddCardsInHand(hero, board, [CardIds.BloodGem, CardIds.BloodGem], gameState);\r\n\t\t\t} else if (\r\n\t\t\t\tboard[i].cardId === CardIds.CogworkCopter_BG24_008 ||\r\n\t\t\t\tboard[i].cardId === CardIds.CogworkCopter_BG24_008_G\r\n\t\t\t) {\r\n\t\t\t\t// When it's the opponent, the game state already contains all the buffs\r\n\t\t\t\tif (board[i]?.friendly) {\r\n\t\t\t\t\tconst buff = board[i].cardId === CardIds.CogworkCopter_BG24_008_G ? 2 : 1;\r\n\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\tboard[i],\r\n\t\t\t\t\t\thero.hand.filter(\r\n\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\thero,\r\n\t\t\t\t\t\tbuff,\r\n\t\t\t\t\t\tbuff,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\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 grantRandomDivineShield = (\r\n\tsource: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst elligibleEntities = board\r\n\t\t.filter((entity) => !entity.divineShield)\r\n\t\t.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\tif (elligibleEntities.length > 0) {\r\n\t\tconst chosen = pickRandom(elligibleEntities);\r\n\t\tupdateDivineShield(chosen, board, hero, otherHero, true, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(source, chosen, board, null, null);\r\n\t}\r\n};\r\n\r\nexport const grantDivineShieldToLeftmostMinions = (\r\n\tsource: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tquantity: number,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < Math.min(quantity, board.length); i++) {\r\n\t\tupdateDivineShield(board[i], board, hero, otherHero, true, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(source, board[i], board, null, null);\r\n\t}\r\n};\r\n\r\nexport interface OnDivineShieldUpdatedInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n\ttarget: BoardEntity;\r\n\tpreviousValue: boolean;\r\n}\r\n"]}
1
+ {"version":3,"file":"divine-shield.js","sourceRoot":"","sources":["../../src/keywords/divine-shield.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, CardType, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnDivineShieldUpdated } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { pickRandom } from '../services/utils';\r\nimport { addCardsInHand } from '../simulation/cards-in-hand';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { modifyStats } from '../simulation/stats';\r\nimport { grantRandomStats, hasCorrectTribe } from '../utils';\r\n\r\nexport const updateDivineShield = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tnewValue: boolean,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// if ((entity.divineShield ?? false) === newValue) {\r\n\t// \treturn;\r\n\t// }\r\n\tentity.hadDivineShield = newValue || entity.divineShield || entity.hadDivineShield;\r\n\tentity.divineShield = newValue;\r\n\tif (entity.divineShield) {\r\n\t\tconst boardForDrake = board;\r\n\t\tconst statsBonus =\r\n\t\t\t6 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043).length +\r\n\t\t\t12 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043_G).length;\r\n\t\t// Don't trigger all \"on attack changed\" effects, since it's an aura\r\n\t\tentity.attack += statsBonus;\r\n\t} else {\r\n\t\t// Also consider itself\r\n\t\tconst boardForDrake = board;\r\n\t\tconst statsBonus =\r\n\t\t\t6 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043).length +\r\n\t\t\t12 * boardForDrake.filter((e) => e.cardId === CardIds.CyborgDrake_BG25_043_G).length;\r\n\t\tentity.attack -= statsBonus;\r\n\t}\r\n\r\n\t// Lost divine shield\r\n\tif (entity.hadDivineShield && !entity.divineShield) {\r\n\t\tconst adapter = hero.trinkets\r\n\t\t\t.filter((t) => t.cardId === CardIds.MechagonAdapter_BG30_MagicItem_910)\r\n\t\t\t.filter((t) => t.scriptDataNum1 > 0)[0];\r\n\t\tif (!!adapter && hasCorrectTribe(entity, hero, Race.MECH, gameState.anomalies, gameState.allCards)) {\r\n\t\t\tupdateDivineShield(entity, board, hero, otherHero, true, gameState);\r\n\t\t\tadapter.scriptDataNum1--;\r\n\t\t}\r\n\r\n\t\tfor (const boardEntity of board) {\r\n\t\t\tconst onDivineShieldUpdatedImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnDivineShieldUpdated(onDivineShieldUpdatedImpl)) {\r\n\t\t\t\tonDivineShieldUpdatedImpl.onDivineShieldUpdated(boardEntity, {\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t\ttarget: entity,\r\n\t\t\t\t\tpreviousValue: entity.hadDivineShield,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < board.length; i++) {\r\n\t\t\tif (board[i].cardId === CardIds.BolvarFireblood_ICC_858) {\r\n\t\t\t\tmodifyStats(board[i], 2, 0, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (board[i].cardId === CardIds.BolvarFireblood_TB_BaconUps_047) {\r\n\t\t\t\tmodifyStats(board[i], 4, 0, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (board[i].cardId === CardIds.DrakonidEnforcer_BGS_067) {\r\n\t\t\t\tmodifyStats(board[i], 2, 2, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (board[i].cardId === CardIds.DrakonidEnforcer_TB_BaconUps_117) {\r\n\t\t\t\tmodifyStats(board[i], 4, 4, board, hero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, hero, otherHero);\r\n\t\t\t} else if (\r\n\t\t\t\tboard[i].entityId !== entity.entityId &&\r\n\t\t\t\t(board[i].cardId === CardIds.HolyMecherel_BG20_401 ||\r\n\t\t\t\t\tboard[i].cardId === CardIds.HolyMecherel_BG20_401_G)\r\n\t\t\t) {\r\n\t\t\t\tupdateDivineShield(board[i], board, hero, otherHero, true, gameState);\r\n\t\t\t} else if (board[i].cardId === CardIds.Gemsplitter_BG21_037) {\r\n\t\t\t\taddCardsInHand(hero, board, [CardIds.BloodGem], gameState);\r\n\t\t\t} else if (board[i].cardId === CardIds.Gemsplitter_BG21_037_G) {\r\n\t\t\t\taddCardsInHand(hero, board, [CardIds.BloodGem, CardIds.BloodGem], gameState);\r\n\t\t\t} else if (\r\n\t\t\t\tboard[i].cardId === CardIds.CogworkCopter_BG24_008 ||\r\n\t\t\t\tboard[i].cardId === CardIds.CogworkCopter_BG24_008_G\r\n\t\t\t) {\r\n\t\t\t\t// When it's the opponent, the game state already contains all the buffs\r\n\t\t\t\tif (board[i]?.friendly) {\r\n\t\t\t\t\tconst buff = board[i].cardId === CardIds.CogworkCopter_BG24_008_G ? 2 : 1;\r\n\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\tboard[i],\r\n\t\t\t\t\t\thero.hand.filter(\r\n\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\thero,\r\n\t\t\t\t\t\tbuff,\r\n\t\t\t\t\t\tbuff,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\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 grantRandomDivineShield = (\r\n\tsource: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst elligibleEntities = board\r\n\t\t.filter((entity) => !entity.divineShield)\r\n\t\t.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\tif (elligibleEntities.length > 0) {\r\n\t\tconst chosen = pickRandom(elligibleEntities);\r\n\t\tupdateDivineShield(chosen, board, hero, otherHero, true, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(source, chosen, board, null, null);\r\n\t}\r\n};\r\n\r\nexport const grantDivineShieldToLeftmostMinions = (\r\n\tsource: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tquantity: number,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < Math.min(quantity, board.length); i++) {\r\n\t\tupdateDivineShield(board[i], board, hero, otherHero, true, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(source, board[i], board, null, null);\r\n\t}\r\n};\r\n\r\nexport interface OnDivineShieldUpdatedInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n\ttarget: BoardEntity;\r\n\tpreviousValue: boolean;\r\n}\r\n"]}
@@ -66,7 +66,7 @@ const handleSpawnEffect = (board, boardHero, otherBoard, otherHero, spawned, gam
66
66
  }
67
67
  break;
68
68
  case "GVG_062":
69
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MECH, gameState.allCards)) {
69
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MECH, gameState.anomalies, gameState.allCards)) {
70
70
  if (!entity.divineShield) {
71
71
  (0, divine_shield_1.updateDivineShield)(entity, board, boardHero, otherHero, true, gameState);
72
72
  }
@@ -76,7 +76,7 @@ const handleSpawnEffect = (board, boardHero, otherBoard, otherHero, spawned, gam
76
76
  break;
77
77
  case "BGS_204":
78
78
  case "TB_BaconUps_304":
79
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.DEMON, gameState.allCards)) {
79
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.DEMON, gameState.anomalies, gameState.allCards)) {
80
80
  const statsBonus = entity.cardId === "TB_BaconUps_304" ? 2 : 1;
81
81
  (0, stats_1.modifyStats)(entity, statsBonus, statsBonus, board, boardHero, gameState);
82
82
  gameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);
@@ -84,7 +84,7 @@ const handleSpawnEffect = (board, boardHero, otherBoard, otherHero, spawned, gam
84
84
  break;
85
85
  case "BGS_021":
86
86
  case "TB_BaconUps_090":
87
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.allCards)) {
87
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
88
88
  const statsBonus = entity.cardId === "TB_BaconUps_090" ? 8 : 4;
89
89
  (0, stats_1.modifyStats)(spawned, statsBonus, statsBonus, board, boardHero, gameState);
90
90
  gameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);
@@ -92,7 +92,7 @@ const handleSpawnEffect = (board, boardHero, otherBoard, otherHero, spawned, gam
92
92
  break;
93
93
  case "BG27_509":
94
94
  case "BG27_509_G":
95
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.allCards)) {
95
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
96
96
  const statsBonus = entity.cardId === "BG27_509_G" ? 16 : 8;
97
97
  (0, stats_1.modifyStats)(spawned, statsBonus, statsBonus, board, boardHero, gameState);
98
98
  gameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);
@@ -100,7 +100,7 @@ const handleSpawnEffect = (board, boardHero, otherBoard, otherHero, spawned, gam
100
100
  break;
101
101
  case "BGS_017":
102
102
  case "TB_BaconUps_086":
103
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.allCards)) {
103
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
104
104
  const statsBonus = entity.cardId === "TB_BaconUps_086" ? 4 : 2;
105
105
  (0, stats_1.modifyStats)(spawned, statsBonus, 0, board, boardHero, gameState);
106
106
  gameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);
@@ -121,7 +121,7 @@ const handleAddedMinionAuraEffect = (board, boardHero, otherBoard, otherHero, sp
121
121
  (0, stats_1.modifyStats)(spawned, 2, 2, board, boardHero, gameState);
122
122
  break;
123
123
  case "TB_BaconShop_HP_015":
124
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MECH, gameState.allCards)) {
124
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MECH, gameState.anomalies, gameState.allCards)) {
125
125
  (0, stats_1.modifyStats)(spawned, 3, 0, board, boardHero, gameState);
126
126
  }
127
127
  break;
@@ -135,7 +135,7 @@ const handleAddedMinionAuraEffect = (board, boardHero, otherBoard, otherHero, sp
135
135
  for (const trinket of boardHero.trinkets) {
136
136
  switch (trinket.cardId) {
137
137
  case "BG30_MagicItem_978":
138
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MECH, gameState.allCards)) {
138
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MECH, gameState.anomalies, gameState.allCards)) {
139
139
  const target = (0, utils_1.pickRandom)(board.filter((e) => !e.divineShield));
140
140
  if (!!target) {
141
141
  (0, divine_shield_1.updateDivineShield)(target, board, boardHero, otherHero, true, gameState);
@@ -212,17 +212,17 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState) => {
212
212
  }
213
213
  }
214
214
  }
215
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.UNDEAD, gameState.allCards)) {
215
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.UNDEAD, gameState.anomalies, gameState.allCards)) {
216
216
  if (boardHero.globalInfo.UndeadAttackBonus > 0) {
217
217
  (0, stats_1.modifyStats)(spawned, boardHero.globalInfo.UndeadAttackBonus, 0, board, boardHero, gameState);
218
218
  }
219
219
  }
220
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.PIRATE, gameState.allCards)) {
220
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.PIRATE, gameState.anomalies, gameState.allCards)) {
221
221
  if (boardHero.globalInfo.PirateAttackBonus > 0) {
222
222
  (0, stats_1.modifyStats)(spawned, boardHero.globalInfo.PirateAttackBonus, 0, board, boardHero, gameState);
223
223
  }
224
224
  }
225
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.allCards)) {
225
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
226
226
  if (boardHero.globalInfo.GoldrinnBuffAtk > 0) {
227
227
  (0, stats_1.modifyStats)(spawned, boardHero.globalInfo.GoldrinnBuffAtk, boardHero.globalInfo.GoldrinnBuffHealth, board, boardHero, gameState);
228
228
  gameState.spectator.registerPowerTarget(boardHero, spawned, board, null, null);
@@ -246,14 +246,14 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState) => {
246
246
  switch (entity.cardId) {
247
247
  case "BG_EX1_507":
248
248
  case "TB_BaconUps_008":
249
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MURLOC, gameState.allCards) &&
249
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.MURLOC, gameState.anomalies, gameState.allCards) &&
250
250
  entity.entityId !== spawned.entityId) {
251
251
  spawned.attack += entity.cardId === "TB_BaconUps_008" ? 4 : 2;
252
252
  }
253
253
  break;
254
254
  case "BG_NEW1_027":
255
255
  case "TB_BaconUps_136":
256
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.PIRATE, gameState.allCards) &&
256
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.PIRATE, gameState.anomalies, gameState.allCards) &&
257
257
  entity.entityId !== spawned.entityId) {
258
258
  spawned.attack += entity.cardId === "TB_BaconUps_136" ? 2 : 1;
259
259
  spawned.health += entity.cardId === "TB_BaconUps_136" ? 2 : 1;
@@ -261,7 +261,7 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState) => {
261
261
  break;
262
262
  case "BG21_039":
263
263
  case "BG21_039_G":
264
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.DEMON, gameState.allCards) &&
264
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.DEMON, gameState.anomalies, gameState.allCards) &&
265
265
  entity.entityId !== spawned.entityId) {
266
266
  spawned.attack += entity.cardId === "BG21_039_G" ? 2 : 1;
267
267
  }
@@ -274,7 +274,7 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState) => {
274
274
  break;
275
275
  case "BG27_030":
276
276
  case "BG27_030_G":
277
- if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.UNDEAD, gameState.allCards) &&
277
+ if ((0, utils_2.hasCorrectTribe)(spawned, boardHero, reference_data_1.Race.UNDEAD, gameState.anomalies, gameState.allCards) &&
278
278
  entity.entityId !== spawned.entityId) {
279
279
  spawned.attack += (entity.cardId === "BG27_030_G" ? 2 : 1) * boardHero.tavernTier;
280
280
  }
@@ -379,12 +379,12 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState) => {
379
379
  gameState,
380
380
  });
381
381
  }
382
- if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.UNDEAD, gameState.allCards)) {
382
+ if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.UNDEAD, gameState.anomalies, gameState.allCards)) {
383
383
  if (boardHero.globalInfo.UndeadAttackBonus > 0) {
384
384
  entity.attack = Math.max(0, entity.attack - boardHero.globalInfo.UndeadAttackBonus);
385
385
  }
386
386
  }
387
- if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.BEAST, gameState.allCards)) {
387
+ if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
388
388
  if (boardHero.globalInfo.GoldrinnBuffAtk > 0) {
389
389
  entity.attack = Math.max(0, entity.attack - boardHero.globalInfo.GoldrinnBuffAtk);
390
390
  entity.health = Math.max(1, entity.health - boardHero.globalInfo.GoldrinnBuffHealth);
@@ -394,14 +394,14 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState) => {
394
394
  switch (boardEntity.cardId) {
395
395
  case "BG_EX1_507":
396
396
  case "TB_BaconUps_008":
397
- if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.MURLOC, gameState.allCards) &&
397
+ if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.MURLOC, gameState.anomalies, gameState.allCards) &&
398
398
  entity.entityId !== boardEntity.entityId) {
399
399
  entity.attack = Math.max(0, entity.attack - (boardEntity.cardId === "TB_BaconUps_008" ? 4 : 2));
400
400
  }
401
401
  break;
402
402
  case "BG_NEW1_027":
403
403
  case "TB_BaconUps_136":
404
- if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.PIRATE, gameState.allCards) &&
404
+ if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.PIRATE, gameState.anomalies, gameState.allCards) &&
405
405
  entity.entityId !== boardEntity.entityId) {
406
406
  entity.attack = Math.max(0, entity.attack - (boardEntity.cardId === "TB_BaconUps_136" ? 2 : 1));
407
407
  entity.health = Math.max(1, entity.health - (boardEntity.cardId === "TB_BaconUps_136" ? 2 : 1));
@@ -409,7 +409,7 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState) => {
409
409
  break;
410
410
  case "BG21_039":
411
411
  case "BG21_039_G":
412
- if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.DEMON, gameState.allCards) &&
412
+ if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.DEMON, gameState.anomalies, gameState.allCards) &&
413
413
  entity.entityId !== boardEntity.entityId) {
414
414
  entity.attack = Math.max(0, entity.attack - (boardEntity.cardId === "BG21_039_G" ? 2 : 1));
415
415
  }
@@ -422,7 +422,7 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState) => {
422
422
  break;
423
423
  case "BG27_030":
424
424
  case "BG27_030_G":
425
- if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.UNDEAD, gameState.allCards) &&
425
+ if ((0, utils_2.hasCorrectTribe)(entity, boardHero, reference_data_1.Race.UNDEAD, gameState.anomalies, gameState.allCards) &&
426
426
  entity.entityId !== boardEntity.entityId) {
427
427
  entity.attack = Math.max(0, entity.attack -
428
428
  (boardEntity.cardId === "BG27_030_G" ? 2 : 1) * boardHero.tavernTier);
@@ -480,7 +480,7 @@ const handleMinionAddedAuraEffect = (spawnedCardId, spawned, board, boardHero, g
480
480
  case "BG_NEW1_027":
481
481
  case "TB_BaconUps_136":
482
482
  board
483
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.PIRATE, gameState.allCards))
483
+ .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.PIRATE, gameState.anomalies, gameState.allCards))
484
484
  .filter((e) => e.entityId !== spawned.entityId)
485
485
  .forEach((e) => {
486
486
  e.attack += spawned.cardId === "TB_BaconUps_136" ? 2 : 1;
@@ -490,7 +490,7 @@ const handleMinionAddedAuraEffect = (spawnedCardId, spawned, board, boardHero, g
490
490
  case "BG_EX1_507":
491
491
  case "TB_BaconUps_008":
492
492
  board
493
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.MURLOC, gameState.allCards))
493
+ .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.MURLOC, gameState.anomalies, gameState.allCards))
494
494
  .filter((e) => e.entityId !== spawned.entityId)
495
495
  .forEach((e) => {
496
496
  e.attack += spawned.cardId === "TB_BaconUps_008" ? 4 : 2;
@@ -499,7 +499,7 @@ const handleMinionAddedAuraEffect = (spawnedCardId, spawned, board, boardHero, g
499
499
  case "BG21_039":
500
500
  case "BG21_039_G":
501
501
  board
502
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.DEMON, gameState.allCards))
502
+ .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.DEMON, gameState.anomalies, gameState.allCards))
503
503
  .filter((e) => e.entityId !== spawned.entityId)
504
504
  .forEach((e) => {
505
505
  e.attack += spawned.cardId === "BG21_039_G" ? 4 : 2;
@@ -516,7 +516,7 @@ const handleMinionAddedAuraEffect = (spawnedCardId, spawned, board, boardHero, g
516
516
  case "BG27_030":
517
517
  case "BG27_030_G":
518
518
  board
519
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.UNDEAD, gameState.allCards))
519
+ .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardHero, reference_data_1.Race.UNDEAD, gameState.anomalies, gameState.allCards))
520
520
  .filter((e) => e.entityId !== spawned.entityId)
521
521
  .forEach((e) => {
522
522
  e.attack += (spawned.cardId === "BG27_030_G" ? 2 : 1) * boardHero.tavernTier;
@@ -561,7 +561,8 @@ const onMinionSummoned = (hero, board, gameState) => {
561
561
  exports.onMinionSummoned = onMinionSummoned;
562
562
  const handleAfterSpawnEffect = (board, hero, otherBoard, otherHero, spawned, gameState) => {
563
563
  var _a;
564
- for (const entity of board) {
564
+ const initialBoard = [...board];
565
+ for (const entity of initialBoard) {
565
566
  const onAfterSpawnedImpl = _card_mappings_1.cardMappings[entity.cardId];
566
567
  if ((0, card_interface_1.hasAfterOtherSpawned)(onAfterSpawnedImpl)) {
567
568
  onAfterSpawnedImpl.afterOtherSpawned(entity, {
@@ -606,7 +607,7 @@ const handleAfterSpawnEffect = (board, hero, otherBoard, otherHero, spawned, gam
606
607
  break;
607
608
  case "BG26_802":
608
609
  case "BG26_802_G":
609
- if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.BEAST, gameState.allCards) &&
610
+ if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards) &&
610
611
  entity.entityId !== spawned.entityId) {
611
612
  const bananaStatBuff = entity.cardId === "BG26_802_G" ? 3 : 2;
612
613
  (0, stats_1.setEntityStats)(spawned, spawned.attack * bananaStatBuff, spawned.health * bananaStatBuff, board, hero, gameState);
@@ -622,7 +623,7 @@ const handleAfterSpawnEffect = (board, hero, otherBoard, otherHero, spawned, gam
622
623
  break;
623
624
  case "TB_BaconShop_HERO_53_Buddy":
624
625
  case "TB_BaconShop_HERO_53_Buddy_G":
625
- if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.DRAGON, gameState.allCards) &&
626
+ if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.DRAGON, gameState.anomalies, gameState.allCards) &&
626
627
  entity.entityId !== spawned.entityId) {
627
628
  const valithriaBuff = entity.cardId === "TB_BaconShop_HERO_53_Buddy_G" ? 3 : 2;
628
629
  (0, stats_1.modifyStats)(entity, valithriaBuff, valithriaBuff, board, hero, gameState);
@@ -630,7 +631,7 @@ const handleAfterSpawnEffect = (board, hero, otherBoard, otherHero, spawned, gam
630
631
  }
631
632
  break;
632
633
  case "BG26_RLK_824":
633
- if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.UNDEAD, gameState.allCards) &&
634
+ if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.UNDEAD, gameState.anomalies, gameState.allCards) &&
634
635
  entity.entityId !== spawned.entityId) {
635
636
  (0, stats_1.modifyStats)(spawned, 1, 0, board, hero, gameState);
636
637
  gameState.spectator.registerPowerTarget(entity, entity, board, null, null);
@@ -641,7 +642,7 @@ const handleAfterSpawnEffect = (board, hero, otherBoard, otherHero, spawned, gam
641
642
  for (const trinket of hero.trinkets) {
642
643
  switch (trinket.cardId) {
643
644
  case "BG30_MagicItem_540":
644
- if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.BEAST, gameState.allCards)) {
645
+ if ((0, utils_2.hasCorrectTribe)(spawned, hero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
645
646
  (0, stats_1.setEntityStats)(spawned, spawned.attack * 2, spawned.health * 2, board, hero, gameState);
646
647
  gameState.spectator.registerPowerTarget(hero, spawned, board, null, null);
647
648
  }