@firestone-hs/simulate-bgs-battle 1.1.622 → 1.1.623

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 (111) hide show
  1. package/dist/board-entity.d.ts +1 -0
  2. package/dist/board-entity.js.map +1 -1
  3. package/dist/cards/cards-data.d.ts +1 -0
  4. package/dist/cards/cards-data.js +8 -0
  5. package/dist/cards/cards-data.js.map +1 -1
  6. package/dist/cards/impl/_card-mappings.js +40 -0
  7. package/dist/cards/impl/_card-mappings.js.map +1 -1
  8. package/dist/cards/impl/bg-spell/murkys-fish.d.ts +2 -0
  9. package/dist/cards/impl/bg-spell/murkys-fish.js +21 -0
  10. package/dist/cards/impl/bg-spell/murkys-fish.js.map +1 -0
  11. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.d.ts +2 -0
  12. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.js +15 -0
  13. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.js.map +1 -0
  14. package/dist/cards/impl/hero-power/fragrant-phylactery.js +8 -17
  15. package/dist/cards/impl/hero-power/fragrant-phylactery.js.map +1 -1
  16. package/dist/cards/impl/hero-power/wax-warband.js +1 -1
  17. package/dist/cards/impl/hero-power/wax-warband.js.map +1 -1
  18. package/dist/cards/impl/minion/azsharan-cutlassier.d.ts +2 -0
  19. package/dist/cards/impl/minion/azsharan-cutlassier.js +12 -0
  20. package/dist/cards/impl/minion/azsharan-cutlassier.js.map +1 -0
  21. package/dist/cards/impl/minion/divine-sparkbot.d.ts +2 -0
  22. package/dist/cards/impl/minion/divine-sparkbot.js +14 -0
  23. package/dist/cards/impl/minion/divine-sparkbot.js.map +1 -0
  24. package/dist/cards/impl/minion/expert-technician.d.ts +2 -0
  25. package/dist/cards/impl/minion/expert-technician.js +26 -0
  26. package/dist/cards/impl/minion/expert-technician.js.map +1 -0
  27. package/dist/cards/impl/minion/friendly-bouncer.d.ts +2 -0
  28. package/dist/cards/impl/minion/friendly-bouncer.js +25 -0
  29. package/dist/cards/impl/minion/friendly-bouncer.js.map +1 -0
  30. package/dist/cards/impl/minion/frostwolf-lieutenant.d.ts +2 -0
  31. package/dist/cards/impl/minion/frostwolf-lieutenant.js +13 -0
  32. package/dist/cards/impl/minion/frostwolf-lieutenant.js.map +1 -0
  33. package/dist/cards/impl/minion/master-gadrin.d.ts +2 -0
  34. package/dist/cards/impl/minion/master-gadrin.js +20 -0
  35. package/dist/cards/impl/minion/master-gadrin.js.map +1 -0
  36. package/dist/cards/impl/minion/monstrosity.d.ts +2 -0
  37. package/dist/cards/impl/minion/monstrosity.js +13 -0
  38. package/dist/cards/impl/minion/monstrosity.js.map +1 -0
  39. package/dist/cards/impl/minion/murky-spash-fisher.d.ts +2 -0
  40. package/dist/cards/impl/minion/murky-spash-fisher.js +14 -0
  41. package/dist/cards/impl/minion/murky-spash-fisher.js.map +1 -0
  42. package/dist/cards/impl/minion/pilot-the-shredder.d.ts +2 -0
  43. package/dist/cards/impl/minion/pilot-the-shredder.js +33 -0
  44. package/dist/cards/impl/minion/pilot-the-shredder.js.map +1 -0
  45. package/dist/cards/impl/minion/piloted-whirl-o-tron.d.ts +2 -5
  46. package/dist/cards/impl/minion/piloted-whirl-o-tron.js +12 -3
  47. package/dist/cards/impl/minion/piloted-whirl-o-tron.js.map +1 -1
  48. package/dist/cards/impl/minion/shadowy-construct.d.ts +2 -0
  49. package/dist/cards/impl/minion/shadowy-construct.js +17 -0
  50. package/dist/cards/impl/minion/shadowy-construct.js.map +1 -0
  51. package/dist/cards/impl/minion/sly-raptor.js +1 -1
  52. package/dist/cards/impl/minion/sly-raptor.js.map +1 -1
  53. package/dist/cards/impl/minion/snack-vendor.d.ts +2 -0
  54. package/dist/cards/impl/minion/snack-vendor.js +20 -0
  55. package/dist/cards/impl/minion/snack-vendor.js.map +1 -0
  56. package/dist/cards/impl/minion/stoneshell-guardian.d.ts +2 -0
  57. package/dist/cards/impl/minion/stoneshell-guardian.js +35 -0
  58. package/dist/cards/impl/minion/stoneshell-guardian.js.map +1 -0
  59. package/dist/cards/impl/minion/stormpike-lieutenant.d.ts +2 -0
  60. package/dist/cards/impl/minion/stormpike-lieutenant.js +13 -0
  61. package/dist/cards/impl/minion/stormpike-lieutenant.js.map +1 -0
  62. package/dist/cards/impl/minion/super-constructor.d.ts +2 -0
  63. package/dist/cards/impl/minion/super-constructor.js +13 -0
  64. package/dist/cards/impl/minion/super-constructor.js.map +1 -0
  65. package/dist/cards/impl/minion/tamuzo.d.ts +2 -0
  66. package/dist/cards/impl/minion/tamuzo.js +12 -0
  67. package/dist/cards/impl/minion/tamuzo.js.map +1 -0
  68. package/dist/cards/impl/minion/vaelastrasz.d.ts +2 -5
  69. package/dist/cards/impl/minion/vaelastrasz.js +11 -9
  70. package/dist/cards/impl/minion/vaelastrasz.js.map +1 -1
  71. package/dist/cards/impl/minion/weebomination.d.ts +2 -0
  72. package/dist/cards/impl/minion/weebomination.js +22 -0
  73. package/dist/cards/impl/minion/weebomination.js.map +1 -0
  74. package/dist/keywords/divine-shield.js +8 -3
  75. package/dist/keywords/divine-shield.js.map +1 -1
  76. package/dist/services/card-ids.d.ts +213 -53
  77. package/dist/services/card-ids.js.map +1 -1
  78. package/dist/services/utils.d.ts +3 -0
  79. package/dist/services/utils.js +25 -1
  80. package/dist/services/utils.js.map +1 -1
  81. package/dist/simulation/add-minion-to-board.js +0 -14
  82. package/dist/simulation/add-minion-to-board.js.map +1 -1
  83. package/dist/simulation/attack.js +0 -8
  84. package/dist/simulation/attack.js.map +1 -1
  85. package/dist/simulation/avenge.d.ts +1 -0
  86. package/dist/simulation/avenge.js +9 -1
  87. package/dist/simulation/avenge.js.map +1 -1
  88. package/dist/simulation/battlecries.js +5 -36
  89. package/dist/simulation/battlecries.js.map +1 -1
  90. package/dist/simulation/death-effects.js +12 -0
  91. package/dist/simulation/death-effects.js.map +1 -1
  92. package/dist/simulation/deathrattle-effects.d.ts +0 -1
  93. package/dist/simulation/deathrattle-effects.js +3 -10
  94. package/dist/simulation/deathrattle-effects.js.map +1 -1
  95. package/dist/simulation/deathrattle-spawns.js +3 -14
  96. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  97. package/dist/simulation/on-being-attacked.js +14 -2
  98. package/dist/simulation/on-being-attacked.js.map +1 -1
  99. package/dist/simulation/secrets.d.ts +2 -2
  100. package/dist/simulation/secrets.js +6 -3
  101. package/dist/simulation/secrets.js.map +1 -1
  102. package/dist/simulation/spawn-fail.js +1 -2
  103. package/dist/simulation/spawn-fail.js.map +1 -1
  104. package/dist/simulation/start-of-combat/soc-action-processor.js +0 -15
  105. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  106. package/dist/simulation/summon-when-space.js +47 -20
  107. package/dist/simulation/summon-when-space.js.map +1 -1
  108. package/package.json +1 -1
  109. package/dist/cards/impl/minion/crabby.d.ts +0 -5
  110. package/dist/cards/impl/minion/crabby.js +0 -17
  111. package/dist/cards/impl/minion/crabby.js.map +0 -1
