@firestone-hs/simulate-bgs-battle 1.1.762 → 1.1.764

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 (57) hide show
  1. package/dist/bgs-player-entity.d.ts +1 -0
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/cards/card.interface.d.ts +1 -0
  4. package/dist/cards/card.interface.js.map +1 -1
  5. package/dist/cards/impl/bg-spell/butchering.js +1 -1
  6. package/dist/cards/impl/bg-spell/butchering.js.map +1 -1
  7. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.js +1 -1
  8. package/dist/cards/impl/hero-power/fragrant-phylactery-enchantment.js.map +1 -1
  9. package/dist/cards/impl/minion/barrier-banshee.js +1 -1
  10. package/dist/cards/impl/minion/barrier-banshee.js.map +1 -1
  11. package/dist/cards/impl/minion/dark-paradox.js +3 -3
  12. package/dist/cards/impl/minion/dark-paradox.js.map +1 -1
  13. package/dist/cards/impl/minion/expert-aviator.js +3 -1
  14. package/dist/cards/impl/minion/expert-aviator.js.map +1 -1
  15. package/dist/cards/impl/minion/heroic-broodmother.js +4 -2
  16. package/dist/cards/impl/minion/heroic-broodmother.js.map +1 -1
  17. package/dist/cards/impl/minion/hopebringer.js +8 -5
  18. package/dist/cards/impl/minion/hopebringer.js.map +1 -1
  19. package/dist/cards/impl/minion/lichling-hoarder.js +2 -4
  20. package/dist/cards/impl/minion/lichling-hoarder.js.map +1 -1
  21. package/dist/cards/impl/minion/living-azerite.js +1 -1
  22. package/dist/cards/impl/minion/living-azerite.js.map +1 -1
  23. package/dist/cards/impl/minion/mysterious-kthir.d.ts +2 -2
  24. package/dist/cards/impl/minion/mysterious-kthir.js +9 -15
  25. package/dist/cards/impl/minion/mysterious-kthir.js.map +1 -1
  26. package/dist/cards/impl/minion/nightmare-corroder.d.ts +2 -2
  27. package/dist/cards/impl/minion/nightmare-corroder.js +2 -2
  28. package/dist/cards/impl/minion/nightmare-corroder.js.map +1 -1
  29. package/dist/cards/impl/minion/razorfen-flapper.d.ts +2 -2
  30. package/dist/cards/impl/minion/razorfen-flapper.js +6 -0
  31. package/dist/cards/impl/minion/razorfen-flapper.js.map +1 -1
  32. package/dist/cards/impl/minion/razorfen-vineweaver.js +1 -1
  33. package/dist/cards/impl/minion/razorfen-vineweaver.js.map +1 -1
  34. package/dist/cards/impl/minion/ship-master-eudora.js +1 -1
  35. package/dist/cards/impl/minion/ship-master-eudora.js.map +1 -1
  36. package/dist/cards/impl/minion/ultraviolet-ascendant.js +3 -3
  37. package/dist/cards/impl/minion/ultraviolet-ascendant.js.map +1 -1
  38. package/dist/cards/impl/minion/young-murk-eye.js +1 -4
  39. package/dist/cards/impl/minion/young-murk-eye.js.map +1 -1
  40. package/dist/cards/impl/trinket/artisanal-urn.js +1 -1
  41. package/dist/cards/impl/trinket/artisanal-urn.js.map +1 -1
  42. package/dist/cards/impl/trinket/jarred-frostling.js +1 -1
  43. package/dist/cards/impl/trinket/jarred-frostling.js.map +1 -1
  44. package/dist/cards/impl/trinket/soul-fermenter.js +1 -1
  45. package/dist/cards/impl/trinket/soul-fermenter.js.map +1 -1
  46. package/dist/simulation/attack.js +5 -2
  47. package/dist/simulation/attack.js.map +1 -1
  48. package/dist/simulation/deity.js +2 -1
  49. package/dist/simulation/deity.js.map +1 -1
  50. package/dist/simulation/start-of-combat/soc-action-processor.d.ts +1 -1
  51. package/dist/simulation/start-of-combat/soc-action-processor.js +5 -3
  52. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  53. package/dist/simulation/start-of-combat/soc-minion.js +2 -2
  54. package/dist/simulation/start-of-combat/soc-minion.js.map +1 -1
  55. package/dist/simulation/summon-when-space.js +4 -0
  56. package/dist/simulation/summon-when-space.js.map +1 -1
  57. package/package.json +1 -1
@@ -35,6 +35,7 @@ export interface BgsPlayerEntity {
35
35
  rapidReanimationMinion?: BoardEntity;
36
36
  rapidReanimationIndexFromLeft?: number;
37
37
  rapidReanimationIndexFromRight?: number;
38
+ leftMostAttacked?: number;
38
39
  }
39
40
  export interface BgsHeroPower {
40
41
  cardId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bgs-player-entity.js","sourceRoot":"","sources":["../src/bgs-player-entity.ts"],"names":[],"mappings":"","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEnchantment, BoardEntity } from './board-entity';\r\nimport { BoardSecret } from './board-secret';\r\n\r\nexport interface BgsPlayerEntity {\r\n\tcardId: string;\r\n\t// readonly nonGhostCardId?: string;\r\n\thpLeft: number;\r\n\treadonly tavernTier: number;\r\n\theroPowers: readonly BgsHeroPower[];\r\n\r\n\t/** @deprecated */\r\n\theroPowerId?: string | undefined | null;\r\n\t/** @deprecated */\r\n\treadonly heroPowerEntityId?: number;\r\n\t/** @deprecated */\r\n\treadonly heroPowerUsed?: boolean;\r\n\t/** @deprecated */\r\n\treadonly heroPowerInfo?: number | string;\r\n\t/** @deprecated */\r\n\theroPowerInfo2?: number;\r\n\t/** @deprecated */\r\n\tavengeCurrent?: number;\r\n\t/** @deprecated */\r\n\tavengeDefault?: number;\r\n\t// For Ozumat\r\n\t/** @deprecated */\r\n\theroPowerActivated?: boolean;\r\n\r\n\tfriendly?: boolean;\r\n\tentityId?: number;\r\n\tquestEntities: BgsQuestEntity[];\r\n\tquestRewards?: string[];\r\n\tquestRewardEntities?: {\r\n\t\tcardId: string;\r\n\t\tentityId: number;\r\n\t\tavengeDefault?: number;\r\n\t\tavengeCurrent?: number;\r\n\t\tscriptDataNum1: number;\r\n\t}[];\r\n\thand?: BoardEntity[];\r\n\tsecrets?: BoardSecret[];\r\n\ttrinkets?: BoardTrinket[];\r\n\tglobalInfo?: BgsPlayerGlobalInfo;\r\n\tstartOfCombatDone?: boolean;\r\n\t// Not really used, but needed for compatibility with BoardEntity\r\n\tenchantments?: BoardEnchantment[];\r\n\r\n\tdeadEyeDamageDone?: number;\r\n\trapidReanimationMinion?: BoardEntity;\r\n\trapidReanimationIndexFromLeft?: number;\r\n\trapidReanimationIndexFromRight?: number;\r\n}\r\n\r\nexport interface BgsHeroPower {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tused: boolean;\r\n\tinfo: number | string | BoardEntity;\r\n\tinfo2: number;\r\n\tinfo3: number;\r\n\tinfo4: number;\r\n\tinfo5: number;\r\n\tinfo6: number;\r\n\tscoreValue1?: number;\r\n\tscoreValue2?: number;\r\n\tscoreValue3?: number;\r\n\tavengeCurrent?: number;\r\n\tavengeDefault?: number;\r\n\tlocked?: number;\r\n\t// Always false when coming from the input, we set it in the appropriate place\r\n\tready?: boolean;\r\n\t// For Ozumat's Tentacular\r\n\tactivated?: boolean;\r\n}\r\n\r\nexport interface BgsPlayerGlobalInfo {\r\n\tEternalKnightsDeadThisGame?: number;\r\n\t// Flat buff carried over between combats, from Eternal Portrait. Unlike EternalKnightsDeadThisGame,\r\n\t// this is not doubled for golden Eternal Knights\r\n\tEternalKnightAttackBuff?: number;\r\n\tEternalKnightHealthBuff?: number;\r\n\tSanlaynScribesDeadThisGame?: number;\r\n\tUndeadAttackBonus?: number;\r\n\tUndeadHealthBonus?: number;\r\n\tHauntedCarapaceAttackBonus?: number;\r\n\tHauntedCarapaceHealthBonus?: number;\r\n\tFrostlingBonus?: number;\r\n\tBloodGemAttackBonus?: number;\r\n\tBloodGemHealthBonus?: number;\r\n\tGoldrinnBuffAtk?: number;\r\n\tGoldrinnBuffHealth?: number;\r\n\tSpellsCastThisGame?: number;\r\n\tTavernSpellsCastThisGame?: number;\r\n\t/** Cards discarded this game (combat-updated; tavern discards come from the client). */\r\n\tCardsDiscardedThisGame?: number;\r\n\t/** Resets each recruit turn (client or future sim hook). */\r\n\tTavernSpellsCastThisTurn?: number;\r\n\t/** Minions and tavern spells played this recruit turn (for Brazen Buccaneer, etc.). */\r\n\tCardsPlayedThisTurn?: number;\r\n\tElementalsPlayedThisTurn?: number;\r\n\tHighestTavernMinionAttack?: number;\r\n\tHighestTavernMinionHealth?: number;\r\n\tBackToBackCastThisGame?: number;\r\n\t/** Mama Mrrglton / Papa Mrrglton plays this game (both IDs count). */\r\n\tMrrgltonsPlayedThisGame?: number;\r\n\tPiratesPlayedThisGame?: number;\r\n\tBeastsSummonedThisGame?: number;\r\n\tBeastsSummonedThisCombat?: number;\r\n\tMagnetizedThisGame?: number;\r\n\tPiratesSummonedThisGame?: number;\r\n\tPirateAttackBonus?: number;\r\n\tMechAttackBonus?: number;\r\n\tAstralAutomatonsSummonedThisGame?: number;\r\n\tChoralAttackBuff?: number;\r\n\tChoralHealthBuff?: number;\r\n\tBeetleAttackBuff?: number;\r\n\tBeetleHealthBuff?: number;\r\n\t// There is some naming confusion. This is \"elementals grant more stats\", not \"elementals have more stats\"\r\n\tElementalAttackBuff?: number;\r\n\tElementalHealthBuff?: number;\r\n\t// Same for these pirates\r\n\tPirateAttackBuff?: number;\r\n\tPirateHealthBuff?: number;\r\n\tTavernSpellHealthBuff?: number;\r\n\tTavernSpellAttackBuff?: number;\r\n\tGoldSpentThisGame?: number;\r\n\tVolumizerHealthBuff?: number;\r\n\tVolumizerAttackBuff?: number;\r\n\tWhelpAttackBuff?: number;\r\n\tWhelpHealthBuff?: number;\r\n\tDeepBluesPlayed?: number;\r\n\tTastyLobstersBuff?: number;\r\n\tGoldenMinionsPlayedThisGame?: number;\r\n\r\n\tMutatedLasherAttackBuff?: number;\r\n\tMutatedLasherHealthBuff?: number;\r\n\tBattlecriesTriggeredThisGame?: number;\r\n\t/** Falling Sky Golem and similar; incremented when a deathrattle effect resolves for this hero's board. */\r\n\tDeathrattlesTriggeredThisGame?: number;\r\n\tFriendlyMinionsDeadLastCombat?: number;\r\n\tAdditionalAttack?: number;\r\n\t/**\r\n\t * Friendly minions with Rally that attacked this combat (once per attack action).\r\n\t * Full-env writes this back for Herding Horn free-Refresh grants.\r\n\t */\r\n\tRallyMinionAttacksThisCombat?: number;\r\n\t/** Fresh Perspective (and similar): free refreshes earned from combat deathrattles. */\r\n\tFreeRefreshesGainedThisCombat?: number;\r\n\t/** Demonology / Laboratory Assistant: Fodder injected into the next N refreshes. */\r\n\tfodderRefreshes?: number;\r\n\tfodderPerRefresh?: number;\r\n\t/**\r\n\t * Extra maximum gold next recruit turn (Timewarped Recycler Avenge, etc.).\r\n\t * Full-env copies this via combat globalInfo writeback.\r\n\t */\r\n\tmaxGoldBonus?: number;\r\n\r\n\t// --- BG 35.2 shop-adjacent (client may set; minion modules read where applicable) ---\r\n\t/** Cataclysmic Harbinger: last tavern spell card ID you cast (set in cast-tavern-spell). */\r\n\tLastTavernSpellCardId?: string;\r\n\t/** Diremuck Forager: how many hand summons are still owed when space opens (targets picked at resolve time). */\r\n\tDiremuckPendingSummons?: { foragerEntityId: number; remaining: number; spawnRight: boolean }[];\r\n}\r\n\r\nexport interface BgsQuestEntity {\r\n\tCardId: string;\r\n\tRewardDbfId: number;\r\n\tProgressCurrent: number;\r\n\tProgressTotal: number;\r\n}\r\n\r\nexport interface BoardTrinket {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tscriptDataNum1: number;\r\n\tscriptDataNum2?: number;\r\n\tscriptDataNum6?: number;\r\n\ttags?: {\r\n\t\t[key in GameTag]?: number;\r\n\t};\r\n\trememberedMinions?: BoardEntity[];\r\n\tavengeDefault?: number;\r\n\tavengeCurrent?: number;\r\n}\r\n"]}
1
+ {"version":3,"file":"bgs-player-entity.js","sourceRoot":"","sources":["../src/bgs-player-entity.ts"],"names":[],"mappings":"","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEnchantment, BoardEntity } from './board-entity';\r\nimport { BoardSecret } from './board-secret';\r\n\r\nexport interface BgsPlayerEntity {\r\n\tcardId: string;\r\n\t// readonly nonGhostCardId?: string;\r\n\thpLeft: number;\r\n\treadonly tavernTier: number;\r\n\theroPowers: readonly BgsHeroPower[];\r\n\r\n\t/** @deprecated */\r\n\theroPowerId?: string | undefined | null;\r\n\t/** @deprecated */\r\n\treadonly heroPowerEntityId?: number;\r\n\t/** @deprecated */\r\n\treadonly heroPowerUsed?: boolean;\r\n\t/** @deprecated */\r\n\treadonly heroPowerInfo?: number | string;\r\n\t/** @deprecated */\r\n\theroPowerInfo2?: number;\r\n\t/** @deprecated */\r\n\tavengeCurrent?: number;\r\n\t/** @deprecated */\r\n\tavengeDefault?: number;\r\n\t// For Ozumat\r\n\t/** @deprecated */\r\n\theroPowerActivated?: boolean;\r\n\r\n\tfriendly?: boolean;\r\n\tentityId?: number;\r\n\tquestEntities: BgsQuestEntity[];\r\n\tquestRewards?: string[];\r\n\tquestRewardEntities?: {\r\n\t\tcardId: string;\r\n\t\tentityId: number;\r\n\t\tavengeDefault?: number;\r\n\t\tavengeCurrent?: number;\r\n\t\tscriptDataNum1: number;\r\n\t}[];\r\n\thand?: BoardEntity[];\r\n\tsecrets?: BoardSecret[];\r\n\ttrinkets?: BoardTrinket[];\r\n\tglobalInfo?: BgsPlayerGlobalInfo;\r\n\tstartOfCombatDone?: boolean;\r\n\t// Not really used, but needed for compatibility with BoardEntity\r\n\tenchantments?: BoardEnchantment[];\r\n\r\n\tdeadEyeDamageDone?: number;\r\n\trapidReanimationMinion?: BoardEntity;\r\n\trapidReanimationIndexFromLeft?: number;\r\n\trapidReanimationIndexFromRight?: number;\r\n\tleftMostAttacked?: number;\r\n}\r\n\r\nexport interface BgsHeroPower {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tused: boolean;\r\n\tinfo: number | string | BoardEntity;\r\n\tinfo2: number;\r\n\tinfo3: number;\r\n\tinfo4: number;\r\n\tinfo5: number;\r\n\tinfo6: number;\r\n\tscoreValue1?: number;\r\n\tscoreValue2?: number;\r\n\tscoreValue3?: number;\r\n\tavengeCurrent?: number;\r\n\tavengeDefault?: number;\r\n\tlocked?: number;\r\n\t// Always false when coming from the input, we set it in the appropriate place\r\n\tready?: boolean;\r\n\t// For Ozumat's Tentacular\r\n\tactivated?: boolean;\r\n}\r\n\r\nexport interface BgsPlayerGlobalInfo {\r\n\tEternalKnightsDeadThisGame?: number;\r\n\t// Flat buff carried over between combats, from Eternal Portrait. Unlike EternalKnightsDeadThisGame,\r\n\t// this is not doubled for golden Eternal Knights\r\n\tEternalKnightAttackBuff?: number;\r\n\tEternalKnightHealthBuff?: number;\r\n\tSanlaynScribesDeadThisGame?: number;\r\n\tUndeadAttackBonus?: number;\r\n\tUndeadHealthBonus?: number;\r\n\tHauntedCarapaceAttackBonus?: number;\r\n\tHauntedCarapaceHealthBonus?: number;\r\n\tFrostlingBonus?: number;\r\n\tBloodGemAttackBonus?: number;\r\n\tBloodGemHealthBonus?: number;\r\n\tGoldrinnBuffAtk?: number;\r\n\tGoldrinnBuffHealth?: number;\r\n\tSpellsCastThisGame?: number;\r\n\tTavernSpellsCastThisGame?: number;\r\n\t/** Cards discarded this game (combat-updated; tavern discards come from the client). */\r\n\tCardsDiscardedThisGame?: number;\r\n\t/** Resets each recruit turn (client or future sim hook). */\r\n\tTavernSpellsCastThisTurn?: number;\r\n\t/** Minions and tavern spells played this recruit turn (for Brazen Buccaneer, etc.). */\r\n\tCardsPlayedThisTurn?: number;\r\n\tElementalsPlayedThisTurn?: number;\r\n\tHighestTavernMinionAttack?: number;\r\n\tHighestTavernMinionHealth?: number;\r\n\tBackToBackCastThisGame?: number;\r\n\t/** Mama Mrrglton / Papa Mrrglton plays this game (both IDs count). */\r\n\tMrrgltonsPlayedThisGame?: number;\r\n\tPiratesPlayedThisGame?: number;\r\n\tBeastsSummonedThisGame?: number;\r\n\tBeastsSummonedThisCombat?: number;\r\n\tMagnetizedThisGame?: number;\r\n\tPiratesSummonedThisGame?: number;\r\n\tPirateAttackBonus?: number;\r\n\tMechAttackBonus?: number;\r\n\tAstralAutomatonsSummonedThisGame?: number;\r\n\tChoralAttackBuff?: number;\r\n\tChoralHealthBuff?: number;\r\n\tBeetleAttackBuff?: number;\r\n\tBeetleHealthBuff?: number;\r\n\t// There is some naming confusion. This is \"elementals grant more stats\", not \"elementals have more stats\"\r\n\tElementalAttackBuff?: number;\r\n\tElementalHealthBuff?: number;\r\n\t// Same for these pirates\r\n\tPirateAttackBuff?: number;\r\n\tPirateHealthBuff?: number;\r\n\tTavernSpellHealthBuff?: number;\r\n\tTavernSpellAttackBuff?: number;\r\n\tGoldSpentThisGame?: number;\r\n\tVolumizerHealthBuff?: number;\r\n\tVolumizerAttackBuff?: number;\r\n\tWhelpAttackBuff?: number;\r\n\tWhelpHealthBuff?: number;\r\n\tDeepBluesPlayed?: number;\r\n\tTastyLobstersBuff?: number;\r\n\tGoldenMinionsPlayedThisGame?: number;\r\n\r\n\tMutatedLasherAttackBuff?: number;\r\n\tMutatedLasherHealthBuff?: number;\r\n\tBattlecriesTriggeredThisGame?: number;\r\n\t/** Falling Sky Golem and similar; incremented when a deathrattle effect resolves for this hero's board. */\r\n\tDeathrattlesTriggeredThisGame?: number;\r\n\tFriendlyMinionsDeadLastCombat?: number;\r\n\tAdditionalAttack?: number;\r\n\t/**\r\n\t * Friendly minions with Rally that attacked this combat (once per attack action).\r\n\t * Full-env writes this back for Herding Horn free-Refresh grants.\r\n\t */\r\n\tRallyMinionAttacksThisCombat?: number;\r\n\t/** Fresh Perspective (and similar): free refreshes earned from combat deathrattles. */\r\n\tFreeRefreshesGainedThisCombat?: number;\r\n\t/** Demonology / Laboratory Assistant: Fodder injected into the next N refreshes. */\r\n\tfodderRefreshes?: number;\r\n\tfodderPerRefresh?: number;\r\n\t/**\r\n\t * Extra maximum gold next recruit turn (Timewarped Recycler Avenge, etc.).\r\n\t * Full-env copies this via combat globalInfo writeback.\r\n\t */\r\n\tmaxGoldBonus?: number;\r\n\r\n\t// --- BG 35.2 shop-adjacent (client may set; minion modules read where applicable) ---\r\n\t/** Cataclysmic Harbinger: last tavern spell card ID you cast (set in cast-tavern-spell). */\r\n\tLastTavernSpellCardId?: string;\r\n\t/** Diremuck Forager: how many hand summons are still owed when space opens (targets picked at resolve time). */\r\n\tDiremuckPendingSummons?: { foragerEntityId: number; remaining: number; spawnRight: boolean }[];\r\n}\r\n\r\nexport interface BgsQuestEntity {\r\n\tCardId: string;\r\n\tRewardDbfId: number;\r\n\tProgressCurrent: number;\r\n\tProgressTotal: number;\r\n}\r\n\r\nexport interface BoardTrinket {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tscriptDataNum1: number;\r\n\tscriptDataNum2?: number;\r\n\tscriptDataNum6?: number;\r\n\ttags?: {\r\n\t\t[key in GameTag]?: number;\r\n\t};\r\n\trememberedMinions?: BoardEntity[];\r\n\tavengeDefault?: number;\r\n\tavengeCurrent?: number;\r\n}\r\n"]}
@@ -41,6 +41,7 @@ export interface StartOfCombatCard extends Card {
41
41
  startOfCombat(trinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret, input: SoCInput): boolean | {
42
42
  hasTriggered: boolean;
43
43
  shouldRecomputeCurrentAttacker: boolean;
44
+ skipSummonsWhenSpace?: boolean;
44
45
  };
45
46
  }
