@firestone-hs/simulate-bgs-battle 1.1.747 → 1.1.748

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 (66) hide show
  1. package/dist/cards/card.interface.d.ts +10 -1
  2. package/dist/cards/card.interface.js +8 -2
  3. package/dist/cards/card.interface.js.map +1 -1
  4. package/dist/cards/impl/_card-mappings.js +4 -2
  5. package/dist/cards/impl/_card-mappings.js.map +1 -1
  6. package/dist/cards/impl/bg-spell/mighty-dragonbreath.js +3 -1
  7. package/dist/cards/impl/bg-spell/mighty-dragonbreath.js.map +1 -1
  8. package/dist/cards/impl/enchantments/deaths-embrace.d.ts +2 -2
  9. package/dist/cards/impl/enchantments/deaths-embrace.js +35 -6
  10. package/dist/cards/impl/enchantments/deaths-embrace.js.map +1 -1
  11. package/dist/cards/impl/minion/devout-hellcaller.js +1 -1
  12. package/dist/cards/impl/minion/devout-hellcaller.js.map +1 -1
  13. package/dist/cards/impl/minion/diremuck-forager.js +4 -1
  14. package/dist/cards/impl/minion/diremuck-forager.js.map +1 -1
  15. package/dist/cards/impl/minion/drustfallen-butcher.js +1 -1
  16. package/dist/cards/impl/minion/drustfallen-butcher.js.map +1 -1
  17. package/dist/cards/impl/minion/eredar-escapist.js +5 -21
  18. package/dist/cards/impl/minion/eredar-escapist.js.map +1 -1
  19. package/dist/cards/impl/minion/expert-aviator.js +1 -1
  20. package/dist/cards/impl/minion/expert-aviator.js.map +1 -1
  21. package/dist/cards/impl/minion/fire-forged-evoker.js +1 -1
  22. package/dist/cards/impl/minion/fire-forged-evoker.js.map +1 -1
  23. package/dist/cards/impl/minion/forsaken-weaver.js +1 -1
  24. package/dist/cards/impl/minion/forsaken-weaver.js.map +1 -1
  25. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js +1 -1
  26. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js.map +1 -1
  27. package/dist/cards/impl/minion/jailbird-juggernaut.js +1 -4
  28. package/dist/cards/impl/minion/jailbird-juggernaut.js.map +1 -1
  29. package/dist/cards/impl/minion/sanguine-champion.d.ts +2 -0
  30. package/dist/cards/impl/minion/sanguine-champion.js +21 -0
  31. package/dist/cards/impl/minion/sanguine-champion.js.map +1 -0
  32. package/dist/cards/impl/minion/sanguine-refiner.js +1 -1
  33. package/dist/cards/impl/minion/sanguine-refiner.js.map +1 -1
  34. package/dist/cards/impl/minion/soul-rewinder.js +3 -2
  35. package/dist/cards/impl/minion/soul-rewinder.js.map +1 -1
  36. package/dist/cards/impl/minion/tasty-lobster.js +1 -1
  37. package/dist/cards/impl/minion/tasty-lobster.js.map +1 -1
  38. package/dist/cards/impl/minion/tichondrius.js +1 -1
  39. package/dist/cards/impl/minion/tichondrius.js.map +1 -1
  40. package/dist/cards/impl/minion/utility-drone.js +1 -1
  41. package/dist/cards/impl/minion/utility-drone.js.map +1 -1
  42. package/dist/cards/impl/trinket/all-purpose-kibble.js +3 -2
  43. package/dist/cards/impl/trinket/all-purpose-kibble.js.map +1 -1
  44. package/dist/cards/impl/trinket/archaic-scroll.js +1 -1
  45. package/dist/cards/impl/trinket/archaic-scroll.js.map +1 -1
  46. package/dist/cards/impl/trinket/bubble-crown.js +1 -1
  47. package/dist/cards/impl/trinket/bubble-crown.js.map +1 -1
  48. package/dist/cards/impl/trinket/lionfish-portrait.js +3 -2
  49. package/dist/cards/impl/trinket/lionfish-portrait.js.map +1 -1
  50. package/dist/cards/impl/trinket/miniature-ship.js +1 -1
  51. package/dist/cards/impl/trinket/miniature-ship.js.map +1 -1
  52. package/dist/cards/impl/trinket/stormcoil-sticker.js +2 -1
  53. package/dist/cards/impl/trinket/stormcoil-sticker.js.map +1 -1
  54. package/dist/cards/impl/trinket/training-certificate.js +1 -1
  55. package/dist/cards/impl/trinket/training-certificate.js.map +1 -1
  56. package/dist/cards/impl/trinket/trusty-crowbar.js +1 -1
  57. package/dist/cards/impl/trinket/trusty-crowbar.js.map +1 -1
  58. package/dist/simulation/add-minion-to-board.js +34 -10
  59. package/dist/simulation/add-minion-to-board.js.map +1 -1
  60. package/dist/simulation/battlecries.js +0 -6
  61. package/dist/simulation/battlecries.js.map +1 -1
  62. package/dist/simulation/deathrattle-spawns.js +0 -6
  63. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  64. package/dist/simulation/remove-minion-from-board.js +12 -0
  65. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"diremuck-forager.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/diremuck-forager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Diremuck Forager (Tier 4, 5/6)\r\n * Start of Combat: When you have space, summon the highest-Attack minion from your hand for this combat only.\r\n *\r\n * Golden Diremuck Forager (Tier 4, 10/12)\r\n * Start of Combat: When you have space, summon the two highest-Attack minions from your hand for this combat only.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getHighestAttackHandMinions, isHandMinionCandidate } from '../../../services/hand-minion-priority';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { FullGameState } from '../../../simulation/internal-game-state';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nconst handMinionPredicate = (allCards: FullGameState['allCards']) => (e: BoardEntity) =>\r\n\t!!e.maxHealth && isHandMinionCandidate(e, (id) => allCards.getCard(id).type?.toUpperCase());\r\n\r\n/** If the Forager died after SOC, pass `null` — summons still resolve (spawn source = hero, index from right = 0). */\r\nconst summonHandMinionFromDiremuck = (\r\n\tforager: BoardEntity | null,\r\n\thandTarget: BoardEntity,\r\n\tspawnRight: boolean,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thandTarget.locked = true;\r\n\tconst friendly = forager?.friendly ?? playerEntity.friendly;\r\n\tconst newMinions = spawnEntities(\r\n\t\thandTarget.cardId,\r\n\t\t1,\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tfriendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\ttrue,\r\n\t\t{ ...handTarget } as BoardEntity,\r\n\t);\r\n\tfor (const s of newMinions) {\r\n\t\ts.onCanceledSummon = () => (handTarget.locked = false);\r\n\t}\r\n\tconst spawnSource = forager ?? playerEntity;\r\n\t// Current theory:\r\n\t// - spawns next to the Forager, if the board isn't full at start of combat\r\n\t// https://replays.firestoneapp.com/?reviewId=1d34f5b4-7e04-4b17-bcc0-353698abaed3&turn=25&action=1\r\n\t// - spawns to the right, if the board is full at start of combat\r\n\t// https://replays.firestoneapp.com/?reviewId=b498d69f-bf1b-4bc0-8902-3643434394d5&turn=23&action=3\r\n\tconst indexFromRight = !spawnRight ? playerBoard.length - (playerBoard.indexOf(forager) + 1) : 0;\r\n\tperformEntitySpawns(\r\n\t\tnewMinions,\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\tspawnSource,\r\n\t\tindexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t);\r\n};\r\n\r\n/** Called from `summon-when-space` when board space opens during start-of-combat. */\r\nexport const handleDiremuckPendingSummons = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst raw = playerEntity.globalInfo?.DiremuckPendingSummons;\r\n\tif (!raw?.length) {\r\n\t\treturn;\r\n\t}\r\n\tconst allCards = gameState.allCards;\r\n\tconst nextQueue: { foragerEntityId: number; remaining: number; spawnRight: boolean }[] = [];\r\n\r\n\tfor (const entry of raw) {\r\n\t\tlet remaining = entry.remaining;\r\n\t\tconst forager = playerBoard.find((e) => e.entityId === entry.foragerEntityId) ?? null;\r\n\t\twhile (playerBoard.length < 7 && remaining > 0) {\r\n\t\t\tconst candidates = playerEntity.hand.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, playerEntity, Race.MURLOC, gameState.anomalies, gameState.allCards),\r\n\t\t\t);\r\n\t\t\tconst targets = getHighestAttackHandMinions(candidates, 1, (e) => handMinionPredicate(allCards)(e));\r\n\t\t\tconst handTarget = targets[0];\r\n\t\t\tif (!handTarget?.cardId || handTarget.locked) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tsummonHandMinionFromDiremuck(\r\n\t\t\t\tforager,\r\n\t\t\t\thandTarget,\r\n\t\t\t\tentry.spawnRight,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tremaining--;\r\n\t\t}\r\n\t\tif (remaining > 0) {\r\n\t\t\tnextQueue.push({ foragerEntityId: entry.foragerEntityId, remaining, spawnRight: entry.spawnRight });\r\n\t\t}\r\n\t}\r\n\tplayerEntity.globalInfo.DiremuckPendingSummons = nextQueue.length ? nextQueue : undefined;\r\n};\r\n\r\nexport const DiremuckForager: StartOfCombatCard = {\r\n\tcardIds: [CardIds.DiremuckForager_BG27_556, CardIds.DiremuckForager_BG27_556_G],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Don't clear the info, as multiple Diremuck Foragers can be on the board at the same time,\r\n\t\t// and they stack\r\n\t\t// input.playerEntity.globalInfo.DiremuckPendingSummons = undefined;\r\n\t\tconst totalWanted = minion.cardId === CardIds.DiremuckForager_BG27_556_G ? 2 : 1;\r\n\t\t// Not sure this is the right rule, but so far it looks like that if it can't spawn during start of combat,\r\n\t\t// then it will spawn to the right side of the board\r\n\t\tconst spawnRight =\r\n\t\t\tinput.playerBoard.length >= 7 ||\r\n\t\t\tinput.playerEntity.hand.filter(handMinionPredicate(input.gameState.allCards)).length === 0;\r\n\t\tinput.playerEntity.globalInfo.DiremuckPendingSummons = [\r\n\t\t\t...(input.playerEntity.globalInfo.DiremuckPendingSummons ?? []),\r\n\t\t\t{ foragerEntityId: minion.entityId, remaining: totalWanted, spawnRight },\r\n\t\t];\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"diremuck-forager.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/diremuck-forager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Diremuck Forager (Tier 4, 5/6)\r\n * Start of Combat: When you have space, summon the highest-Attack minion from your hand for this combat only.\r\n *\r\n * Golden Diremuck Forager (Tier 4, 10/12)\r\n * Start of Combat: When you have space, summon the two highest-Attack minions from your hand for this combat only.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getHighestAttackHandMinions, isHandMinionCandidate } from '../../../services/hand-minion-priority';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { FullGameState } from '../../../simulation/internal-game-state';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nconst handMinionPredicate = (allCards: FullGameState['allCards']) => (e: BoardEntity) =>\r\n\t!!e.maxHealth && isHandMinionCandidate(e, (id) => allCards.getCard(id).type?.toUpperCase());\r\n\r\n/** If the Forager died after SOC, pass `null` — summons still resolve (spawn source = hero, index from right = 0). */\r\nconst summonHandMinionFromDiremuck = (\r\n\tforager: BoardEntity | null,\r\n\thandTarget: BoardEntity,\r\n\tspawnRight: boolean,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thandTarget.locked = true;\r\n\tconst friendly = forager?.friendly ?? playerEntity.friendly;\r\n\tconst newMinions = spawnEntities(\r\n\t\thandTarget.cardId,\r\n\t\t1,\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tfriendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\ttrue,\r\n\t\t{ ...handTarget } as BoardEntity,\r\n\t);\r\n\tfor (const s of newMinions) {\r\n\t\ts.onCanceledSummon = () => (handTarget.locked = false);\r\n\t}\r\n\tconst spawnSource = forager ?? playerEntity;\r\n\t// Current theory:\r\n\t// - spawns next to the Forager, if the board isn't full at start of combat\r\n\t// https://replays.firestoneapp.com/?reviewId=1d34f5b4-7e04-4b17-bcc0-353698abaed3&turn=25&action=1\r\n\t// - spawns to the right, if the board is full at start of combat\r\n\t// https://replays.firestoneapp.com/?reviewId=b498d69f-bf1b-4bc0-8902-3643434394d5&turn=23&action=3\r\n\tconst indexFromRight = !spawnRight ? playerBoard.length - (playerBoard.indexOf(forager) + 1) : 0;\r\n\tperformEntitySpawns(\r\n\t\tnewMinions,\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\tspawnSource,\r\n\t\tindexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t);\r\n};\r\n\r\n/** Called from `summon-when-space` when board space opens during start-of-combat. */\r\nexport const handleDiremuckPendingSummons = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst raw = playerEntity.globalInfo?.DiremuckPendingSummons;\r\n\tif (!raw?.length) {\r\n\t\treturn;\r\n\t}\r\n\tconst allCards = gameState.allCards;\r\n\tconst nextQueue: { foragerEntityId: number; remaining: number; spawnRight: boolean }[] = [];\r\n\r\n\tfor (const entry of raw) {\r\n\t\tlet remaining = entry.remaining;\r\n\t\tconst forager = playerBoard.find((e) => e.entityId === entry.foragerEntityId) ?? null;\r\n\t\twhile (playerBoard.length < 7 && remaining > 0) {\r\n\t\t\tconst candidates = playerEntity.hand.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, playerEntity, Race.MURLOC, gameState.anomalies, gameState.allCards),\r\n\t\t\t);\r\n\t\t\tconst targets = getHighestAttackHandMinions(candidates, 1, (e) => handMinionPredicate(allCards)(e));\r\n\t\t\tconst handTarget = targets[0];\r\n\t\t\tif (!handTarget?.cardId || handTarget.locked) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tsummonHandMinionFromDiremuck(\r\n\t\t\t\tforager,\r\n\t\t\t\thandTarget,\r\n\t\t\t\tentry.spawnRight,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tremaining--;\r\n\t\t}\r\n\t\tif (remaining > 0) {\r\n\t\t\tnextQueue.push({ foragerEntityId: entry.foragerEntityId, remaining, spawnRight: entry.spawnRight });\r\n\t\t}\r\n\t}\r\n\tplayerEntity.globalInfo.DiremuckPendingSummons = nextQueue.length ? nextQueue : undefined;\r\n};\r\n\r\nexport const DiremuckForager: StartOfCombatCard = {\r\n\tcardIds: [CardIds.DiremuckForager_BG27_556, CardIds.DiremuckForager_BG27_556_G],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Don't clear the info, as multiple Diremuck Foragers can be on the board at the same time,\r\n\t\t// and they stack\r\n\t\t// input.playerEntity.globalInfo.DiremuckPendingSummons = undefined;\r\n\t\tconst totalWanted = minion.cardId === CardIds.DiremuckForager_BG27_556_G ? 2 : 1;\r\n\t\t// Not sure this is the right rule, but so far it looks like that if it can't spawn during start of combat,\r\n\t\t// then it will spawn to the right side of the board\r\n\t\tconst spawnRight =\r\n\t\t\tinput.playerBoard.length >= 7 ||\r\n\t\t\tinput.playerEntity.hand.filter(handMinionPredicate(input.gameState.allCards)).length === 0;\r\n\t\tinput.playerEntity.globalInfo.DiremuckPendingSummons = [\r\n\t\t\t...(input.playerEntity.globalInfo.DiremuckPendingSummons ?? []),\r\n\t\t\t{ foragerEntityId: minion.entityId, remaining: totalWanted, spawnRight },\r\n\t\t];\r\n\t\treturn {\r\n\t\t\thasTriggered: true,\r\n\t\t\tshouldRecomputeCurrentAttacker: !spawnRight,\r\n\t\t};\r\n\t},\r\n};\r\n"]}
@@ -4,7 +4,7 @@ exports.DrustfallenButcher = void 0;
4
4
  const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
5
5
  exports.DrustfallenButcher = {
6
6
  cardIds: ["BG32_324", "BG32_324_G"],
7
- baseAvengeValue: (cardId) => 4,
7
+ baseAvengeValue: (cardId) => 3,
8
8
  avenge: (minion, input) => {
9
9
  const mult = minion.cardId === "BG32_324_G" ? 2 : 1;
10
10
  const cardsToAdd = Array(mult).fill("BG28_604");
@@ -1 +1 @@
1
- {"version":3,"file":"drustfallen-butcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/drustfallen-butcher.ts"],"names":[],"mappings":";;;AAUA,qEAAmE;AAGtD,QAAA,kBAAkB,GAAe;IAC7C,OAAO,EAAE,0BAA4E;IACrF,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,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;IACtE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Drustfallen Butcher\r\n * Avenge (4): Get a Butchering.\r\n *\r\n * Golden Drustfallen Butcher\r\n * Avenge (4): Get 2 Butcherings.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AvengeCard } from '../../card.interface';\r\n\r\nexport const DrustfallenButcher: AvengeCard = {\r\n\tcardIds: [CardIds.DrustfallenButcher_BG32_324, CardIds.DrustfallenButcher_BG32_324_G],\r\n\tbaseAvengeValue: (cardId: string) => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.DrustfallenButcher_BG32_324_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array(mult).fill(CardIds.Butchering_BG28_604);\r\n\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"drustfallen-butcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/drustfallen-butcher.ts"],"names":[],"mappings":";;;AAUA,qEAAmE;AAGtD,QAAA,kBAAkB,GAAe;IAC7C,OAAO,EAAE,0BAA4E;IACrF,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,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;IACtE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Drustfallen Butcher\r\n * Avenge (4): Get a Butchering.\r\n *\r\n * Golden Drustfallen Butcher\r\n * Avenge (4): Get 2 Butcherings.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AvengeCard } from '../../card.interface';\r\n\r\nexport const DrustfallenButcher: AvengeCard = {\r\n\tcardIds: [CardIds.DrustfallenButcher_BG32_324, CardIds.DrustfallenButcher_BG32_324_G],\r\n\tbaseAvengeValue: (cardId: string) => 3,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.DrustfallenButcher_BG32_324_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array(mult).fill(CardIds.Butchering_BG28_604);\r\n\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EredarEscapist = void 0;
4
- const cast_tavern_spell_1 = require("../../../mechanics/cast-tavern-spell");
5
- const damageThreshold = 3;
4
+ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
5
+ const damageThreshold = 4;
6
6
  exports.EredarEscapist = {
7
7
  cardIds: ["BG36_733", "BG36_733_G"],
8
8
  afterHeroDamaged: (minion, input) => {
@@ -11,26 +11,10 @@ exports.EredarEscapist = {
11
11
  return;
12
12
  }
13
13
  minion.scriptDataNum1 = ((_a = minion.scriptDataNum1) !== null && _a !== void 0 ? _a : damageThreshold) - input.damage;
14
- const casts = minion.cardId === "BG36_733_G" ? 2 : 1;
15
- const otherHero = input.gameState.gameState.player.player === input.hero
16
- ? input.gameState.gameState.opponent.player
17
- : input.gameState.gameState.player.player;
18
- const otherBoard = input.gameState.gameState.player.player === input.hero
19
- ? input.gameState.gameState.opponent.board
20
- : input.gameState.gameState.player.board;
14
+ const mult = minion.cardId === "BG36_733_G" ? 2 : 1;
21
15
  while (minion.scriptDataNum1 <= 0) {
22
- for (let i = 0; i < casts; i++) {
23
- (0, cast_tavern_spell_1.castTavernSpell)("BG28_168", {
24
- spellCardId: "BG28_168",
25
- source: input.hero,
26
- target: null,
27
- board: input.board,
28
- hero: input.hero,
29
- otherBoard: otherBoard,
30
- otherHero: otherHero,
31
- gameState: input.gameState,
32
- });
33
- }
16
+ const cardsToAdd = Array.from({ length: mult }, () => "BG28_607");
17
+ (0, cards_in_hand_1.addCardsInHand)(input.hero, input.board, cardsToAdd, input.gameState);
34
18
  minion.scriptDataNum1 += damageThreshold;
35
19
  }
36
20
  },
@@ -1 +1 @@
1
- {"version":3,"file":"eredar-escapist.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/eredar-escapist.ts"],"names":[],"mappings":";;;AAUA,4EAAuE;AAKvE,MAAM,eAAe,GAAG,CAAC,CAAC;AAEb,QAAA,cAAc,GAAyB;IACnD,OAAO,EAAE,0BAAoE;IAC7E,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;;QACvE,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACtB,OAAO;SACP;QAED,MAAM,CAAC,cAAc,GAAG,CAAC,MAAA,MAAM,CAAC,cAAc,mCAAI,eAAe,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAClF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GACd,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI;YACrD,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM;YAC3C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,MAAM,UAAU,GACf,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI;YACrD,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK;YAC1C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3C,OAAO,MAAM,CAAC,cAAc,IAAI,CAAC,EAAE;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/B,IAAA,mCAAe,cAA6B;oBAC3C,WAAW,YAA4B;oBACvC,MAAM,EAAE,KAAK,CAAC,IAAI;oBAClB,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,UAAU,EAAE,UAAU;oBACtB,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC1B,CAAC,CAAC;aACH;YACD,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC;SACzC;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Eredar Escapist (Tier 6, 6/6)\r\n * After your hero takes 3 damage, cast Shiny Ring.\r\n *\r\n * Golden Eredar Escapist (Tier 6, 12/12)\r\n * After your hero takes 3 damage, cast Shiny Ring twice.\r\n *\r\n * Remaining damage lives on `scriptDataNum1` (default 3).\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 { AfterHeroDamagedInput } from '../../../simulation/damage-to-hero';\r\nimport { AfterHeroDamagedCard } from '../../card.interface';\r\n\r\nconst damageThreshold = 3;\r\n\r\nexport const EredarEscapist: AfterHeroDamagedCard = {\r\n\tcardIds: [CardIds.EredarEscapist_BG36_733, CardIds.EredarEscapist_BG36_733_G],\r\n\tafterHeroDamaged: (minion: BoardEntity, input: AfterHeroDamagedInput) => {\r\n\t\tif (input.damage <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tminion.scriptDataNum1 = (minion.scriptDataNum1 ?? damageThreshold) - input.damage;\r\n\t\tconst casts = minion.cardId === CardIds.EredarEscapist_BG36_733_G ? 2 : 1;\r\n\t\tconst otherHero =\r\n\t\t\tinput.gameState.gameState.player.player === input.hero\r\n\t\t\t\t? input.gameState.gameState.opponent.player\r\n\t\t\t\t: input.gameState.gameState.player.player;\r\n\t\tconst otherBoard =\r\n\t\t\tinput.gameState.gameState.player.player === input.hero\r\n\t\t\t\t? input.gameState.gameState.opponent.board\r\n\t\t\t\t: input.gameState.gameState.player.board;\r\n\t\twhile (minion.scriptDataNum1 <= 0) {\r\n\t\t\tfor (let i = 0; i < casts; i++) {\r\n\t\t\t\tcastTavernSpell(CardIds.ShinyRing_BG28_168, {\r\n\t\t\t\t\tspellCardId: CardIds.ShinyRing_BG28_168,\r\n\t\t\t\t\tsource: input.hero,\r\n\t\t\t\t\ttarget: null,\r\n\t\t\t\t\tboard: input.board,\r\n\t\t\t\t\thero: input.hero,\r\n\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\totherHero: otherHero,\r\n\t\t\t\t\tgameState: input.gameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tminion.scriptDataNum1 += damageThreshold;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"eredar-escapist.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/eredar-escapist.ts"],"names":[],"mappings":";;;AAWA,qEAAmE;AAInE,MAAM,eAAe,GAAG,CAAC,CAAC;AAEb,QAAA,cAAc,GAAyB;IACnD,OAAO,EAAE,0BAAoE;IAC7E,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;;QACvE,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACtB,OAAO;SACP;QAED,MAAM,CAAC,cAAc,GAAG,CAAC,MAAA,MAAM,CAAC,cAAc,mCAAI,eAAe,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAClF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC,cAAc,IAAI,CAAC,EAAE;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,WAAmC,CAAC,CAAC;YAC1F,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACrE,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC;SACzC;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Eredar Escapist (Tier 6, 6/6)\r\n * After your hero takes 3 damage, cast Shiny Ring.\r\n *\r\n * Golden Eredar Escapist (Tier 6, 12/12)\r\n * After your hero takes 3 damage, cast Shiny Ring twice.\r\n *\r\n * Remaining damage lives on `scriptDataNum1` (default 3).\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AfterHeroDamagedInput } from '../../../simulation/damage-to-hero';\r\nimport { AfterHeroDamagedCard } from '../../card.interface';\r\n\r\nconst damageThreshold = 4;\r\n\r\nexport const EredarEscapist: AfterHeroDamagedCard = {\r\n\tcardIds: [CardIds.EredarEscapist_BG36_733, CardIds.EredarEscapist_BG36_733_G],\r\n\tafterHeroDamaged: (minion: BoardEntity, input: AfterHeroDamagedInput) => {\r\n\t\tif (input.damage <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tminion.scriptDataNum1 = (minion.scriptDataNum1 ?? damageThreshold) - input.damage;\r\n\t\tconst mult = minion.cardId === CardIds.EredarEscapist_BG36_733_G ? 2 : 1;\r\n\t\twhile (minion.scriptDataNum1 <= 0) {\r\n\t\t\tconst cardsToAdd = Array.from({ length: mult }, () => CardIds.CorruptedCupcakes_BG28_607);\r\n\t\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t\t\tminion.scriptDataNum1 += damageThreshold;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -29,7 +29,7 @@ exports.ExpertAviator = {
29
29
  for (const s of spawns) {
30
30
  s.onCanceledSummon = () => (target.locked = false);
31
31
  }
32
- (0, spawns_1.performEntitySpawns)(spawns, spawnInput.boardWithDeadEntity, spawnInput.boardWithDeadEntityHero, minion, input.attackingBoard.length - input.attackingBoard.indexOf(minion) - 1, spawnInput.otherBoard, spawnInput.otherBoardHero, input.gameState);
32
+ (0, spawns_1.performEntitySpawns)(spawns, spawnInput.boardWithDeadEntity, spawnInput.boardWithDeadEntityHero, minion, input.attackingBoard.length - input.attackingBoard.indexOf(minion) - 1, spawnInput.otherBoard, spawnInput.otherBoardHero, input.gameState, false);
33
33
  }
34
34
  return {
35
35
  dmgDoneByAttacker: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"expert-aviator.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/expert-aviator.ts"],"names":[],"mappings":";;;AASA,iFAA4G;AAE5G,+EAAiF;AAEjF,uDAAiE;AACjE,0CAA4C;AAG/B,QAAA,aAAa,GAAc;IACvC,OAAO,EAAE,0BAAkE;IAC3E,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAA4D,EAAE;QAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAA,kDAA2B,EAC1C,KAAK,CAAC,aAAa,CAAC,IAAI,EACxB,IAAI,EACJ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,IAAA,4CAAqB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAC,OAAA,MAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,CAAA,EAAA,CAAC,CAClG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAI,MAAM,CAAC,MAAM,EAAE;gBAClB,SAAS;aACT;YACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;YACjC,MAAM,UAAU,GAA8B;gBAC7C,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,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,4CAAuB,EAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;gBACvB,CAAC,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;aACnD;YAID,IAAA,4BAAmB,EAClB,MAAM,EACN,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,uBAAuB,EAClC,MAAM,EACN,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EACtE,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,cAAc,EACzB,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,OAAO;YACN,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;SACpB,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Expert Aviator (Tier 2, 3/4)\r\n * Rally: Summon the highest-Attack minion from your hand for this combat only.\r\n *\r\n * Golden Expert Aviator (Tier 2, 6/8)\r\n * Rally: Summon the two highest-Attack minions from your hand for this combat only.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getHighestAttackHandMinions, isHandMinionCandidate } from '../../../services/hand-minion-priority';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { copyEntity } from '../../../utils';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const ExpertAviator: RallyCard = {\r\n\tcardIds: [CardIds.ExpertAviator_BG34_140, CardIds.ExpertAviator_BG34_140_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tconst mult = minion.cardId === CardIds.ExpertAviator_BG34_140_G ? 2 : 1;\r\n\t\tconst allCards = input.gameState.allCards;\r\n\t\tconst targets = getHighestAttackHandMinions(\r\n\t\t\tinput.attackingHero.hand,\r\n\t\t\tmult,\r\n\t\t\t(e) => !!e.maxHealth && isHandMinionCandidate(e, (id) => allCards.getCard(id).type?.toUpperCase()),\r\n\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tif (target.locked) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\ttarget.locked = true;\r\n\t\t\tconst clone = copyEntity(target);\r\n\t\t\tconst spawnInput: DeathrattleTriggeredInput = {\r\n\t\t\t\tboardWithDeadEntity: input.attackingBoard,\r\n\t\t\t\tboardWithDeadEntityHero: input.attackingHero,\r\n\t\t\t\tgameState: input.gameState,\r\n\t\t\t\tdeadEntity: minion,\r\n\t\t\t\totherBoard: input.defendingBoard,\r\n\t\t\t\totherBoardHero: input.defendingHero,\r\n\t\t\t};\r\n\t\t\tconst spawns = simplifiedSpawnEntities(clone.cardId, 1, spawnInput, clone);\r\n\t\t\tfor (const s of spawns) {\r\n\t\t\t\ts.onCanceledSummon = () => (target.locked = false);\r\n\t\t\t}\r\n\t\t\t// Here we need to apply the auras from the board, but not re-apply the auras that are inherent to the minion itself\r\n\t\t\t// (like Automaton)\r\n\t\t\t// I think I should rework the aura, see TODO.md\r\n\t\t\tperformEntitySpawns(\r\n\t\t\t\tspawns,\r\n\t\t\t\tspawnInput.boardWithDeadEntity,\r\n\t\t\t\tspawnInput.boardWithDeadEntityHero,\r\n\t\t\t\tminion,\r\n\t\t\t\tinput.attackingBoard.length - input.attackingBoard.indexOf(minion) - 1,\r\n\t\t\t\tspawnInput.otherBoard,\r\n\t\t\t\tspawnInput.otherBoardHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tdmgDoneByAttacker: 0,\r\n\t\t\tdmgDoneByDefender: 0,\r\n\t\t};\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"expert-aviator.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/expert-aviator.ts"],"names":[],"mappings":";;;AASA,iFAA4G;AAE5G,+EAAiF;AAEjF,uDAAiE;AACjE,0CAA4C;AAG/B,QAAA,aAAa,GAAc;IACvC,OAAO,EAAE,0BAAkE;IAC3E,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAA4D,EAAE;QAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAA,kDAA2B,EAC1C,KAAK,CAAC,aAAa,CAAC,IAAI,EACxB,IAAI,EACJ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,IAAA,4CAAqB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAC,OAAA,MAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,CAAA,EAAA,CAAC,CAClG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAI,MAAM,CAAC,MAAM,EAAE;gBAClB,SAAS;aACT;YACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;YACjC,MAAM,UAAU,GAA8B;gBAC7C,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,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,4CAAuB,EAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;gBACvB,CAAC,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;aACnD;YAID,IAAA,4BAAmB,EAClB,MAAM,EACN,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,uBAAuB,EAClC,MAAM,EACN,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EACtE,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,cAAc,EACzB,KAAK,CAAC,SAAS,EACf,KAAK,CACL,CAAC;SACF;QACD,OAAO;YACN,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;SACpB,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Expert Aviator (Tier 2, 3/4)\r\n * Rally: Summon the highest-Attack minion from your hand for this combat only.\r\n *\r\n * Golden Expert Aviator (Tier 2, 6/8)\r\n * Rally: Summon the two highest-Attack minions from your hand for this combat only.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getHighestAttackHandMinions, isHandMinionCandidate } from '../../../services/hand-minion-priority';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { copyEntity } from '../../../utils';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const ExpertAviator: RallyCard = {\r\n\tcardIds: [CardIds.ExpertAviator_BG34_140, CardIds.ExpertAviator_BG34_140_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tconst mult = minion.cardId === CardIds.ExpertAviator_BG34_140_G ? 2 : 1;\r\n\t\tconst allCards = input.gameState.allCards;\r\n\t\tconst targets = getHighestAttackHandMinions(\r\n\t\t\tinput.attackingHero.hand,\r\n\t\t\tmult,\r\n\t\t\t(e) => !!e.maxHealth && isHandMinionCandidate(e, (id) => allCards.getCard(id).type?.toUpperCase()),\r\n\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tif (target.locked) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\ttarget.locked = true;\r\n\t\t\tconst clone = copyEntity(target);\r\n\t\t\tconst spawnInput: DeathrattleTriggeredInput = {\r\n\t\t\t\tboardWithDeadEntity: input.attackingBoard,\r\n\t\t\t\tboardWithDeadEntityHero: input.attackingHero,\r\n\t\t\t\tgameState: input.gameState,\r\n\t\t\t\tdeadEntity: minion,\r\n\t\t\t\totherBoard: input.defendingBoard,\r\n\t\t\t\totherBoardHero: input.defendingHero,\r\n\t\t\t};\r\n\t\t\tconst spawns = simplifiedSpawnEntities(clone.cardId, 1, spawnInput, clone);\r\n\t\t\tfor (const s of spawns) {\r\n\t\t\t\ts.onCanceledSummon = () => (target.locked = false);\r\n\t\t\t}\r\n\t\t\t// Here we need to apply the auras from the board, but not re-apply the auras that are inherent to the minion itself\r\n\t\t\t// (like Automaton)\r\n\t\t\t// I think I should rework the aura, see TODO.md\r\n\t\t\tperformEntitySpawns(\r\n\t\t\t\tspawns,\r\n\t\t\t\tspawnInput.boardWithDeadEntity,\r\n\t\t\t\tspawnInput.boardWithDeadEntityHero,\r\n\t\t\t\tminion,\r\n\t\t\t\tinput.attackingBoard.length - input.attackingBoard.indexOf(minion) - 1,\r\n\t\t\t\tspawnInput.otherBoard,\r\n\t\t\t\tspawnInput.otherBoardHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t\tfalse,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tdmgDoneByAttacker: 0,\r\n\t\t\tdmgDoneByDefender: 0,\r\n\t\t};\r\n\t},\r\n};\r\n"]}
@@ -21,7 +21,7 @@ exports.FireForgedEvoker = {
21
21
  if (value.type === 'TavernSpellsCastThisGame') {
22
22
  const delta = value.newValue - value.oldValue;
23
23
  entity.scriptDataNum1 += mult * delta * 2;
24
- entity.scriptDataNum2 += mult * delta * 1;
24
+ entity.scriptDataNum2 += mult * delta * 2;
25
25
  }
26
26
  }
27
27
  },
@@ -1 +1 @@
1
- {"version":3,"file":"fire-forged-evoker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fire-forged-evoker.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAKpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAgD;IAC5E,OAAO,EAAE,0BAAwE;IACjF,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QAOvD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;QACrC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;YACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjG;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;IACD,mBAAmB,EAAE,CAAC,MAAmB,EAAE,KAA+B,EAAE,EAAE;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE;gBAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC9C,MAAM,CAAC,cAAc,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;gBAC1C,MAAM,CAAC,cAAc,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;aAC1C;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fire-forged Evoker (Tier 6, 8/5)\r\n * Start of Combat: Give your Dragons +1/+1. Improves permanently after you cast a Tavern spell.\r\n * (Spells during combat should count — see REVIEW_QUEUE_BG_35_2.md if any spell path skips SpellsCastThisGame.)\r\n *\r\n * Golden Fire-forged Evoker (Tier 6, 16/10)\r\n * Start of Combat: Give your Dragons +2/+2. Improves permanently after you cast a Tavern spell.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { OnGlobalInfoUpdatedInput } from '../../../mechanics/player-global-effects';\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 { hasCorrectTribe } from '../../../utils';\r\nimport { OnGlobalInfoUpdatedCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const FireForgedEvoker: StartOfCombatCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.FireForgedEvoker_BG32_822, CardIds.FireForgedEvoker_BG32_822_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// We want to use the global info, because otherwise if another Start of Combat effect casts a spell\r\n\t\t// (like Runic Arcanist), we will miss it\r\n\t\t// const mult = minion.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\t// const spells = input.playerEntity.globalInfo.TavernSpellsCastThisGame ?? 0;\r\n\t\t// UPDATE: this doesn't work, as the buff can be a mix of several values from non-golden Fire-forged Evoker\r\n\t\t// if it is golden. So we need to use the scriptDataNum1/2 instead and update it when a tavern spell is cast\r\n\t\tconst atk = minion.scriptDataNum1;\r\n\t\tconst health = minion.scriptDataNum2;\r\n\t\tconst targetBoard = input.playerBoard.filter((e) =>\r\n\t\t\thasCorrectTribe(e, input.playerEntity, Race.DRAGON, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const target of targetBoard) {\r\n\t\t\tmodifyStats(target, minion, atk, health, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n\tonGlobalInfoUpdated: (entity: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'TavernSpellsCastThisGame') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tentity.scriptDataNum1 += mult * delta * 2;\r\n\t\t\t\tentity.scriptDataNum2 += mult * delta * 1;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"fire-forged-evoker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fire-forged-evoker.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAKpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAgD;IAC5E,OAAO,EAAE,0BAAwE;IACjF,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QAOvD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;QACrC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;YACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjG;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;IACD,mBAAmB,EAAE,CAAC,MAAmB,EAAE,KAA+B,EAAE,EAAE;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE;gBAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC9C,MAAM,CAAC,cAAc,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;gBAC1C,MAAM,CAAC,cAAc,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;aAC1C;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fire-forged Evoker (Tier 6, 8/5)\r\n * Start of Combat: Give your Dragons +1/+1. Improves permanently after you cast a Tavern spell.\r\n * (Spells during combat should count — see REVIEW_QUEUE_BG_35_2.md if any spell path skips SpellsCastThisGame.)\r\n *\r\n * Golden Fire-forged Evoker (Tier 6, 16/10)\r\n * Start of Combat: Give your Dragons +2/+2. Improves permanently after you cast a Tavern spell.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { OnGlobalInfoUpdatedInput } from '../../../mechanics/player-global-effects';\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 { hasCorrectTribe } from '../../../utils';\r\nimport { OnGlobalInfoUpdatedCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const FireForgedEvoker: StartOfCombatCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.FireForgedEvoker_BG32_822, CardIds.FireForgedEvoker_BG32_822_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// We want to use the global info, because otherwise if another Start of Combat effect casts a spell\r\n\t\t// (like Runic Arcanist), we will miss it\r\n\t\t// const mult = minion.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\t// const spells = input.playerEntity.globalInfo.TavernSpellsCastThisGame ?? 0;\r\n\t\t// UPDATE: this doesn't work, as the buff can be a mix of several values from non-golden Fire-forged Evoker\r\n\t\t// if it is golden. So we need to use the scriptDataNum1/2 instead and update it when a tavern spell is cast\r\n\t\tconst atk = minion.scriptDataNum1;\r\n\t\tconst health = minion.scriptDataNum2;\r\n\t\tconst targetBoard = input.playerBoard.filter((e) =>\r\n\t\t\thasCorrectTribe(e, input.playerEntity, Race.DRAGON, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const target of targetBoard) {\r\n\t\t\tmodifyStats(target, minion, atk, health, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n\tonGlobalInfoUpdated: (entity: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'TavernSpellsCastThisGame') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tentity.scriptDataNum1 += mult * delta * 2;\r\n\t\t\t\tentity.scriptDataNum2 += mult * delta * 2;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -9,7 +9,7 @@ exports.ForsakenWeaver = {
9
9
  return;
10
10
  }
11
11
  const mult = entity.cardId === "BG34_692_G" ? 2 : 1;
12
- (0, global_info_helpers_1.increaseUndeadAttackBonus)(input.hero, input.board, input.hero, 2 * mult, input.gameState);
12
+ (0, global_info_helpers_1.increaseUndeadAttackBonus)(input.hero, input.board, input.hero, 3 * mult, input.gameState);
13
13
  },
14
14
  };
15
15
  //# sourceMappingURL=forsaken-weaver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"forsaken-weaver.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/forsaken-weaver.ts"],"names":[],"mappings":";;;AAUA,iFAAoF;AAGvE,QAAA,cAAc,GAA6B;IACvD,OAAO,EAAE,0BAAoE;IAC7E,oBAAoB,EAAE,CAAC,MAAkC,EAAE,KAAqB,EAAE,EAAE;QACnF,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;YAChC,OAAO;SACP;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAA,+CAAyB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3F,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Forsaken Weaver (Tier 6, 3/8)\r\n * After you cast a Tavern spell, your Undead have +1 Attack this game (wherever they are).\r\n *\r\n * Golden Forsaken Weaver (Tier 6, 6/16)\r\n * After you cast a Tavern spell, your Undead have +2 Attack this game (wherever they are).\r\n */\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { increaseUndeadAttackBonus } from '../../../simulation/global-info-helpers';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nexport const ForsakenWeaver: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.ForsakenWeaver_BG34_692, CardIds.ForsakenWeaver_BG34_692_G],\r\n\tafterTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => {\r\n\t\tif (input.source !== input.hero) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst mult = entity.cardId === CardIds.ForsakenWeaver_BG34_692_G ? 2 : 1;\r\n\t\tincreaseUndeadAttackBonus(input.hero, input.board, input.hero, 2 * mult, input.gameState);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"forsaken-weaver.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/forsaken-weaver.ts"],"names":[],"mappings":";;;AAUA,iFAAoF;AAGvE,QAAA,cAAc,GAA6B;IACvD,OAAO,EAAE,0BAAoE;IAC7E,oBAAoB,EAAE,CAAC,MAAkC,EAAE,KAAqB,EAAE,EAAE;QACnF,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;YAChC,OAAO;SACP;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAA,+CAAyB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3F,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Forsaken Weaver (Tier 6, 3/8)\r\n * After you cast a Tavern spell, your Undead have +1 Attack this game (wherever they are).\r\n *\r\n * Golden Forsaken Weaver (Tier 6, 6/16)\r\n * After you cast a Tavern spell, your Undead have +2 Attack this game (wherever they are).\r\n */\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { increaseUndeadAttackBonus } from '../../../simulation/global-info-helpers';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nexport const ForsakenWeaver: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.ForsakenWeaver_BG34_692, CardIds.ForsakenWeaver_BG34_692_G],\r\n\tafterTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => {\r\n\t\tif (input.source !== input.hero) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst mult = entity.cardId === CardIds.ForsakenWeaver_BG34_692_G ? 2 : 1;\r\n\t\tincreaseUndeadAttackBonus(input.hero, input.board, input.hero, 3 * mult, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -6,7 +6,7 @@ exports.GoldrinnTheGreatWolf = {
6
6
  cardIds: ["BGS_018", "TB_BaconUps_085"],
7
7
  deathrattleSpawn: (minion, input) => {
8
8
  const mult = minion.cardId === "TB_BaconUps_085" ? 2 : 1;
9
- const goldrinnBuff = 8 * mult;
9
+ const goldrinnBuff = 7 * mult;
10
10
  (0, global_info_helpers_1.increaseGoldrinnBuff)(minion, input.boardWithDeadEntity, input.boardWithDeadEntityHero, goldrinnBuff, goldrinnBuff, input.gameState);
11
11
  return [];
12
12
  },
@@ -1 +1 @@
1
- {"version":3,"file":"goldrinn-the-great-wolf.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/goldrinn-the-great-wolf.ts"],"names":[],"mappings":";;;AAGA,iFAA+E;AAGlE,QAAA,oBAAoB,GAAyB;IACzD,OAAO,EAAE,8BAAoF;IAC7F,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,sBAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC;QAC9B,IAAA,0CAAoB,EACnB,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,YAAY,EACZ,YAAY,EACZ,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { increaseGoldrinnBuff } from '../../../simulation/global-info-helpers';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const GoldrinnTheGreatWolf: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.GoldrinnTheGreatWolf_BGS_018, CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085 ? 2 : 1;\r\n\t\tconst goldrinnBuff = 8 * mult;\r\n\t\tincreaseGoldrinnBuff(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tgoldrinnBuff,\r\n\t\t\tgoldrinnBuff,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"goldrinn-the-great-wolf.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/goldrinn-the-great-wolf.ts"],"names":[],"mappings":";;;AAGA,iFAA+E;AAGlE,QAAA,oBAAoB,GAAyB;IACzD,OAAO,EAAE,8BAAoF;IAC7F,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,sBAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC;QAC9B,IAAA,0CAAoB,EACnB,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,YAAY,EACZ,YAAY,EACZ,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { increaseGoldrinnBuff } from '../../../simulation/global-info-helpers';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const GoldrinnTheGreatWolf: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.GoldrinnTheGreatWolf_BGS_018, CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085 ? 2 : 1;\r\n\t\tconst goldrinnBuff = 7 * mult;\r\n\t\tincreaseGoldrinnBuff(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tgoldrinnBuff,\r\n\t\t\tgoldrinnBuff,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -18,10 +18,7 @@ exports.JailbirdJuggernaut = {
18
18
  if (!input.defendingEntity) {
19
19
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
20
20
  }
21
- const { attack, health } = getBloodGemStats(input.attacker);
22
- if (health <= 0) {
23
- return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
24
- }
21
+ const { attack, health } = { attack: input.attacker.maxAttack, health: input.attacker.maxHealth };
25
22
  const mult = minion.cardId === "BG36_333_G" ? 2 : 1;
26
23
  const spawnInput = {
27
24
  boardWithDeadEntity: input.attackingBoard,
@@ -1 +1 @@
1
- {"version":3,"file":"jailbird-juggernaut.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/jailbird-juggernaut.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Jailbird Juggernaut (Tier 5, 2/7)\r\n * Rally: Summon a Golem with stats equal to this minion's Blood Gems to attack the target first.\r\n *\r\n * Golden Jailbird Juggernaut (Tier 5, 4/14)\r\n * Rally: Summon two Golems with stats equal to this minion's Blood Gems to attack the target first.\r\n *\r\n * The Blood Gem totals are tracked on the Blood Gem enchantments, which hold the accumulated attack\r\n * and health granted to the minion.\r\n */\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 { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\n// The two enchantments mirror each other, so we take the highest rather than the sum\r\nconst BLOOD_GEM_ENCHANTMENTS: string[] = [CardIds.BloodGem_BloodGemEnchantment, CardIds.BloodGem_BloodGemsEnchantment];\r\n\r\nconst getBloodGemStats = (minion: BoardEntity): { attack: number; health: number } => {\r\n\tconst enchantments = (minion.enchantments ?? []).filter((e) => BLOOD_GEM_ENCHANTMENTS.includes(e.cardId));\r\n\treturn {\r\n\t\tattack: Math.max(0, ...enchantments.map((e) => e.tagScriptDataNum1 ?? 0)),\r\n\t\thealth: Math.max(0, ...enchantments.map((e) => e.tagScriptDataNum2 ?? 0)),\r\n\t};\r\n};\r\n\r\nexport const JailbirdJuggernaut: RallyCard = {\r\n\tcardIds: [CardIds.JailbirdJuggernaut_BG36_333, CardIds.JailbirdJuggernaut_BG36_333_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tif (!input.defendingEntity) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst { attack, health } = getBloodGemStats(input.attacker);\r\n\t\tif (health <= 0) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst mult = minion.cardId === CardIds.JailbirdJuggernaut_BG36_333_G ? 2 : 1;\r\n\t\tconst spawnInput: DeathrattleTriggeredInput = {\r\n\t\t\tboardWithDeadEntity: input.attackingBoard,\r\n\t\t\tboardWithDeadEntityHero: input.attackingHero,\r\n\t\t\tdeadEntity: input.attacker,\r\n\t\t\totherBoard: input.defendingBoard,\r\n\t\t\totherBoardHero: input.defendingHero,\r\n\t\t\tgameState: input.gameState,\r\n\t\t};\r\n\t\tconst spawns = simplifiedSpawnEntities(\r\n\t\t\tCardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t,\r\n\t\t\t1,\r\n\t\t\tspawnInput,\r\n\t\t);\r\n\t\tspawns.forEach((spawn) => {\r\n\t\t\tspawn.attack = attack * mult;\r\n\t\t\tspawn.maxAttack = attack * mult;\r\n\t\t\tspawn.health = health * mult;\r\n\t\t\tspawn.maxHealth = health * mult;\r\n\t\t\tspawn.attackImmediately = true;\r\n\t\t});\r\n\t\tconst spawned = performEntitySpawns(\r\n\t\t\tspawns,\r\n\t\t\tinput.attackingBoard,\r\n\t\t\tinput.attackingHero,\r\n\t\t\tinput.attacker,\r\n\t\t\tinput.attackingBoard.length - input.attackingBoard.indexOf(input.attacker) - 1,\r\n\t\t\tinput.defendingBoard,\r\n\t\t\tinput.defendingHero,\r\n\t\t\tinput.gameState,\r\n\t\t\ttrue,\r\n\t\t\tinput.defendingEntity,\r\n\t\t);\r\n\t\tspawned.forEach((e) => {\r\n\t\t\te.hasAttacked = undefined;\r\n\t\t});\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"jailbird-juggernaut.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/jailbird-juggernaut.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Jailbird Juggernaut (Tier 5, 2/7)\r\n * Rally: Summon a Golem with stats equal to this minion's Blood Gems to attack the target first.\r\n *\r\n * Golden Jailbird Juggernaut (Tier 5, 4/14)\r\n * Rally: Summon two Golems with stats equal to this minion's Blood Gems to attack the target first.\r\n *\r\n * The Blood Gem totals are tracked on the Blood Gem enchantments, which hold the accumulated attack\r\n * and health granted to the minion.\r\n */\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 { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\n// The two enchantments mirror each other, so we take the highest rather than the sum\r\nconst BLOOD_GEM_ENCHANTMENTS: string[] = [CardIds.BloodGem_BloodGemEnchantment, CardIds.BloodGem_BloodGemsEnchantment];\r\n\r\nconst getBloodGemStats = (minion: BoardEntity): { attack: number; health: number } => {\r\n\tconst enchantments = (minion.enchantments ?? []).filter((e) => BLOOD_GEM_ENCHANTMENTS.includes(e.cardId));\r\n\treturn {\r\n\t\tattack: Math.max(0, ...enchantments.map((e) => e.tagScriptDataNum1 ?? 0)),\r\n\t\thealth: Math.max(0, ...enchantments.map((e) => e.tagScriptDataNum2 ?? 0)),\r\n\t};\r\n};\r\n\r\nexport const JailbirdJuggernaut: RallyCard = {\r\n\tcardIds: [CardIds.JailbirdJuggernaut_BG36_333, CardIds.JailbirdJuggernaut_BG36_333_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tif (!input.defendingEntity) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst { attack, health } = { attack: input.attacker.maxAttack, health: input.attacker.maxHealth };\r\n\t\tconst mult = minion.cardId === CardIds.JailbirdJuggernaut_BG36_333_G ? 2 : 1;\r\n\t\tconst spawnInput: DeathrattleTriggeredInput = {\r\n\t\t\tboardWithDeadEntity: input.attackingBoard,\r\n\t\t\tboardWithDeadEntityHero: input.attackingHero,\r\n\t\t\tdeadEntity: input.attacker,\r\n\t\t\totherBoard: input.defendingBoard,\r\n\t\t\totherBoardHero: input.defendingHero,\r\n\t\t\tgameState: input.gameState,\r\n\t\t};\r\n\t\tconst spawns = simplifiedSpawnEntities(\r\n\t\t\tCardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t,\r\n\t\t\t1,\r\n\t\t\tspawnInput,\r\n\t\t);\r\n\t\tspawns.forEach((spawn) => {\r\n\t\t\tspawn.attack = attack * mult;\r\n\t\t\tspawn.maxAttack = attack * mult;\r\n\t\t\tspawn.health = health * mult;\r\n\t\t\tspawn.maxHealth = health * mult;\r\n\t\t\tspawn.attackImmediately = true;\r\n\t\t});\r\n\t\tconst spawned = performEntitySpawns(\r\n\t\t\tspawns,\r\n\t\t\tinput.attackingBoard,\r\n\t\t\tinput.attackingHero,\r\n\t\t\tinput.attacker,\r\n\t\t\tinput.attackingBoard.length - input.attackingBoard.indexOf(input.attacker) - 1,\r\n\t\t\tinput.defendingBoard,\r\n\t\t\tinput.defendingHero,\r\n\t\t\tinput.gameState,\r\n\t\t\ttrue,\r\n\t\t\tinput.defendingEntity,\r\n\t\t);\r\n\t\tspawned.forEach((e) => {\r\n\t\t\te.hasAttacked = undefined;\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 { BattlecryCard, DeathrattleSpawnCard } from '../../card.interface';
2
+ export declare const SanguineChampion: BattlecryCard & DeathrattleSpawnCard;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SanguineChampion = void 0;
4
+ const attackBuff = 2;
5
+ const healthBuff = 1;
6
+ exports.SanguineChampion = {
7
+ cardIds: ["BG23_017", "BG23_017_G"],
8
+ battlecry: (minion, input) => {
9
+ const mult = minion.cardId === "BG23_017_G" ? 2 : 1;
10
+ input.hero.globalInfo.BloodGemAttackBonus += attackBuff * mult;
11
+ input.hero.globalInfo.BloodGemHealthBonus += healthBuff * mult;
12
+ return true;
13
+ },
14
+ deathrattleSpawn: (minion, input) => {
15
+ const mult = minion.cardId === "BG23_017_G" ? 2 : 1;
16
+ input.boardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += attackBuff * mult;
17
+ input.boardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += healthBuff * mult;
18
+ return [];
19
+ },
20
+ };
21
+ //# sourceMappingURL=sanguine-champion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanguine-champion.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/sanguine-champion.ts"],"names":[],"mappings":";;;AAMA,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,CAAC,CAAC;AAER,QAAA,gBAAgB,GAAyC;IACrE,OAAO,EAAE,0BAAwE;IACjF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAAC;QAC/D,OAAO,IAAI,CAAC;IACb,CAAC;IACD,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAAC;QAClF,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAAC;QAClF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { BattlecryCard, DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nconst attackBuff = 2;\r\nconst healthBuff = 1;\r\n\r\nexport const SanguineChampion: BattlecryCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.SanguineChampion_BG23_017, CardIds.SanguineChampion_BG23_017_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SanguineChampion_BG23_017_G ? 2 : 1;\r\n\t\tinput.hero.globalInfo.BloodGemAttackBonus += attackBuff * mult;\r\n\t\tinput.hero.globalInfo.BloodGemHealthBonus += healthBuff * mult;\r\n\t\treturn true;\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SanguineChampion_BG23_017_G ? 2 : 1;\r\n\t\tinput.boardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += attackBuff * mult;\r\n\t\tinput.boardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += healthBuff * mult;\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -6,7 +6,7 @@ exports.SanguineRefiner = {
6
6
  rally: (minion, input) => {
7
7
  const mult = minion.cardId === "BG33_885_G" ? 2 : 1;
8
8
  input.attackingHero.globalInfo.BloodGemAttackBonus += 1 * mult;
9
- input.attackingHero.globalInfo.BloodGemHealthBonus += 1 * mult;
9
+ input.attackingHero.globalInfo.BloodGemHealthBonus += 2 * mult;
10
10
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
11
11
  },
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sanguine-refiner.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/sanguine-refiner.ts"],"names":[],"mappings":";;;AAMa,QAAA,eAAe,GAAc;IACzC,OAAO,EAAE,0BAAsE;IAC/E,KAAK,EAAE,CAAC,MAAqD,EAAE,KAAoB,EAAE,EAAE;QACtF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,GAAG,IAAI,CAAC;QAC/D,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,GAAG,IAAI,CAAC;QAC/D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEnchantment, 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 SanguineRefiner: RallyCard = {\r\n\tcardIds: [CardIds.SanguineRefiner_BG33_885, CardIds.SanguineRefiner_BG33_885_G],\r\n\trally: (minion: BoardEntity | BoardTrinket | BoardEnchantment, input: OnAttackInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SanguineRefiner_BG33_885_G ? 2 : 1;\r\n\t\tinput.attackingHero.globalInfo.BloodGemAttackBonus += 1 * mult;\r\n\t\tinput.attackingHero.globalInfo.BloodGemHealthBonus += 1 * mult;\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"sanguine-refiner.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/sanguine-refiner.ts"],"names":[],"mappings":";;;AAMa,QAAA,eAAe,GAAc;IACzC,OAAO,EAAE,0BAAsE;IAC/E,KAAK,EAAE,CAAC,MAAqD,EAAE,KAAoB,EAAE,EAAE;QACtF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,GAAG,IAAI,CAAC;QAC/D,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,GAAG,IAAI,CAAC;QAC/D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEnchantment, 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 SanguineRefiner: RallyCard = {\r\n\tcardIds: [CardIds.SanguineRefiner_BG33_885, CardIds.SanguineRefiner_BG33_885_G],\r\n\trally: (minion: BoardEntity | BoardTrinket | BoardEnchantment, input: OnAttackInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SanguineRefiner_BG33_885_G ? 2 : 1;\r\n\t\tinput.attackingHero.globalInfo.BloodGemAttackBonus += 1 * mult;\r\n\t\tinput.attackingHero.globalInfo.BloodGemHealthBonus += 2 * mult;\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -2,15 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SoulRewinder = void 0;
4
4
  const stats_1 = require("../../../simulation/stats");
5
+ const healthBuff = 2;
5
6
  exports.SoulRewinder = {
6
7
  cardIds: ["BG26_174", "BG26_174_G"],
7
8
  afterHeroDamaged: (minion, input) => {
8
9
  var _a;
9
10
  input.hero.hpLeft = input.hero.hpLeft + input.damage;
10
11
  const mult = minion.cardId === "BG26_174_G" ? 2 : 1;
11
- (0, stats_1.modifyStats)(minion, minion, 0, 1 * mult, input.board, input.hero, input.gameState);
12
+ (0, stats_1.modifyStats)(minion, minion, 0, healthBuff * mult, input.board, input.hero, input.gameState);
12
13
  if ((_a = input.hero.trinkets) === null || _a === void 0 ? void 0 : _a.some((t) => t.cardId === "BG30_MagicItem_868")) {
13
- (0, stats_1.modifyStats)(minion, minion, 1 * mult, 0, input.board, input.hero, input.gameState);
14
+ (0, stats_1.modifyStats)(minion, minion, healthBuff * mult, 0, input.board, input.hero, input.gameState);
14
15
  }
15
16
  },
16
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"soul-rewinder.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/soul-rewinder.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,YAAY,GAAyB;IACjD,OAAO,EAAE,0BAAgE;IACzE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;;QACvE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACnF,IAAI,MAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAgD,CAAC,EAAE;YAC/F,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACnF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\nimport { BoardEntity } from '../../../board-entity';\r\nimport { AfterHeroDamagedInput } from '../../../simulation/damage-to-hero';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { AfterHeroDamagedCard } from '../../card.interface';\r\n\r\nexport const SoulRewinder: AfterHeroDamagedCard = {\r\n\tcardIds: [CardIds.SoulRewinder_BG26_174, CardIds.SoulRewinder_BG26_174_G],\r\n\tafterHeroDamaged: (minion: BoardEntity, input: AfterHeroDamagedInput) => {\r\n\t\tinput.hero.hpLeft = input.hero.hpLeft + input.damage;\r\n\t\tconst mult = minion.cardId === CardIds.SoulRewinder_BG26_174_G ? 2 : 1;\r\n\t\tmodifyStats(minion, minion, 0, 1 * mult, input.board, input.hero, input.gameState);\r\n\t\tif (input.hero.trinkets?.some((t) => t.cardId === CardIds.RewinderPortrait_BG30_MagicItem_868)) {\r\n\t\t\tmodifyStats(minion, minion, 1 * mult, 0, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"soul-rewinder.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/soul-rewinder.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAGxD,MAAM,UAAU,GAAG,CAAC,CAAC;AAER,QAAA,YAAY,GAAyB;IACjD,OAAO,EAAE,0BAAgE;IACzE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;;QACvE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5F,IAAI,MAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAgD,CAAC,EAAE;YAC/F,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SAC5F;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AfterHeroDamagedInput } from '../../../simulation/damage-to-hero';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { AfterHeroDamagedCard } from '../../card.interface';\r\n\r\nconst healthBuff = 2;\r\n\r\nexport const SoulRewinder: AfterHeroDamagedCard = {\r\n\tcardIds: [CardIds.SoulRewinder_BG26_174, CardIds.SoulRewinder_BG26_174_G],\r\n\tafterHeroDamaged: (minion: BoardEntity, input: AfterHeroDamagedInput) => {\r\n\t\tinput.hero.hpLeft = input.hero.hpLeft + input.damage;\r\n\t\tconst mult = minion.cardId === CardIds.SoulRewinder_BG26_174_G ? 2 : 1;\r\n\t\tmodifyStats(minion, minion, 0, healthBuff * mult, input.board, input.hero, input.gameState);\r\n\t\tif (input.hero.trinkets?.some((t) => t.cardId === CardIds.RewinderPortrait_BG30_MagicItem_868)) {\r\n\t\t\tmodifyStats(minion, minion, healthBuff * mult, 0, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -10,7 +10,7 @@ exports.TastyLobster = {
10
10
  cardIds: ["BG36_202", "BG36_202_G"],
11
11
  deathrattleEffect: (minion, input) => {
12
12
  const base = minion.cardId === "BG36_202_G" ? 2 : 1;
13
- const atkBuff = base * (1 + input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff);
13
+ const atkBuff = base * (2 + input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff);
14
14
  const healthBuff = base * (1 + input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff);
15
15
  const candidates = input.boardWithDeadEntity.filter((e) => (0, utils_2.hasCorrectTribe)(e, input.boardWithDeadEntityHero, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards));
16
16
  const targets = (0, utils_1.pickMultipleRandomAlive)(candidates, numberOfTargets);
@@ -1 +1 @@
1
- {"version":3,"file":"tasty-lobster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/tasty-lobster.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAGpD,mDAAkE;AAElE,qDAAwD;AACxD,0CAAiD;AAGjD,MAAM,eAAe,GAAG,CAAC,CAAC;AAEb,QAAA,YAAY,GAA0B;IAClD,OAAO,EAAE,0BAAgE;IACzE,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAGvE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC3F,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACzD,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,uBAAuB,EAC7B,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,CAAC;QACF,MAAM,OAAO,GAAG,IAAA,+BAAuB,EAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACrE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC7E,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB;YACzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IACtF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Tasty Lobster (Tier 3, 1/1)\r\n * Deathrattle: Give a random friendly Beast +1/+1. Improve your future Tasty Lobsters.\r\n *\r\n * Golden Tasty Lobster (Tier 3, 2/2)\r\n * Deathrattle: Give a random friendly Beast +2/+2. Improve your future Tasty Lobsters.\r\n *\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickMultipleRandomAlive } from '../../../services/utils';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { DeathrattleEffectCard } from '../../card.interface';\r\n\r\nconst numberOfTargets = 1;\r\n\r\nexport const TastyLobster: DeathrattleEffectCard = {\r\n\tcardIds: [CardIds.TastyLobster_BG36_202, CardIds.TastyLobster_BG36_202_G],\r\n\tdeathrattleEffect: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst base = minion.cardId === CardIds.TastyLobster_BG36_202_G ? 2 : 1;\r\n\t\t// Don't use a fallback to the scriptDataNum1, as it's too cumbersome to manage\r\n\t\t// If for some reason the globalInfo is not set, understand why!\r\n\t\tconst atkBuff = base * (1 + input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff);\r\n\t\tconst healthBuff = base * (1 + input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff);\r\n\t\tconst candidates = input.boardWithDeadEntity.filter((e) =>\r\n\t\t\thasCorrectTribe(\r\n\t\t\t\te,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t),\r\n\t\t);\r\n\t\tconst targets = pickMultipleRandomAlive(candidates, numberOfTargets);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tminion,\r\n\t\t\t\tatkBuff,\r\n\t\t\t\thealthBuff,\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\tconst priorBuff = input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff;\r\n\t\tinput.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff =\r\n\t\t\tMath.max(input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff, priorBuff) + 1;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"tasty-lobster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/tasty-lobster.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAGpD,mDAAkE;AAElE,qDAAwD;AACxD,0CAAiD;AAGjD,MAAM,eAAe,GAAG,CAAC,CAAC;AAEb,QAAA,YAAY,GAA0B;IAClD,OAAO,EAAE,0BAAgE;IACzE,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAGvE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC3F,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACzD,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,uBAAuB,EAC7B,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,CAAC;QACF,MAAM,OAAO,GAAG,IAAA,+BAAuB,EAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACrE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC7E,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB;YACzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IACtF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Tasty Lobster (Tier 3, 1/1)\r\n * Deathrattle: Give a random friendly Beast +1/+1. Improve your future Tasty Lobsters.\r\n *\r\n * Golden Tasty Lobster (Tier 3, 2/2)\r\n * Deathrattle: Give a random friendly Beast +2/+2. Improve your future Tasty Lobsters.\r\n *\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickMultipleRandomAlive } from '../../../services/utils';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { DeathrattleEffectCard } from '../../card.interface';\r\n\r\nconst numberOfTargets = 1;\r\n\r\nexport const TastyLobster: DeathrattleEffectCard = {\r\n\tcardIds: [CardIds.TastyLobster_BG36_202, CardIds.TastyLobster_BG36_202_G],\r\n\tdeathrattleEffect: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst base = minion.cardId === CardIds.TastyLobster_BG36_202_G ? 2 : 1;\r\n\t\t// Don't use a fallback to the scriptDataNum1, as it's too cumbersome to manage\r\n\t\t// If for some reason the globalInfo is not set, understand why!\r\n\t\tconst atkBuff = base * (2 + input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff);\r\n\t\tconst healthBuff = base * (1 + input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff);\r\n\t\tconst candidates = input.boardWithDeadEntity.filter((e) =>\r\n\t\t\thasCorrectTribe(\r\n\t\t\t\te,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t),\r\n\t\t);\r\n\t\tconst targets = pickMultipleRandomAlive(candidates, numberOfTargets);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tminion,\r\n\t\t\t\tatkBuff,\r\n\t\t\t\thealthBuff,\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\tconst priorBuff = input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff;\r\n\t\tinput.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff =\r\n\t\t\tMath.max(input.boardWithDeadEntityHero.globalInfo.TastyLobstersBuff, priorBuff) + 1;\r\n\t},\r\n};\r\n"]}
@@ -7,7 +7,7 @@ exports.Tichondrius = {
7
7
  cardIds: ["BG26_523", "BG26_523_G"],
8
8
  afterHeroDamaged: (minion, input) => {
9
9
  const mult = minion.cardId === "BG26_523_G" ? 2 : 1;
10
- (0, utils_1.addStatsToBoard)(minion, input.board, input.hero, 3 * mult, 3 * mult, input.gameState, reference_data_1.Race[reference_data_1.Race.DEMON]);
10
+ (0, utils_1.addStatsToBoard)(minion, input.board, input.hero, 4 * mult, 4 * mult, input.gameState, reference_data_1.Race[reference_data_1.Race.DEMON]);
11
11
  },
12
12
  };
13
13
  //# sourceMappingURL=tichondrius.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tichondrius.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/tichondrius.ts"],"names":[],"mappings":";;;AAOA,iEAAoD;AAIpD,0CAAiD;AAGpC,QAAA,WAAW,GAAyB;IAChD,OAAO,EAAE,0BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,CAAC,GAAG,IAAI,EACR,CAAC,GAAG,IAAI,EACR,KAAK,CAAC,SAAS,EACf,qBAAI,CAAC,qBAAI,CAAC,KAAK,CAAC,CAChB,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Tichondrius (Tier 5, 3/3)\r\n * After your hero takes damage, give your Demons +3/+3.\r\n *\r\n * Golden Tichondrius (Tier 5, 6/6)\r\n * After your hero takes damage, give your Demons +6/+6.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { AfterHeroDamagedInput } from '../../../simulation/damage-to-hero';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { AfterHeroDamagedCard } from '../../card.interface';\r\n\r\nexport const Tichondrius: AfterHeroDamagedCard = {\r\n\tcardIds: [CardIds.Tichondrius_BG26_523, CardIds.Tichondrius_BG26_523_G],\r\n\tafterHeroDamaged: (minion: BoardEntity, input: AfterHeroDamagedInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Tichondrius_BG26_523_G ? 2 : 1;\r\n\t\taddStatsToBoard(\r\n\t\t\tminion,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\t3 * mult,\r\n\t\t\t3 * mult,\r\n\t\t\tinput.gameState,\r\n\t\t\tRace[Race.DEMON],\r\n\t\t);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"tichondrius.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/tichondrius.ts"],"names":[],"mappings":";;;AAOA,iEAAoD;AAIpD,0CAAiD;AAGpC,QAAA,WAAW,GAAyB;IAChD,OAAO,EAAE,0BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,qBAAI,CAAC,qBAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzG,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Tichondrius (Tier 5, 3/3)\r\n * After your hero takes damage, give your Demons +3/+3.\r\n *\r\n * Golden Tichondrius (Tier 5, 6/6)\r\n * After your hero takes damage, give your Demons +6/+6.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AfterHeroDamagedInput } from '../../../simulation/damage-to-hero';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { AfterHeroDamagedCard } from '../../card.interface';\r\n\r\nexport const Tichondrius: AfterHeroDamagedCard = {\r\n\tcardIds: [CardIds.Tichondrius_BG26_523, CardIds.Tichondrius_BG26_523_G],\r\n\tafterHeroDamaged: (minion: BoardEntity, input: AfterHeroDamagedInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Tichondrius_BG26_523_G ? 2 : 1;\r\n\t\taddStatsToBoard(minion, input.board, input.hero, 4 * mult, 4 * mult, input.gameState, Race[Race.DEMON]);\r\n\t},\r\n};\r\n"]}
@@ -10,7 +10,7 @@ exports.UtilityDrone = {
10
10
  for (const target of input.board) {
11
11
  const magnetizations = (0, magnetize_1.getMagnetizations)(target, input.gameState);
12
12
  if (magnetizations > 0) {
13
- (0, stats_1.modifyStats)(target, minion, 4 * magnetizations * mult, 4 * magnetizations * mult, input.board, input.hero, input.gameState);
13
+ (0, stats_1.modifyStats)(target, minion, 4 * magnetizations * mult, 5 * magnetizations * mult, input.board, input.hero, input.gameState);
14
14
  }
15
15
  }
16
16
  },
@@ -1 +1 @@
1
- {"version":3,"file":"utility-drone.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/utility-drone.ts"],"names":[],"mappings":";;;AAEA,6DAAkE;AAClE,qDAAwD;AAG3C,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,MAAM,cAAc,GAAG,IAAA,6BAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,cAAc,GAAG,CAAC,EAAE;gBACvB,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getMagnetizations } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const UtilityDrone: EndOfTurnCard = {\r\n\tcardIds: [CardIds.UtilityDrone_BG26_152, CardIds.UtilityDrone_BG26_152_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.UtilityDrone_BG26_152_G ? 2 : 1;\r\n\t\tfor (const target of input.board) {\r\n\t\t\tconst magnetizations = getMagnetizations(target, input.gameState);\r\n\t\t\tif (magnetizations > 0) {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\t4 * magnetizations * mult,\r\n\t\t\t\t\t4 * magnetizations * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"utility-drone.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/utility-drone.ts"],"names":[],"mappings":";;;AAEA,6DAAkE;AAClE,qDAAwD;AAG3C,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,MAAM,cAAc,GAAG,IAAA,6BAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,cAAc,GAAG,CAAC,EAAE;gBACvB,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getMagnetizations } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const UtilityDrone: EndOfTurnCard = {\r\n\tcardIds: [CardIds.UtilityDrone_BG26_152, CardIds.UtilityDrone_BG26_152_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.UtilityDrone_BG26_152_G ? 2 : 1;\r\n\t\tfor (const target of input.board) {\r\n\t\t\tconst magnetizations = getMagnetizations(target, input.gameState);\r\n\t\t\tif (magnetizations > 0) {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\t4 * magnetizations * mult,\r\n\t\t\t\t\t5 * magnetizations * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -4,15 +4,16 @@ exports.AllPurposeKibble = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const stats_1 = require("../../../simulation/stats");
6
6
  const utils_1 = require("../../../utils");
7
+ const attackBuff = 3;
7
8
  exports.AllPurposeKibble = {
8
9
  cardIds: ["BG32_MagicItem_200"],
9
10
  onWheneverAnotherMinionAttacks: (trinket, input) => {
10
11
  if (!(0, utils_1.hasCorrectTribe)(input.attacker, input.attackingHero, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
11
12
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
12
13
  }
13
- const buff = trinket.scriptDataNum1 || 2;
14
+ const buff = (trinket.scriptDataNum1 || 0) + attackBuff;
14
15
  (0, stats_1.modifyStats)(input.attacker, trinket, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);
15
- trinket.scriptDataNum1 = (trinket.scriptDataNum1 || 2) + 2;
16
+ trinket.scriptDataNum1 = buff + attackBuff;
16
17
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
17
18
  },
18
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"all-purpose-kibble.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/all-purpose-kibble.ts"],"names":[],"mappings":";;;AACA,iEAAoD;AAGpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAuC;IACnE,OAAO,EAAE,sBAA6C;IACtD,8BAA8B,EAAE,CAAC,OAAqB,EAAE,KAAoB,EAAE,EAAE;QAC/E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;QACzC,IAAA,mBAAW,EAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1G,OAAO,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\nimport { Race } from '@firestone-hs/reference-data';\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnWheneverAnotherMinionAttacksCard } from '../../card.interface';\r\n\r\nexport const AllPurposeKibble: OnWheneverAnotherMinionAttacksCard = {\r\n\tcardIds: [CardIds.AllPurposeKibble_BG32_MagicItem_200],\r\n\tonWheneverAnotherMinionAttacks: (trinket: BoardTrinket, input: OnAttackInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.attacker,\r\n\t\t\t\tinput.attackingHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = trinket.scriptDataNum1 || 2;\r\n\t\tmodifyStats(input.attacker, trinket, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 || 2) + 2;\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"all-purpose-kibble.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/all-purpose-kibble.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGjD,MAAM,UAAU,GAAG,CAAC,CAAC;AAER,QAAA,gBAAgB,GAAuC;IACnE,OAAO,EAAE,sBAA6C;IACtD,8BAA8B,EAAE,CAAC,OAAqB,EAAE,KAAoB,EAAE,EAAE;QAC/E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC;QACxD,IAAA,mBAAW,EAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1G,OAAO,CAAC,cAAc,GAAG,IAAI,GAAG,UAAU,CAAC;QAC3C,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnWheneverAnotherMinionAttacksCard } from '../../card.interface';\r\n\r\nconst attackBuff = 3;\r\n\r\nexport const AllPurposeKibble: OnWheneverAnotherMinionAttacksCard = {\r\n\tcardIds: [CardIds.AllPurposeKibble_BG32_MagicItem_200],\r\n\tonWheneverAnotherMinionAttacks: (trinket: BoardTrinket, input: OnAttackInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.attacker,\r\n\t\t\t\tinput.attackingHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = (trinket.scriptDataNum1 || 0) + attackBuff;\r\n\t\tmodifyStats(input.attacker, trinket, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\ttrinket.scriptDataNum1 = buff + attackBuff;\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ArchaicScroll = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
- const spellsToCast = 7;
6
+ const spellsToCast = 8;
7
7
  exports.ArchaicScroll = {
8
8
  cardIds: ["BG32_MagicItem_930"],
9
9
  afterTavernSpellCast: (trinket, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"archaic-scroll.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/archaic-scroll.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qEAAmE;AAGnE,MAAM,YAAY,GAAG,CAAC,CAAC;AAEV,QAAA,aAAa,GAA6B;IACtD,OAAO,EAAE,sBAA0C;IACnD,oBAAoB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QACpF,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,qBAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACtF,IAAI,MAAM,EAAE;gBACX,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACnE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { 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 { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nconst spellsToCast = 7;\r\n\r\nexport const ArchaicScroll: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.ArchaicScroll_BG32_MagicItem_930],\r\n\tafterTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? spellsToCast) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tconst tier = input.hero.tavernTier ?? 6;\r\n\t\t\tconst cardId = input.gameState.cardsData.getRandomMinionForTribe(Race.NAGA, tier, []);\r\n\t\t\tif (cardId) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [cardId], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"archaic-scroll.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/archaic-scroll.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qEAAmE;AAGnE,MAAM,YAAY,GAAG,CAAC,CAAC;AAEV,QAAA,aAAa,GAA6B;IACtD,OAAO,EAAE,sBAA0C;IACnD,oBAAoB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QACpF,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,qBAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACtF,IAAI,MAAM,EAAE;gBACX,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACnE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { 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 { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nconst spellsToCast = 8;\r\n\r\nexport const ArchaicScroll: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.ArchaicScroll_BG32_MagicItem_930],\r\n\tafterTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? spellsToCast) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tconst tier = input.hero.tavernTier ?? 6;\r\n\t\t\tconst cardId = input.gameState.cardsData.getRandomMinionForTribe(Race.NAGA, tier, []);\r\n\t\t\tif (cardId) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [cardId], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BubbleCrown = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
- const spellsToCast = 12;
5
+ const spellsToCast = 14;
6
6
  exports.BubbleCrown = {
7
7
  cardIds: ["BG35_MagicItem_920"],
8
8
  onBeforeTavernSpellCast: (trinket, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"bubble-crown.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/bubble-crown.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAMvD,MAAM,YAAY,GAAG,EAAE,CAAC;AAEX,QAAA,WAAW,GAAgC;IACvD,OAAO,EAAE,sBAAwC;IAGjD,uBAAuB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QAEvF,IAAI,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAG,wBAAO,CAAC,cAAc,CAAC,MAAK,CAAC,EAAE;YACjD,OAAO;SACP;QAgBD,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,wBAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SACzC;IACF,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } 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 { CastSpellInput, OnBeforeTavernSpellCastCard } from '../../card.interface';\r\n\r\nconst spellsToCast = 12;\r\n\r\nexport const BubbleCrown: OnBeforeTavernSpellCastCard = {\r\n\tcardIds: [CardIds.BubbleCrown_BG35_MagicItem_920],\r\n\t// This seems to trigger before the first spell is cast\r\n\t// https://replays.firestoneapp.com/?reviewId=2503f562-e0e1-4564-8218-d36cbf09cbb0&turn=17&action=2\r\n\tonBeforeTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\t// It has already triggered once\r\n\t\tif (trinket.tags?.[GameTag.TRIGGER_VISUAL] === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// When we get the board state from the opponent, sometimes we have the trinket at 0, and this seems to mean that\r\n\t\t// it will proc on the next spell (eg https://replays.firestoneapp.com/?reviewId=0cff125a-7419-40c6-8c50-edfba59d1559&turn=17&action=4)\r\n\t\t/*\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - SHOW_ENTITY - Updating Entity=[entityName=泡泡王冠 id=6141 zone=SETASIDE zonePos=0 cardId=BG35_MagicItem_920 player=4] CardID=BG35_MagicItem_920\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - tag=TAG_SCRIPT_DATA_NUM_1 value=0\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=赶潮纳迦 id=6449 zone=PLAY zonePos=5 cardId=BG34_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=DEATHRATTLE\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=泡泡王冠 id=6141 zone=PLAY zonePos=0 cardId=BG35_MagicItem_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=TRIGGER_VISUAL\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_ATTACK_INCREASE value=5 \r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_HEALTH_INCREASE value=5 \r\n\t\t\t...\r\n\t\t*/\r\n\t\t// I'm not yet sure if this only happens under specific conditions\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? 0) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tinput.hero.globalInfo.TavernSpellAttackBuff += 4;\r\n\t\t\tinput.hero.globalInfo.TavernSpellHealthBuff += 4;\r\n\t\t\ttrinket.tags[GameTag.TRIGGER_VISUAL] = 0;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"bubble-crown.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/bubble-crown.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAMvD,MAAM,YAAY,GAAG,EAAE,CAAC;AAEX,QAAA,WAAW,GAAgC;IACvD,OAAO,EAAE,sBAAwC;IAGjD,uBAAuB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QAEvF,IAAI,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAG,wBAAO,CAAC,cAAc,CAAC,MAAK,CAAC,EAAE;YACjD,OAAO;SACP;QAgBD,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,wBAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SACzC;IACF,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } 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 { CastSpellInput, OnBeforeTavernSpellCastCard } from '../../card.interface';\r\n\r\nconst spellsToCast = 14;\r\n\r\nexport const BubbleCrown: OnBeforeTavernSpellCastCard = {\r\n\tcardIds: [CardIds.BubbleCrown_BG35_MagicItem_920],\r\n\t// This seems to trigger before the first spell is cast\r\n\t// https://replays.firestoneapp.com/?reviewId=2503f562-e0e1-4564-8218-d36cbf09cbb0&turn=17&action=2\r\n\tonBeforeTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\t// It has already triggered once\r\n\t\tif (trinket.tags?.[GameTag.TRIGGER_VISUAL] === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// When we get the board state from the opponent, sometimes we have the trinket at 0, and this seems to mean that\r\n\t\t// it will proc on the next spell (eg https://replays.firestoneapp.com/?reviewId=0cff125a-7419-40c6-8c50-edfba59d1559&turn=17&action=4)\r\n\t\t/*\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - SHOW_ENTITY - Updating Entity=[entityName=泡泡王冠 id=6141 zone=SETASIDE zonePos=0 cardId=BG35_MagicItem_920 player=4] CardID=BG35_MagicItem_920\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - tag=TAG_SCRIPT_DATA_NUM_1 value=0\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=赶潮纳迦 id=6449 zone=PLAY zonePos=5 cardId=BG34_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=DEATHRATTLE\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=泡泡王冠 id=6141 zone=PLAY zonePos=0 cardId=BG35_MagicItem_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=TRIGGER_VISUAL\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_ATTACK_INCREASE value=5 \r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_HEALTH_INCREASE value=5 \r\n\t\t\t...\r\n\t\t*/\r\n\t\t// I'm not yet sure if this only happens under specific conditions\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? 0) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tinput.hero.globalInfo.TavernSpellAttackBuff += 4;\r\n\t\t\tinput.hero.globalInfo.TavernSpellHealthBuff += 4;\r\n\t\t\ttrinket.tags[GameTag.TRIGGER_VISUAL] = 0;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -4,14 +4,15 @@ exports.LionfishPortrait = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const stats_1 = require("../../../simulation/stats");
6
6
  const utils_1 = require("../../../utils");
7
- const buff = 2;
7
+ const attackBuff = 4;
8
+ const healthBuff = 2;
8
9
  exports.LionfishPortrait = {
9
10
  cardIds: ["BG36_MagicItem_201"],
10
11
  onWheneverAnotherMinionAttacks: (trinket, input) => {
11
12
  if (!(0, utils_1.hasCorrectTribe)(input.attacker, input.attackingHero, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
12
13
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
13
14
  }
14
- (0, stats_1.modifyStats)(input.attacker, trinket, buff, buff, input.attackingBoard, input.attackingHero, input.gameState);
15
+ (0, stats_1.modifyStats)(input.attacker, trinket, attackBuff, healthBuff, input.attackingBoard, input.attackingHero, input.gameState);
15
16
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
16
17
  },
17
18
  };