@@ -26,7 +26,7 @@ exports.WaxWarband = {
26
26
  }),
27
27
  ];
28
28
  allMinions.forEach((e) => {
29
- (0, stats_1.modifyStats)(e, trinket, input.gameState.cardsData.getTavernLevel(e.cardId), input.gameState.cardsData.getTavernLevel(e.cardId), input.playerBoard, input.playerEntity, input.gameState);
29
+ (0, stats_1.modifyStats)(e, trinket, +heroPower.info, +heroPower.info, input.playerBoard, input.playerEntity, input.gameState);
30
30
  });
31
31
  return true;
32
32
  }
@@ -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 { CardIds } from '../../../services/card-ids';\nimport { ALL_BG_RACES, AllCardsService, Race } from '@firestone-hs/reference-data';\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\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\tinput.gameState.cardsData.getTavernLevel(e.cardId),\r\n\t\t\t\t\t\t\tinput.gameState.cardsData.getTavernLevel(e.cardId),\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\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.info,\r\n\t\t\t\t\t\t\t+heroPower.info,\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 { BattlecryCard } from '../../card.interface';
2
+ export declare const AzsharanCutlassier: BattlecryCard;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AzsharanCutlassier = void 0;
4
+ exports.AzsharanCutlassier = {
5
+ cardIds: ["BG33_830", "BG33_830_G"],
6
+ battlecry: (minion, input) => {
7
+ const mult = minion.cardId === "BG33_830_G" ? 2 : 1;
8
+ input.hero.globalInfo.TavernSpellAttackBuff += 1 * mult;
9
+ return true;
10
+ },
11
+ };
12
+ //# sourceMappingURL=azsharan-cutlassier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azsharan-cutlassier.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/azsharan-cutlassier.ts"],"names":[],"mappings":";;;AAKa,QAAA,kBAAkB,GAAkB;IAChD,OAAO,EAAE,0BAA4E;IACrF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,GAAG,IAAI,CAAC;QACxD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const AzsharanCutlassier: BattlecryCard = {\r\n\tcardIds: [CardIds.AzsharanCutlassier_BG33_830, CardIds.AzsharanCutlassier_BG33_830_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.AzsharanCutlassier_BG33_830_G ? 2 : 1;\r\n\t\tinput.hero.globalInfo.TavernSpellAttackBuff += 1 * mult;\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnCard } from '../../card.interface';
2
+ export declare const DivineSparkbot: DeathrattleSpawnCard;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DivineSparkbot = void 0;
4
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
5
+ exports.DivineSparkbot = {
6
+ cardIds: ["BG33_809", "BG33_809_G"],
7
+ deathrattleSpawn: (minion, input) => {
8
+ const mult = minion.cardId === "BG33_809_G" ? 2 : 1;
9
+ const cardsToAdd = Array(mult).fill("BG33_817");
10
+ (0, cards_in_hand_1.addCardsInHand)(input.boardWithDeadEntityHero, input.boardWithDeadEntity, cardsToAdd, input.gameState);
11
+ return [];
12
+ },
13
+ };
14
+ //# sourceMappingURL=divine-sparkbot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divine-sparkbot.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/divine-sparkbot.ts"],"names":[],"mappings":";;;AAEA,qEAAmE;AAItD,QAAA,cAAc,GAAyB;IACnD,OAAO,EAAE,0BAAoE;IAC7E,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,YAA2B,CAAC;QAC/D,IAAA,8BAAc,EAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,mBAAmB,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACtG,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const DivineSparkbot: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.DivineSparkbot_BG33_809, CardIds.DivineSparkbot_BG33_809_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.DivineSparkbot_BG33_809_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array(mult).fill(CardIds.Sanctify_BG33_817);\r\n\t\taddCardsInHand(input.boardWithDeadEntityHero, input.boardWithDeadEntity, cardsToAdd, input.gameState);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnCard } from '../../card.interface';
2
+ export declare const ExpertTechnician: DeathrattleSpawnCard;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpertTechnician = void 0;
4
+ const attack_1 = require("../../../simulation/attack");
5
+ exports.ExpertTechnician = {
6
+ cardIds: ["BG33_370", "BG33_370_G"],
7
+ deathrattleSpawn: (minion, input) => {
8
+ const loops = minion.cardId === "BG33_370_G" ? 2 : 1;
9
+ for (let i = 0; i < loops; i++) {
10
+ const target = input.boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];
11
+ if (!target) {
12
+ continue;
13
+ }
14
+ const previousHasAttacked = minion.hasAttacked;
15
+ const previousWindfury = minion.windfury;
16
+ target.attackImmediately = true;
17
+ target.windfury = false;
18
+ (0, attack_1.simulateAttack)(input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoard, input.otherBoardHero, input.gameState);
19
+ target.hasAttacked = previousHasAttacked;
20
+ target.attackImmediately = false;
21
+ target.windfury = previousWindfury;
22
+ }
23
+ return null;
24
+ },
25
+ };
26
+ //# sourceMappingURL=expert-technician.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expert-technician.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/expert-technician.ts"],"names":[],"mappings":";;;AAEA,uDAA4D;AAI/C,QAAA,gBAAgB,GAAyB;IACrD,OAAO,EAAE,0BAAwE;IACjF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,MAAM,EAAE;gBACZ,SAAS;aACT;YAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC;YAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;YACzC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAChC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,IAAA,uBAAc,EACb,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;YACzC,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;YACjC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;SACnC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { simulateAttack } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const ExpertTechnician: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.ExpertTechnician_BG33_370, CardIds.ExpertTechnician_BG33_370_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst loops = minion.cardId === CardIds.ExpertTechnician_BG33_370_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\tconst target = input.boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\t\tif (!target) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst previousHasAttacked = minion.hasAttacked;\r\n\t\t\tconst previousWindfury = minion.windfury;\r\n\t\t\ttarget.attackImmediately = true;\r\n\t\t\ttarget.windfury = false;\r\n\t\t\tsimulateAttack(\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.otherBoard,\r\n\t\t\t\tinput.otherBoardHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\ttarget.hasAttacked = previousHasAttacked;\r\n\t\t\ttarget.attackImmediately = false;\r\n\t\t\ttarget.windfury = previousWindfury;\r\n\t\t}\r\n\t\treturn null;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { RallyCard } from '../../card.interface';
2
+ export declare const FriendlyBouncer: RallyCard;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FriendlyBouncer = void 0;
4
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
5
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
6
+ exports.FriendlyBouncer = {
7
+ cardIds: ["BG33_700", "BG33_700_G"],
8
+ rally: (minion, input) => {
9
+ const loops = minion.cardId === "BG33_700_G" ? 2 : 1;
10
+ for (let i = 0; i < loops; i++) {
11
+ const spawnId = input.gameState.cardsData.getRandomRally(input.attackingHero.tavernTier);
12
+ (0, deathrattle_spawns_1.simplifiedSpawnEntitiesWithAddToBoard)(spawnId, 1, {
13
+ boardWithDeadEntity: input.attackingBoard,
14
+ boardWithDeadEntityHero: input.attackingHero,
15
+ gameState: input.gameState,
16
+ deadEntity: minion,
17
+ otherBoard: input.defendingBoard,
18
+ otherBoardHero: input.defendingHero,
19
+ }, minion, input.attackingBoard.length - input.attackingBoard.indexOf(minion) - 1);
20
+ (0, cards_in_hand_1.addCardsInHand)(input.attackingHero, input.attackingBoard, [spawnId], input.gameState);
21
+ }
22
+ return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
23
+ },
24
+ };
25
+ //# sourceMappingURL=friendly-bouncer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"friendly-bouncer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/friendly-bouncer.ts"],"names":[],"mappings":";;;AAEA,qEAAmE;AACnE,+EAA+F;AAIlF,QAAA,eAAe,GAAc;IACzC,OAAO,EAAE,0BAAsE;IAC/E,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACzF,IAAA,0DAAqC,EACpC,OAAO,EACP,CAAC,EACD;gBACC,mBAAmB,EAAE,KAAK,CAAC,cAAc;gBACzC,uBAAuB,EAAE,KAAK,CAAC,aAAa;gBAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM;gBAClB,UAAU,EAAE,KAAK,CAAC,cAAc;gBAChC,cAAc,EAAE,KAAK,CAAC,aAAa;aACnC,EACD,MAAM,EACN,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CACtE,CAAC;YACF,IAAA,8BAAc,EAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACtF;QACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { simplifiedSpawnEntitiesWithAddToBoard } from '../../../simulation/deathrattle-spawns';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const FriendlyBouncer: RallyCard = {\r\n\tcardIds: [CardIds.FriendlyBouncer_BG33_700, CardIds.FriendlyBouncer_BG33_700_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tconst loops = minion.cardId === CardIds.FriendlyBouncer_BG33_700_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\tconst spawnId = input.gameState.cardsData.getRandomRally(input.attackingHero.tavernTier);\r\n\t\t\tsimplifiedSpawnEntitiesWithAddToBoard(\r\n\t\t\t\tspawnId,\r\n\t\t\t\t1,\r\n\t\t\t\t{\r\n\t\t\t\t\tboardWithDeadEntity: input.attackingBoard,\r\n\t\t\t\t\tboardWithDeadEntityHero: input.attackingHero,\r\n\t\t\t\t\tgameState: input.gameState,\r\n\t\t\t\t\tdeadEntity: minion,\r\n\t\t\t\t\totherBoard: input.defendingBoard,\r\n\t\t\t\t\totherBoardHero: input.defendingHero,\r\n\t\t\t\t},\r\n\t\t\t\tminion,\r\n\t\t\t\tinput.attackingBoard.length - input.attackingBoard.indexOf(minion) - 1,\r\n\t\t\t);\r\n\t\t\taddCardsInHand(input.attackingHero, input.attackingBoard, [spawnId], input.gameState);\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { EndOfTurnCard } from '../../card.interface';
2
+ export declare const FrostwolfLieutenant: EndOfTurnCard;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FrostwolfLieutenant = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.FrostwolfLieutenant = {
6
+ cardIds: ["BG22_HERO_002_Buddy", "BG22_HERO_002_Buddy_G"],
7
+ endOfTurn: (minion, input) => {
8
+ const mult = minion.cardId === "BG22_HERO_002_Buddy_G" ? 2 : 1;
9
+ const target = input.board[0];
10
+ (0, stats_1.modifyStats)(target, minion, 10 * mult, 0, input.board, input.hero, input.gameState);
11
+ },
12
+ };
13
+ //# sourceMappingURL=frostwolf-lieutenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frostwolf-lieutenant.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/frostwolf-lieutenant.ts"],"names":[],"mappings":";;;AAEA,qDAAwD;AAG3C,QAAA,mBAAmB,GAAkB;IACjD,OAAO,EAAE,gDAAoG;IAC7G,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAAsD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACrF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const FrostwolfLieutenant: EndOfTurnCard = {\r\n\tcardIds: [CardIds.FrostwolfLieutenant_BG22_HERO_002_Buddy, CardIds.FrostwolfLieutenant_BG22_HERO_002_Buddy_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FrostwolfLieutenant_BG22_HERO_002_Buddy_G ? 2 : 1;\r\n\t\tconst target = input.board[0];\r\n\t\tmodifyStats(target, minion, 10 * mult, 0, input.board, input.hero, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const MasterGadrin: StartOfCombatCard;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MasterGadrin = void 0;
4
+ const attack_1 = require("../../../simulation/attack");
5
+ const stats_1 = require("../../../simulation/stats");
6
+ exports.MasterGadrin = {
7
+ cardIds: ["BG20_HERO_201_Buddy", "BG20_HERO_201_Buddy_G"],
8
+ startOfCombat: (minion, input) => {
9
+ const minionIndex = input.playerBoard.indexOf(minion);
10
+ const leftNeighbour = minionIndex - 1 >= 0 ? input.playerBoard[minionIndex - 1] : null;
11
+ const targets = minion.cardId === "BG20_HERO_201_Buddy_G"
12
+ ? (0, attack_1.getNeighbours)(input.playerBoard, minion)
13
+ : [leftNeighbour];
14
+ for (const target of targets) {
15
+ (0, stats_1.modifyStats)(target, minion, 0, target.attack, input.playerBoard, input.playerEntity, input.gameState);
16
+ }
17
+ return true;
18
+ },
19
+ };
20
+ //# sourceMappingURL=master-gadrin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"master-gadrin.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/master-gadrin.ts"],"names":[],"mappings":";;;AAEA,uDAA2D;AAE3D,qDAAwD;AAG3C,QAAA,YAAY,GAAsB;IAC9C,OAAO,EAAE,gDAAsF;IAC/F,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,MAAM,OAAO,GACZ,MAAM,CAAC,MAAM,4BAA+C;YAC3D,CAAC,CAAC,IAAA,sBAAa,EAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;YAC1C,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACtG;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getNeighbours } from '../../../simulation/attack';\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 MasterGadrin: StartOfCombatCard = {\r\n\tcardIds: [CardIds.MasterGadrin_BG20_HERO_201_Buddy, CardIds.MasterGadrin_BG20_HERO_201_Buddy_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst minionIndex = input.playerBoard.indexOf(minion);\r\n\t\tconst leftNeighbour = minionIndex - 1 >= 0 ? input.playerBoard[minionIndex - 1] : null;\r\n\t\tconst targets =\r\n\t\t\tminion.cardId === CardIds.MasterGadrin_BG20_HERO_201_Buddy_G\r\n\t\t\t\t? getNeighbours(input.playerBoard, minion)\r\n\t\t\t\t: [leftNeighbour];\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(target, minion, 0, target.attack, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { AvengeCard } from '../../card.interface';
2
+ export declare const Monstrosity: AvengeCard;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Monstrosity = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.Monstrosity = {
6
+ cardIds: ["BG20_HERO_282_Buddy", "BG20_HERO_282_Buddy_G"],
7
+ baseAvengeValue: (cardId) => 1,
8
+ avenge: (minion, input) => {
9
+ const mult = minion.cardId === "BG20_HERO_282_Buddy_G" ? 2 : 1;
10
+ (0, stats_1.modifyStats)(minion, minion, input.deadEntity.attack * mult, 0, input.board, input.hero, input.gameState);
11
+ },
12
+ };
13
+ //# sourceMappingURL=monstrosity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monstrosity.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/monstrosity.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,WAAW,GAAe;IACtC,OAAO,EAAE,gDAAoF;IAC7F,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAA8C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1G,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { AvengeCard } from '../../card.interface';\r\n\r\nexport const Monstrosity: AvengeCard = {\r\n\tcardIds: [CardIds.Monstrosity_BG20_HERO_282_Buddy, CardIds.Monstrosity_BG20_HERO_282_Buddy_G],\r\n\tbaseAvengeValue: (cardId: string) => 1,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Monstrosity_BG20_HERO_282_Buddy_G ? 2 : 1;\r\n\t\tmodifyStats(minion, minion, input.deadEntity.attack * mult, 0, input.board, input.hero, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { BattlecryCard } from '../../card.interface';
2
+ export declare const MurkySpashFisher: BattlecryCard;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MurkySpashFisher = void 0;
4
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
5
+ exports.MurkySpashFisher = {
6
+ cardIds: ["BG33_897", "BG33_897_G"],
7
+ battlecry: (minion, input) => {
8
+ const mult = minion.cardId === "BG33_897_G" ? 2 : 1;
9
+ const cardsToAdd = Array(mult).fill("BG33_898");
10
+ (0, cards_in_hand_1.addCardsInHand)(input.hero, input.board, cardsToAdd, input.gameState);
11
+ return true;
12
+ },
13
+ };
14
+ //# sourceMappingURL=murky-spash-fisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"murky-spash-fisher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/murky-spash-fisher.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAGtD,QAAA,gBAAgB,GAAkB;IAC9C,OAAO,EAAE,0BAA0E;IACnF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,YAA6B,CAAC;QACjE,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const MurkySpashFisher: BattlecryCard = {\r\n\tcardIds: [CardIds.MurkySplashFisher_BG33_897, CardIds.MurkySplashFisher_BG33_897_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MurkySplashFisher_BG33_897_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array(mult).fill(CardIds.MurkysFish_BG33_898);\r\n\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnCard } from '../../card.interface';
2
+ export declare const PilotTheShredder: DeathrattleSpawnCard;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PilotTheShredder = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
6
+ exports.PilotTheShredder = {
7
+ cardIds: ["BG21_HERO_030t", "BG21_HERO_030t_G"],
8
+ deathrattleSpawn: (minion, input) => {
9
+ var _a;
10
+ const mult = minion.cardId === "BG21_HERO_030t_G" ? 2 : 1;
11
+ const allSpawns = [];
12
+ for (let i = 0; i < mult; i++) {
13
+ const hand = (_a = input.boardWithDeadEntityHero.hand.filter((e) => !!(e === null || e === void 0 ? void 0 : e.cardId)).filter((e) => !e.locked)) !== null && _a !== void 0 ? _a : [];
14
+ const highestHealth = Math.max(...hand.filter((c) => c.health).map((c) => c.health));
15
+ const highestHealthMinions = highestHealth ? hand.filter((c) => c.health === highestHealth) : null;
16
+ const spawn = !!(highestHealthMinions === null || highestHealthMinions === void 0 ? void 0 : highestHealthMinions.length)
17
+ ? (0, utils_1.pickRandom)(highestHealthMinions)
18
+ : hand.filter((c) => c.cardId).length
19
+ ? (0, utils_1.pickRandom)(hand.filter((c) => c.cardId))
20
+ : null;
21
+ if (spawn) {
22
+ spawn.locked = true;
23
+ const spawns = (0, deathrattle_spawns_1.spawnEntities)(spawn.cardId, 1, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoard, input.otherBoardHero, input.gameState, minion.friendly, false, false, true, { ...spawn });
24
+ for (const s of spawns) {
25
+ s.onCanceledSummon = () => (spawn.locked = false);
26
+ }
27
+ allSpawns.push(...spawns);
28
+ }
29
+ }
30
+ return allSpawns;
31
+ },
32
+ };
33
+ //# sourceMappingURL=pilot-the-shredder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pilot-the-shredder.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/pilot-the-shredder.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,+EAAuE;AAG1D,QAAA,gBAAgB,GAAyB;IACrD,OAAO,EAAE,sCAAiG;IAC1G,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC;YAC1G,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACrF,MAAM,oBAAoB,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,CAAA;gBAC3C,CAAC,CAAC,IAAA,kBAAU,EAAC,oBAAoB,CAAC;gBAClC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;oBACrC,CAAC,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC1C,CAAC,CAAC,IAAI,CAAC;YACR,IAAI,KAAK,EAAE;gBACV,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBAKpB,MAAM,MAAM,GAAG,IAAA,kCAAa,EAC3B,KAAK,CAAC,MAAM,EACZ,CAAC,EACD,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,EACf,MAAM,CAAC,QAAQ,EACf,KAAK,EACL,KAAK,EACL,IAAI,EACJ,EAAE,GAAG,KAAK,EAAiB,CAC3B,CAAC;gBACF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;oBACvB,CAAC,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;iBAElD;gBACD,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;aAC1B;SACD;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\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 PilotTheShredder: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.Sneed_SneedsNewShredderToken_BG21_HERO_030t, CardIds.SneedsNewShredder_BG21_HERO_030t_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SneedsNewShredder_BG21_HERO_030t_G ? 2 : 1;\r\n\t\tconst allSpawns = [];\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tconst hand = input.boardWithDeadEntityHero.hand.filter((e) => !!e?.cardId).filter((e) => !e.locked) ?? [];\r\n\t\t\tconst highestHealth = Math.max(...hand.filter((c) => c.health).map((c) => c.health));\r\n\t\t\tconst highestHealthMinions = highestHealth ? hand.filter((c) => c.health === highestHealth) : null;\r\n\t\t\tconst spawn = !!highestHealthMinions?.length\r\n\t\t\t\t? pickRandom(highestHealthMinions)\r\n\t\t\t\t: hand.filter((c) => c.cardId).length\r\n\t\t\t\t? pickRandom(hand.filter((c) => c.cardId))\r\n\t\t\t\t: null;\r\n\t\t\tif (spawn) {\r\n\t\t\t\tspawn.locked = true;\r\n\t\t\t\t// Technically it should not be removed from hand, but rather flagged\r\n\t\t\t\t// Probably very low impact doing it like this\r\n\t\t\t\t// spawn.locked = true;\r\n\t\t\t\t// removeCardFromHand(boardWithDeadEntityHero, spawn);\r\n\t\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\t\tspawn.cardId,\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\tminion.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\t{ ...spawn } as BoardEntity,\r\n\t\t\t\t);\r\n\t\t\t\tfor (const s of spawns) {\r\n\t\t\t\t\ts.onCanceledSummon = () => (spawn.locked = false);\r\n\t\t\t\t\t// s.backRef = spawn;\r\n\t\t\t\t}\r\n\t\t\t\tallSpawns.push(...spawns);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn allSpawns;\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 PilotedWhirlOTron: {
4
- startOfCombat: (minion: BoardEntity, input: SoCInput) => boolean;
5
- };
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const PilotedWhirlOTron: StartOfCombatCard;
@@ -1,12 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PilotedWhirlOTron = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
4
5
  const deathrattle_effects_1 = require("../../../simulation/deathrattle-effects");
