@firestone-hs/simulate-bgs-battle 1.1.725 → 1.1.727

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 (158) hide show
  1. package/dist/bgs-battle-info.d.ts +1 -0
  2. package/dist/bgs-battle-info.js.map +1 -1
  3. package/dist/bgs-battle-options.d.ts +1 -0
  4. package/dist/bgs-battle-options.js.map +1 -1
  5. package/dist/cards/impl/_card-mappings.js +58 -0
  6. package/dist/cards/impl/_card-mappings.js.map +1 -1
  7. package/dist/cards/impl/bg-spell/misplaced-tea-set.js +5 -8
  8. package/dist/cards/impl/bg-spell/misplaced-tea-set.js.map +1 -1
  9. package/dist/cards/impl/bg-spell/weapons-forge.d.ts +2 -0
  10. package/dist/cards/impl/bg-spell/weapons-forge.js +12 -0
  11. package/dist/cards/impl/bg-spell/weapons-forge.js.map +1 -0
  12. package/dist/cards/impl/enchantments/charisma.d.ts +2 -0
  13. package/dist/cards/impl/enchantments/charisma.js +44 -0
  14. package/dist/cards/impl/enchantments/charisma.js.map +1 -0
  15. package/dist/cards/impl/enchantments/consanguinity.d.ts +2 -0
  16. package/dist/cards/impl/enchantments/consanguinity.js +13 -0
  17. package/dist/cards/impl/enchantments/consanguinity.js.map +1 -0
  18. package/dist/cards/impl/enchantments/mystic-essence.d.ts +2 -0
  19. package/dist/cards/impl/enchantments/mystic-essence.js +13 -0
  20. package/dist/cards/impl/enchantments/mystic-essence.js.map +1 -0
  21. package/dist/cards/impl/hero-power/die-insects.d.ts +2 -0
  22. package/dist/cards/impl/hero-power/die-insects.js +21 -0
  23. package/dist/cards/impl/hero-power/die-insects.js.map +1 -0
  24. package/dist/cards/impl/hero-power/fire-the-cannons.d.ts +2 -0
  25. package/dist/cards/impl/hero-power/fire-the-cannons.js +21 -0
  26. package/dist/cards/impl/hero-power/fire-the-cannons.js.map +1 -0
  27. package/dist/cards/impl/hero-power/murloc-king-enchantment.d.ts +2 -0
  28. package/dist/cards/impl/hero-power/murloc-king-enchantment.js +9 -0
  29. package/dist/cards/impl/hero-power/murloc-king-enchantment.js.map +1 -0
  30. package/dist/cards/impl/hero-power/murloc-king.d.ts +2 -0
  31. package/dist/cards/impl/hero-power/murloc-king.js +24 -0
  32. package/dist/cards/impl/hero-power/murloc-king.js.map +1 -0
  33. package/dist/cards/impl/hero-power/nefarious-fire.d.ts +2 -0
  34. package/dist/cards/impl/hero-power/nefarious-fire.js +19 -0
  35. package/dist/cards/impl/hero-power/nefarious-fire.js.map +1 -0
  36. package/dist/cards/impl/hero-power/wax-warband.js +5 -1
  37. package/dist/cards/impl/hero-power/wax-warband.js.map +1 -1
  38. package/dist/cards/impl/minion/arfus.d.ts +2 -0
  39. package/dist/cards/impl/minion/arfus.js +17 -0
  40. package/dist/cards/impl/minion/arfus.js.map +1 -0
  41. package/dist/cards/impl/minion/bramble-tunneler.d.ts +2 -0
  42. package/dist/cards/impl/minion/bramble-tunneler.js +14 -0
  43. package/dist/cards/impl/minion/bramble-tunneler.js.map +1 -0
  44. package/dist/cards/impl/minion/branns-epic-egg.d.ts +2 -0
  45. package/dist/cards/impl/minion/branns-epic-egg.js +23 -0
  46. package/dist/cards/impl/minion/branns-epic-egg.js.map +1 -0
  47. package/dist/cards/impl/minion/bronze-timewalker.d.ts +2 -0
  48. package/dist/cards/impl/minion/bronze-timewalker.js +22 -0
  49. package/dist/cards/impl/minion/bronze-timewalker.js.map +1 -0
  50. package/dist/cards/impl/minion/choral-mrrrglr.js +15 -5
  51. package/dist/cards/impl/minion/choral-mrrrglr.js.map +1 -1
  52. package/dist/cards/impl/minion/elder-taggawag.d.ts +2 -5
  53. package/dist/cards/impl/minion/elder-taggawag.js +1 -0
  54. package/dist/cards/impl/minion/elder-taggawag.js.map +1 -1
  55. package/dist/cards/impl/minion/elementium-squirrel-bomb.d.ts +2 -0
  56. package/dist/cards/impl/minion/elementium-squirrel-bomb.js +22 -0
  57. package/dist/cards/impl/minion/elementium-squirrel-bomb.js.map +1 -0
  58. package/dist/cards/impl/minion/fleeing-fugitive.js +1 -1
  59. package/dist/cards/impl/minion/fleeing-fugitive.js.map +1 -1
  60. package/dist/cards/impl/minion/gatekeeper-amalgam.js +2 -7
  61. package/dist/cards/impl/minion/gatekeeper-amalgam.js.map +1 -1
  62. package/dist/cards/impl/minion/glambot.js +2 -1
  63. package/dist/cards/impl/minion/glambot.js.map +1 -1
  64. package/dist/cards/impl/minion/headhunter-gryphon.d.ts +2 -0
  65. package/dist/cards/impl/minion/headhunter-gryphon.js +19 -0
  66. package/dist/cards/impl/minion/headhunter-gryphon.js.map +1 -0
  67. package/dist/cards/impl/minion/imp-lusionist.d.ts +2 -0
  68. package/dist/cards/impl/minion/imp-lusionist.js +14 -0
  69. package/dist/cards/impl/minion/imp-lusionist.js.map +1 -0
  70. package/dist/cards/impl/minion/kilrek.d.ts +2 -0
  71. package/dist/cards/impl/minion/kilrek.js +18 -0
  72. package/dist/cards/impl/minion/kilrek.js.map +1 -0
  73. package/dist/cards/impl/minion/lady-sinestra.d.ts +2 -0
  74. package/dist/cards/impl/minion/lady-sinestra.js +14 -0
  75. package/dist/cards/impl/minion/lady-sinestra.js.map +1 -0
  76. package/dist/cards/impl/minion/loyal-henchman.d.ts +2 -0
  77. package/dist/cards/impl/minion/loyal-henchman.js +21 -0
  78. package/dist/cards/impl/minion/loyal-henchman.js.map +1 -0
  79. package/dist/cards/impl/minion/mawsworn-soulkeeper.d.ts +2 -0
  80. package/dist/cards/impl/minion/mawsworn-soulkeeper.js +21 -0
  81. package/dist/cards/impl/minion/mawsworn-soulkeeper.js.map +1 -0
  82. package/dist/cards/impl/minion/probius.d.ts +2 -0
  83. package/dist/cards/impl/minion/probius.js +16 -0
  84. package/dist/cards/impl/minion/probius.js.map +1 -0
  85. package/dist/cards/impl/minion/rescue-bot.d.ts +2 -0
  86. package/dist/cards/impl/minion/rescue-bot.js +14 -0
  87. package/dist/cards/impl/minion/rescue-bot.js.map +1 -0
  88. package/dist/cards/impl/minion/shamanic-tidecaller.js +2 -1
  89. package/dist/cards/impl/minion/shamanic-tidecaller.js.map +1 -1
  90. package/dist/cards/impl/minion/sr-tomb-diver.d.ts +2 -0
  91. package/dist/cards/impl/minion/sr-tomb-diver.js +18 -0
  92. package/dist/cards/impl/minion/sr-tomb-diver.js.map +1 -0
  93. package/dist/cards/impl/minion/stalwart-kodo.js +3 -1
  94. package/dist/cards/impl/minion/stalwart-kodo.js.map +1 -1
  95. package/dist/cards/impl/minion/timewarped-mrrrglr.js +11 -5
  96. package/dist/cards/impl/minion/timewarped-mrrrglr.js.map +1 -1
  97. package/dist/cards/impl/minion/torrential-ruiner.js +2 -1
  98. package/dist/cards/impl/minion/torrential-ruiner.js.map +1 -1
  99. package/dist/cards/impl/minion/tuskarr-raider.d.ts +2 -0
  100. package/dist/cards/impl/minion/tuskarr-raider.js +36 -0
  101. package/dist/cards/impl/minion/tuskarr-raider.js.map +1 -0
  102. package/dist/cards/impl/minion/twilight-hatchling.js +1 -4
  103. package/dist/cards/impl/minion/twilight-hatchling.js.map +1 -1
  104. package/dist/cards/impl/minion/twilight-tidehunter.js +1 -1
  105. package/dist/cards/impl/minion/twilight-tidehunter.js.map +1 -1
  106. package/dist/cards/impl/minion/unearthed-underling.d.ts +2 -0
  107. package/dist/cards/impl/minion/unearthed-underling.js +14 -0
  108. package/dist/cards/impl/minion/unearthed-underling.js.map +1 -0
  109. package/dist/cards/impl/minion/vigilant-bristlemane.js +1 -1
  110. package/dist/cards/impl/minion/vigilant-bristlemane.js.map +1 -1
  111. package/dist/cards/impl/spell/fleeting-vigor.js +6 -1
  112. package/dist/cards/impl/spell/fleeting-vigor.js.map +1 -1
  113. package/dist/cards/impl/spellcraft/floating-candle-set.d.ts +2 -0
  114. package/dist/cards/impl/spellcraft/floating-candle-set.js +21 -0
  115. package/dist/cards/impl/spellcraft/floating-candle-set.js.map +1 -0
  116. package/dist/cards/impl/trinket/flighty-portrait.d.ts +2 -0
  117. package/dist/cards/impl/trinket/flighty-portrait.js +21 -0
  118. package/dist/cards/impl/trinket/flighty-portrait.js.map +1 -0
  119. package/dist/input-clone.js +5 -1
  120. package/dist/input-clone.js.map +1 -1
  121. package/dist/input-sanitation.js +3 -0
  122. package/dist/input-sanitation.js.map +1 -1
  123. package/dist/services/rng.d.ts +8 -0
  124. package/dist/services/rng.js +40 -0
  125. package/dist/services/rng.js.map +1 -0
  126. package/dist/services/utils.js +3 -2
  127. package/dist/services/utils.js.map +1 -1
  128. package/dist/simulate-bgs-battle.d.ts +10 -0
  129. package/dist/simulate-bgs-battle.js +119 -77
  130. package/dist/simulate-bgs-battle.js.map +1 -1
  131. package/dist/simulation/add-minion-to-board.js +8 -6
  132. package/dist/simulation/add-minion-to-board.js.map +1 -1
  133. package/dist/simulation/auras.js +42 -41
  134. package/dist/simulation/auras.js.map +1 -1
  135. package/dist/simulation/damage-cap.d.ts +2 -0
  136. package/dist/simulation/damage-cap.js +28 -0
  137. package/dist/simulation/damage-cap.js.map +1 -0
  138. package/dist/simulation/deathrattle-spawns.js +0 -57
  139. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  140. package/dist/simulation/internal-game-state.d.ts +2 -0
  141. package/dist/simulation/internal-game-state.js.map +1 -1
  142. package/dist/simulation/reborn.js +0 -13
  143. package/dist/simulation/reborn.js.map +1 -1
  144. package/dist/simulation/shared-state.d.ts +3 -1
  145. package/dist/simulation/shared-state.js +4 -1
  146. package/dist/simulation/shared-state.js.map +1 -1
  147. package/dist/simulation/simulator.d.ts +1 -0
  148. package/dist/simulation/simulator.js +13 -4
  149. package/dist/simulation/simulator.js.map +1 -1
  150. package/dist/simulation/spawns.js +1 -1
  151. package/dist/simulation/spawns.js.map +1 -1
  152. package/dist/simulation/start-of-combat/soc-action-processor.js +12 -0
  153. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  154. package/dist/simulation/stats.js +41 -24
  155. package/dist/simulation/stats.js.map +1 -1
  156. package/dist/utils.js +4 -4
  157. package/dist/utils.js.map +1 -1
  158. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mystic-essence.js","sourceRoot":"","sources":["../../../../src/cards/impl/enchantments/mystic-essence.ts"],"names":[],"mappings":";;;AAKA,qEAAmE;AAKtD,QAAA,aAAa,GAAoC;IAC7D,OAAO,EAAE,4BAA+D;IACxE,iCAAiC,EAAE,CAClC,YAA8B,EAC9B,OAAoB,EACpB,KAAgC,EAC/B,EAAE;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;QACjE,IAAA,8BAAc,EAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACrG,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Mystic Essence (Dark Gift)\r\n * Deathrattle: Get a random Tavern spell.\r\n */\r\nimport { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nexport const MysticEssence: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: [CardIds.DarkGifts_MysticEssenceToken_BG36_MidGameEffect_000t5],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\t_enchantment: BoardEnchantment,\r\n\t\t_minion: BoardEntity,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => {\r\n\t\tconst spellId = input.gameState.cardsData.getRandomTavernSpell();\r\n\t\taddCardsInHand(input.boardWithDeadEntityHero, input.boardWithDeadEntity, [spellId], input.gameState);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const DieInsects: StartOfCombatCard;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DieInsects = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const attack_1 = require("../../../simulation/attack");
6
+ exports.DieInsects = {
7
+ startOfCombatTiming: 'start-of-combat',
8
+ cardIds: ["TB_BaconShop_HP_019"],
9
+ startOfCombat: (trinket, input) => {
10
+ for (const heroPower of input.playerEntity.heroPowers) {
11
+ if (exports.DieInsects.cardIds.includes(heroPower.cardId) && heroPower.used) {
12
+ const targets = (0, utils_1.pickMultipleRandomDifferent)(input.opponentBoard, 2);
13
+ for (const target of targets) {
14
+ (0, attack_1.dealDamageToMinion)(target, input.opponentBoard, input.opponentEntity, input.playerEntity, 8, input.playerBoard, input.playerEntity, input.gameState);
15
+ }
16
+ return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
17
+ }
18
+ }
19
+ },
20
+ };
21
+ //# sourceMappingURL=die-insects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"die-insects.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/die-insects.ts"],"names":[],"mappings":";;;AAIA,mDAAsE;AACtE,uDAAgE;AAInD,QAAA,UAAU,GAAsB;IAC5C,mBAAmB,EAAE,iBAAiB;IACtC,OAAO,EAAE,uBAAwC;IACjD,aAAa,EAAE,CAAC,OAAmE,EAAE,KAAe,EAAE,EAAE;QACvG,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE;YACtD,IAAI,kBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE;gBACpE,MAAM,OAAO,GAAG,IAAA,mCAA2B,EAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gBACpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;oBAC7B,IAAA,2BAAkB,EACjB,MAAM,EACN,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,YAAY,EAClB,CAAC,EACD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;iBACF;gBACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC;aACpE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { BoardSecret } from '../../../board-secret';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickMultipleRandomDifferent } from '../../../services/utils';\r\nimport { dealDamageToMinion } from '../../../simulation/attack';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const DieInsects: StartOfCombatCard = {\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tcardIds: [CardIds.DieInsects_TB_BaconShop_HP_019],\r\n\tstartOfCombat: (trinket: BoardTrinket | BoardEntity | BgsPlayerEntity | BoardSecret, input: SoCInput) => {\r\n\t\tfor (const heroPower of input.playerEntity.heroPowers) {\r\n\t\t\tif (DieInsects.cardIds.includes(heroPower.cardId) && heroPower.used) {\r\n\t\t\t\tconst targets = pickMultipleRandomDifferent(input.opponentBoard, 2);\r\n\t\t\t\tfor (const target of targets) {\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t8,\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}\r\n\t\t\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: true };\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const FireTheCannons: StartOfCombatCard;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FireTheCannons = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const attack_1 = require("../../../simulation/attack");
6
+ exports.FireTheCannons = {
7
+ startOfCombatTiming: 'start-of-combat',
8
+ cardIds: ["TB_BaconShop_HP_027"],
9
+ startOfCombat: (trinket, input) => {
10
+ for (const heroPower of input.playerEntity.heroPowers) {
11
+ if (exports.FireTheCannons.cardIds.includes(heroPower.cardId) && heroPower.used) {
12
+ const targets = (0, utils_1.pickMultipleRandomDifferent)(input.opponentBoard, 2);
13
+ for (const target of targets) {
14
+ (0, attack_1.dealDamageToMinion)(target, input.opponentBoard, input.opponentEntity, input.playerEntity, 4, input.playerBoard, input.playerEntity, input.gameState);
15
+ }
16
+ return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
17
+ }
18
+ }
19
+ },
20
+ };
21
+ //# sourceMappingURL=fire-the-cannons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fire-the-cannons.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/fire-the-cannons.ts"],"names":[],"mappings":";;;AAIA,mDAAsE;AACtE,uDAAgE;AAInD,QAAA,cAAc,GAAsB;IAChD,mBAAmB,EAAE,iBAAiB;IACtC,OAAO,EAAE,uBAAwB;IACjC,aAAa,EAAE,CAAC,OAAmE,EAAE,KAAe,EAAE,EAAE;QACvG,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE;YACtD,IAAI,sBAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE;gBACxE,MAAM,OAAO,GAAG,IAAA,mCAA2B,EAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gBACpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;oBAC7B,IAAA,2BAAkB,EACjB,MAAM,EACN,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,YAAY,EAClB,CAAC,EACD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;iBACF;gBACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC;aACpE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { BoardSecret } from '../../../board-secret';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickMultipleRandomDifferent } from '../../../services/utils';\r\nimport { dealDamageToMinion } from '../../../simulation/attack';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const FireTheCannons: StartOfCombatCard = {\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tcardIds: [CardIds.FireTheCannons],\r\n\tstartOfCombat: (trinket: BoardTrinket | BoardEntity | BgsPlayerEntity | BoardSecret, input: SoCInput) => {\r\n\t\tfor (const heroPower of input.playerEntity.heroPowers) {\r\n\t\t\tif (FireTheCannons.cardIds.includes(heroPower.cardId) && heroPower.used) {\r\n\t\t\t\tconst targets = pickMultipleRandomDifferent(input.opponentBoard, 2);\r\n\t\t\t\tfor (const target of targets) {\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t4,\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}\r\n\t\t\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: true };\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnEnchantmentCard } from '../../card.interface';
2
+ export declare const MurlocKingEnchantment: DeathrattleSpawnEnchantmentCard;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MurlocKingEnchantment = void 0;
4
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
5
+ exports.MurlocKingEnchantment = {
6
+ cardIds: ["TB_BaconShop_HP_017e"],
7
+ deathrattleSpawnEnchantmentEffect: (_enchantment, _minion, input) => (0, deathrattle_spawns_1.simplifiedSpawnEntities)("EX1_506a", 1, input),
8
+ };
9
+ //# sourceMappingURL=murloc-king-enchantment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"murloc-king-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/murloc-king-enchantment.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,qBAAqB,GAAoC;IACrE,OAAO,EAAE,wBAA0C;IACnD,iCAAiC,EAAE,CAClC,YAA8B,EAC9B,OAAoB,EACpB,KAAgC,EAC/B,EAAE,CAAC,IAAA,4CAAuB,cAA6C,CAAC,EAAE,KAAK,CAAC;CAClF,CAAC","sourcesContent":["import { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\n\r\nexport const MurlocKingEnchantment: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: [CardIds.MurlocKing_MurlocKingEnchantment],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\t_enchantment: BoardEnchantment,\r\n\t\t_minion: BoardEntity,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => simplifiedSpawnEntities(CardIds.MurlocTidehunter_MurlocScoutLegacy, 1, input),\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const MurlocKing: StartOfCombatCard;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MurlocKing = void 0;
4
+ exports.MurlocKing = {
5
+ startOfCombatTiming: 'start-of-combat',
6
+ cardIds: ["TB_BaconShop_HP_017"],
7
+ startOfCombat: (trinket, input) => {
8
+ var _a;
9
+ for (const heroPower of input.playerEntity.heroPowers) {
10
+ if (exports.MurlocKing.cardIds.includes(heroPower.cardId) && heroPower.used) {
11
+ for (const minion of input.playerBoard) {
12
+ minion.enchantments = (_a = minion.enchantments) !== null && _a !== void 0 ? _a : [];
13
+ minion.enchantments.push({
14
+ cardId: "TB_BaconShop_HP_017e",
15
+ originEntityId: input.playerEntity.entityId,
16
+ timing: input.gameState.sharedState.currentEntityId++,
17
+ });
18
+ }
19
+ return true;
20
+ }
21
+ }
22
+ },
23
+ };
24
+ //# sourceMappingURL=murloc-king.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"murloc-king.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/murloc-king.ts"],"names":[],"mappings":";;;AAOa,QAAA,UAAU,GAAsB;IAC5C,mBAAmB,EAAE,iBAAiB;IACtC,OAAO,EAAE,uBAAoB;IAC7B,aAAa,EAAE,CAAC,OAAmE,EAAE,KAAe,EAAE,EAAE;;QACvG,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE;YACtD,IAAI,kBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE;gBACpE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;oBACvC,MAAM,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;oBAChD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;wBACxB,MAAM,wBAA0C;wBAChD,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,QAAQ;wBAC3C,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;qBACrD,CAAC,CAAC;iBACH;gBACD,OAAO,IAAI,CAAC;aACZ;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { BoardSecret } from '../../../board-secret';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const MurlocKing: StartOfCombatCard = {\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tcardIds: [CardIds.MurlocKing],\r\n\tstartOfCombat: (trinket: BoardTrinket | BoardEntity | BgsPlayerEntity | BoardSecret, input: SoCInput) => {\r\n\t\tfor (const heroPower of input.playerEntity.heroPowers) {\r\n\t\t\tif (MurlocKing.cardIds.includes(heroPower.cardId) && heroPower.used) {\r\n\t\t\t\tfor (const minion of input.playerBoard) {\r\n\t\t\t\t\tminion.enchantments = minion.enchantments ?? [];\r\n\t\t\t\t\tminion.enchantments.push({\r\n\t\t\t\t\t\tcardId: CardIds.MurlocKing_MurlocKingEnchantment,\r\n\t\t\t\t\t\toriginEntityId: input.playerEntity.entityId,\r\n\t\t\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const NefariousFire: StartOfCombatCard;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NefariousFire = void 0;
4
+ const attack_1 = require("../../../simulation/attack");
5
+ exports.NefariousFire = {
6
+ startOfCombatTiming: 'start-of-combat',
7
+ cardIds: ["TB_BaconShop_HP_043"],
8
+ startOfCombat: (trinket, input) => {
9
+ for (const heroPower of input.playerEntity.heroPowers) {
10
+ if (exports.NefariousFire.cardIds.includes(heroPower.cardId) && heroPower.used) {
11
+ for (const target of [...input.opponentBoard]) {
12
+ (0, attack_1.dealDamageToMinion)(target, input.opponentBoard, input.opponentEntity, input.playerEntity, 1, input.playerBoard, input.playerEntity, input.gameState);
13
+ }
14
+ return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
15
+ }
16
+ }
17
+ },
18
+ };
19
+ //# sourceMappingURL=nefarious-fire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nefarious-fire.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/nefarious-fire.ts"],"names":[],"mappings":";;;AAIA,uDAAgE;AAInD,QAAA,aAAa,GAAsB;IAC/C,mBAAmB,EAAE,iBAAiB;IACtC,OAAO,EAAE,uBAAuB;IAChC,aAAa,EAAE,CAAC,OAAmE,EAAE,KAAe,EAAE,EAAE;QACvG,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE;YACtD,IAAI,qBAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE;gBACvE,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE;oBAC9C,IAAA,2BAAkB,EACjB,MAAM,EACN,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,YAAY,EAClB,CAAC,EACD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;iBACF;gBACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC;aACpE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { BoardSecret } from '../../../board-secret';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { dealDamageToMinion } from '../../../simulation/attack';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const NefariousFire: StartOfCombatCard = {\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tcardIds: [CardIds.NefariousFire],\r\n\tstartOfCombat: (trinket: BoardTrinket | BoardEntity | BgsPlayerEntity | BoardSecret, input: SoCInput) => {\r\n\t\tfor (const heroPower of input.playerEntity.heroPowers) {\r\n\t\t\tif (NefariousFire.cardIds.includes(heroPower.cardId) && heroPower.used) {\r\n\t\t\t\tfor (const target of [...input.opponentBoard]) {\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t1,\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}\r\n\t\t\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: true };\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -26,7 +26,11 @@ exports.WaxWarband = {
26
26
  }),