46
47
  export declare const hasStartOfCombat: (card: Card) => card is StartOfCombatCard;
@@ -1 +1 @@
1
- {"version":3,"file":"card.interface.js","sourceRoot":"","sources":["../../src/cards/card.interface.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity, BgsQuestEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { OnDivineShieldUpdatedInput } from '../keywords/divine-shield';\r\nimport { OnRebornUpdatedInput } from '../keywords/reborn';\r\nimport { OnStealthUpdatedInput } from '../keywords/stealth';\r\nimport { OnTauntUpdatedInput } from '../keywords/taunt';\r\nimport { OnVenomousUpdatedInput } from '../keywords/venomous';\r\nimport { OnWindfuryUpdatedInput } from '../keywords/windfury';\r\nimport { OnGlobalInfoUpdatedInput } from '../mechanics/player-global-effects';\r\nimport {\r\n\tOnDespawnInput,\r\n\tOnFriendlyMinionSummonedTrinketInput,\r\n\tOnOtherSpawnAuraInput,\r\n\tOnOtherSpawnInput,\r\n\tOnSpawnInput,\r\n} from '../simulation/add-minion-to-board';\r\nimport {\r\n\tOnAfterDeathInput,\r\n\tOnAfterFriendlyMinionDeathInput,\r\n\tOnDeathInput,\r\n\tOnMinionKilledInput,\r\n} from '../simulation/attack';\r\nimport { AvengeInput } from '../simulation/avenge';\r\nimport { BattlecryInput, OnBattlecryTriggeredInput } from '../simulation/battlecries';\r\nimport { PlayedBloodGemsOnAnyInput, PlayedBloodGemsOnMeInput } from '../simulation/blood-gems';\r\nimport { OnCardAddedToHandInput } from '../simulation/cards-in-hand';\r\nimport { AfterDealDamageInput, AfterFriendlyMinionDamagedInput } from '../simulation/damage-effects';\r\nimport { AfterHeroDamagedInput } from '../simulation/damage-to-hero';\r\nimport { DeathrattleTriggeredInput } from '../simulation/deathrattle-on-trigger';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport {\r\n\tOnAfterMagnetizeInput,\r\n\tOnAfterMagnetizeSelfInput,\r\n\tOnBeforeMagnetizeInput,\r\n\tOnBeforeMagnetizeSelfInput,\r\n} from '../simulation/magnetize';\r\nimport { OnAttackInput } from '../simulation/on-attack';\r\nimport { OnMinionAttackedInput } from '../simulation/on-being-attacked';\r\nimport { RebornEffectInput } from '../simulation/reborn';\r\nimport { SoCInput } from '../simulation/start-of-combat/start-of-combat-input';\r\nimport { OnStatsChangedInput } from '../simulation/stats';\r\nimport { OnGildedInput } from '../simulation/utils/golden';\r\n\r\nexport interface Card {\r\n\t// Maybe should make this mandatory\r\n\tcardIds?: readonly string[];\r\n\t// Method syntax keeps parameters bivariant so implementations can narrow (e.g. BoardEntity).\r\n\tstartOfCombat?(\r\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\t\tinput: SoCInput,\r\n\t): boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean };\r\n}\r\n\r\nexport interface DefaultChargesCard extends Card {\r\n\tdefaultCharges(entity: BoardEntity): number;\r\n}\r\nexport const hasDefaultCharges = (card: Card): card is DefaultChargesCard =>\r\n\t(card as DefaultChargesCard)?.defaultCharges !== undefined;\r\n\r\nexport interface StartOfCombatCard extends Card {\r\n\tstartOfCombatTiming?: StartOfCombatTiming;\r\n\tstartOfCombat(\r\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\t\tinput: SoCInput,\r\n\t): boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean };\r\n}\r\nexport const hasStartOfCombat = (card: Card): card is StartOfCombatCard =>\r\n\t(card as StartOfCombatCard)?.startOfCombat !== undefined;\r\nexport interface StartOfCombatFromHandCard extends StartOfCombatCard {\r\n\tstartOfCombatFromHand: true;\r\n}\r\nexport const hasStartOfCombatFromHand = (card: Card): card is StartOfCombatFromHandCard =>\r\n\t(card as StartOfCombatFromHandCard)?.startOfCombatFromHand !== undefined;\r\nexport type StartOfCombatTiming = 'start-of-combat' | 'pre-combat' | 'illidan';\r\n\r\nexport interface TavernSpellCard extends Card {\r\n\tcastTavernSpell(spellCardId: string, input: CastSpellInput): void;\r\n}\r\nexport const hasCastTavernSpell = (card: Card): card is TavernSpellCard =>\r\n\t(card as TavernSpellCard)?.castTavernSpell !== undefined;\r\n\r\nexport interface OnTavernSpellCastCard extends Card {\r\n\tonTavernSpellCast(entity: BoardEntity | BoardTrinket, input: CastSpellInput): void;\r\n}\r\nexport const hasOnTavernSpellCast = (card: Card): card is OnTavernSpellCastCard =>\r\n\t(card as OnTavernSpellCastCard)?.onTavernSpellCast !== undefined;\r\n\r\nexport interface OnBeforeTavernSpellCastCard extends Card {\r\n\tonBeforeTavernSpellCast(entity: BoardEntity | BoardTrinket, input: CastSpellInput): void;\r\n}\r\nexport const hasOnBeforeTavernSpellCast = (card: Card): card is OnBeforeTavernSpellCastCard =>\r\n\t(card as OnBeforeTavernSpellCastCard)?.onBeforeTavernSpellCast !== undefined;\r\n\r\nexport interface AfterTavernSpellCastCard extends Card {\r\n\tafterTavernSpellCast(entity: BoardEntity | BoardTrinket, input: CastSpellInput): void;\r\n}\r\nexport const hasAfterTavernSpellCast = (card: Card): card is AfterTavernSpellCastCard =>\r\n\t(card as AfterTavernSpellCastCard)?.afterTavernSpellCast !== undefined;\r\n\r\n// Whenever this attacks\r\nexport interface RallyCard extends Card {\r\n\trally(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasRally = (card: Card): card is RallyCard => (card as RallyCard)?.rally !== undefined;\r\n\r\nexport interface OnWheneverAnotherMinionAttacksCard extends Card {\r\n\tonWheneverAnotherMinionAttacks(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnWheneverAnotherMinionAttacks = (card: Card): card is OnWheneverAnotherMinionAttacksCard =>\r\n\t(card as OnWheneverAnotherMinionAttacksCard)?.onWheneverAnotherMinionAttacks !== undefined;\r\n\r\nexport interface AfterAnotherMinionAttacksCard extends Card {\r\n\tafterAnotherMinionAttacks(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasAfterAnotherMinionAttacks = (card: Card): card is AfterAnotherMinionAttacksCard =>\r\n\t(card as AfterAnotherMinionAttacksCard)?.afterAnotherMinionAttacks !== undefined;\r\n\r\nexport interface AfterThisAttacksCard extends Card {\r\n\tafterThisAttacks(\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasAfterThisAttacks = (card: Card): card is AfterThisAttacksCard =>\r\n\t(card as AfterThisAttacksCard)?.afterThisAttacks !== undefined;\r\n\r\nexport interface OnMinionAttackedCard extends Card {\r\n\tonAttacked(minion: BoardEntity, input: OnMinionAttackedInput): void;\r\n}\r\nexport const hasOnMinionAttacked = (card: Card): card is OnMinionAttackedCard =>\r\n\t(card as OnMinionAttackedCard)?.onAttacked !== undefined;\r\n\r\nexport interface OnSpawnedCard extends Card {\r\n\tonSpawned(minion: BoardEntity, input: OnSpawnInput): void;\r\n}\r\nexport const hasOnSpawned = (card: Card): card is OnSpawnedCard => (card as OnSpawnedCard)?.onSpawned !== undefined;\r\n\r\nexport interface DeityCard extends Card {\r\n\tonAwaken(minion: BoardEntity, input: DeityAwakenInput): void;\r\n}\r\nexport const hasOnAwaken = (card: Card): card is DeityCard => (card as DeityCard)?.onAwaken !== undefined;\r\nexport interface OnSpawnedEnchantmentCard extends Card {\r\n\tonSpawnedEnchantment(minion: BoardEntity, enchantment: BoardEnchantment, input: OnSpawnInput): void;\r\n}\r\nexport const hasOnSpawnedEnchantment = (card: Card): card is OnSpawnedEnchantmentCard =>\r\n\t(card as OnSpawnedEnchantmentCard)?.onSpawnedEnchantment !== undefined;\r\n\r\nexport interface OnOtherSpawnedAuraCard extends Card {\r\n\tonOtherSpawnedAura(minion: BoardEntity, input: OnOtherSpawnAuraInput): void;\r\n}\r\nexport const hasOnOtherAuraSpawned = (card: Card): card is OnOtherSpawnedAuraCard =>\r\n\t(card as OnOtherSpawnedAuraCard)?.onOtherSpawnedAura !== undefined;\r\n\r\nexport interface OnOtherSpawnedCard extends Card {\r\n\tonOtherSpawned(minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput): void;\r\n}\r\nexport const hasOnOtherSpawned = (card: Card): card is OnOtherSpawnedCard =>\r\n\t(card as OnOtherSpawnedCard)?.onOtherSpawned !== undefined;\r\n\r\nexport interface AfterOtherSpawnedCard extends Card {\r\n\tafterOtherSpawned(minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput): void;\r\n}\r\nexport const hasAfterOtherSpawned = (card: Card): card is AfterOtherSpawnedCard =>\r\n\t(card as AfterOtherSpawnedCard)?.afterOtherSpawned !== undefined;\r\n\r\nexport interface OnFriendlyMinionSummonedTrinketCard extends Card {\r\n\tonFriendlyMinionSummoned(trinket: BoardTrinket, input: OnFriendlyMinionSummonedTrinketInput): void;\r\n}\r\nexport const hasOnFriendlyMinionSummonedTrinket = (card: Card): card is OnFriendlyMinionSummonedTrinketCard =>\r\n\t(card as OnFriendlyMinionSummonedTrinketCard)?.onFriendlyMinionSummoned !== undefined;\r\n\r\nexport interface OnDespawnedCard extends Card {\r\n\tonDespawned(minion: BoardEntity, input: OnDespawnInput): void;\r\n}\r\nexport const hasOnDespawned = (card: Card): card is OnDespawnedCard =>\r\n\t(card as OnDespawnedCard)?.onDespawned !== undefined;\r\n\r\nexport const OnDespawnedEnchantmentCard = (card: Card): card is OnDespawnedEnchantmentCard =>\r\n\t(card as OnDespawnedEnchantmentCard)?.onDespawnedEnchantment !== undefined;\r\nexport interface OnDespawnedEnchantmentCard extends Card {\r\n\tonDespawnedEnchantment(minion: BoardEntity, enchantment: BoardEnchantment, input: OnDespawnInput): void;\r\n}\r\nexport const hasOnDespawnedEnchantment = (card: Card): card is OnDespawnedEnchantmentCard =>\r\n\t(card as OnDespawnedEnchantmentCard)?.onDespawnedEnchantment !== undefined;\r\n\r\nexport interface DeathrattleSpawnCard extends Card {\r\n\tdeathrattleSpawn(minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[];\r\n}\r\nexport const hasDeathrattleSpawn = (card: Card): card is DeathrattleSpawnCard =>\r\n\t(card as DeathrattleSpawnCard)?.deathrattleSpawn !== undefined;\r\n\r\n/** Deathrattle that does not return board spawns (hand buffs, stat grants, etc.). */\r\nexport interface DeathrattleEffectCard extends Card {\r\n\tdeathrattleEffect(minion: BoardEntity, input: DeathrattleTriggeredInput): void;\r\n}\r\nexport const hasDeathrattleEffect = (card: Card): card is DeathrattleEffectCard =>\r\n\t(card as DeathrattleEffectCard)?.deathrattleEffect !== undefined;\r\n\r\nexport interface BattlecryCard extends Card {\r\n\t// boolean return type is used only for conditional battlecries (eg cards that only work as battlecries if a specific trinket\r\n\t// is in game)\r\n\tbattlecry(minion: BoardEntity, input: BattlecryInput): boolean;\r\n}\r\nexport const hasBattlecry = (card: Card): card is BattlecryCard => (card as BattlecryCard)?.battlecry !== undefined;\r\n\r\nexport interface RebornEffectCard extends Card {\r\n\trebornEffect(minion: BoardEntity | BoardTrinket, input: RebornEffectInput): void;\r\n}\r\nexport const hasRebornEffect = (card: Card): card is RebornEffectCard =>\r\n\t(card as RebornEffectCard)?.rebornEffect !== undefined;\r\n\r\nexport interface RebornSelfEffectCard extends Card {\r\n\trebornSelfEffect(minion: BoardEntity, input: RebornEffectInput): void;\r\n}\r\nexport const hasRebornSelfEffect = (card: Card): card is RebornSelfEffectCard =>\r\n\t(card as RebornSelfEffectCard)?.rebornSelfEffect !== undefined;\r\n\r\nexport interface BeforeRebornSelfEffectCard extends Card {\r\n\tbeforeRebornSelfEffect(minion: BoardEntity, input: RebornEffectInput): void;\r\n}\r\nexport const hasBeforeRebornSelfEffect = (card: Card): card is BeforeRebornSelfEffectCard =>\r\n\t(card as BeforeRebornSelfEffectCard)?.beforeRebornSelfEffect !== undefined;\r\n\r\n// When a minion is reborn, some attributes need to be transferred to the new minion\r\nexport interface RebornSelfAttributeTransferCard extends Card {\r\n\trebornSelfAttributeTransfer: (keyof BoardEntity)[];\r\n}\r\nexport const hasRebornSelfAttributeTransfer = (card: Card): card is RebornSelfAttributeTransferCard =>\r\n\t(card as RebornSelfAttributeTransferCard)?.rebornSelfAttributeTransfer !== undefined;\r\n\r\nexport interface AfterRebornCard extends Card {\r\n\tafterReborn(minion: BoardEntity | BoardTrinket, input: RebornEffectInput): void;\r\n}\r\nexport const hasAfterReborn = (card: Card): card is AfterRebornCard =>\r\n\t(card as AfterRebornCard)?.afterReborn !== undefined;\r\n\r\nexport interface OnBattlecryTriggeredCard extends Card {\r\n\tonBattlecryTriggered(minion: BoardEntity | BoardTrinket, input: OnBattlecryTriggeredInput): void;\r\n}\r\nexport const hasOnBattlecryTriggered = (card: Card): card is OnBattlecryTriggeredCard =>\r\n\t(card as OnBattlecryTriggeredCard)?.onBattlecryTriggered !== undefined;\r\n\r\nexport interface AvengeCard extends Card {\r\n\tavenge(minion: BoardEntity | BoardTrinket, input: AvengeInput): void | readonly BoardEntity[];\r\n\tbaseAvengeValue(cardId: string): number;\r\n}\r\nexport const hasAvenge = (card: Card): card is AvengeCard => (card as AvengeCard)?.avenge !== undefined;\r\n\r\nexport interface DefaultScriptDataNumCard extends Card {\r\n\tdefaultScriptDataNum(cardId: string): number;\r\n}\r\nexport const hasDefaultScriptDataNum = (card: Card): card is DefaultScriptDataNumCard =>\r\n\t(card as DefaultScriptDataNumCard)?.defaultScriptDataNum !== undefined;\r\n\r\n/** To use when another deathrattle is triggered */\r\nexport interface DeathrattleTriggeredCard extends Card {\r\n\tonDeathrattleTriggered(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t): void;\r\n}\r\nexport const hasOnDeathrattleTriggered = (card: Card): card is DeathrattleTriggeredCard =>\r\n\t(card as DeathrattleTriggeredCard)?.onDeathrattleTriggered !== undefined;\r\n\r\nexport interface DeathrattleTriggeredEnchantmentCard extends Card {\r\n\tonDeathrattleTriggeredEnchantment(\r\n\t\tenchantedMinion: BoardEntity,\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t): void;\r\n}\r\nexport const hasOnDeathrattleTriggeredEnchantment = (card: Card): card is DeathrattleTriggeredEnchantmentCard =>\r\n\t(card as DeathrattleTriggeredEnchantmentCard)?.onDeathrattleTriggeredEnchantment !== undefined;\r\n\r\n/** Despite the name, this covers all deathrattle effects on an enchantment, not just the spawning ones */\r\nexport interface DeathrattleSpawnEnchantmentCard extends Card {\r\n\tdeathrattleSpawnEnchantmentEffect(\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t): readonly BoardEntity[];\r\n\tcardIds: readonly string[];\r\n}\r\nexport const hasDeathrattleSpawnEnchantment = (card: Card): card is DeathrattleSpawnEnchantmentCard =>\r\n\t(card as DeathrattleSpawnEnchantmentCard)?.deathrattleSpawnEnchantmentEffect !== undefined;\r\n\r\nexport interface OnCardAddedToHandCard extends Card {\r\n\tonCardAddedToHand(entity: BoardEntity | BgsQuestEntity | BoardTrinket, input: OnCardAddedToHandInput): void;\r\n}\r\nexport const hasOnCardAddedToHand = (card: Card): card is OnCardAddedToHandCard =>\r\n\t(card as OnCardAddedToHandCard)?.onCardAddedToHand !== undefined;\r\n\r\nexport interface OnDiscardCard extends Card {\r\n\tonDiscard(entity: BoardEntity | BoardTrinket, input: DiscardInput): void;\r\n}\r\nexport const hasOnDiscard = (card: Card): card is OnDiscardCard => (card as OnDiscardCard)?.onDiscard !== undefined;\r\n\r\nexport interface OnThisDiscardedCard extends Card {\r\n\tonThisDiscarded(card: BoardEntity, input: DiscardInput): void;\r\n}\r\nexport const hasOnThisDiscarded = (card: Card): card is OnThisDiscardedCard =>\r\n\t(card as OnThisDiscardedCard)?.onThisDiscarded !== undefined;\r\n\r\nexport interface EndOfTurnCard extends Card {\r\n\t// Use BattlecryInput because it's the only way end of turn effects are triggered\r\n\tendOfTurn(entity: BoardEntity, input: EndOfTurnInput): void;\r\n}\r\nexport const hasEndOfTurn = (card: Card): card is EndOfTurnCard => (card as EndOfTurnCard)?.endOfTurn !== undefined;\r\nexport type EndOfTurnInput = BattlecryInput;\r\n\r\nexport interface OnDivineShieldUpdatedCard extends Card {\r\n\tonDivineShieldUpdated(entity: BoardEntity | BoardTrinket, input: OnDivineShieldUpdatedInput): void;\r\n}\r\nexport const hasOnDivineShieldUpdated = (card: Card): card is OnDivineShieldUpdatedCard =>\r\n\t(card as OnDivineShieldUpdatedCard)?.onDivineShieldUpdated !== undefined;\r\n\r\nexport interface OnTauntUpdatedCard extends Card {\r\n\tonTauntUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnTauntUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnTauntUpdated = (card: Card): card is OnTauntUpdatedCard =>\r\n\t(card as OnTauntUpdatedCard)?.onTauntUpdated !== undefined;\r\n\r\nexport interface OnRebornUpdatedCard extends Card {\r\n\tonRebornUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnRebornUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnRebornUpdated = (card: Card): card is OnRebornUpdatedCard =>\r\n\t(card as OnRebornUpdatedCard)?.onRebornUpdated !== undefined;\r\n\r\nexport interface OnStealthUpdatedCard extends Card {\r\n\tonStealthUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnStealthUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnStealthUpdated = (card: Card): card is OnStealthUpdatedCard =>\r\n\t(card as OnStealthUpdatedCard)?.onStealthUpdated !== undefined;\r\n\r\nexport interface OnVenomousUpdatedCard extends Card {\r\n\tonVenomousUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnVenomousUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnVenomousUpdated = (card: Card): card is OnVenomousUpdatedCard =>\r\n\t(card as OnVenomousUpdatedCard)?.onVenomousUpdated !== undefined;\r\n\r\nexport interface OnWindfuryUpdatedCard extends Card {\r\n\tonWindfuryUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnWindfuryUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnWindfuryUpdated = (card: Card): card is OnWindfuryUpdatedCard =>\r\n\t(card as OnWindfuryUpdatedCard)?.onWindfuryUpdated !== undefined;\r\n\r\nexport interface OnStatsChangedCard extends Card {\r\n\tonStatsChanged(entity: BoardEntity, input: OnStatsChangedInput): void;\r\n}\r\nexport const hasOnStatsChanged = (card: Card): card is OnStatsChangedCard =>\r\n\t(card as OnStatsChangedCard)?.onStatsChanged !== undefined;\r\n\r\nexport interface AfterHeroDamagedCard extends Card {\r\n\tafterHeroDamaged(entity: BoardEntity | BoardTrinket, input: AfterHeroDamagedInput): void;\r\n}\r\nexport const hasAfterHeroDamaged = (card: Card): card is AfterHeroDamagedCard =>\r\n\t(card as AfterHeroDamagedCard)?.afterHeroDamaged !== undefined;\r\n\r\nexport interface OnDamagedCard extends Card {\r\n\tonDamaged(entity: BoardEntity, input: OnDamagedInput): void;\r\n}\r\nexport const hasOnDamaged = (card: Card): card is OnDamagedCard => (card as OnDamagedCard)?.onDamaged !== undefined;\r\n\r\nexport interface AfterDealDamageCard extends Card {\r\n\t// Called whenever damage is dealt, both on the friendly and enemy side\r\n\t// So you need to check the \"friendly\" flag\r\n\t// TODO: the \"after\" here waits for spawns, eg reborn / deathrattle\r\n\t// eg https://replays.firestoneapp.com/?reviewId=05860f41-1ea4-41f8-9c55-b6c854fa5f5a&turn=17&action=10\r\n\t// The reborn Rylak is buffed by Lord of the Ruins\r\n\tafterDealDamage(entity: BoardEntity, input: AfterDealDamageInput): void;\r\n}\r\nexport const hasAfterDealDamage = (card: Card): card is AfterDealDamageCard =>\r\n\t(card as AfterDealDamageCard)?.afterDealDamage !== undefined;\r\n\r\nexport interface AfterFriendlyMinionDamagedTrinketCard extends Card {\r\n\tafterFriendlyMinionDamaged(trinket: BoardTrinket, input: AfterFriendlyMinionDamagedInput): void;\r\n}\r\nexport const hasAfterFriendlyMinionDamagedTrinket = (card: Card): card is AfterFriendlyMinionDamagedTrinketCard =>\r\n\t(card as AfterFriendlyMinionDamagedTrinketCard)?.afterFriendlyMinionDamaged !== undefined;\r\n\r\nexport interface OnDeathCard extends Card {\r\n\tonDeath(entity: BoardEntity, input: OnDeathInput): void;\r\n}\r\nexport const hasOnDeath = (card: Card): card is OnDeathCard => (card as OnDeathCard)?.onDeath !== undefined;\r\n\r\nexport interface OnAfterDeathCard extends Card {\r\n\tonAfterDeath(entity: BoardEntity | BoardTrinket, input: OnAfterDeathInput): void;\r\n}\r\nexport const hasOnAfterDeath = (card: Card): card is OnAfterDeathCard =>\r\n\t(card as OnAfterDeathCard)?.onAfterDeath !== undefined;\r\n\r\n/**\r\n * After any friendly board minion dies (during `applyWheneverMinionDiesEffect`). Filter in the card\r\n * (e.g. only if `input.deadEntity.taunt`). Board minions and trinkets that implement this are dispatched\r\n * from `deathrattle-effects`.\r\n */\r\nexport interface OnAfterFriendlyMinionDeathCard extends Card {\r\n\tonAfterFriendlyMinionDeath(listener: BoardEntity | BoardTrinket, input: OnAfterFriendlyMinionDeathInput): void;\r\n}\r\nexport const hasOnAfterFriendlyMinionDeath = (card: Card): card is OnAfterFriendlyMinionDeathCard =>\r\n\t(card as OnAfterFriendlyMinionDeathCard)?.onAfterFriendlyMinionDeath !== undefined;\r\n\r\nexport interface OnMinionKilledCard extends Card {\r\n\tonMinionKilled(\r\n\t\tentity: BoardEntity,\r\n\t\tinput: OnMinionKilledInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnMinionKilled = (card: Card): card is OnMinionKilledCard =>\r\n\t(card as OnMinionKilledCard)?.onMinionKilled !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeCard extends Card {\r\n\tonBeforeMagnetize(entity: BoardEntity | BoardTrinket, input: OnBeforeMagnetizeInput): void;\r\n}\r\nexport const hasOnBeforeMagnetize = (card: Card): card is OnBeforeMagnetizeCard =>\r\n\t(card as OnBeforeMagnetizeCard)?.onBeforeMagnetize !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeSelfCard extends Card {\r\n\tonBeforeMagnetizeSelf(entity: BoardEntity, input: OnBeforeMagnetizeSelfInput): void;\r\n}\r\nexport const hasOnBeforeMagnetizeSelf = (card: Card): card is OnBeforeMagnetizeSelfCard =>\r\n\t(card as OnBeforeMagnetizeSelfCard)?.onBeforeMagnetizeSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeToSelfCard extends Card {\r\n\tonAfterMagnetizeToSelf(entity: BoardEntity, input: OnAfterMagnetizeSelfInput): void;\r\n}\r\nexport const hasOnAfterMagnetizeToSelf = (card: Card): card is OnAfterMagnetizeToSelfCard =>\r\n\t(card as OnAfterMagnetizeToSelfCard)?.onAfterMagnetizeToSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeSelfCard extends Card {\r\n\tonAfterMagnetizeSelf(entity: BoardEntity, input: OnAfterMagnetizeInput): void;\r\n}\r\nexport const hasOnAfterMagnetizeSelf = (card: Card): card is OnAfterMagnetizeSelfCard =>\r\n\t(card as OnAfterMagnetizeSelfCard)?.onAfterMagnetizeSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeCard extends Card {\r\n\tonAfterMagnetize(entity: BoardEntity | BoardTrinket, input: OnAfterMagnetizeInput): void;\r\n}\r\nexport const hasOnAfterMagnetize = (card: Card): card is OnAfterMagnetizeCard =>\r\n\t(card as OnAfterMagnetizeCard)?.onAfterMagnetize !== undefined;\r\n\r\nexport interface OnSpawnFailCard extends Card {\r\n\tonSpawnFail(entity: BoardEntity, input: OnSpawnFailInput): void;\r\n}\r\nexport const hasOnSpawnFail = (card: Card): card is OnSpawnFailCard =>\r\n\t(card as OnSpawnFailCard)?.onSpawnFail !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnMeCard extends Card {\r\n\tplayedBloodGemsOnMe(entity: BoardEntity, input: PlayedBloodGemsOnMeInput): void;\r\n}\r\nexport const hasPlayedBloodGemsOnMe = (card: Card): card is PlayedBloodGemsOnMeCard =>\r\n\t(card as PlayedBloodGemsOnMeCard)?.playedBloodGemsOnMe !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnAnyCard extends Card {\r\n\tplayedBloodGemsOnAny(entity: BoardEntity, input: PlayedBloodGemsOnAnyInput): void;\r\n}\r\nexport const hasPlayedBloodGemsOnAny = (card: Card): card is PlayedBloodGemsOnAnyCard =>\r\n\t(card as PlayedBloodGemsOnAnyCard)?.playedBloodGemsOnAny !== undefined;\r\n\r\nexport interface OnGlobalInfoUpdatedCard extends Card {\r\n\tonGlobalInfoUpdated(entity: BoardEntity, input: OnGlobalInfoUpdatedInput): void;\r\n}\r\nexport const hasOnGlobalInfoUpdated = (card: Card): card is OnGlobalInfoUpdatedCard =>\r\n\t(card as OnGlobalInfoUpdatedCard)?.onGlobalInfoUpdated !== undefined;\r\n\r\nexport interface OnGlobalInfoUpdatedEnchantmentCard extends Card {\r\n\tonGlobalInfoUpdatedEnchantment(\r\n\t\tentity: BoardEntity,\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tinput: OnGlobalInfoUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnGlobalInfoUpdatedEnchantment = (card: Card): card is OnGlobalInfoUpdatedEnchantmentCard =>\r\n\t(card as OnGlobalInfoUpdatedEnchantmentCard)?.onGlobalInfoUpdatedEnchantment !== undefined;\r\n\r\nexport interface OnGildedCard extends Card {\r\n\tonGilded(entity: BoardEntity, input: OnGildedInput): void;\r\n}\r\nexport const hasOnGilded = (card: Card): card is OnGildedCard => (card as OnGildedCard)?.onGilded !== undefined;\r\n\r\nexport interface OnSpawnFailInput {\r\n\tfailedSpawn: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface DeityAwakenInput {\r\n\thero: BgsPlayerEntity;\r\n\tboard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface DiscardInput {\r\n\tdiscarded: BoardEntity;\r\n\thero: BgsPlayerEntity;\r\n\tboard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface CastSpellInput {\r\n\tspellCardId: string;\r\n\tsource: BoardEntity | BoardTrinket | BgsPlayerEntity;\r\n\ttarget: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\nexport interface OnDamagedInput {\r\n\tdamagedEntity: BoardEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"card.interface.js","sourceRoot":"","sources":["../../src/cards/card.interface.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity, BgsQuestEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { OnDivineShieldUpdatedInput } from '../keywords/divine-shield';\r\nimport { OnRebornUpdatedInput } from '../keywords/reborn';\r\nimport { OnStealthUpdatedInput } from '../keywords/stealth';\r\nimport { OnTauntUpdatedInput } from '../keywords/taunt';\r\nimport { OnVenomousUpdatedInput } from '../keywords/venomous';\r\nimport { OnWindfuryUpdatedInput } from '../keywords/windfury';\r\nimport { OnGlobalInfoUpdatedInput } from '../mechanics/player-global-effects';\r\nimport {\r\n\tOnDespawnInput,\r\n\tOnFriendlyMinionSummonedTrinketInput,\r\n\tOnOtherSpawnAuraInput,\r\n\tOnOtherSpawnInput,\r\n\tOnSpawnInput,\r\n} from '../simulation/add-minion-to-board';\r\nimport {\r\n\tOnAfterDeathInput,\r\n\tOnAfterFriendlyMinionDeathInput,\r\n\tOnDeathInput,\r\n\tOnMinionKilledInput,\r\n} from '../simulation/attack';\r\nimport { AvengeInput } from '../simulation/avenge';\r\nimport { BattlecryInput, OnBattlecryTriggeredInput } from '../simulation/battlecries';\r\nimport { PlayedBloodGemsOnAnyInput, PlayedBloodGemsOnMeInput } from '../simulation/blood-gems';\r\nimport { OnCardAddedToHandInput } from '../simulation/cards-in-hand';\r\nimport { AfterDealDamageInput, AfterFriendlyMinionDamagedInput } from '../simulation/damage-effects';\r\nimport { AfterHeroDamagedInput } from '../simulation/damage-to-hero';\r\nimport { DeathrattleTriggeredInput } from '../simulation/deathrattle-on-trigger';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport {\r\n\tOnAfterMagnetizeInput,\r\n\tOnAfterMagnetizeSelfInput,\r\n\tOnBeforeMagnetizeInput,\r\n\tOnBeforeMagnetizeSelfInput,\r\n} from '../simulation/magnetize';\r\nimport { OnAttackInput } from '../simulation/on-attack';\r\nimport { OnMinionAttackedInput } from '../simulation/on-being-attacked';\r\nimport { RebornEffectInput } from '../simulation/reborn';\r\nimport { SoCInput } from '../simulation/start-of-combat/start-of-combat-input';\r\nimport { OnStatsChangedInput } from '../simulation/stats';\r\nimport { OnGildedInput } from '../simulation/utils/golden';\r\n\r\nexport interface Card {\r\n\t// Maybe should make this mandatory\r\n\tcardIds?: readonly string[];\r\n\t// Method syntax keeps parameters bivariant so implementations can narrow (e.g. BoardEntity).\r\n\tstartOfCombat?(\r\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\t\tinput: SoCInput,\r\n\t): boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean };\r\n}\r\n\r\nexport interface DefaultChargesCard extends Card {\r\n\tdefaultCharges(entity: BoardEntity): number;\r\n}\r\nexport const hasDefaultCharges = (card: Card): card is DefaultChargesCard =>\r\n\t(card as DefaultChargesCard)?.defaultCharges !== undefined;\r\n\r\nexport interface StartOfCombatCard extends Card {\r\n\tstartOfCombatTiming?: StartOfCombatTiming;\r\n\tstartOfCombat(\r\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\t\tinput: SoCInput,\r\n\t): boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean; skipSummonsWhenSpace?: boolean };\r\n}\r\nexport const hasStartOfCombat = (card: Card): card is StartOfCombatCard =>\r\n\t(card as StartOfCombatCard)?.startOfCombat !== undefined;\r\nexport interface StartOfCombatFromHandCard extends StartOfCombatCard {\r\n\tstartOfCombatFromHand: true;\r\n}\r\nexport const hasStartOfCombatFromHand = (card: Card): card is StartOfCombatFromHandCard =>\r\n\t(card as StartOfCombatFromHandCard)?.startOfCombatFromHand !== undefined;\r\nexport type StartOfCombatTiming = 'start-of-combat' | 'pre-combat' | 'illidan';\r\n\r\nexport interface TavernSpellCard extends Card {\r\n\tcastTavernSpell(spellCardId: string, input: CastSpellInput): void;\r\n}\r\nexport const hasCastTavernSpell = (card: Card): card is TavernSpellCard =>\r\n\t(card as TavernSpellCard)?.castTavernSpell !== undefined;\r\n\r\nexport interface OnTavernSpellCastCard extends Card {\r\n\tonTavernSpellCast(entity: BoardEntity | BoardTrinket, input: CastSpellInput): void;\r\n}\r\nexport const hasOnTavernSpellCast = (card: Card): card is OnTavernSpellCastCard =>\r\n\t(card as OnTavernSpellCastCard)?.onTavernSpellCast !== undefined;\r\n\r\nexport interface OnBeforeTavernSpellCastCard extends Card {\r\n\tonBeforeTavernSpellCast(entity: BoardEntity | BoardTrinket, input: CastSpellInput): void;\r\n}\r\nexport const hasOnBeforeTavernSpellCast = (card: Card): card is OnBeforeTavernSpellCastCard =>\r\n\t(card as OnBeforeTavernSpellCastCard)?.onBeforeTavernSpellCast !== undefined;\r\n\r\nexport interface AfterTavernSpellCastCard extends Card {\r\n\tafterTavernSpellCast(entity: BoardEntity | BoardTrinket, input: CastSpellInput): void;\r\n}\r\nexport const hasAfterTavernSpellCast = (card: Card): card is AfterTavernSpellCastCard =>\r\n\t(card as AfterTavernSpellCastCard)?.afterTavernSpellCast !== undefined;\r\n\r\n// Whenever this attacks\r\nexport interface RallyCard extends Card {\r\n\trally(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasRally = (card: Card): card is RallyCard => (card as RallyCard)?.rally !== undefined;\r\n\r\nexport interface OnWheneverAnotherMinionAttacksCard extends Card {\r\n\tonWheneverAnotherMinionAttacks(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnWheneverAnotherMinionAttacks = (card: Card): card is OnWheneverAnotherMinionAttacksCard =>\r\n\t(card as OnWheneverAnotherMinionAttacksCard)?.onWheneverAnotherMinionAttacks !== undefined;\r\n\r\nexport interface AfterAnotherMinionAttacksCard extends Card {\r\n\tafterAnotherMinionAttacks(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasAfterAnotherMinionAttacks = (card: Card): card is AfterAnotherMinionAttacksCard =>\r\n\t(card as AfterAnotherMinionAttacksCard)?.afterAnotherMinionAttacks !== undefined;\r\n\r\nexport interface AfterThisAttacksCard extends Card {\r\n\tafterThisAttacks(\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnAttackInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasAfterThisAttacks = (card: Card): card is AfterThisAttacksCard =>\r\n\t(card as AfterThisAttacksCard)?.afterThisAttacks !== undefined;\r\n\r\nexport interface OnMinionAttackedCard extends Card {\r\n\tonAttacked(minion: BoardEntity, input: OnMinionAttackedInput): void;\r\n}\r\nexport const hasOnMinionAttacked = (card: Card): card is OnMinionAttackedCard =>\r\n\t(card as OnMinionAttackedCard)?.onAttacked !== undefined;\r\n\r\nexport interface OnSpawnedCard extends Card {\r\n\tonSpawned(minion: BoardEntity, input: OnSpawnInput): void;\r\n}\r\nexport const hasOnSpawned = (card: Card): card is OnSpawnedCard => (card as OnSpawnedCard)?.onSpawned !== undefined;\r\n\r\nexport interface DeityCard extends Card {\r\n\tonAwaken(minion: BoardEntity, input: DeityAwakenInput): void;\r\n}\r\nexport const hasOnAwaken = (card: Card): card is DeityCard => (card as DeityCard)?.onAwaken !== undefined;\r\nexport interface OnSpawnedEnchantmentCard extends Card {\r\n\tonSpawnedEnchantment(minion: BoardEntity, enchantment: BoardEnchantment, input: OnSpawnInput): void;\r\n}\r\nexport const hasOnSpawnedEnchantment = (card: Card): card is OnSpawnedEnchantmentCard =>\r\n\t(card as OnSpawnedEnchantmentCard)?.onSpawnedEnchantment !== undefined;\r\n\r\nexport interface OnOtherSpawnedAuraCard extends Card {\r\n\tonOtherSpawnedAura(minion: BoardEntity, input: OnOtherSpawnAuraInput): void;\r\n}\r\nexport const hasOnOtherAuraSpawned = (card: Card): card is OnOtherSpawnedAuraCard =>\r\n\t(card as OnOtherSpawnedAuraCard)?.onOtherSpawnedAura !== undefined;\r\n\r\nexport interface OnOtherSpawnedCard extends Card {\r\n\tonOtherSpawned(minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput): void;\r\n}\r\nexport const hasOnOtherSpawned = (card: Card): card is OnOtherSpawnedCard =>\r\n\t(card as OnOtherSpawnedCard)?.onOtherSpawned !== undefined;\r\n\r\nexport interface AfterOtherSpawnedCard extends Card {\r\n\tafterOtherSpawned(minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput): void;\r\n}\r\nexport const hasAfterOtherSpawned = (card: Card): card is AfterOtherSpawnedCard =>\r\n\t(card as AfterOtherSpawnedCard)?.afterOtherSpawned !== undefined;\r\n\r\nexport interface OnFriendlyMinionSummonedTrinketCard extends Card {\r\n\tonFriendlyMinionSummoned(trinket: BoardTrinket, input: OnFriendlyMinionSummonedTrinketInput): void;\r\n}\r\nexport const hasOnFriendlyMinionSummonedTrinket = (card: Card): card is OnFriendlyMinionSummonedTrinketCard =>\r\n\t(card as OnFriendlyMinionSummonedTrinketCard)?.onFriendlyMinionSummoned !== undefined;\r\n\r\nexport interface OnDespawnedCard extends Card {\r\n\tonDespawned(minion: BoardEntity, input: OnDespawnInput): void;\r\n}\r\nexport const hasOnDespawned = (card: Card): card is OnDespawnedCard =>\r\n\t(card as OnDespawnedCard)?.onDespawned !== undefined;\r\n\r\nexport const OnDespawnedEnchantmentCard = (card: Card): card is OnDespawnedEnchantmentCard =>\r\n\t(card as OnDespawnedEnchantmentCard)?.onDespawnedEnchantment !== undefined;\r\nexport interface OnDespawnedEnchantmentCard extends Card {\r\n\tonDespawnedEnchantment(minion: BoardEntity, enchantment: BoardEnchantment, input: OnDespawnInput): void;\r\n}\r\nexport const hasOnDespawnedEnchantment = (card: Card): card is OnDespawnedEnchantmentCard =>\r\n\t(card as OnDespawnedEnchantmentCard)?.onDespawnedEnchantment !== undefined;\r\n\r\nexport interface DeathrattleSpawnCard extends Card {\r\n\tdeathrattleSpawn(minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[];\r\n}\r\nexport const hasDeathrattleSpawn = (card: Card): card is DeathrattleSpawnCard =>\r\n\t(card as DeathrattleSpawnCard)?.deathrattleSpawn !== undefined;\r\n\r\n/** Deathrattle that does not return board spawns (hand buffs, stat grants, etc.). */\r\nexport interface DeathrattleEffectCard extends Card {\r\n\tdeathrattleEffect(minion: BoardEntity, input: DeathrattleTriggeredInput): void;\r\n}\r\nexport const hasDeathrattleEffect = (card: Card): card is DeathrattleEffectCard =>\r\n\t(card as DeathrattleEffectCard)?.deathrattleEffect !== undefined;\r\n\r\nexport interface BattlecryCard extends Card {\r\n\t// boolean return type is used only for conditional battlecries (eg cards that only work as battlecries if a specific trinket\r\n\t// is in game)\r\n\tbattlecry(minion: BoardEntity, input: BattlecryInput): boolean;\r\n}\r\nexport const hasBattlecry = (card: Card): card is BattlecryCard => (card as BattlecryCard)?.battlecry !== undefined;\r\n\r\nexport interface RebornEffectCard extends Card {\r\n\trebornEffect(minion: BoardEntity | BoardTrinket, input: RebornEffectInput): void;\r\n}\r\nexport const hasRebornEffect = (card: Card): card is RebornEffectCard =>\r\n\t(card as RebornEffectCard)?.rebornEffect !== undefined;\r\n\r\nexport interface RebornSelfEffectCard extends Card {\r\n\trebornSelfEffect(minion: BoardEntity, input: RebornEffectInput): void;\r\n}\r\nexport const hasRebornSelfEffect = (card: Card): card is RebornSelfEffectCard =>\r\n\t(card as RebornSelfEffectCard)?.rebornSelfEffect !== undefined;\r\n\r\nexport interface BeforeRebornSelfEffectCard extends Card {\r\n\tbeforeRebornSelfEffect(minion: BoardEntity, input: RebornEffectInput): void;\r\n}\r\nexport const hasBeforeRebornSelfEffect = (card: Card): card is BeforeRebornSelfEffectCard =>\r\n\t(card as BeforeRebornSelfEffectCard)?.beforeRebornSelfEffect !== undefined;\r\n\r\n// When a minion is reborn, some attributes need to be transferred to the new minion\r\nexport interface RebornSelfAttributeTransferCard extends Card {\r\n\trebornSelfAttributeTransfer: (keyof BoardEntity)[];\r\n}\r\nexport const hasRebornSelfAttributeTransfer = (card: Card): card is RebornSelfAttributeTransferCard =>\r\n\t(card as RebornSelfAttributeTransferCard)?.rebornSelfAttributeTransfer !== undefined;\r\n\r\nexport interface AfterRebornCard extends Card {\r\n\tafterReborn(minion: BoardEntity | BoardTrinket, input: RebornEffectInput): void;\r\n}\r\nexport const hasAfterReborn = (card: Card): card is AfterRebornCard =>\r\n\t(card as AfterRebornCard)?.afterReborn !== undefined;\r\n\r\nexport interface OnBattlecryTriggeredCard extends Card {\r\n\tonBattlecryTriggered(minion: BoardEntity | BoardTrinket, input: OnBattlecryTriggeredInput): void;\r\n}\r\nexport const hasOnBattlecryTriggered = (card: Card): card is OnBattlecryTriggeredCard =>\r\n\t(card as OnBattlecryTriggeredCard)?.onBattlecryTriggered !== undefined;\r\n\r\nexport interface AvengeCard extends Card {\r\n\tavenge(minion: BoardEntity | BoardTrinket, input: AvengeInput): void | readonly BoardEntity[];\r\n\tbaseAvengeValue(cardId: string): number;\r\n}\r\nexport const hasAvenge = (card: Card): card is AvengeCard => (card as AvengeCard)?.avenge !== undefined;\r\n\r\nexport interface DefaultScriptDataNumCard extends Card {\r\n\tdefaultScriptDataNum(cardId: string): number;\r\n}\r\nexport const hasDefaultScriptDataNum = (card: Card): card is DefaultScriptDataNumCard =>\r\n\t(card as DefaultScriptDataNumCard)?.defaultScriptDataNum !== undefined;\r\n\r\n/** To use when another deathrattle is triggered */\r\nexport interface DeathrattleTriggeredCard extends Card {\r\n\tonDeathrattleTriggered(\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t): void;\r\n}\r\nexport const hasOnDeathrattleTriggered = (card: Card): card is DeathrattleTriggeredCard =>\r\n\t(card as DeathrattleTriggeredCard)?.onDeathrattleTriggered !== undefined;\r\n\r\nexport interface DeathrattleTriggeredEnchantmentCard extends Card {\r\n\tonDeathrattleTriggeredEnchantment(\r\n\t\tenchantedMinion: BoardEntity,\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t): void;\r\n}\r\nexport const hasOnDeathrattleTriggeredEnchantment = (card: Card): card is DeathrattleTriggeredEnchantmentCard =>\r\n\t(card as DeathrattleTriggeredEnchantmentCard)?.onDeathrattleTriggeredEnchantment !== undefined;\r\n\r\n/** Despite the name, this covers all deathrattle effects on an enchantment, not just the spawning ones */\r\nexport interface DeathrattleSpawnEnchantmentCard extends Card {\r\n\tdeathrattleSpawnEnchantmentEffect(\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t): readonly BoardEntity[];\r\n\tcardIds: readonly string[];\r\n}\r\nexport const hasDeathrattleSpawnEnchantment = (card: Card): card is DeathrattleSpawnEnchantmentCard =>\r\n\t(card as DeathrattleSpawnEnchantmentCard)?.deathrattleSpawnEnchantmentEffect !== undefined;\r\n\r\nexport interface OnCardAddedToHandCard extends Card {\r\n\tonCardAddedToHand(entity: BoardEntity | BgsQuestEntity | BoardTrinket, input: OnCardAddedToHandInput): void;\r\n}\r\nexport const hasOnCardAddedToHand = (card: Card): card is OnCardAddedToHandCard =>\r\n\t(card as OnCardAddedToHandCard)?.onCardAddedToHand !== undefined;\r\n\r\nexport interface OnDiscardCard extends Card {\r\n\tonDiscard(entity: BoardEntity | BoardTrinket, input: DiscardInput): void;\r\n}\r\nexport const hasOnDiscard = (card: Card): card is OnDiscardCard => (card as OnDiscardCard)?.onDiscard !== undefined;\r\n\r\nexport interface OnThisDiscardedCard extends Card {\r\n\tonThisDiscarded(card: BoardEntity, input: DiscardInput): void;\r\n}\r\nexport const hasOnThisDiscarded = (card: Card): card is OnThisDiscardedCard =>\r\n\t(card as OnThisDiscardedCard)?.onThisDiscarded !== undefined;\r\n\r\nexport interface EndOfTurnCard extends Card {\r\n\t// Use BattlecryInput because it's the only way end of turn effects are triggered\r\n\tendOfTurn(entity: BoardEntity, input: EndOfTurnInput): void;\r\n}\r\nexport const hasEndOfTurn = (card: Card): card is EndOfTurnCard => (card as EndOfTurnCard)?.endOfTurn !== undefined;\r\nexport type EndOfTurnInput = BattlecryInput;\r\n\r\nexport interface OnDivineShieldUpdatedCard extends Card {\r\n\tonDivineShieldUpdated(entity: BoardEntity | BoardTrinket, input: OnDivineShieldUpdatedInput): void;\r\n}\r\nexport const hasOnDivineShieldUpdated = (card: Card): card is OnDivineShieldUpdatedCard =>\r\n\t(card as OnDivineShieldUpdatedCard)?.onDivineShieldUpdated !== undefined;\r\n\r\nexport interface OnTauntUpdatedCard extends Card {\r\n\tonTauntUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnTauntUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnTauntUpdated = (card: Card): card is OnTauntUpdatedCard =>\r\n\t(card as OnTauntUpdatedCard)?.onTauntUpdated !== undefined;\r\n\r\nexport interface OnRebornUpdatedCard extends Card {\r\n\tonRebornUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnRebornUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnRebornUpdated = (card: Card): card is OnRebornUpdatedCard =>\r\n\t(card as OnRebornUpdatedCard)?.onRebornUpdated !== undefined;\r\n\r\nexport interface OnStealthUpdatedCard extends Card {\r\n\tonStealthUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnStealthUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnStealthUpdated = (card: Card): card is OnStealthUpdatedCard =>\r\n\t(card as OnStealthUpdatedCard)?.onStealthUpdated !== undefined;\r\n\r\nexport interface OnVenomousUpdatedCard extends Card {\r\n\tonVenomousUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnVenomousUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnVenomousUpdated = (card: Card): card is OnVenomousUpdatedCard =>\r\n\t(card as OnVenomousUpdatedCard)?.onVenomousUpdated !== undefined;\r\n\r\nexport interface OnWindfuryUpdatedCard extends Card {\r\n\tonWindfuryUpdated(\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnWindfuryUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnWindfuryUpdated = (card: Card): card is OnWindfuryUpdatedCard =>\r\n\t(card as OnWindfuryUpdatedCard)?.onWindfuryUpdated !== undefined;\r\n\r\nexport interface OnStatsChangedCard extends Card {\r\n\tonStatsChanged(entity: BoardEntity, input: OnStatsChangedInput): void;\r\n}\r\nexport const hasOnStatsChanged = (card: Card): card is OnStatsChangedCard =>\r\n\t(card as OnStatsChangedCard)?.onStatsChanged !== undefined;\r\n\r\nexport interface AfterHeroDamagedCard extends Card {\r\n\tafterHeroDamaged(entity: BoardEntity | BoardTrinket, input: AfterHeroDamagedInput): void;\r\n}\r\nexport const hasAfterHeroDamaged = (card: Card): card is AfterHeroDamagedCard =>\r\n\t(card as AfterHeroDamagedCard)?.afterHeroDamaged !== undefined;\r\n\r\nexport interface OnDamagedCard extends Card {\r\n\tonDamaged(entity: BoardEntity, input: OnDamagedInput): void;\r\n}\r\nexport const hasOnDamaged = (card: Card): card is OnDamagedCard => (card as OnDamagedCard)?.onDamaged !== undefined;\r\n\r\nexport interface AfterDealDamageCard extends Card {\r\n\t// Called whenever damage is dealt, both on the friendly and enemy side\r\n\t// So you need to check the \"friendly\" flag\r\n\t// TODO: the \"after\" here waits for spawns, eg reborn / deathrattle\r\n\t// eg https://replays.firestoneapp.com/?reviewId=05860f41-1ea4-41f8-9c55-b6c854fa5f5a&turn=17&action=10\r\n\t// The reborn Rylak is buffed by Lord of the Ruins\r\n\tafterDealDamage(entity: BoardEntity, input: AfterDealDamageInput): void;\r\n}\r\nexport const hasAfterDealDamage = (card: Card): card is AfterDealDamageCard =>\r\n\t(card as AfterDealDamageCard)?.afterDealDamage !== undefined;\r\n\r\nexport interface AfterFriendlyMinionDamagedTrinketCard extends Card {\r\n\tafterFriendlyMinionDamaged(trinket: BoardTrinket, input: AfterFriendlyMinionDamagedInput): void;\r\n}\r\nexport const hasAfterFriendlyMinionDamagedTrinket = (card: Card): card is AfterFriendlyMinionDamagedTrinketCard =>\r\n\t(card as AfterFriendlyMinionDamagedTrinketCard)?.afterFriendlyMinionDamaged !== undefined;\r\n\r\nexport interface OnDeathCard extends Card {\r\n\tonDeath(entity: BoardEntity, input: OnDeathInput): void;\r\n}\r\nexport const hasOnDeath = (card: Card): card is OnDeathCard => (card as OnDeathCard)?.onDeath !== undefined;\r\n\r\nexport interface OnAfterDeathCard extends Card {\r\n\tonAfterDeath(entity: BoardEntity | BoardTrinket, input: OnAfterDeathInput): void;\r\n}\r\nexport const hasOnAfterDeath = (card: Card): card is OnAfterDeathCard =>\r\n\t(card as OnAfterDeathCard)?.onAfterDeath !== undefined;\r\n\r\n/**\r\n * After any friendly board minion dies (during `applyWheneverMinionDiesEffect`). Filter in the card\r\n * (e.g. only if `input.deadEntity.taunt`). Board minions and trinkets that implement this are dispatched\r\n * from `deathrattle-effects`.\r\n */\r\nexport interface OnAfterFriendlyMinionDeathCard extends Card {\r\n\tonAfterFriendlyMinionDeath(listener: BoardEntity | BoardTrinket, input: OnAfterFriendlyMinionDeathInput): void;\r\n}\r\nexport const hasOnAfterFriendlyMinionDeath = (card: Card): card is OnAfterFriendlyMinionDeathCard =>\r\n\t(card as OnAfterFriendlyMinionDeathCard)?.onAfterFriendlyMinionDeath !== undefined;\r\n\r\nexport interface OnMinionKilledCard extends Card {\r\n\tonMinionKilled(\r\n\t\tentity: BoardEntity,\r\n\t\tinput: OnMinionKilledInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnMinionKilled = (card: Card): card is OnMinionKilledCard =>\r\n\t(card as OnMinionKilledCard)?.onMinionKilled !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeCard extends Card {\r\n\tonBeforeMagnetize(entity: BoardEntity | BoardTrinket, input: OnBeforeMagnetizeInput): void;\r\n}\r\nexport const hasOnBeforeMagnetize = (card: Card): card is OnBeforeMagnetizeCard =>\r\n\t(card as OnBeforeMagnetizeCard)?.onBeforeMagnetize !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeSelfCard extends Card {\r\n\tonBeforeMagnetizeSelf(entity: BoardEntity, input: OnBeforeMagnetizeSelfInput): void;\r\n}\r\nexport const hasOnBeforeMagnetizeSelf = (card: Card): card is OnBeforeMagnetizeSelfCard =>\r\n\t(card as OnBeforeMagnetizeSelfCard)?.onBeforeMagnetizeSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeToSelfCard extends Card {\r\n\tonAfterMagnetizeToSelf(entity: BoardEntity, input: OnAfterMagnetizeSelfInput): void;\r\n}\r\nexport const hasOnAfterMagnetizeToSelf = (card: Card): card is OnAfterMagnetizeToSelfCard =>\r\n\t(card as OnAfterMagnetizeToSelfCard)?.onAfterMagnetizeToSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeSelfCard extends Card {\r\n\tonAfterMagnetizeSelf(entity: BoardEntity, input: OnAfterMagnetizeInput): void;\r\n}\r\nexport const hasOnAfterMagnetizeSelf = (card: Card): card is OnAfterMagnetizeSelfCard =>\r\n\t(card as OnAfterMagnetizeSelfCard)?.onAfterMagnetizeSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeCard extends Card {\r\n\tonAfterMagnetize(entity: BoardEntity | BoardTrinket, input: OnAfterMagnetizeInput): void;\r\n}\r\nexport const hasOnAfterMagnetize = (card: Card): card is OnAfterMagnetizeCard =>\r\n\t(card as OnAfterMagnetizeCard)?.onAfterMagnetize !== undefined;\r\n\r\nexport interface OnSpawnFailCard extends Card {\r\n\tonSpawnFail(entity: BoardEntity, input: OnSpawnFailInput): void;\r\n}\r\nexport const hasOnSpawnFail = (card: Card): card is OnSpawnFailCard =>\r\n\t(card as OnSpawnFailCard)?.onSpawnFail !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnMeCard extends Card {\r\n\tplayedBloodGemsOnMe(entity: BoardEntity, input: PlayedBloodGemsOnMeInput): void;\r\n}\r\nexport const hasPlayedBloodGemsOnMe = (card: Card): card is PlayedBloodGemsOnMeCard =>\r\n\t(card as PlayedBloodGemsOnMeCard)?.playedBloodGemsOnMe !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnAnyCard extends Card {\r\n\tplayedBloodGemsOnAny(entity: BoardEntity, input: PlayedBloodGemsOnAnyInput): void;\r\n}\r\nexport const hasPlayedBloodGemsOnAny = (card: Card): card is PlayedBloodGemsOnAnyCard =>\r\n\t(card as PlayedBloodGemsOnAnyCard)?.playedBloodGemsOnAny !== undefined;\r\n\r\nexport interface OnGlobalInfoUpdatedCard extends Card {\r\n\tonGlobalInfoUpdated(entity: BoardEntity, input: OnGlobalInfoUpdatedInput): void;\r\n}\r\nexport const hasOnGlobalInfoUpdated = (card: Card): card is OnGlobalInfoUpdatedCard =>\r\n\t(card as OnGlobalInfoUpdatedCard)?.onGlobalInfoUpdated !== undefined;\r\n\r\nexport interface OnGlobalInfoUpdatedEnchantmentCard extends Card {\r\n\tonGlobalInfoUpdatedEnchantment(\r\n\t\tentity: BoardEntity,\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tinput: OnGlobalInfoUpdatedInput,\r\n\t): void;\r\n}\r\nexport const hasOnGlobalInfoUpdatedEnchantment = (card: Card): card is OnGlobalInfoUpdatedEnchantmentCard =>\r\n\t(card as OnGlobalInfoUpdatedEnchantmentCard)?.onGlobalInfoUpdatedEnchantment !== undefined;\r\n\r\nexport interface OnGildedCard extends Card {\r\n\tonGilded(entity: BoardEntity, input: OnGildedInput): void;\r\n}\r\nexport const hasOnGilded = (card: Card): card is OnGildedCard => (card as OnGildedCard)?.onGilded !== undefined;\r\n\r\nexport interface OnSpawnFailInput {\r\n\tfailedSpawn: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface DeityAwakenInput {\r\n\thero: BgsPlayerEntity;\r\n\tboard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface DiscardInput {\r\n\tdiscarded: BoardEntity;\r\n\thero: BgsPlayerEntity;\r\n\tboard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface CastSpellInput {\r\n\tspellCardId: string;\r\n\tsource: BoardEntity | BoardTrinket | BgsPlayerEntity;\r\n\ttarget: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\nexport interface OnDamagedInput {\r\n\tdamagedEntity: BoardEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -17,7 +17,7 @@ exports.Butchering = {
17
17
  }
18
18
  target.health = 0;
19
19
  target.definitelyDead = true;
20
- const { attack, health } = (0, utils_2.withTavernSpellStatBuff)(input.hero, 5, 0, input.gameState.allCards, input.spellCardId);
20
+ const { attack, health } = (0, utils_2.withTavernSpellStatBuff)(input.hero, 8, 0, input.gameState.allCards, input.spellCardId);
21
21
  (0, global_info_helpers_1.increaseUndeadAttackBonus)(input.hero, input.board, input.hero, attack, input.gameState);
22
22
  (0, global_info_helpers_1.increaseUndeadHealthBonus)(input.hero, input.board, input.hero, health, input.gameState);
23
23
  },
@@ -1 +1 @@
1
- {"version":3,"file":"butchering.js","sourceRoot":"","sources":["../../../../src/cards/impl/bg-spell/butchering.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAEpD,mDAAqD;AACrD,iFAA+G;AAC/G,0CAA0E;AAG7D,QAAA,UAAU,GAAoB;IAC1C,OAAO,EAAE,YAA6B;IACtC,eAAe,EAAE,CAAC,YAAoB,EAAE,KAAqB,EAAE,EAAE;QAChE,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,GAAG,CAAC;YACZ,CAAC,CAAC,CAAC,cAAc;YACjB,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACjG,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO;SACP;QACD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;QAE7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,+BAAuB,EACjD,KAAK,CAAC,IAAI,EACV,CAAC,EACD,CAAC,EACD,KAAK,CAAC,SAAS,CAAC,QAAQ,EACxB,KAAK,CAAC,WAAW,CACjB,CAAC;QACF,IAAA,+CAAyB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACxF,IAAA,+CAAyB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { increaseUndeadAttackBonus, increaseUndeadHealthBonus } from '../../../simulation/global-info-helpers';\r\nimport { hasCorrectTribe, withTavernSpellStatBuff } from '../../../utils';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\n\r\nexport const Butchering: TavernSpellCard = {\r\n\tcardIds: [CardIds.Butchering_BG28_604],\r\n\tcastTavernSpell: (_spellCardId: string, input: CastSpellInput) => {\r\n\t\tconst undeadTargets = input.board.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.health > 0 &&\r\n\t\t\t\t!e.definitelyDead &&\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.UNDEAD, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tconst target = input.target && undeadTargets.includes(input.target) ? input.target : pickRandom(undeadTargets);\r\n\t\tif (!target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttarget.health = 0;\r\n\t\ttarget.definitelyDead = true;\r\n\r\n\t\tconst { attack, health } = withTavernSpellStatBuff(\r\n\t\t\tinput.hero,\r\n\t\t\t5,\r\n\t\t\t0,\r\n\t\t\tinput.gameState.allCards,\r\n\t\t\tinput.spellCardId,\r\n\t\t);\r\n\t\tincreaseUndeadAttackBonus(input.hero, input.board, input.hero, attack, input.gameState);\r\n\t\tincreaseUndeadHealthBonus(input.hero, input.board, input.hero, health, input.gameState);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"butchering.js","sourceRoot":"","sources":["../../../../src/cards/impl/bg-spell/butchering.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAEpD,mDAAqD;AACrD,iFAA+G;AAC/G,0CAA0E;AAG7D,QAAA,UAAU,GAAoB;IAC1C,OAAO,EAAE,YAA6B;IACtC,eAAe,EAAE,CAAC,YAAoB,EAAE,KAAqB,EAAE,EAAE;QAChE,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,GAAG,CAAC;YACZ,CAAC,CAAC,CAAC,cAAc;YACjB,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACjG,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO;SACP;QACD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;QAE7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,+BAAuB,EACjD,KAAK,CAAC,IAAI,EACV,CAAC,EACD,CAAC,EACD,KAAK,CAAC,SAAS,CAAC,QAAQ,EACxB,KAAK,CAAC,WAAW,CACjB,CAAC;QACF,IAAA,+CAAyB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACxF,IAAA,+CAAyB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { increaseUndeadAttackBonus, increaseUndeadHealthBonus } from '../../../simulation/global-info-helpers';\r\nimport { hasCorrectTribe, withTavernSpellStatBuff } from '../../../utils';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\n\r\nexport const Butchering: TavernSpellCard = {\r\n\tcardIds: [CardIds.Butchering_BG28_604],\r\n\tcastTavernSpell: (_spellCardId: string, input: CastSpellInput) => {\r\n\t\tconst undeadTargets = input.board.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te.health > 0 &&\r\n\t\t\t\t!e.definitelyDead &&\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.UNDEAD, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tconst target = input.target && undeadTargets.includes(input.target) ? input.target : pickRandom(undeadTargets);\r\n\t\tif (!target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttarget.health = 0;\r\n\t\ttarget.definitelyDead = true;\r\n\r\n\t\tconst { attack, health } = withTavernSpellStatBuff(\r\n\t\t\tinput.hero,\r\n\t\t\t8,\r\n\t\t\t0,\r\n\t\t\tinput.gameState.allCards,\r\n\t\t\tinput.spellCardId,\r\n\t\t);\r\n\t\tincreaseUndeadAttackBonus(input.hero, input.board, input.hero, attack, input.gameState);\r\n\t\tincreaseUndeadHealthBonus(input.hero, input.board, input.hero, health, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -7,7 +7,7 @@ exports.FragrantPhylacteryEnchantment = {
7
7
  deathrattleSpawnEnchantmentEffect: (enchantment, minion, input) => {
8
8
  const targets = input.boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead && e !== enchantment && e !== minion);
9
9
  for (const target of targets) {
10
- (0, stats_1.modifyStats)(target, input.deadEntity, input.deadEntity.attack, input.deadEntity.maxHealth, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.gameState);
10
+ (0, stats_1.modifyStats)(target, input.deadEntity, input.deadEntity.maxAttack, input.deadEntity.maxHealth, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.gameState);
11
11
  }
12
12
  return null;
13
13
  },
@@ -1 +1 @@
1
- {"version":3,"file":"fragrant-phylactery-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/fragrant-phylactery-enchantment.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,6BAA6B,GAAoC;IAC7E,OAAO,EAAE,mBAAmE;IAC5E,iCAAiC,EAAE,CAClC,WAA0E,EAC1E,MAAsC,EACtC,KAAgC,EAC/B,EAAE;QAGH,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,MAAM,CAC7E,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EACV,MAAM,EACN,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,CAAC,MAAM,EACvB,KAAK,CAAC,UAAU,CAAC,SAAS,EAC1B,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,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 { modifyStats } from '../../../simulation/stats';\r\nimport { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\n\r\nexport const FragrantPhylacteryEnchantment: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: [CardIds.TamsinRoame_ImpendingSacrificeEnchantment_BG20_HERO_282e2],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: { cardId: string; originEntityId?: number; repeats?: number },\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => {\r\n\t\t// Doesn't resurrect dead minions\r\n\t\t// 33.4 https://replays.firestoneapp.com/?reviewId=44c91f87-17a0-462c-8f24-3002cbcd42d5&turn=21&action=1\r\n\t\tconst targets = input.boardWithDeadEntity.filter(\r\n\t\t\t(e) => e.health > 0 && !e.definitelyDead && e !== enchantment && e !== minion,\r\n\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.deadEntity,\r\n\t\t\t\tinput.deadEntity.attack,\r\n\t\t\t\tinput.deadEntity.maxHealth,\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\treturn null;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"fragrant-phylactery-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/hero-power/fragrant-phylactery-enchantment.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,6BAA6B,GAAoC;IAC7E,OAAO,EAAE,mBAAmE;IAC5E,iCAAiC,EAAE,CAClC,WAA0E,EAC1E,MAAsC,EACtC,KAAgC,EAC/B,EAAE;QAGH,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,MAAM,CAC7E,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EACV,MAAM,EACN,KAAK,CAAC,UAAU,EAEhB,KAAK,CAAC,UAAU,CAAC,SAAS,EAC1B,KAAK,CAAC,UAAU,CAAC,SAAS,EAC1B,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,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 { modifyStats } from '../../../simulation/stats';\r\nimport { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\n\r\nexport const FragrantPhylacteryEnchantment: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: [CardIds.TamsinRoame_ImpendingSacrificeEnchantment_BG20_HERO_282e2],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: { cardId: string; originEntityId?: number; repeats?: number },\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => {\r\n\t\t// Doesn't resurrect dead minions\r\n\t\t// 33.4 https://replays.firestoneapp.com/?reviewId=44c91f87-17a0-462c-8f24-3002cbcd42d5&turn=21&action=1\r\n\t\tconst targets = input.boardWithDeadEntity.filter(\r\n\t\t\t(e) => e.health > 0 && !e.definitelyDead && e !== enchantment && e !== minion,\r\n\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.deadEntity,\r\n\t\t\t\t// So that it's not affected by the removeAura stuff\r\n\t\t\t\tinput.deadEntity.maxAttack,\r\n\t\t\t\tinput.deadEntity.maxHealth,\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\treturn null;\r\n\t},\r\n};\r\n"]}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BarrierBanshee = void 0;
4
4
  const divine_shield_1 = require("../../../keywords/divine-shield");
5
5
  const stats_1 = require("../../../simulation/stats");
6
- const bansheeBuff = 7;
6
+ const bansheeBuff = 8;
7
7
  exports.BarrierBanshee = {
8
8
  cardIds: ["BG36_514", "BG36_514_G"],
9
9
  afterReborn: (minion, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"barrier-banshee.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/barrier-banshee.ts"],"names":[],"mappings":";;;AAQA,mEAAqE;AAErE,qDAAwD;AAIxD,MAAM,WAAW,GAAG,CAAC,CAAC;AAET,QAAA,cAAc,GAAoB;IAC9C,OAAO,EAAE,0BAAoE;IAC7E,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAwB,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAA,kCAAkB,EACjB,MAAM,EACN,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,iBAAiB,EACvB,IAAI,EACJ,KAAK,CAAC,SAAS,CACf,CAAC;QACF,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,IAAI,EAClB,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Barrier Banshee (Tier 5, 7/7)\r\n * After a friendly minion is Reborn, gain Divine Shield and +7/+7.\r\n *\r\n * Golden Barrier Banshee (Tier 5, 14/14)\r\n * After a friendly minion is Reborn, gain Divine Shield and +14/+14.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { AfterRebornCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nconst bansheeBuff = 7;\r\n\r\nexport const BarrierBanshee: AfterRebornCard = {\r\n\tcardIds: [CardIds.BarrierBanshee_BG36_514, CardIds.BarrierBanshee_BG36_514_G],\r\n\tafterReborn: (minion: BoardEntity, input: RebornEffectInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.BarrierBanshee_BG36_514_G ? 2 : 1;\r\n\t\tupdateDivineShield(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithKilledMinion,\r\n\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\tinput.opponentBoardHero,\r\n\t\t\ttrue,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tbansheeBuff * mult,\r\n\t\t\tbansheeBuff * mult,\r\n\t\t\tinput.boardWithKilledMinion,\r\n\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"barrier-banshee.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/barrier-banshee.ts"],"names":[],"mappings":";;;AAQA,mEAAqE;AAGrE,qDAAwD;AAGxD,MAAM,WAAW,GAAG,CAAC,CAAC;AAET,QAAA,cAAc,GAAoB;IAC9C,OAAO,EAAE,0BAAoE;IAC7E,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAwB,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAA,kCAAkB,EACjB,MAAM,EACN,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,iBAAiB,EACvB,IAAI,EACJ,KAAK,CAAC,SAAS,CACf,CAAC;QACF,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,IAAI,EAClB,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Barrier Banshee (Tier 5, 7/7)\r\n * After a friendly minion is Reborn, gain Divine Shield and +7/+7.\r\n *\r\n * Golden Barrier Banshee (Tier 5, 14/14)\r\n * After a friendly minion is Reborn, gain Divine Shield and +14/+14.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { AfterRebornCard } from '../../card.interface';\r\n\r\nconst bansheeBuff = 8;\r\n\r\nexport const BarrierBanshee: AfterRebornCard = {\r\n\tcardIds: [CardIds.BarrierBanshee_BG36_514, CardIds.BarrierBanshee_BG36_514_G],\r\n\tafterReborn: (minion: BoardEntity, input: RebornEffectInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.BarrierBanshee_BG36_514_G ? 2 : 1;\r\n\t\tupdateDivineShield(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithKilledMinion,\r\n\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\tinput.opponentBoardHero,\r\n\t\t\ttrue,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tbansheeBuff * mult,\r\n\t\t\tbansheeBuff * mult,\r\n\t\t\tinput.boardWithKilledMinion,\r\n\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
@@ -52,10 +52,10 @@ exports.DarkParadoxRally = {
52
52
  },
53
53
  };
54
54
  const battlecryAuraPerTrigger = (minion) => {
55
- const golden = minion.cardId === "BG36_360_Gt6";
55
+ const mult = minion.cardId === "BG36_360_Gt6" ? 2 : 1;
56
56
  return {
57
- attack: minion.scriptDataNum1 || (golden ? 4 : 2),
58
- health: minion.scriptDataNum2 || (golden ? 4 : 2),
57
+ attack: 3 * mult,
58
+ health: 3 * mult,
59
59
  };
60
60
  };
61
61
  exports.DarkParadoxBattlecry = {
@@ -1 +1 @@
1
- {"version":3,"file":"dark-paradox.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/dark-paradox.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Dark Paradox variants with combat behaviour.\r\n *\r\n * Rally (BG36_360t5): Get a random minion of your most common type.\r\n * Battlecry aura (BG36_360t6): Has +2/+2 for each Battlecry you've triggered this game (wherever this is).\r\n * Golem (BG36_360t9): Deathrattle: Summon a Golem with this minion's stats.\r\n */\r\nimport { ALL_BG_RACES, 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 { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getEffectiveTribesForEntity } from '../../../utils';\r\nimport {\r\n\tDeathrattleSpawnCard,\r\n\tOnDespawnedCard,\r\n\tOnGlobalInfoUpdatedCard,\r\n\tOnSpawnedCard,\r\n\tRallyCard,\r\n} from '../../card.interface';\r\n\r\nexport const DarkParadoxRally: RallyCard = {\r\n\tcardIds: [CardIds.DarkParadox_DarkParadoxToken_BG36_360t5, CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt5],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tconst copies = minion.cardId === CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt5 ? 2 : 1;\r\n\t\tconst tribeCounts = new Map<Race, number>();\r\n\t\tfor (const entity of input.attackingBoard) {\r\n\t\t\tif (entity.health <= 0 || entity.definitelyDead) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tconst tribes = getEffectiveTribesForEntity(\r\n\t\t\t\tentity,\r\n\t\t\t\tinput.attackingHero,\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\tfor (const tribe of tribes) {\r\n\t\t\t\tif (tribe === Race.ALL) {\r\n\t\t\t\t\tfor (const bgRace of ALL_BG_RACES) {\r\n\t\t\t\t\t\ttribeCounts.set(bgRace, (tribeCounts.get(bgRace) ?? 0) + 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttribeCounts.set(tribe, (tribeCounts.get(tribe) ?? 0) + 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet mostCommonTribe: Race | null = null;\r\n\t\tlet maxCount = 0;\r\n\t\tfor (const [tribe, count] of tribeCounts) {\r\n\t\t\tif (count > maxCount) {\r\n\t\t\t\tmaxCount = count;\r\n\t\t\t\tmostCommonTribe = tribe;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (mostCommonTribe != null) {\r\n\t\t\tconst cardsToAdd = [];\r\n\t\t\tfor (let i = 0; i < copies; i++) {\r\n\t\t\t\tconst cardId = input.gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\t\tmostCommonTribe,\r\n\t\t\t\t\tinput.attackingHero.tavernTier ?? 6,\r\n\t\t\t\t);\r\n\t\t\t\tif (cardId) {\r\n\t\t\t\t\tcardsToAdd.push(cardId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (cardsToAdd.length) {\r\n\t\t\t\taddCardsInHand(input.attackingHero, input.attackingBoard, cardsToAdd, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n\r\nconst battlecryAuraPerTrigger = (minion: BoardEntity): { attack: number; health: number } => {\r\n\tconst golden = minion.cardId === CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt6;\r\n\treturn {\r\n\t\tattack: minion.scriptDataNum1 || (golden ? 4 : 2),\r\n\t\thealth: minion.scriptDataNum2 || (golden ? 4 : 2),\r\n\t};\r\n};\r\n\r\nexport const DarkParadoxBattlecry: OnSpawnedCard & OnDespawnedCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.DarkParadox_DarkParadoxToken_BG36_360t6, CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt6],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst { attack, health } = battlecryAuraPerTrigger(minion);\r\n\t\tconst triggers = input.hero.globalInfo.BattlecriesTriggeredThisGame ?? 0;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tnull,\r\n\t\t\tinput.applyAttackAuras ? attack * triggers : 0,\r\n\t\t\tinput.applyHealthAuras ? health * triggers : 0,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.gameState,\r\n\t\t\tfalse,\r\n\t\t);\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst { attack, health } = battlecryAuraPerTrigger(minion);\r\n\t\tconst triggers = input.hero.globalInfo.BattlecriesTriggeredThisGame ?? 0;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - attack * triggers);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(Math.min(minion.health, 1), minion.health - health * triggers);\r\n\t\t}\r\n\t},\r\n\tonGlobalInfoUpdated: (minion: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\tconst { attack, health } = battlecryAuraPerTrigger(minion);\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'BattlecriesTriggeredThisGame') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tminion.attack += delta * attack;\r\n\t\t\t\tminion.maxAttack = minion.attack;\r\n\t\t\t\tminion.health += delta * health;\r\n\t\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n\r\nexport const DarkParadoxGolem: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.DarkParadox_DarkParadoxToken_BG36_360t9, CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt9],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt9 ? 2 : 1;\r\n\t\tconst spawns = simplifiedSpawnEntities(CardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t, 1, input);\r\n\t\tfor (const spawn of spawns) {\r\n\t\t\tspawn.attack = (minion.maxAttack ?? minion.attack) * mult;\r\n\t\t\tspawn.maxAttack = spawn.attack;\r\n\t\t\tspawn.health = (minion.maxHealth ?? minion.health) * mult;\r\n\t\t\tspawn.maxHealth = spawn.health;\r\n\t\t}\r\n\t\treturn spawns;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"dark-paradox.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/dark-paradox.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Dark Paradox variants with combat behaviour.\r\n *\r\n * Rally (BG36_360t5): Get a random minion of your most common type.\r\n * Battlecry aura (BG36_360t6): Has +2/+2 for each Battlecry you've triggered this game (wherever this is).\r\n * Golem (BG36_360t9): Deathrattle: Summon a Golem with this minion's stats.\r\n */\r\nimport { ALL_BG_RACES, 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 { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getEffectiveTribesForEntity } from '../../../utils';\r\nimport {\r\n\tDeathrattleSpawnCard,\r\n\tOnDespawnedCard,\r\n\tOnGlobalInfoUpdatedCard,\r\n\tOnSpawnedCard,\r\n\tRallyCard,\r\n} from '../../card.interface';\r\n\r\nexport const DarkParadoxRally: RallyCard = {\r\n\tcardIds: [CardIds.DarkParadox_DarkParadoxToken_BG36_360t5, CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt5],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tconst copies = minion.cardId === CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt5 ? 2 : 1;\r\n\t\tconst tribeCounts = new Map<Race, number>();\r\n\t\tfor (const entity of input.attackingBoard) {\r\n\t\t\tif (entity.health <= 0 || entity.definitelyDead) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tconst tribes = getEffectiveTribesForEntity(\r\n\t\t\t\tentity,\r\n\t\t\t\tinput.attackingHero,\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\tfor (const tribe of tribes) {\r\n\t\t\t\tif (tribe === Race.ALL) {\r\n\t\t\t\t\tfor (const bgRace of ALL_BG_RACES) {\r\n\t\t\t\t\t\ttribeCounts.set(bgRace, (tribeCounts.get(bgRace) ?? 0) + 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttribeCounts.set(tribe, (tribeCounts.get(tribe) ?? 0) + 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet mostCommonTribe: Race | null = null;\r\n\t\tlet maxCount = 0;\r\n\t\tfor (const [tribe, count] of tribeCounts) {\r\n\t\t\tif (count > maxCount) {\r\n\t\t\t\tmaxCount = count;\r\n\t\t\t\tmostCommonTribe = tribe;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (mostCommonTribe != null) {\r\n\t\t\tconst cardsToAdd = [];\r\n\t\t\tfor (let i = 0; i < copies; i++) {\r\n\t\t\t\tconst cardId = input.gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\t\tmostCommonTribe,\r\n\t\t\t\t\tinput.attackingHero.tavernTier ?? 6,\r\n\t\t\t\t);\r\n\t\t\t\tif (cardId) {\r\n\t\t\t\t\tcardsToAdd.push(cardId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (cardsToAdd.length) {\r\n\t\t\t\taddCardsInHand(input.attackingHero, input.attackingBoard, cardsToAdd, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n\r\nconst battlecryAuraPerTrigger = (minion: BoardEntity): { attack: number; health: number } => {\r\n\tconst mult = minion.cardId === CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt6 ? 2 : 1;\r\n\treturn {\r\n\t\tattack: 3 * mult,\r\n\t\thealth: 3 * mult,\r\n\t};\r\n};\r\n\r\nexport const DarkParadoxBattlecry: OnSpawnedCard & OnDespawnedCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.DarkParadox_DarkParadoxToken_BG36_360t6, CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt6],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst { attack, health } = battlecryAuraPerTrigger(minion);\r\n\t\tconst triggers = input.hero.globalInfo.BattlecriesTriggeredThisGame ?? 0;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tnull,\r\n\t\t\tinput.applyAttackAuras ? attack * triggers : 0,\r\n\t\t\tinput.applyHealthAuras ? health * triggers : 0,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.gameState,\r\n\t\t\tfalse,\r\n\t\t);\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst { attack, health } = battlecryAuraPerTrigger(minion);\r\n\t\tconst triggers = input.hero.globalInfo.BattlecriesTriggeredThisGame ?? 0;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - attack * triggers);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(Math.min(minion.health, 1), minion.health - health * triggers);\r\n\t\t}\r\n\t},\r\n\tonGlobalInfoUpdated: (minion: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\tconst { attack, health } = battlecryAuraPerTrigger(minion);\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'BattlecriesTriggeredThisGame') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tminion.attack += delta * attack;\r\n\t\t\t\tminion.maxAttack = minion.attack;\r\n\t\t\t\tminion.health += delta * health;\r\n\t\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n\r\nexport const DarkParadoxGolem: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.DarkParadox_DarkParadoxToken_BG36_360t9, CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt9],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.DarkParadox_DarkParadoxToken_BG36_360_Gt9 ? 2 : 1;\r\n\t\tconst spawns = simplifiedSpawnEntities(CardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t, 1, input);\r\n\t\tfor (const spawn of spawns) {\r\n\t\t\tspawn.attack = (minion.maxAttack ?? minion.attack) * mult;\r\n\t\t\tspawn.maxAttack = spawn.attack;\r\n\t\t\tspawn.health = (minion.maxHealth ?? minion.health) * mult;\r\n\t\t\tspawn.maxHealth = spawn.health;\r\n\t\t}\r\n\t\treturn spawns;\r\n\t},\r\n};\r\n"]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExpertAviator = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
4
5
  const hand_minion_priority_1 = require("../../../services/hand-minion-priority");
5
6
  const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
6
7
  const spawns_1 = require("../../../simulation/spawns");
@@ -10,7 +11,8 @@ exports.ExpertAviator = {
10
11
  rally: (minion, input) => {
11
12
  const mult = minion.cardId === "BG34_140_G" ? 2 : 1;
12
13
  const allCards = input.gameState.allCards;
13
- const targets = (0, hand_minion_priority_1.getHighestAttackHandMinions)(input.attackingHero.hand, mult, (e) => !!e.maxHealth && (0, hand_minion_priority_1.isHandMinionCandidate)(e, (id) => { var _a; return (_a = allCards.getCard(id).type) === null || _a === void 0 ? void 0 : _a.toUpperCase(); }));
14
+ const candidates = input.attackingHero.hand.filter((e) => (0, utils_1.hasCorrectTribe)(e, input.attackingHero, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards));
15
+ const targets = (0, hand_minion_priority_1.getHighestAttackHandMinions)(candidates, mult, (e) => !!e.maxHealth && (0, hand_minion_priority_1.isHandMinionCandidate)(e, (id) => { var _a; return (_a = allCards.getCard(id).type) === null || _a === void 0 ? void 0 : _a.toUpperCase(); }));
14
16
  for (const target of targets) {
15
17
  if (target.locked) {
16
18
  continue;
@@ -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,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"]}
1
+ {"version":3,"file":"expert-aviator.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/expert-aviator.ts"],"names":[],"mappings":";;;AAOA,iEAAoD;AAGpD,iFAA4G;AAE5G,+EAAiF;AAEjF,uDAAiE;AACjE,0CAA6D;AAGhD,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,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxD,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,aAAa,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzG,CAAC;QACF,MAAM,OAAO,GAAG,IAAA,kDAA2B,EAC1C,UAAU,EACV,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 { Race } from '@firestone-hs/reference-data';\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, hasCorrectTribe } 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 candidates = input.attackingHero.hand.filter((e) =>\r\n\t\t\thasCorrectTribe(e, input.attackingHero, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tconst targets = getHighestAttackHandMinions(\r\n\t\t\tcandidates,\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"]}
@@ -17,11 +17,13 @@ exports.HeroicBroodmother = {
17
17
  break;
18
18
  }
19
19
  minion.attackImmediately = true;
20
- (0, attack_1.simulateAttack)(input.playerBoard, input.playerEntity, input.opponentBoard, input.opponentEntity, input.gameState);
20
+ (0, attack_1.simulateAttack)(input.playerBoard, input.playerEntity, input.opponentBoard, input.opponentEntity, input.gameState, {
21
+ skipSummonWhenSpace: true,
22
+ });
21
23
  minion.attackImmediately = false;
22
24
  minion.hasAttacked = previousHasAttacked;
23
25
  }
24
- return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
26
+ return { hasTriggered: true, shouldRecomputeCurrentAttacker: true, skipSummonsWhenSpace: true };
25
27
  },
26
28
  };
27
29
  //# sourceMappingURL=heroic-broodmother.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"heroic-broodmother.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/heroic-broodmother.ts"],"names":[],"mappings":";;;AAQA,mEAAqE;AACrE,uDAA4D;AAM/C,QAAA,iBAAiB,GAAkC;IAC/D,OAAO,EAAE,0BAA0E;IACnF,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE;QACpD,IAAA,kCAAkB,EAAC,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClH,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;gBAC/E,MAAM;aACN;YACD,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAChC,IAAA,uBAAc,EACb,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;YACjC,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;SACzC;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Heroic Broodmother (Tier 6, 7/7)\r\n * Rally: Gain Divine Shield. Start of Combat: Attack immediately.\r\n *\r\n * Golden Heroic Broodmother (Tier 6, 14/14)\r\n * Rally: Gain Divine Shield. Start of Combat: Attack immediately twice.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { simulateAttack } from '../../../simulation/attack';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { RallyCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const HeroicBroodmother: RallyCard & StartOfCombatCard = {\r\n\tcardIds: [CardIds.HeroicBroodmother_BG36_849, CardIds.HeroicBroodmother_BG36_849_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tupdateDivineShield(minion, input.attackingBoard, input.attackingHero, input.defendingHero, true, input.gameState);\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst attacks = minion.cardId === CardIds.HeroicBroodmother_BG36_849_G ? 2 : 1;\r\n\t\tconst previousHasAttacked = minion.hasAttacked;\r\n\t\tfor (let i = 0; i < attacks; i++) {\r\n\t\t\tif (minion.health <= 0 || minion.definitelyDead || !input.opponentBoard.length) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tminion.attackImmediately = true;\r\n\t\t\tsimulateAttack(\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentBoard,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tminion.attackImmediately = false;\r\n\t\t\tminion.hasAttacked = previousHasAttacked;\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: true };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"heroic-broodmother.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/heroic-broodmother.ts"],"names":[],"mappings":";;;AAQA,mEAAqE;AAErE,uDAA4D;AAK/C,QAAA,iBAAiB,GAAkC;IAC/D,OAAO,EAAE,0BAA0E;IACnF,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE;QACpD,IAAA,kCAAkB,EACjB,MAAM,EACN,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,EACnB,IAAI,EACJ,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;gBAC/E,MAAM;aACN;YACD,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAChC,IAAA,uBAAc,EACb,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,EACf;gBACC,mBAAmB,EAAE,IAAI;aACzB,CACD,CAAC;YACF,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;YACjC,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;SACzC;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IACjG,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Heroic Broodmother (Tier 6, 7/7)\r\n * Rally: Gain Divine Shield. Start of Combat: Attack immediately.\r\n *\r\n * Golden Heroic Broodmother (Tier 6, 14/14)\r\n * Rally: Gain Divine Shield. Start of Combat: Attack immediately twice.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { simulateAttack } from '../../../simulation/attack';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { RallyCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const HeroicBroodmother: RallyCard & StartOfCombatCard = {\r\n\tcardIds: [CardIds.HeroicBroodmother_BG36_849, CardIds.HeroicBroodmother_BG36_849_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tupdateDivineShield(\r\n\t\t\tminion,\r\n\t\t\tinput.attackingBoard,\r\n\t\t\tinput.attackingHero,\r\n\t\t\tinput.defendingHero,\r\n\t\t\ttrue,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst attacks = minion.cardId === CardIds.HeroicBroodmother_BG36_849_G ? 2 : 1;\r\n\t\tconst previousHasAttacked = minion.hasAttacked;\r\n\t\tfor (let i = 0; i < attacks; i++) {\r\n\t\t\tif (minion.health <= 0 || minion.definitelyDead || !input.opponentBoard.length) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tminion.attackImmediately = true;\r\n\t\t\tsimulateAttack(\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentBoard,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t\t{\r\n\t\t\t\t\tskipSummonWhenSpace: true,\r\n\t\t\t\t},\r\n\t\t\t);\r\n\t\t\tminion.attackImmediately = false;\r\n\t\t\tminion.hasAttacked = previousHasAttacked;\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: true, skipSummonsWhenSpace: true };\r\n\t},\r\n};\r\n"]}
@@ -5,8 +5,9 @@ const stats_1 = require("../../../simulation/stats");
5
5
  exports.Hopebringer = {
6
6
  cardIds: ["BG36_364", "BG36_364_G"],
7
7
  startOfCombat: (minion, input) => {
8
- const atk = minion.scriptDataNum1 || (minion.cardId === "BG36_364_G" ? 6 : 3);
9
- const hp = minion.scriptDataNum2 || atk;
8
+ const mult = minion.cardId === "BG36_364_G" ? 2 : 1;
9
+ const atk = 4 * mult;
10
+ const hp = 3 * mult;
10
11
  for (const target of input.playerBoard) {
11
12
  (0, stats_1.modifyStats)(target, minion, atk, hp, input.playerBoard, input.playerEntity, input.gameState);
12
13
  }
@@ -16,9 +17,11 @@ exports.Hopebringer = {
16
17
  if (input.newValue) {
17
18
  return;
18
19
  }
19
- const step = minion.cardId === "BG36_364_G" ? 6 : 3;
20
- minion.scriptDataNum1 = (minion.scriptDataNum1 || step) + step;
21
- minion.scriptDataNum2 = (minion.scriptDataNum2 || step) + step;
20
+ const mult = minion.cardId === "BG36_364_G" ? 2 : 1;
21
+ const atk = (minion.scriptDataNum1 || 4 * mult) + 4 * mult;
22
+ const hp = (minion.scriptDataNum2 || 3 * mult) + 3 * mult;
23
+ minion.scriptDataNum1 = atk;
24
+ minion.scriptDataNum2 = hp;
22
25
  },
23
26
  };
24
27
  //# sourceMappingURL=hopebringer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hopebringer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/hopebringer.ts"],"names":[],"mappings":";;;AAYA,qDAAwD;AAG3C,QAAA,WAAW,GAAkD;IACzE,OAAO,EAAE,0BAA8D;IACvE,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;YACvC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SAC7F;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,qBAAqB,EAAE,CAAC,MAAmB,EAAE,KAAiC,EAAE,EAAE;QACjF,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnB,OAAO;SACP;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;QAC/D,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;IAChE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Hopebringer (Tier 5, 3/3)\r\n * Start of Combat: Give your minions +3/+3.\r\n * Permanently improves after a friendly minion loses Divine Shield.\r\n *\r\n * Golden Hopebringer (Tier 5, 6/6)\r\n * Start of Combat: Give your minions +6/+6.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { OnDivineShieldUpdatedInput } from '../../../keywords/divine-shield';\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 { OnDivineShieldUpdatedCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const Hopebringer: StartOfCombatCard & OnDivineShieldUpdatedCard = {\r\n\tcardIds: [CardIds.Hopebringer_BG36_364, CardIds.Hopebringer_BG36_364_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst atk = minion.scriptDataNum1 || (minion.cardId === CardIds.Hopebringer_BG36_364_G ? 6 : 3);\r\n\t\tconst hp = minion.scriptDataNum2 || atk;\r\n\t\tfor (const target of input.playerBoard) {\r\n\t\t\tmodifyStats(target, minion, atk, hp, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\tonDivineShieldUpdated: (minion: BoardEntity, input: OnDivineShieldUpdatedInput) => {\r\n\t\tif (input.newValue) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst step = minion.cardId === CardIds.Hopebringer_BG36_364_G ? 6 : 3;\r\n\t\tminion.scriptDataNum1 = (minion.scriptDataNum1 || step) + step;\r\n\t\tminion.scriptDataNum2 = (minion.scriptDataNum2 || step) + step;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"hopebringer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/hopebringer.ts"],"names":[],"mappings":";;;AAYA,qDAAwD;AAG3C,QAAA,WAAW,GAAkD;IACzE,OAAO,EAAE,0BAA8D;IACvE,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;YACvC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SAC7F;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,qBAAqB,EAAE,CAAC,MAAmB,EAAE,KAAiC,EAAE,EAAE;QACjF,IAAI,KAAK,CAAC,QAAQ,EAAE;YACnB,OAAO;SACP;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC3D,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC1D,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;QAC5B,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC;IAC5B,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Hopebringer (Tier 5, 3/3)\r\n * Start of Combat: Give your minions +3/+3.\r\n * Permanently improves after a friendly minion loses Divine Shield.\r\n *\r\n * Golden Hopebringer (Tier 5, 6/6)\r\n * Start of Combat: Give your minions +6/+6.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { OnDivineShieldUpdatedInput } from '../../../keywords/divine-shield';\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 { OnDivineShieldUpdatedCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const Hopebringer: StartOfCombatCard & OnDivineShieldUpdatedCard = {\r\n\tcardIds: [CardIds.Hopebringer_BG36_364, CardIds.Hopebringer_BG36_364_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Hopebringer_BG36_364_G ? 2 : 1;\r\n\t\tconst atk = 4 * mult;\r\n\t\tconst hp = 3 * mult;\r\n\t\tfor (const target of input.playerBoard) {\r\n\t\t\tmodifyStats(target, minion, atk, hp, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\tonDivineShieldUpdated: (minion: BoardEntity, input: OnDivineShieldUpdatedInput) => {\r\n\t\tif (input.newValue) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst mult = minion.cardId === CardIds.Hopebringer_BG36_364_G ? 2 : 1;\r\n\t\tconst atk = (minion.scriptDataNum1 || 4 * mult) + 4 * mult;\r\n\t\tconst hp = (minion.scriptDataNum2 || 3 * mult) + 3 * mult;\r\n\t\tminion.scriptDataNum1 = atk;\r\n\t\tminion.scriptDataNum2 = hp;\r\n\t},\r\n};\r\n"]}
@@ -5,11 +5,9 @@ const utils_1 = require("../../../services/utils");
5
5
  const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
6
  exports.LichlingHoarder = {
7
7
  cardIds: ["BG36_848", "BG36_848_G"],
8
- baseAvengeValue: () => 4,
8
+ baseAvengeValue: () => 3,
9
9
  startOfCombat: (minion, input) => {
10
- minion.memory = input.playerBoard
11
- .filter((e) => e.entityId !== minion.entityId)
12
- .map((e) => e.cardId);
10
+ minion.memory = input.playerBoard.filter((e) => e.entityId !== minion.entityId).map((e) => e.cardId);
13
11
  return false;
14
12
  },
15
13
  avenge: (minion, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"lichling-hoarder.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/lichling-hoarder.ts"],"names":[],"mappings":";;;AAQA,mDAAqD;AAErD,qEAAmE;AAKtD,QAAA,eAAe,GAAmC;IAC9D,OAAO,EAAE,0BAAsE;IAC/E,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;;QACnD,MAAM,QAAQ,GAAa,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO;SACP;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Lichling Hoarder (Tier 5, 5/10)\r\n * Avenge (4): Get a plain copy of a minion that started in your warband this combat.\r\n *\r\n * Golden Lichling Hoarder (Tier 5, 10/20)\r\n * Avenge (4): Get 2 plain copies of a minion that started in your warband this combat.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const LichlingHoarder: AvengeCard & StartOfCombatCard = {\r\n\tcardIds: [CardIds.LichlingHoarder_BG36_848, CardIds.LichlingHoarder_BG36_848_G],\r\n\tbaseAvengeValue: () => 4,\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tminion.memory = input.playerBoard\r\n\t\t\t.filter((e) => e.entityId !== minion.entityId)\r\n\t\t\t.map((e) => e.cardId);\r\n\t\treturn false;\r\n\t},\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst snapshot: string[] = minion.memory ?? [];\r\n\t\tconst cardId = pickRandom(snapshot);\r\n\t\tif (!cardId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst copies = minion.cardId === CardIds.LichlingHoarder_BG36_848_G ? 2 : 1;\r\n\t\taddCardsInHand(input.hero, input.board, Array(copies).fill(cardId), input.gameState);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"lichling-hoarder.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/lichling-hoarder.ts"],"names":[],"mappings":";;;AASA,mDAAqD;AAErD,qEAAmE;AAItD,QAAA,eAAe,GAAmC;IAC9D,OAAO,EAAE,0BAAsE;IAC/E,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;QACvD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACrG,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;;QACnD,MAAM,QAAQ,GAAa,MAAA,MAAM,CAAC,MAAM,mCAAI,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO;SACP;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Lichling Hoarder (Tier 5, 5/10)\r\n * Avenge (4): Get a plain copy of a minion that started in your warband this combat.\r\n *\r\n * Golden Lichling Hoarder (Tier 5, 10/20)\r\n * Avenge (4): Get 2 plain copies of a minion that started in your warband this combat.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { AvengeCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const LichlingHoarder: AvengeCard & StartOfCombatCard = {\r\n\tcardIds: [CardIds.LichlingHoarder_BG36_848, CardIds.LichlingHoarder_BG36_848_G],\r\n\tbaseAvengeValue: () => 3,\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tminion.memory = input.playerBoard.filter((e) => e.entityId !== minion.entityId).map((e) => e.cardId);\r\n\t\treturn false;\r\n\t},\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst snapshot: string[] = minion.memory ?? [];\r\n\t\tconst cardId = pickRandom(snapshot);\r\n\t\tif (!cardId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst copies = minion.cardId === CardIds.LichlingHoarder_BG36_848_G ? 2 : 1;\r\n\t\taddCardsInHand(input.hero, input.board, Array(copies).fill(cardId), input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -16,7 +16,7 @@ exports.LivingAzerite = {
16
16
  if (entity.health <= 0 || entity.definitelyDead)
17
17
  continue;
18
18
  if ((0, utils_1.hasCorrectTribe)(entity, input.hero, reference_data_1.Race.ELEMENTAL, input.gameState.anomalies, input.gameState.allCards)) {
19
- (0, stats_1.modifyStats)(entity, minion, 3 * mult, 3 * mult, input.board, input.hero, input.gameState);
19
+ (0, stats_1.modifyStats)(entity, minion, 4 * mult, 3 * mult, input.board, input.hero, input.gameState);
20
20
  }
21
21
  }
22
22
  },
@@ -1 +1 @@
1
- {"version":3,"file":"living-azerite.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/living-azerite.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,aAAa,GAA0B;IACnD,OAAO,EAAE,0BAAkE;IAC3E,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACjE,MAAM,WAAW,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAA+C,CAC9D,CAAC;QACF,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc;gBAAE,SAAS;YAC1D,IAAI,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBAC7G,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC1F;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\nimport { BoardEntity } from '../../../board-entity';\nimport { CardIds } from '../../../services/card-ids';\nimport { modifyStats } from '../../../simulation/stats';\nimport { hasCorrectTribe } from '../../../utils';\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\n\nexport const LivingAzerite: OnTavernSpellCastCard = {\n\tcardIds: [CardIds.LivingAzerite_BG28_707, CardIds.LivingAzerite_BG28_707_G],\n\tonTavernSpellCast: (minion: BoardEntity, input: CastSpellInput) => {\n\t\tconst hasPortrait = input.hero.trinkets?.some(\n\t\t\t(t) => t.cardId === CardIds.AzeritePortrait_BG30_MagicItem_431,\n\t\t);\n\t\tif (!hasPortrait) return;\n\t\tconst mult = minion.cardId === CardIds.LivingAzerite_BG28_707_G ? 2 : 1;\n\t\tfor (const entity of input.board) {\n\t\t\tif (entity.health <= 0 || entity.definitelyDead) continue;\n\t\t\tif (hasCorrectTribe(entity, input.hero, Race.ELEMENTAL, input.gameState.anomalies, input.gameState.allCards)) {\n\t\t\t\tmodifyStats(entity, minion, 3 * mult, 3 * mult, input.board, input.hero, input.gameState);\n\t\t\t}\n\t\t}\n\t},\n};\n"]}
1
+ {"version":3,"file":"living-azerite.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/living-azerite.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,aAAa,GAA0B;IACnD,OAAO,EAAE,0BAAkE;IAC3E,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACjE,MAAM,WAAW,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAA+C,CAAC,CAAC;QAC9G,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc;gBAAE,SAAS;YAC1D,IACC,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EACvG;gBACD,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC1F;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\nimport { BoardEntity } from '../../../board-entity';\nimport { CardIds } from '../../../services/card-ids';\nimport { modifyStats } from '../../../simulation/stats';\nimport { hasCorrectTribe } from '../../../utils';\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\n\nexport const LivingAzerite: OnTavernSpellCastCard = {\n\tcardIds: [CardIds.LivingAzerite_BG28_707, CardIds.LivingAzerite_BG28_707_G],\n\tonTavernSpellCast: (minion: BoardEntity, input: CastSpellInput) => {\n\t\tconst hasPortrait = input.hero.trinkets?.some((t) => t.cardId === CardIds.AzeritePortrait_BG30_MagicItem_431);\n\t\tif (!hasPortrait) return;\n\t\tconst mult = minion.cardId === CardIds.LivingAzerite_BG28_707_G ? 2 : 1;\n\t\tfor (const entity of input.board) {\n\t\t\tif (entity.health <= 0 || entity.definitelyDead) continue;\n\t\t\tif (\n\t\t\t\thasCorrectTribe(entity, input.hero, Race.ELEMENTAL, input.gameState.anomalies, input.gameState.allCards)\n\t\t\t) {\n\t\t\t\tmodifyStats(entity, minion, 4 * mult, 3 * mult, input.board, input.hero, input.gameState);\n\t\t\t}\n\t\t}\n\t},\n};\n"]}
@@ -1,2 +1,2 @@
1
- import { EndOfTurnCard } from '../../card.interface';
2
- export declare const MysteriousKthir: EndOfTurnCard;
1
+ import { OnTavernSpellCastCard } from '../../card.interface';
2
+ export declare const MysteriousKthir: OnTavernSpellCastCard;