6
+ const utils_1 = require("../../../utils");
5
7
  exports.PilotedWhirlOTron = {
8
+ cardIds: ["BG21_HERO_030_Buddy", "BG21_HERO_030_Buddy_G"],
6
9
  startOfCombat: (minion, input) => {
7
- (0, deathrattle_effects_1.rememberDeathrattles)(minion, input.playerBoard.filter((e) => e.cardId !== "BG21_HERO_030_Buddy" &&
8
- e.cardId !== "BG21_HERO_030_Buddy_G"), input.gameState.cardsData, input.gameState.allCards, input.gameState.sharedState);
9
- input.gameState.spectator.registerPowerTarget(minion, minion, input.playerBoard, input.playerEntity, input.opponentEntity);
10
+ const mult = minion.cardId === "BG21_HERO_030_Buddy_G" ? 2 : 1;
11
+ const targets = input.playerBoard
12
+ .filter((e) => !exports.PilotedWhirlOTron.cardIds.includes(e.cardId) &&
13
+ (0, utils_1.hasEntityMechanic)(e, reference_data_1.GameTag.DEATHRATTLE, input.gameState.allCards))
14
+ .slice(0, 2);
15
+ for (let i = 0; i < mult; i++) {
16
+ (0, deathrattle_effects_1.rememberDeathrattles)(minion, targets, input.gameState.cardsData, input.gameState.allCards, input.gameState.sharedState);
17
+ input.gameState.spectator.registerPowerTarget(minion, minion, input.playerBoard, input.playerEntity, input.opponentEntity);
18
+ }
10
19
  return true;
11
20
  },
12
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"piloted-whirl-o-tron.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/piloted-whirl-o-tron.ts"],"names":[],"mappings":";;;AAEA,iFAA+E;AAGlE,QAAA,iBAAiB,GAAG;IAChC,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,IAAA,0CAAoB,EACnB,MAAM,EACN,KAAK,CAAC,WAAW,CAAC,MAAM,CACvB,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,0BAAkD;YAC1D,CAAC,CAAC,MAAM,4BAAoD,CAC7D,EACD,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,EACxB,KAAK,CAAC,SAAS,CAAC,WAAW,CAC3B,CAAC;QACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,MAAM,EACN,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACpB,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\nimport { BoardEntity } from '../../../board-entity';\r\nimport { rememberDeathrattles } from '../../../simulation/deathrattle-effects';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\n\r\nexport const PilotedWhirlOTron = {\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\trememberDeathrattles(\r\n\t\t\tminion,\r\n\t\t\tinput.playerBoard.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId !== CardIds.PilotedWhirlOTron_BG21_HERO_030_Buddy &&\r\n\t\t\t\t\te.cardId !== CardIds.PilotedWhirlOTron_BG21_HERO_030_Buddy_G,\r\n\t\t\t),\r\n\t\t\tinput.gameState.cardsData,\r\n\t\t\tinput.gameState.allCards,\r\n\t\t\tinput.gameState.sharedState,\r\n\t\t);\r\n\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tinput.playerBoard,\r\n\t\t\tinput.playerEntity,\r\n\t\t\tinput.opponentEntity,\r\n\t\t);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"piloted-whirl-o-tron.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/piloted-whirl-o-tron.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAGvD,iFAA+E;AAE/E,0CAAmD;AAGtC,QAAA,iBAAiB,GAAsB;IACnD,OAAO,EAAE,gDAAgG;IACzG,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAAoD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;aAC/B,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,yBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7C,IAAA,yBAAiB,EAAC,CAAC,EAAE,wBAAO,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACpE;aACA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAA,0CAAoB,EACnB,MAAM,EACN,OAAO,EACP,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,EACxB,KAAK,CAAC,SAAS,CAAC,WAAW,CAC3B,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,MAAM,EACN,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACpB,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { rememberDeathrattles } from '../../../simulation/deathrattle-effects';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasEntityMechanic } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const PilotedWhirlOTron: StartOfCombatCard = {\r\n\tcardIds: [CardIds.PilotedWhirlOTron_BG21_HERO_030_Buddy, CardIds.PilotedWhirlOTron_BG21_HERO_030_Buddy_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.PilotedWhirlOTron_BG21_HERO_030_Buddy_G ? 2 : 1;\r\n\t\tconst targets = input.playerBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\t!PilotedWhirlOTron.cardIds.includes(e.cardId) &&\r\n\t\t\t\t\thasEntityMechanic(e, GameTag.DEATHRATTLE, input.gameState.allCards),\r\n\t\t\t)\r\n\t\t\t.slice(0, 2);\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\trememberDeathrattles(\r\n\t\t\t\tminion,\r\n\t\t\t\ttargets,\r\n\t\t\t\tinput.gameState.cardsData,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\tinput.gameState.sharedState,\r\n\t\t\t);\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tminion,\r\n\t\t\t\tminion,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { AvengeCard, DefaultChargesCard } from '../../card.interface';
2
+ export declare const ShadowConstruct: AvengeCard & DefaultChargesCard;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShadowConstruct = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.ShadowConstruct = {
6
+ cardIds: ["BG25_HERO_103_Buddy", "BG25_HERO_103_Buddy_G"],
7
+ baseAvengeValue: (cardId) => 1,
8
+ defaultCharges: (entity) => (entity.cardId === "BG25_HERO_103_Buddy_G" ? 2 : 1),
9
+ avenge: (minion, input) => {
10
+ if (minion.abiityChargesLeft <= 0) {
11
+ return null;
12
+ }
13
+ minion.abiityChargesLeft--;
14
+ (0, stats_1.modifyStats)(minion, minion, input.deadEntity.attack, input.deadEntity.maxHealth, input.board, input.hero, input.gameState);
15
+ },
16
+ };
17
+ //# sourceMappingURL=shadowy-construct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadowy-construct.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/shadowy-construct.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,eAAe,GAAoC;IAC/D,OAAO,EAAE,gDAA8F;IACvG,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,MAAmB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,4BAAmD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnH,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC;SACZ;QACD,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,UAAU,CAAC,MAAM,EACvB,KAAK,CAAC,UAAU,CAAC,SAAS,EAC1B,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { AvengeCard, DefaultChargesCard } from '../../card.interface';\r\n\r\nexport const ShadowConstruct: AvengeCard & DefaultChargesCard = {\r\n\tcardIds: [CardIds.ShadowyConstruct_BG25_HERO_103_Buddy, CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G],\r\n\tbaseAvengeValue: (cardId: string) => 1,\r\n\tdefaultCharges: (entity: BoardEntity) => (entity.cardId === CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G ? 2 : 1),\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tif (minion.abiityChargesLeft <= 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tminion.abiityChargesLeft--;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tinput.deadEntity.attack,\r\n\t\t\tinput.deadEntity.maxHealth,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
@@ -6,7 +6,7 @@ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
6
6
  exports.SlyRaptor = {
7
7
  cardIds: ["BG25_806", "BG25_806_G"],
8
8
  deathrattleSpawn: (minion, input) => {
9
- const raptorStat = minion.cardId === "BG25_806_G" ? 10 : 5;
9
+ const raptorStat = minion.cardId === "BG25_806_G" ? 12 : 6;
10
10
  const target = input.gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.BEAST, input.boardWithDeadEntityHero.tavernTier, exports.SlyRaptor.cardIds);
11
11
  const beastsFromRaptor = (0, deathrattle_spawns_1.simplifiedSpawnEntities)(target, 1, input);
12
12
  beastsFromRaptor.forEach((b) => {
@@ -1 +1 @@
1
- {"version":3,"file":"sly-raptor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/sly-raptor.ts"],"names":[],"mappings":";;;AACA,iEAAoD;AAGpD,+EAAiF;AAGpE,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,0BAA0D;IACnE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAC/D,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,uBAAuB,CAAC,UAAU,EACxC,iBAAS,CAAC,OAAO,CACjB,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAA,4CAAuB,EAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;YACtB,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC;IACzB,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\nimport { Race } from '@firestone-hs/reference-data';\nimport { BoardEntity } from '../../../board-entity';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const SlyRaptor: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.SlyRaptor_BG25_806, CardIds.SlyRaptor_BG25_806_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst raptorStat = minion.cardId === CardIds.SlyRaptor_BG25_806_G ? 10 : 5;\r\n\t\tconst target = input.gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\tRace.BEAST,\r\n\t\t\tinput.boardWithDeadEntityHero.tavernTier,\r\n\t\t\tSlyRaptor.cardIds,\r\n\t\t);\r\n\t\tconst beastsFromRaptor = simplifiedSpawnEntities(target, 1, input);\r\n\t\tbeastsFromRaptor.forEach((b) => {\r\n\t\t\tb.attack = raptorStat;\r\n\t\t\tb.health = raptorStat;\r\n\t\t});\r\n\t\treturn beastsFromRaptor;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"sly-raptor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/sly-raptor.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,+EAAiF;AAGpE,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,0BAA0D;IACnE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAC/D,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,uBAAuB,CAAC,UAAU,EACxC,iBAAS,CAAC,OAAO,CACjB,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAA,4CAAuB,EAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9B,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;YACtB,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,gBAAgB,CAAC;IACzB,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 { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const SlyRaptor: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.SlyRaptor_BG25_806, CardIds.SlyRaptor_BG25_806_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst raptorStat = minion.cardId === CardIds.SlyRaptor_BG25_806_G ? 12 : 6;\r\n\t\tconst target = input.gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\tRace.BEAST,\r\n\t\t\tinput.boardWithDeadEntityHero.tavernTier,\r\n\t\t\tSlyRaptor.cardIds,\r\n\t\t);\r\n\t\tconst beastsFromRaptor = simplifiedSpawnEntities(target, 1, input);\r\n\t\tbeastsFromRaptor.forEach((b) => {\r\n\t\t\tb.attack = raptorStat;\r\n\t\t\tb.health = raptorStat;\r\n\t\t});\r\n\t\treturn beastsFromRaptor;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { EndOfTurnCard } from '../../card.interface';
2
+ export declare const SnackVendor: EndOfTurnCard;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SnackVendor = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const stats_1 = require("../../../simulation/stats");
6
+ exports.SnackVendor = {
7
+ cardIds: ["TB_BaconShop_HERO_16_Buddy", "TB_BaconShop_HERO_16_Buddy"],
8
+ endOfTurn: (minion, input) => {
9
+ const mult = minion.cardId === "TB_BaconShop_HERO_16_Buddy" ? 2 : 1;
10
+ for (let i = 0; i < mult; i++) {
11
+ const candidates = input.board.filter((e) => !exports.SnackVendor.cardIds.includes(e.cardId) &&
12
+ input.gameState.allCards.getCard(e.cardId).techLevel === 3);
13
+ const target = (0, utils_1.pickRandom)(candidates);
14
+ if (target) {
15
+ (0, stats_1.modifyStats)(target, minion, minion.attack, minion.maxHealth, input.board, input.hero, input.gameState);
16
+ }
17
+ }
18
+ },
19
+ };
20
+ //# sourceMappingURL=snack-vendor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snack-vendor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/snack-vendor.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,qDAAwD;AAG3C,QAAA,WAAW,GAAkB;IACzC,OAAO,EAAE,4DAAgG;IACzG,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iCAAmD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,mBAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;gBACvC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,CAC3D,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,UAAU,CAAC,CAAC;YACtC,IAAI,MAAM,EAAE;gBACX,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACvG;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { EndOfTurnCard } from '../../card.interface';\r\n\r\nexport const SnackVendor: EndOfTurnCard = {\r\n\tcardIds: [CardIds.SnackVendor_TB_BaconShop_HERO_16_Buddy, CardIds.SnackVendor_TB_BaconShop_HERO_16_Buddy],\r\n\tendOfTurn: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SnackVendor_TB_BaconShop_HERO_16_Buddy ? 2 : 1;\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tconst candidates = input.board.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\t!SnackVendor.cardIds.includes(e.cardId) &&\r\n\t\t\t\t\tinput.gameState.allCards.getCard(e.cardId).techLevel === 3,\r\n\t\t\t);\r\n\t\t\tconst target = pickRandom(candidates);\r\n\t\t\tif (target) {\r\n\t\t\t\tmodifyStats(target, minion, minion.attack, minion.maxHealth, input.board, input.hero, input.gameState);\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 StoneshellGuardian: StartOfCombatCard;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StoneshellGuardian = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
6
+ const spawns_1 = require("../../../simulation/spawns");
7
+ const utils_1 = require("../../../utils");
8
+ exports.StoneshellGuardian = {
9
+ cardIds: ["BG33_HERO_000_Buddy", "BG33_HERO_000_Buddy_G"],
10
+ startOfCombat: (minion, input) => {
11
+ const numberOfCopies = minion.cardId === "BG33_HERO_000_Buddy_G" ? 2 : 1;
12
+ for (let i = 0; i < numberOfCopies; i++) {
13
+ for (let j = 0; j < 2; j++) {
14
+ if (!!input.playerBoard.length && input.playerBoard.length < 7) {
15
+ const rallyMinions = input.playerBoard.filter((e) => !exports.StoneshellGuardian.cardIds.includes(e.cardId) &&
16
+ (0, utils_1.hasEntityMechanic)(e, reference_data_1.GameTag.BACON_RALLY, input.gameState.allCards));
17
+ const target = rallyMinions[j];
18
+ if (!target) {
19
+ continue;
20
+ }
21
+ const copy = {
22
+ ...target,
23
+ lastAffectedByEntity: null,
24
+ };
25
+ const newMinions = (0, deathrattle_spawns_1.spawnEntities)(copy.cardId, 1, input.playerBoard, input.playerEntity, input.opponentBoard, input.opponentEntity, input.gameState, target.friendly, true, false, false, copy);
26
+ const indexFromRight = input.playerBoard.length - (input.playerBoard.indexOf(target) + 1);
27
+ const actualSpawns = (0, spawns_1.performEntitySpawns)(newMinions, input.playerBoard, input.playerEntity, target, indexFromRight, input.opponentBoard, input.opponentEntity, input.gameState);
28
+ input.gameState.spectator.registerPowerTarget(minion, copy, input.playerBoard, input.playerEntity, input.opponentEntity);
29
+ }
30
+ }
31
+ }
32
+ return true;
33
+ },
34
+ };
35
+ //# sourceMappingURL=stoneshell-guardian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stoneshell-guardian.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/stoneshell-guardian.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAGvD,+EAAuE;AACvE,uDAAiE;AAEjE,0CAAmD;AAGtC,QAAA,kBAAkB,GAAsB;IACpD,OAAO,EAAE,gDAAkG;IAC3G,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QAEvD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,4BAAqD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3B,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,0BAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;wBAC9C,IAAA,yBAAiB,EAAC,CAAC,EAAE,wBAAO,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACpE,CAAC;oBACF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,CAAC,MAAM,EAAE;wBACZ,SAAS;qBACT;oBACD,MAAM,IAAI,GAAgB;wBACzB,GAAG,MAAM;wBACT,oBAAoB,EAAE,IAAI;qBAC1B,CAAC;oBACF,MAAM,UAAU,GAAG,IAAA,kCAAa,EAC/B,IAAI,CAAC,MAAM,EACX,CAAC,EACD,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,EACf,MAAM,CAAC,QAAQ,EACf,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,CACJ,CAAC;oBACF,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1F,MAAM,YAAY,GAAG,IAAA,4BAAmB,EACvC,UAAU,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,MAAM,EACN,cAAc,EACd,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;oBAEF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACpB,CAAC;iBACF;aACD;SACD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasEntityMechanic } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const StoneshellGuardian: StartOfCombatCard = {\r\n\tcardIds: [CardIds.StoneshellGuardian_BG33_HERO_000_Buddy, CardIds.StoneshellGuardian_BG33_HERO_000_Buddy_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// let totalSpawned = 0;\r\n\t\tconst numberOfCopies = minion.cardId === CardIds.StoneshellGuardian_BG33_HERO_000_Buddy_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < numberOfCopies; i++) {\r\n\t\t\tfor (let j = 0; j < 2; j++) {\r\n\t\t\t\tif (!!input.playerBoard.length && input.playerBoard.length < 7) {\r\n\t\t\t\t\tconst rallyMinions = input.playerBoard.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t!StoneshellGuardian.cardIds.includes(e.cardId) &&\r\n\t\t\t\t\t\t\thasEntityMechanic(e, GameTag.BACON_RALLY, input.gameState.allCards),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst target = rallyMinions[j];\r\n\t\t\t\t\tif (!target) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst copy: BoardEntity = {\r\n\t\t\t\t\t\t...target,\r\n\t\t\t\t\t\tlastAffectedByEntity: null,\r\n\t\t\t\t\t};\r\n\t\t\t\t\tconst newMinions = spawnEntities(\r\n\t\t\t\t\t\tcopy.cardId,\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.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\ttarget.friendly,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\tcopy,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst indexFromRight = input.playerBoard.length - (input.playerBoard.indexOf(target) + 1);\r\n\t\t\t\t\tconst actualSpawns = performEntitySpawns(\r\n\t\t\t\t\t\tnewMinions,\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\ttarget,\r\n\t\t\t\t\t\tindexFromRight,\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.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\t// totalSpawned += actualSpawns.length;\r\n\t\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tcopy,\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.opponentEntity,\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\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { EndOfTurnCard } from '../../card.interface';
2
+ export declare const StormpikeLieutenant: EndOfTurnCard;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StormpikeLieutenant = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.StormpikeLieutenant = {
6
+ cardIds: ["BG22_HERO_003_Buddy", "BG22_HERO_003_Buddy_G"],
7
+ endOfTurn: (minion, input) => {
8
+ const mult = minion.cardId === "BG22_HERO_003_Buddy_G" ? 2 : 1;
9
+ const target = input.board[input.board.length - 1];
10
+ (0, stats_1.modifyStats)(target, minion, 0, 10 * mult, input.board, input.hero, input.gameState);
11
+ },
12
+ };
13
+ //# sourceMappingURL=stormpike-lieutenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stormpike-lieutenant.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/stormpike-lieutenant.ts"],"names":[],"mappings":";;;AAEA,qDAAwD;AAG3C,QAAA,mBAAmB,GAAkB;IACjD,OAAO,EAAE,gDAAoG;IAC7G,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAAsD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACrF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const StormpikeLieutenant: EndOfTurnCard = {\r\n\tcardIds: [CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy, CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G ? 2 : 1;\r\n\t\tconst target = input.board[input.board.length - 1];\r\n\t\tmodifyStats(target, minion, 0, 10 * mult, input.board, input.hero, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { RallyCard } from '../../card.interface';
2
+ export declare const SuperConstructor: RallyCard;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SuperConstructor = void 0;
4
+ exports.SuperConstructor = {
5
+ cardIds: ["BG33_808", "BG33_808_G"],
6
+ rally: (minion, input) => {
7
+ const mult = minion.cardId === "BG33_808_G" ? 2 : 1;
8
+ input.attackingHero.globalInfo.TavernSpellAttackBuff += 1 * mult;
9
+ input.attackingHero.globalInfo.TavernSpellHealthBuff += 1 * mult;
10
+ return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
11
+ },
12
+ };
13
+ //# sourceMappingURL=super-constructor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super-constructor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/super-constructor.ts"],"names":[],"mappings":";;;AAKa,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,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,GAAG,IAAI,CAAC;QACjE,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,GAAG,IAAI,CAAC;QACjE,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const SuperConstructor: RallyCard = {\r\n\tcardIds: [CardIds.SuperConstructor_BG33_808, CardIds.SuperConstructor_BG33_808_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SuperConstructor_BG33_808_G ? 2 : 1;\r\n\t\tinput.attackingHero.globalInfo.TavernSpellAttackBuff += 1 * mult;\r\n\t\tinput.attackingHero.globalInfo.TavernSpellHealthBuff += 1 * mult;\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { OnOtherSpawnedCard } from '../../card.interface';
2
+ export declare const Tamuzo: OnOtherSpawnedCard;