27
27
  ];
28
28
  allMinions.forEach((e) => {
29
- (0, stats_1.modifyStats)(e, trinket, +heroPower.info3, +heroPower.info3, input.playerBoard, input.playerEntity, input.gameState);
29
+ var _a, _b, _c;
30
+ const buff = typeof heroPower.info3 === 'number' && heroPower.info3 > 0
31
+ ? heroPower.info3
32
+ : (_c = (_b = (_a = input.gameState.allCards.getCard(heroPower.cardId)) === null || _a === void 0 ? void 0 : _a.tags) === null || _b === void 0 ? void 0 : _b['TAG_SCRIPT_DATA_NUM_3']) !== null && _c !== void 0 ? _c : 1;
33
+ (0, stats_1.modifyStats)(e, trinket, +buff, +buff, input.playerBoard, input.playerEntity, input.gameState);
30
34
  });
31
35
  return true;
32
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wax-warband.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/wax-warband.ts"],"names":[],"mappings":"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","sourcesContent":["import { ALL_BG_RACES, AllCardsService, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getEffectiveTribesForEntity } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const WaxWarband: StartOfCombatCard = {\r\n\tstartOfCombatTiming: 'pre-combat',\r\n\tcardIds: [CardIds.WaxWarband],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tfor (const heroPower of input.playerEntity.heroPowers) {\r\n\t\t\tif (WaxWarband.cardIds.includes(heroPower.cardId) && heroPower.used) {\r\n\t\t\t\tif (input.playerBoard.length > 0) {\r\n\t\t\t\t\tconst boardWithTribes = input.playerBoard.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t!!getEffectiveTribesForEntity(\r\n\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\t\t\t).length,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst boardWithoutAll = boardWithTribes.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t!getEffectiveTribesForEntity(\r\n\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\t\t\t)?.includes(Race.ALL),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst selectedMinions = selectMinions(boardWithoutAll, ALL_BG_RACES, input.gameState.allCards);\r\n\t\t\t\t\tconst allMinions = [\r\n\t\t\t\t\t\t...selectedMinions,\r\n\t\t\t\t\t\t...boardWithTribes.filter((e) =>\r\n\t\t\t\t\t\t\tgetEffectiveTribesForEntity(\r\n\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\t\t\t)?.includes(Race.ALL),\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t];\r\n\t\t\t\t\tallMinions.forEach((e) => {\r\n\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\ttrinket,\r\n\t\t\t\t\t\t\t+heroPower.info3,\r\n\t\t\t\t\t\t\t+heroPower.info3,\r\n\t\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n\r\n// Not perfect, as I don't think this solves the issue where some cards are mutually exclusive\r\nexport const selectMinions = (minions: BoardEntity[], tribes: Race[], allCards: AllCardsService): BoardEntity[] => {\r\n\t// Step 1\r\n\tconst minionsByTribe: { [tribe: string]: BoardEntity[] } = {};\r\n\tfor (const minion of minions) {\r\n\t\tfor (const tribe of allCards.getCard(minion.cardId).races ?? []) {\r\n\t\t\tif (!minionsByTribe[tribe]) {\r\n\t\t\t\tminionsByTribe[tribe] = [];\r\n\t\t\t}\r\n\t\t\tminionsByTribe[tribe].push(minion);\r\n\t\t}\r\n\t}\r\n\tfor (const tribe of ALL_BG_RACES) {\r\n\t\tminionsByTribe[tribe] = shuffleArray(minionsByTribe[Race[tribe]] ?? []);\r\n\t}\r\n\r\n\tconst selectedMinions: BoardEntity[] = [];\r\n\r\n\t// Step 3\r\n\tfor (const tribe of tribes) {\r\n\t\tif (minionsByTribe[tribe]) {\r\n\t\t\tminionsByTribe[tribe].sort(\r\n\t\t\t\t(a, b) => allCards.getCard(a.cardId).races.length - allCards.getCard(b.cardId).races.length,\r\n\t\t\t);\r\n\t\t\tfor (const minion of minionsByTribe[tribe]) {\r\n\t\t\t\tif (!selectedMinions.includes(minion)) {\r\n\t\t\t\t\tselectedMinions.push(minion);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Step 4\r\n\treturn selectedMinions;\r\n};\r\n"]}
1
+ {"version":3,"file":"wax-warband.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/wax-warband.ts"],"names":[],"mappings":"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","sourcesContent":["import { ALL_BG_RACES, AllCardsService, Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getEffectiveTribesForEntity } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const WaxWarband: StartOfCombatCard = {\r\n\tstartOfCombatTiming: 'pre-combat',\r\n\tcardIds: [CardIds.WaxWarband],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tfor (const heroPower of input.playerEntity.heroPowers) {\r\n\t\t\tif (WaxWarband.cardIds.includes(heroPower.cardId) && heroPower.used) {\r\n\t\t\t\tif (input.playerBoard.length > 0) {\r\n\t\t\t\t\tconst boardWithTribes = input.playerBoard.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t!!getEffectiveTribesForEntity(\r\n\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\t\t\t).length,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst boardWithoutAll = boardWithTribes.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t!getEffectiveTribesForEntity(\r\n\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\t\t\t)?.includes(Race.ALL),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst selectedMinions = selectMinions(boardWithoutAll, ALL_BG_RACES, input.gameState.allCards);\r\n\t\t\t\t\tconst allMinions = [\r\n\t\t\t\t\t\t...selectedMinions,\r\n\t\t\t\t\t\t...boardWithTribes.filter((e) =>\r\n\t\t\t\t\t\t\tgetEffectiveTribesForEntity(\r\n\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\t\t\t)?.includes(Race.ALL),\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t];\r\n\t\t\t\t\tallMinions.forEach((e) => {\r\n\t\t\t\t\t\t// Entity often omits TAG_SCRIPT_DATA_NUM_3 while still at the card default (1).\r\n\t\t\t\t\t\tconst buff =\r\n\t\t\t\t\t\t\ttypeof heroPower.info3 === 'number' && heroPower.info3 > 0\r\n\t\t\t\t\t\t\t\t? heroPower.info3\r\n\t\t\t\t\t\t\t\t: input.gameState.allCards.getCard(heroPower.cardId)?.tags?.[\r\n\t\t\t\t\t\t\t\t\t\t'TAG_SCRIPT_DATA_NUM_3'\r\n\t\t\t\t\t\t\t\t ] ?? 1;\r\n\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\ttrinket,\r\n\t\t\t\t\t\t\t+buff,\r\n\t\t\t\t\t\t\t+buff,\r\n\t\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n\r\n// Not perfect, as I don't think this solves the issue where some cards are mutually exclusive\r\nexport const selectMinions = (minions: BoardEntity[], tribes: Race[], allCards: AllCardsService): BoardEntity[] => {\r\n\t// Step 1\r\n\tconst minionsByTribe: { [tribe: string]: BoardEntity[] } = {};\r\n\tfor (const minion of minions) {\r\n\t\tfor (const tribe of allCards.getCard(minion.cardId).races ?? []) {\r\n\t\t\tif (!minionsByTribe[tribe]) {\r\n\t\t\t\tminionsByTribe[tribe] = [];\r\n\t\t\t}\r\n\t\t\tminionsByTribe[tribe].push(minion);\r\n\t\t}\r\n\t}\r\n\tfor (const tribe of ALL_BG_RACES) {\r\n\t\tminionsByTribe[tribe] = shuffleArray(minionsByTribe[Race[tribe]] ?? []);\r\n\t}\r\n\r\n\tconst selectedMinions: BoardEntity[] = [];\r\n\r\n\t// Step 3\r\n\tfor (const tribe of tribes) {\r\n\t\tif (minionsByTribe[tribe]) {\r\n\t\t\tminionsByTribe[tribe].sort(\r\n\t\t\t\t(a, b) => allCards.getCard(a.cardId).races.length - allCards.getCard(b.cardId).races.length,\r\n\t\t\t);\r\n\t\t\tfor (const minion of minionsByTribe[tribe]) {\r\n\t\t\t\tif (!selectedMinions.includes(minion)) {\r\n\t\t\t\t\tselectedMinions.push(minion);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Step 4\r\n\treturn selectedMinions;\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { AfterRebornCard } from '../../card.interface';
2
+ export declare const Arfus: AfterRebornCard;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Arfus = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.Arfus = {
6
+ cardIds: ["TB_BaconShop_HERO_22_Buddy", "TB_BaconShop_HERO_22_Buddy_G"],
7
+ afterReborn: (minion, input) => {
8
+ if (input.rebornEntity.entityId === minion.entityId ||
9
+ input.rebornEntity.rebornFromEntityId === minion.entityId) {
10
+ return;
11
+ }
12
+ const multiplier = minion.cardId === "TB_BaconShop_HERO_22_Buddy_G" ? 2 : 1;
13
+ const attackBonus = minion.attack * multiplier;
14
+ (0, stats_1.modifyStats)(input.rebornEntity, minion, attackBonus, 0, input.boardWithKilledMinion, input.boardWithKilledMinionHero, input.gameState);
15
+ },
16
+ };
17
+ //# sourceMappingURL=arfus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arfus.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/arfus.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,KAAK,GAAoB;IACrC,OAAO,EAAE,8DAAsF;IAC/F,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAwB,EAAE,EAAE;QAE9D,IACC,KAAK,CAAC,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;YAC/C,KAAK,CAAC,YAAY,CAAC,kBAAkB,KAAK,MAAM,CAAC,QAAQ,EACxD;YACD,OAAO;SACP;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,mCAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;QAC/C,IAAA,mBAAW,EACV,KAAK,CAAC,YAAY,EAClB,MAAM,EACN,WAAW,EACX,CAAC,EACD,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { AfterRebornCard } from '../../card.interface';\r\n\r\nexport const Arfus: AfterRebornCard = {\r\n\tcardIds: [CardIds.Arfus_TB_BaconShop_HERO_22_Buddy, CardIds.Arfus_TB_BaconShop_HERO_22_Buddy_G],\r\n\tafterReborn: (minion: BoardEntity, input: RebornEffectInput) => {\r\n\t\t// Don't buff Arfus' own Reborn spawn, nor Arfus itself\r\n\t\tif (\r\n\t\t\tinput.rebornEntity.entityId === minion.entityId ||\r\n\t\t\tinput.rebornEntity.rebornFromEntityId === minion.entityId\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst multiplier = minion.cardId === CardIds.Arfus_TB_BaconShop_HERO_22_Buddy_G ? 2 : 1;\r\n\t\tconst attackBonus = minion.attack * multiplier;\r\n\t\tmodifyStats(\r\n\t\t\tinput.rebornEntity,\r\n\t\t\tminion,\r\n\t\t\tattackBonus,\r\n\t\t\t0,\r\n\t\t\tinput.boardWithKilledMinion,\r\n\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { RallyCard } from '../../card.interface';
2
+ export declare const BrambleTunneler: RallyCard;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrambleTunneler = void 0;
4
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
5
+ exports.BrambleTunneler = {
6
+ cardIds: ["BG36_331", "BG36_331_G"],
7
+ rally: (minion, input) => {
8
+ const mult = minion.cardId === "BG36_331_G" ? 2 : 1;
9
+ const cardsToAdd = Array(mult).fill(null);
10
+ (0, cards_in_hand_1.addCardsInHand)(input.attackingHero, input.attackingBoard, cardsToAdd, input.gameState);
11
+ return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
12
+ },
13
+ };
14
+ //# sourceMappingURL=bramble-tunneler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bramble-tunneler.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/bramble-tunneler.ts"],"names":[],"mappings":";;;AAUA,qEAAmE;AAKtD,QAAA,eAAe,GAAc;IACzC,OAAO,EAAE,0BAAsE;IAC/E,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAA,8BAAc,EAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACvF,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Bramble Tunneler (Tier 4, 3/6)\r\n * Rally: Get a random Choose One card.\r\n *\r\n * Golden Bramble Tunneler (Tier 4, 6/12)\r\n * Rally: Get 2 random Choose One cards.\r\n *\r\n * Choose One cards themselves are tavern-only; the combat impact is the cards-in-hand trigger.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RallyCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nexport const BrambleTunneler: RallyCard = {\r\n\tcardIds: [CardIds.BrambleTunneler_BG36_331, CardIds.BrambleTunneler_BG36_331_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.BrambleTunneler_BG36_331_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array(mult).fill(null);\r\n\t\taddCardsInHand(input.attackingHero, input.attackingBoard, cardsToAdd, input.gameState);\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnCard } from '../../card.interface';
2
+ export declare const BrannsEpicEgg: DeathrattleSpawnCard;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrannsEpicEgg = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
7
+ exports.BrannsEpicEgg = {
8
+ cardIds: ["TB_BaconShop_HERO_43_Buddy", "TB_BaconShop_HERO_43_Buddy_G"],
9
+ deathrattleSpawn: (minion, input) => {
10
+ const mult = minion.cardId === "TB_BaconShop_HERO_43_Buddy_G" ? 2 : 1;
11
+ const spawns = [];
12
+ for (let i = 0; i < mult; i++) {
13
+ spawns.push((0, utils_1.pickRandom)(input.gameState.cardsData.battlecryMinions));
14
+ }
15
+ const spawnedEntities = [];
16
+ for (const spawn of spawns) {
17
+ spawnedEntities.push(...(0, deathrattle_spawns_1.spawnEntities)(spawn, 1, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoard, input.otherBoardHero, input.gameState, input.deadEntity.friendly, false));
18
+ }
19
+ (0, cards_in_hand_1.addCardsInHand)(input.boardWithDeadEntityHero, input.boardWithDeadEntity, spawns, input.gameState);
20
+ return spawnedEntities;
21
+ },
22
+ };
23
+ //# sourceMappingURL=branns-epic-egg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branns-epic-egg.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/branns-epic-egg.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AACrD,qEAAmE;AAEnE,+EAAuE;AAG1D,QAAA,aAAa,GAAyB;IAClD,OAAO,EAAE,8DAAsG;IAC/G,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,mCAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;SACpE;QACD,MAAM,eAAe,GAAkB,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC3B,eAAe,CAAC,IAAI,CACnB,GAAG,IAAA,kCAAa,EACf,KAAK,EACL,CAAC,EACD,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,UAAU,CAAC,QAAQ,EACzB,KAAK,CACL,CACD,CAAC;SACF;QACD,IAAA,8BAAc,EAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClG,OAAO,eAAe,CAAC;IACxB,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const BrannsEpicEgg: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy, CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy_G ? 2 : 1;\r\n\t\tconst spawns: string[] = [];\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tspawns.push(pickRandom(input.gameState.cardsData.battlecryMinions));\r\n\t\t}\r\n\t\tconst spawnedEntities: BoardEntity[] = [];\r\n\t\tfor (const spawn of spawns) {\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tspawn,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\t\tinput.otherBoard,\r\n\t\t\t\t\tinput.otherBoardHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\tinput.deadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t}\r\n\t\taddCardsInHand(input.boardWithDeadEntityHero, input.boardWithDeadEntity, spawns, input.gameState);\r\n\t\treturn spawnedEntities;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { RallyCard } from '../../card.interface';
2
+ export declare const BronzeTimewalker: RallyCard;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BronzeTimewalker = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
+ const chromadrake_pool_1 = require("./chromadrake-pool");
7
+ exports.BronzeTimewalker = {
8
+ cardIds: ["BG36_242", "BG36_242_G"],
9
+ rally: (minion, input) => {
10
+ const mult = minion.cardId === "BG36_242_G" ? 2 : 1;
11
+ const cardsToAdd = [];
12
+ for (let i = 0; i < mult; i++) {
13
+ const id = (0, utils_1.pickRandom)(chromadrake_pool_1.chromadrakeCardIds);
14
+ if (id) {
15
+ cardsToAdd.push(id);
16
+ }
17
+ }
18
+ (0, cards_in_hand_1.addCardsInHand)(input.attackingHero, input.attackingBoard, cardsToAdd, input.gameState);
19
+ return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
20
+ },
21
+ };
22
+ //# sourceMappingURL=bronze-timewalker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bronze-timewalker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/bronze-timewalker.ts"],"names":[],"mappings":";;;AAQA,mDAAqD;AACrD,qEAAmE;AAInE,yDAAwD;AAE3C,QAAA,gBAAgB,GAAc;IAC1C,OAAO,EAAE,0BAAwE;IACjF,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,IAAA,kBAAU,EAAC,qCAAkB,CAAC,CAAC;YAC1C,IAAI,EAAE,EAAE;gBACP,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACpB;SACD;QACD,IAAA,8BAAc,EAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACvF,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Bronze Timewalker (Tier 4, 2/9)\r\n * Rally: Get a random Chromadrake.\r\n *\r\n * Golden Bronze Timewalker (Tier 4, 4/18)\r\n * Rally: Get 2 random Chromadrakes.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RallyCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { chromadrakeCardIds } from './chromadrake-pool';\r\n\r\nexport const BronzeTimewalker: RallyCard = {\r\n\tcardIds: [CardIds.BronzeTimewalker_BG36_242, CardIds.BronzeTimewalker_BG36_242_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.BronzeTimewalker_BG36_242_G ? 2 : 1;\r\n\t\tconst cardsToAdd = [];\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tconst id = pickRandom(chromadrakeCardIds);\r\n\t\t\tif (id) {\r\n\t\t\t\tcardsToAdd.push(id);\r\n\t\t\t}\r\n\t\t}\r\n\t\taddCardsInHand(input.attackingHero, input.attackingBoard, cardsToAdd, input.gameState);\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -6,14 +6,24 @@ exports.ChoralMrrrglr = {
6
6
  cardIds: ["BG26_354", "BG26_354_G"],
7
7
  startOfCombatTiming: 'start-of-combat',
8
8
  startOfCombat: (minion, input) => {
9
- var _a, _b, _c, _d;
9
+ var _a, _b;
10
10
  const multiplier = minion.cardId === "BG26_354_G" ? 2 : 1;
11
- const totalAttackInHand = (_b = (_a = input.playerEntity.hand) === null || _a === void 0 ? void 0 : _a.map((e) => { var _a; return (_a = e.attack) !== null && _a !== void 0 ? _a : 0; }).reduce((a, b) => a + b, 0)) !== null && _b !== void 0 ? _b : 0;
12
- const totalHealthInHand = (_d = (_c = input.playerEntity.hand) === null || _c === void 0 ? void 0 : _c.map((e) => { var _a; return (_a = e.health) !== null && _a !== void 0 ? _a : 0; }).reduce((a, b) => a + b, 0)) !== null && _d !== void 0 ? _d : 0;
11
+ const realHand = ((_a = input.playerEntity.hand) !== null && _a !== void 0 ? _a : []).filter((e) => { var _a; return !((_a = e.enchantments) === null || _a === void 0 ? void 0 : _a.some((ench) => ench.cardId === 'TB_BaconShopBadsongE')); });
12
+ const totalAttackInHand = realHand.map((e) => { var _a; return (_a = e.attack) !== null && _a !== void 0 ? _a : 0; }).reduce((a, b) => a + b, 0);
13
+ const totalHealthInHand = realHand.map((e) => { var _a; return (_a = e.health) !== null && _a !== void 0 ? _a : 0; }).reduce((a, b) => a + b, 0);
14
+ const hasChorusEnchant = !!((_b = minion.enchantments) === null || _b === void 0 ? void 0 : _b.some((e) => e.cardId === "BG26_354e"));
13
15
  const attackBuff = multiplier *
14
- (totalAttackInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralAttackBuff) || 0);
16
+ (totalAttackInHand ||
17
+ (hasChorusEnchant || minion.gildedInCombat
18
+ ? 0
19
+ : input.playerEntity.globalInfo.ChoralAttackBuff) ||
20
+ 0);
15
21
  const healthBuff = multiplier *
16
- (totalHealthInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralHealthBuff) || 0);
22
+ (totalHealthInHand ||
23
+ (hasChorusEnchant || minion.gildedInCombat
24
+ ? 0
25
+ : input.playerEntity.globalInfo.ChoralHealthBuff) ||
26
+ 0);
17
27
  (0, stats_1.modifyStats)(minion, minion, attackBuff, healthBuff, input.playerBoard, input.playerEntity, input.gameState);
18
28
  return true;
19
29
  },
@@ -1 +1 @@
1
- {"version":3,"file":"choral-mrrrglr.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/choral-mrrrglr.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,aAAa,GAAsB;IAC/C,OAAO,EAAE,0BAAkE;IAC3E,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QAEvD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9E,MAAM,iBAAiB,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAI,CAAC,CAAC;QAC7G,MAAM,iBAAiB,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAI,CAAC,CAAC;QAK7G,MAAM,UAAU,GACf,UAAU;YACV,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,MAAM,UAAU,GACf,UAAU;YACV,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5G,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const ChoralMrrrglr: StartOfCombatCard = {\r\n\tcardIds: [CardIds.ChoralMrrrglr_BG26_354, CardIds.ChoralMrrrglr_BG26_354_G],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Multiplier not needed if relying on global info?\r\n\t\tconst multiplier = minion.cardId === CardIds.ChoralMrrrglr_BG26_354_G ? 2 : 1;\r\n\t\t// When it's summoned by Y'Shaarj hero power, the info isn't set\r\n\t\tconst totalAttackInHand = input.playerEntity.hand?.map((e) => e.attack ?? 0).reduce((a, b) => a + b, 0) ?? 0;\r\n\t\tconst totalHealthInHand = input.playerEntity.hand?.map((e) => e.health ?? 0).reduce((a, b) => a + b, 0) ?? 0;\r\n\t\t// If the minion is gilded in combat, the global info becomes unreliable\r\n\t\t// Update 2026-04-25: using the enchantment is not really reliable, in case we have a Mrrrglr and a\r\n\t\t// Timewarped Mrrrlgr. It seems to me, however, that we're getting information about the hand of both players,\r\n\t\t// not only the opponent, so we could use that instead.\r\n\t\tconst attackBuff =\r\n\t\t\tmultiplier *\r\n\t\t\t(totalAttackInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralAttackBuff) || 0);\r\n\t\tconst healthBuff =\r\n\t\t\tmultiplier *\r\n\t\t\t(totalHealthInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralHealthBuff) || 0);\r\n\t\tmodifyStats(minion, minion, attackBuff, healthBuff, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"choral-mrrrglr.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/choral-mrrrglr.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,aAAa,GAAsB;IAC/C,OAAO,EAAE,0BAAkE;IAC3E,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QAEvD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAG9E,MAAM,QAAQ,GAAG,CAAC,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC,MAAM,CACtD,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAC,CAAA,MAAA,CAAC,CAAC,YAAY,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAA,CAAA,EAAA,CAC9E,CAAC;QACF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAKxF,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,YAAY,0CAAE,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,gBAA4C,CAC3D,CAAA,CAAC;QACF,MAAM,UAAU,GACf,UAAU;YACV,CAAC,iBAAiB;gBACjB,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc;oBACzC,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC;gBAClD,CAAC,CAAC,CAAC;QACL,MAAM,UAAU,GACf,UAAU;YACV,CAAC,iBAAiB;gBACjB,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc;oBACzC,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC;gBAClD,CAAC,CAAC,CAAC;QACL,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5G,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const ChoralMrrrglr: StartOfCombatCard = {\r\n\tcardIds: [CardIds.ChoralMrrrglr_BG26_354, CardIds.ChoralMrrrglr_BG26_354_G],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Multiplier not needed if relying on global info?\r\n\t\tconst multiplier = minion.cardId === CardIds.ChoralMrrrglr_BG26_354_G ? 2 : 1;\r\n\t\t// When it's summoned by Y'Shaarj hero power, the info isn't set.\r\n\t\t// Ignore Badsong-revealed hand cards — they are not real combat hand.\r\n\t\tconst realHand = (input.playerEntity.hand ?? []).filter(\r\n\t\t\t(e) => !e.enchantments?.some((ench) => ench.cardId === 'TB_BaconShopBadsongE'),\r\n\t\t);\r\n\t\tconst totalAttackInHand = realHand.map((e) => e.attack ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tconst totalHealthInHand = realHand.map((e) => e.health ?? 0).reduce((a, b) => a + b, 0);\r\n\t\t// Chorus enchantment script-data (and thus Choral*Buff globalInfo) mirrors buffs already\r\n\t\t// baked into ATK/HP from prior SoCs. Re-applying that fallback when hand is empty\r\n\t\t// (common for opponent extracts) double-counts. Only use globalInfo for fresh summons\r\n\t\t// that do not yet carry the enchantment (e.g. Y'Shaarj).\r\n\t\tconst hasChorusEnchant = !!minion.enchantments?.some(\r\n\t\t\t(e) => e.cardId === CardIds.ChoralMrrrglr_ChorusEnchantment,\r\n\t\t);\r\n\t\tconst attackBuff =\r\n\t\t\tmultiplier *\r\n\t\t\t(totalAttackInHand ||\r\n\t\t\t\t(hasChorusEnchant || minion.gildedInCombat\r\n\t\t\t\t\t? 0\r\n\t\t\t\t\t: input.playerEntity.globalInfo.ChoralAttackBuff) ||\r\n\t\t\t\t0);\r\n\t\tconst healthBuff =\r\n\t\t\tmultiplier *\r\n\t\t\t(totalHealthInHand ||\r\n\t\t\t\t(hasChorusEnchant || minion.gildedInCombat\r\n\t\t\t\t\t? 0\r\n\t\t\t\t\t: input.playerEntity.globalInfo.ChoralHealthBuff) ||\r\n\t\t\t\t0);\r\n\t\tmodifyStats(minion, minion, attackBuff, healthBuff, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -1,5 +1,2 @@
1
- import { BoardEntity } from '../../../board-entity';
2
- import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
3
- export declare const ElderTaggawag: {
4
- startOfCombat: (minion: BoardEntity, input: SoCInput) => boolean;
5
- };
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const ElderTaggawag: StartOfCombatCard;
@@ -4,6 +4,7 @@ exports.ElderTaggawag = void 0;
4
4
  const stats_1 = require("../../../simulation/stats");
5
5
  const utils_1 = require("../../../utils");
6
6
  exports.ElderTaggawag = {
7
+ cardIds: ["TB_BaconShop_HERO_14_Buddy", "TB_BaconShop_HERO_14_Buddy_G"],
7
8
  startOfCombat: (minion, input) => {
8
9
  const minionsOfDifferentTypes = (0, utils_1.getMinionsOfDifferentTypes)(input.playerBoard, input.playerEntity, input.gameState);
9
10
  if (minionsOfDifferentTypes.length >= 4) {
@@ -1 +1 @@
1
- {"version":3,"file":"elder-taggawag.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/elder-taggawag.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AACxD,0CAA4D;AAE/C,QAAA,aAAa,GAAG;IAC5B,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,uBAAuB,GAAG,IAAA,kCAA0B,EACzD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,IAAI,uBAAuB,CAAC,MAAM,IAAI,CAAC,EAAE;YACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3F,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,mCAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChG,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,oBAAoB,GAAG,UAAU,EACjC,oBAAoB,GAAG,UAAU,EACjC,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getMinionsOfDifferentTypes } from '../../../utils';\r\n\r\nexport const ElderTaggawag = {\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst minionsOfDifferentTypes = getMinionsOfDifferentTypes(\r\n\t\t\tinput.playerBoard,\r\n\t\t\tinput.playerEntity,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tif (minionsOfDifferentTypes.length >= 4) {\r\n\t\t\tconst highestAttackOnBoard = Math.max(...input.playerBoard.map((entity) => entity.attack));\r\n\t\t\tconst highestHealthOnBoard = Math.max(...input.playerBoard.map((entity) => entity.health));\r\n\t\t\tconst multiplier = minion.cardId === CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy_G ? 2 : 1;\r\n\t\t\tmodifyStats(\r\n\t\t\t\tminion,\r\n\t\t\t\tminion,\r\n\t\t\t\thighestAttackOnBoard * multiplier,\r\n\t\t\t\thighestHealthOnBoard * multiplier,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"elder-taggawag.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/elder-taggawag.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AACxD,0CAA4D;AAG/C,QAAA,aAAa,GAAsB;IAC/C,OAAO,EAAE,8DAAsG;IAC/G,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,uBAAuB,GAAG,IAAA,kCAA0B,EACzD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,IAAI,uBAAuB,CAAC,MAAM,IAAI,CAAC,EAAE;YACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3F,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,mCAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChG,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,oBAAoB,GAAG,UAAU,EACjC,oBAAoB,GAAG,UAAU,EACjC,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getMinionsOfDifferentTypes } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const ElderTaggawag: StartOfCombatCard = {\r\n\tcardIds: [CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy, CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst minionsOfDifferentTypes = getMinionsOfDifferentTypes(\r\n\t\t\tinput.playerBoard,\r\n\t\t\tinput.playerEntity,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tif (minionsOfDifferentTypes.length >= 4) {\r\n\t\t\tconst highestAttackOnBoard = Math.max(...input.playerBoard.map((entity) => entity.attack));\r\n\t\t\tconst highestHealthOnBoard = Math.max(...input.playerBoard.map((entity) => entity.health));\r\n\t\t\tconst multiplier = minion.cardId === CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy_G ? 2 : 1;\r\n\t\t\tmodifyStats(\r\n\t\t\t\tminion,\r\n\t\t\t\tminion,\r\n\t\t\t\thighestAttackOnBoard * multiplier,\r\n\t\t\t\thighestHealthOnBoard * multiplier,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleEffectCard } from '../../card.interface';
2
+ export declare const ElementiumSquirrelBomb: DeathrattleEffectCard;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ElementiumSquirrelBomb = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const attack_1 = require("../../../simulation/attack");
6
+ const utils_1 = require("../../../utils");
7
+ exports.ElementiumSquirrelBomb = {
8
+ cardIds: [
9
+ "TB_BaconShop_HERO_17_Buddy",
10
+ "TB_BaconShop_HERO_17_Buddy_G",
11
+ ],
12
+ deathrattleEffect: (minion, input) => {
13
+ const damage = minion.cardId === "TB_BaconShop_HERO_17_Buddy_G" ? 8 : 4;
14
+ const numberOfDeadMechsThisCombat = input.gameState.sharedState.deaths
15
+ .filter((entity) => entity.friendly === minion.friendly)
16
+ .filter((entity) => (0, utils_1.hasCorrectTribe)(entity, input.boardWithDeadEntityHero, reference_data_1.Race.MECH, input.gameState.anomalies, input.gameState.allCards)).length;
17
+ for (let i = 0; i < numberOfDeadMechsThisCombat; i++) {
18
+ (0, attack_1.dealDamageToRandomEnemy)(input.otherBoard, input.otherBoardHero, minion, damage, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.gameState);
19
+ }
20
+ },
21
+ };
22
+ //# sourceMappingURL=elementium-squirrel-bomb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elementium-squirrel-bomb.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/elementium-squirrel-bomb.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,uDAAqE;AAErE,0CAAiD;AAGpC,QAAA,sBAAsB,GAA0B;IAC5D,OAAO,EAAE;;;KAGR;IACD,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,mCAAgE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAGrG,MAAM,2BAA2B,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM;aACpE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC;aACvD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,uBAAuB,EAC7B,qBAAI,CAAC,IAAI,EACT,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,CAAC,MAAM,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,2BAA2B,EAAE,CAAC,EAAE,EAAE;YACrD,IAAA,gCAAuB,EACtB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,cAAc,EACpB,MAAM,EACN,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;SACF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { dealDamageToRandomEnemy } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { DeathrattleEffectCard } from '../../card.interface';\r\n\r\nexport const ElementiumSquirrelBomb: DeathrattleEffectCard = {\r\n\tcardIds: [\r\n\t\tCardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy,\r\n\t\tCardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G,\r\n\t],\r\n\tdeathrattleEffect: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst damage = minion.cardId === CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G ? 8 : 4;\r\n\t\t// FIXME: this doesn't account for the fact that some mechs could still die from deathrattles\r\n\t\t// spawned after this point in the same combat, but it's good enough for now\r\n\t\tconst numberOfDeadMechsThisCombat = input.gameState.sharedState.deaths\r\n\t\t\t.filter((entity) => entity.friendly === minion.friendly)\r\n\t\t\t.filter((entity) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\t\tRace.MECH,\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).length;\r\n\t\tfor (let i = 0; i < numberOfDeadMechsThisCombat; i++) {\r\n\t\t\tdealDamageToRandomEnemy(\r\n\t\t\t\tinput.otherBoard,\r\n\t\t\t\tinput.otherBoardHero,\r\n\t\t\t\tminion,\r\n\t\t\t\tdamage,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -5,7 +5,7 @@ const stats_1 = require("../../../simulation/stats");
5
5
  exports.FleeingFugitive = {
6
6
  cardIds: ["BG36_921", "BG36_921_G"],
7
7
  onTavernSpellCast: (entity, input) => {
8
- if (input.target !== entity) {
8
+ if (input.source !== input.hero || input.target !== entity) {
9
9
  return;
10
10
  }
11
11
  const mult = entity.cardId === "BG36_921_G" ? 2 : 1;
@@ -1 +1 @@
1
- {"version":3,"file":"fleeing-fugitive.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fleeing-fugitive.ts"],"names":[],"mappings":";;;AAQA,qDAAwD;AAI3C,QAAA,eAAe,GAA0B;IACrD,OAAO,EAAE,0BAAsE;IAC/E,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC5B,OAAO;SACP;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fleeing Fugitive (Tier 1, 3/2)\r\n * Whenever you cast a spell on this, gain +1 Health.\r\n *\r\n * Golden Fleeing Fugitive (Tier 1, 6/4)\r\n * Whenever you cast a spell on this, gain +2 Health.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nexport const FleeingFugitive: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.FleeingFugitive_BG36_921, CardIds.FleeingFugitive_BG36_921_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tif (input.target !== entity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst mult = entity.cardId === CardIds.FleeingFugitive_BG36_921_G ? 2 : 1;\r\n\t\tmodifyStats(entity, entity, 0, mult, input.board, input.hero, input.gameState);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"fleeing-fugitive.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fleeing-fugitive.ts"],"names":[],"mappings":";;;AAQA,qDAAwD;AAI3C,QAAA,eAAe,GAA0B;IACrD,OAAO,EAAE,0BAAsE;IAC/E,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC3D,OAAO;SACP;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fleeing Fugitive (Tier 1, 3/2)\r\n * Whenever you cast a spell on this, gain +1 Health.\r\n *\r\n * Golden Fleeing Fugitive (Tier 1, 6/4)\r\n * Whenever you cast a spell on this, gain +2 Health.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nexport const FleeingFugitive: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.FleeingFugitive_BG36_921, CardIds.FleeingFugitive_BG36_921_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tif (input.source !== input.hero || input.target !== entity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst mult = entity.cardId === CardIds.FleeingFugitive_BG36_921_G ? 2 : 1;\r\n\t\tmodifyStats(entity, entity, 0, mult, input.board, input.hero, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -2,24 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GatekeeperAmalgam = void 0;
4
4
  const cast_tavern_spell_1 = require("../../../mechanics/cast-tavern-spell");
5
- const utils_1 = require("../../../services/utils");
6
5
  exports.GatekeeperAmalgam = {
7
6
  cardIds: ["BG36_640", "BG36_640_G"],
8
7
  onTavernSpellCast: (entity, input) => {
9
- if (input.target !== entity) {
8
+ if (input.source !== input.hero || input.target !== entity) {
10
9
  return;
11
10
  }
12
11
  const loops = entity.cardId === "BG36_640_G" ? 2 : 1;
13
12
  for (let i = 0; i < loops; i++) {
14
- const teaSetTarget = (0, utils_1.pickRandomAlive)(input.board);
15
- if (!teaSetTarget) {
16
- return;
17
- }
18
13
  (0, cast_tavern_spell_1.castTavernSpell)("BG28_888", {
19
14
  ...input,
20
15
  spellCardId: "BG28_888",
21
16
  source: entity,
22
- target: teaSetTarget,
17
+ target: null,
23
18
  });
24
19
  }
25
20
  },
@@ -1 +1 @@
1
- {"version":3,"file":"gatekeeper-amalgam.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/gatekeeper-amalgam.ts"],"names":[],"mappings":";;;AAWA,4EAAuE;AAEvE,mDAA0D;AAG7C,QAAA,iBAAiB,GAA0B;IACvD,OAAO,EAAE,0BAA0E;IACnF,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC5B,OAAO;SACP;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,YAAY,GAAG,IAAA,uBAAe,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,EAAE;gBAClB,OAAO;aACP;YACD,IAAA,mCAAe,cAAmC;gBACjD,GAAG,KAAK;gBACR,WAAW,YAAkC;gBAC7C,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,YAAY;aACpB,CAAC,CAAC;SACH;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Gatekeeper Amalgam (Tier 6, 6/6, all minion types)\r\n * Whenever you cast a spell on this, it casts Misplaced Tea Set.\r\n *\r\n * Golden Gatekeeper Amalgam (Tier 6, 12/12, all minion types)\r\n * Whenever you cast a spell on this, it casts Misplaced Tea Set twice.\r\n *\r\n * \"It casts\" means the Amalgam is the source, so the nested cast does not count as one of your own\r\n * spells and does not re-trigger the \"whenever you cast\" effects.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { castTavernSpell } from '../../../mechanics/cast-tavern-spell';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandomAlive } from '../../../services/utils';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\n\r\nexport const GatekeeperAmalgam: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.GatekeeperAmalgam_BG36_640, CardIds.GatekeeperAmalgam_BG36_640_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tif (input.target !== entity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst loops = entity.cardId === CardIds.GatekeeperAmalgam_BG36_640_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\tconst teaSetTarget = pickRandomAlive(input.board);\r\n\t\t\tif (!teaSetTarget) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tcastTavernSpell(CardIds.MisplacedTeaSet_BG28_888, {\r\n\t\t\t\t...input,\r\n\t\t\t\tspellCardId: CardIds.MisplacedTeaSet_BG28_888,\r\n\t\t\t\tsource: entity,\r\n\t\t\t\ttarget: teaSetTarget,\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"gatekeeper-amalgam.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/gatekeeper-amalgam.ts"],"names":[],"mappings":";;;AAWA,4EAAuE;AAI1D,QAAA,iBAAiB,GAA0B;IACvD,OAAO,EAAE,0BAA0E;IACnF,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC3D,OAAO;SACP;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAA,mCAAe,cAAmC;gBACjD,GAAG,KAAK;gBACR,WAAW,YAAkC;gBAC7C,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,IAAI;aACZ,CAAC,CAAC;SACH;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Gatekeeper Amalgam (Tier 6, 6/6, all minion types)\r\n * Whenever you cast a spell on this, it casts Misplaced Tea Set.\r\n *\r\n * Golden Gatekeeper Amalgam (Tier 6, 12/12, all minion types)\r\n * Whenever you cast a spell on this, it casts Misplaced Tea Set twice.\r\n *\r\n * \"It casts\" means the Amalgam is the source, so the nested cast does not count as one of your own\r\n * spells and does not re-trigger the \"whenever you cast\" effects.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { castTavernSpell } from '../../../mechanics/cast-tavern-spell';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\n\r\nexport const GatekeeperAmalgam: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.GatekeeperAmalgam_BG36_640, CardIds.GatekeeperAmalgam_BG36_640_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tif (input.source !== input.hero || input.target !== entity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst loops = entity.cardId === CardIds.GatekeeperAmalgam_BG36_640_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\tcastTavernSpell(CardIds.MisplacedTeaSet_BG28_888, {\r\n\t\t\t\t...input,\r\n\t\t\t\tspellCardId: CardIds.MisplacedTeaSet_BG28_888,\r\n\t\t\t\tsource: entity,\r\n\t\t\t\ttarget: null,\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -9,7 +9,8 @@ exports.Glambot = {
9
9
  cardIds: ["BG36_853", "BG36_853_G"],
10
10
  onTavernSpellCast: (entity, input) => {
11
11
  const target = input.target;
12
- if (!target ||
12
+ if (input.source !== input.hero ||
13
+ !target ||
13
14
  !(0, utils_1.hasCorrectTribe)(target, input.hero, reference_data_1.Race.MECH, input.gameState.anomalies, input.gameState.allCards)) {
14
15
  return;
15
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"glambot.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/glambot.ts"],"names":[],"mappings":";;;AAOA,iEAAmE;AAEnE,6DAAkE;AAClE,0CAAiD;AAIjD,MAAM,cAAc,GAAG,CAAC,CAAC;AAEZ,QAAA,OAAO,GAA0B;IAC7C,OAAO,EAAE,0BAAsD;IAC/D,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IACC,CAAC,MAAM;YACP,CAAC,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EACnG;YACD,OAAO;SACP;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,iBAA+B,CAAC;QAC5D,MAAM,eAAe,GAAG,MAAM;YAC7B,CAAC;YACD,CAAC,YAA8D,CAAC;QAEjE,MAAM,SAAS,GAAkB;YAChC,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;YACpD,EAAE,EAAE,eAAe;YACnB,MAAM,EAAE,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,EAAE,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC,CAAC;QACF,IAAA,6BAAiB,EAChB,CAAC,MAAM,CAAC,EACR,MAAM,EACN,CAAC,SAAS,CAAC,EACX,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Glambot (Tier 5, 6/6)\r\n * Whenever you cast a spell on a Mech, Magnetize a 6/6 Satellite to it.\r\n *\r\n * Golden Glambot (Tier 5, 12/12)\r\n * Whenever you cast a spell on a Mech, Magnetize a 12/12 Satellite to it.\r\n */\r\nimport { Race, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { magnetizeToTarget } from '../../../simulation/magnetize';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nconst satelliteStats = 6;\r\n\r\nexport const Glambot: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.Glambot_BG36_853, CardIds.Glambot_BG36_853_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tconst target = input.target;\r\n\t\tif (\r\n\t\t\t!target ||\r\n\t\t\t!hasCorrectTribe(target, input.hero, Race.MECH, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst golden = entity.cardId === CardIds.Glambot_BG36_853_G;\r\n\t\tconst satelliteCardId = golden\r\n\t\t\t? CardIds.MoonsteelJuggernaut_MoonsteelSatelliteToken_BG31_171_Gt\r\n\t\t\t: CardIds.MoonsteelJuggernaut_MoonsteelSatelliteToken_BG31_171t;\r\n\t\t// The stats are part of the card text rather than of the token, so we set them explicitly\r\n\t\tconst satellite: ReferenceCard = {\r\n\t\t\t...input.gameState.allCards.getCard(satelliteCardId),\r\n\t\t\tid: satelliteCardId,\r\n\t\t\tattack: satelliteStats * (golden ? 2 : 1),\r\n\t\t\thealth: satelliteStats * (golden ? 2 : 1),\r\n\t\t};\r\n\t\tmagnetizeToTarget(\r\n\t\t\t[target],\r\n\t\t\tentity,\r\n\t\t\t[satellite],\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.otherBoard,\r\n\t\t\tinput.otherHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"glambot.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/glambot.ts"],"names":[],"mappings":";;;AAOA,iEAAmE;AAEnE,6DAAkE;AAClE,0CAAiD;AAIjD,MAAM,cAAc,GAAG,CAAC,CAAC;AAEZ,QAAA,OAAO,GAA0B;IAC7C,OAAO,EAAE,0BAAsD;IAC/D,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IACC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI;YAC3B,CAAC,MAAM;YACP,CAAC,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EACnG;YACD,OAAO;SACP;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,iBAA+B,CAAC;QAC5D,MAAM,eAAe,GAAG,MAAM;YAC7B,CAAC;YACD,CAAC,YAA8D,CAAC;QAEjE,MAAM,SAAS,GAAkB;YAChC,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;YACpD,EAAE,EAAE,eAAe;YACnB,MAAM,EAAE,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,EAAE,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC,CAAC;QACF,IAAA,6BAAiB,EAChB,CAAC,MAAM,CAAC,EACR,MAAM,EACN,CAAC,SAAS,CAAC,EACX,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Glambot (Tier 5, 6/6)\r\n * Whenever you cast a spell on a Mech, Magnetize a 6/6 Satellite to it.\r\n *\r\n * Golden Glambot (Tier 5, 12/12)\r\n * Whenever you cast a spell on a Mech, Magnetize a 12/12 Satellite to it.\r\n */\r\nimport { Race, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { magnetizeToTarget } from '../../../simulation/magnetize';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nconst satelliteStats = 6;\r\n\r\nexport const Glambot: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.Glambot_BG36_853, CardIds.Glambot_BG36_853_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tconst target = input.target;\r\n\t\tif (\r\n\t\t\tinput.source !== input.hero ||\r\n\t\t\t!target ||\r\n\t\t\t!hasCorrectTribe(target, input.hero, Race.MECH, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst golden = entity.cardId === CardIds.Glambot_BG36_853_G;\r\n\t\tconst satelliteCardId = golden\r\n\t\t\t? CardIds.MoonsteelJuggernaut_MoonsteelSatelliteToken_BG31_171_Gt\r\n\t\t\t: CardIds.MoonsteelJuggernaut_MoonsteelSatelliteToken_BG31_171t;\r\n\t\t// The stats are part of the card text rather than of the token, so we set them explicitly\r\n\t\tconst satellite: ReferenceCard = {\r\n\t\t\t...input.gameState.allCards.getCard(satelliteCardId),\r\n\t\t\tid: satelliteCardId,\r\n\t\t\tattack: satelliteStats * (golden ? 2 : 1),\r\n\t\t\thealth: satelliteStats * (golden ? 2 : 1),\r\n\t\t};\r\n\t\tmagnetizeToTarget(\r\n\t\t\t[target],\r\n\t\t\tentity,\r\n\t\t\t[satellite],\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.otherBoard,\r\n\t\t\tinput.otherHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { RallyCard } from '../../card.interface';
2
+ export declare const HeadhunterGryphon: RallyCard;