@firestone-hs/simulate-bgs-battle 1.1.698 → 1.1.699

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 (109) hide show
  1. package/dist/cards/card.interface.d.ts +1 -1
  2. package/dist/cards/card.interface.js.map +1 -1
  3. package/dist/cards/cards-data.js +2 -1
  4. package/dist/cards/cards-data.js.map +1 -1
  5. package/dist/cards/impl/_card-mappings.js +8 -32
  6. package/dist/cards/impl/_card-mappings.js.map +1 -1
  7. package/dist/cards/impl/bg-spell/conflagration.d.ts +2 -0
  8. package/dist/cards/impl/bg-spell/{conflagration-bg352.js → conflagration.js} +3 -3
  9. package/dist/cards/impl/bg-spell/conflagration.js.map +1 -0
  10. package/dist/cards/impl/minion/bristlemane-scrapsmith.js +3 -2
  11. package/dist/cards/impl/minion/bristlemane-scrapsmith.js.map +1 -1
  12. package/dist/cards/impl/minion/burgeoning-whelp.js +3 -12
  13. package/dist/cards/impl/minion/burgeoning-whelp.js.map +1 -1
  14. package/dist/cards/impl/minion/{bg352-chromadrake-pool.js → chromadrake-pool.js} +1 -1
  15. package/dist/cards/impl/minion/chromadrake-pool.js.map +1 -0
  16. package/dist/cards/impl/minion/draconic-warden.js +2 -2
  17. package/dist/cards/impl/minion/draconic-warden.js.map +1 -1
  18. package/dist/cards/impl/minion/incubation-researcher.js +2 -2
  19. package/dist/cards/impl/minion/incubation-researcher.js.map +1 -1
  20. package/dist/cards/impl/minion/living-azerite.js.map +1 -1
  21. package/dist/cards/impl/minion/silent-enforcer.js +6 -6
  22. package/dist/cards/impl/minion/silent-enforcer.js.map +1 -1
  23. package/dist/cards/impl/minion/sinrunner-blanchy.d.ts +0 -2
  24. package/dist/cards/impl/minion/sinrunner-blanchy.js +1 -4
  25. package/dist/cards/impl/minion/sinrunner-blanchy.js.map +1 -1
  26. package/dist/cards/impl/minion/stellar-freebooter.js +4 -1
  27. package/dist/cards/impl/minion/stellar-freebooter.js.map +1 -1
  28. package/dist/cards/impl/minion/stuntdrake.js +1 -1
  29. package/dist/cards/impl/minion/stuntdrake.js.map +1 -1
  30. package/dist/cards/impl/minion/timewarped-hag.d.ts +2 -2
  31. package/dist/cards/impl/minion/timewarped-hag.js +7 -5
  32. package/dist/cards/impl/minion/timewarped-hag.js.map +1 -1
  33. package/dist/cards/impl/trinket/bloodbound-earrings.js +6 -1
  34. package/dist/cards/impl/trinket/bloodbound-earrings.js.map +1 -1
  35. package/dist/cards/impl/trinket/bluegill-flippers.js +2 -0
  36. package/dist/cards/impl/trinket/bluegill-flippers.js.map +1 -1
  37. package/dist/cards/impl/trinket/lucky-tabby.d.ts +2 -0
  38. package/dist/cards/impl/trinket/lucky-tabby.js +20 -0
  39. package/dist/cards/impl/trinket/lucky-tabby.js.map +1 -0
  40. package/dist/cards/impl/trinket/scrapsmith-portrait.d.ts +2 -0
  41. package/dist/cards/impl/trinket/scrapsmith-portrait.js +21 -0
  42. package/dist/cards/impl/trinket/scrapsmith-portrait.js.map +1 -0
  43. package/dist/cards/impl/trinket/stegodon-portrait.js +1 -0
  44. package/dist/cards/impl/trinket/stegodon-portrait.js.map +1 -1
  45. package/dist/cards/impl/trinket/stormcoil-sticker.d.ts +2 -0
  46. package/dist/cards/impl/trinket/stormcoil-sticker.js +21 -0
  47. package/dist/cards/impl/trinket/stormcoil-sticker.js.map +1 -0
  48. package/dist/cards/impl/trinket/unholy-sanctum.js +0 -3
  49. package/dist/cards/impl/trinket/unholy-sanctum.js.map +1 -1
  50. package/dist/simulation/attack.d.ts +2 -0
  51. package/dist/simulation/attack.js.map +1 -1
  52. package/dist/simulation/death-effects.js +28 -38
  53. package/dist/simulation/death-effects.js.map +1 -1
  54. package/dist/simulation/deathrattle-effects.js +0 -13
  55. package/dist/simulation/deathrattle-effects.js.map +1 -1
  56. package/dist/simulation/global-info-helpers.d.ts +1 -0
  57. package/dist/simulation/global-info-helpers.js +13 -1
  58. package/dist/simulation/global-info-helpers.js.map +1 -1
  59. package/dist/simulation/start-of-combat/soc-action-processor.js +8 -1
  60. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  61. package/dist/simulation/stats.js +0 -1
  62. package/dist/simulation/stats.js.map +1 -1
  63. package/package.json +1 -1
  64. package/dist/cards/impl/bg-spell/arcane-absorption-bg352.d.ts +0 -2
  65. package/dist/cards/impl/bg-spell/arcane-absorption-bg352.js +0 -7
  66. package/dist/cards/impl/bg-spell/arcane-absorption-bg352.js.map +0 -1
  67. package/dist/cards/impl/bg-spell/conflagration-bg352.d.ts +0 -2
  68. package/dist/cards/impl/bg-spell/conflagration-bg352.js.map +0 -1
  69. package/dist/cards/impl/minion/alert-alarmist.d.ts +0 -2
  70. package/dist/cards/impl/minion/alert-alarmist.js +0 -7
  71. package/dist/cards/impl/minion/alert-alarmist.js.map +0 -1
  72. package/dist/cards/impl/minion/ancestral-automaton.d.ts +0 -2
  73. package/dist/cards/impl/minion/ancestral-automaton.js +0 -7
  74. package/dist/cards/impl/minion/ancestral-automaton.js.map +0 -1
  75. package/dist/cards/impl/minion/balinda-stonehearth.d.ts +0 -2
  76. package/dist/cards/impl/minion/balinda-stonehearth.js +0 -7
  77. package/dist/cards/impl/minion/balinda-stonehearth.js.map +0 -1
  78. package/dist/cards/impl/minion/bg352-chromadrake-pool.js.map +0 -1
  79. package/dist/cards/impl/minion/demon-fodder.d.ts +0 -2
  80. package/dist/cards/impl/minion/demon-fodder.js +0 -7
  81. package/dist/cards/impl/minion/demon-fodder.js.map +0 -1
  82. package/dist/cards/impl/minion/egg-of-the-endtimes.d.ts +0 -2
  83. package/dist/cards/impl/minion/egg-of-the-endtimes.js +0 -7
  84. package/dist/cards/impl/minion/egg-of-the-endtimes.js.map +0 -1
  85. package/dist/cards/impl/minion/gluttonous-trogg.d.ts +0 -2
  86. package/dist/cards/impl/minion/gluttonous-trogg.js +0 -7
  87. package/dist/cards/impl/minion/gluttonous-trogg.js.map +0 -1
  88. package/dist/cards/impl/minion/hired-ritualist.d.ts +0 -2
  89. package/dist/cards/impl/minion/hired-ritualist.js +0 -7
  90. package/dist/cards/impl/minion/hired-ritualist.js.map +0 -1
  91. package/dist/cards/impl/minion/laboratory-assistant.d.ts +0 -2
  92. package/dist/cards/impl/minion/laboratory-assistant.js +0 -7
  93. package/dist/cards/impl/minion/laboratory-assistant.js.map +0 -1
  94. package/dist/cards/impl/minion/maelstrom-emergent.d.ts +0 -2
  95. package/dist/cards/impl/minion/maelstrom-emergent.js +0 -7
  96. package/dist/cards/impl/minion/maelstrom-emergent.js.map +0 -1
  97. package/dist/cards/impl/minion/old-soul.d.ts +0 -2
  98. package/dist/cards/impl/minion/old-soul.js +0 -7
  99. package/dist/cards/impl/minion/old-soul.js.map +0 -1
  100. package/dist/cards/impl/minion/proud-privateer.d.ts +0 -2
  101. package/dist/cards/impl/minion/proud-privateer.js +0 -7
  102. package/dist/cards/impl/minion/proud-privateer.js.map +0 -1
  103. package/dist/cards/impl/minion/twisted-wrathguard.d.ts +0 -2
  104. package/dist/cards/impl/minion/twisted-wrathguard.js +0 -7
  105. package/dist/cards/impl/minion/twisted-wrathguard.js.map +0 -1
  106. package/dist/cards/impl/trinket/tarecgosa-sticker.d.ts +0 -2
  107. package/dist/cards/impl/trinket/tarecgosa-sticker.js +0 -7
  108. package/dist/cards/impl/trinket/tarecgosa-sticker.js.map +0 -1
  109. /package/dist/cards/impl/minion/{bg352-chromadrake-pool.d.ts → chromadrake-pool.d.ts} +0 -0
@@ -213,7 +213,7 @@ export interface OnAfterDeathCard extends Card {
213
213
  }
214
214
  export declare const hasOnAfterDeath: (card: Card) => card is OnAfterDeathCard;
215
215
  export interface OnAfterFriendlyMinionDeathCard extends Card {
216
- onAfterFriendlyMinionDeath: (listener: BoardEntity, input: OnAfterFriendlyMinionDeathInput) => void;
216
+ onAfterFriendlyMinionDeath: (listener: BoardEntity | BoardTrinket, input: OnAfterFriendlyMinionDeathInput) => void;
217
217
  }
218
218
  export declare const hasOnAfterFriendlyMinionDeath: (card: Card) => card is OnAfterFriendlyMinionDeathCard;
219
219
  export interface OnMinionKilledCard extends Card {
@@ -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';\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\nimport { BoardSecret } from '../board-secret';\nimport { OnDivineShieldUpdatedInput } from '../keywords/divine-shield';\nimport { OnRebornUpdatedInput } from '../keywords/reborn';\nimport { OnStealthUpdatedInput } from '../keywords/stealth';\nimport { OnTauntUpdatedInput } from '../keywords/taunt';\nimport { OnVenomousUpdatedInput } from '../keywords/venomous';\nimport { OnWindfuryUpdatedInput } from '../keywords/windfury';\nimport {\n\tOnDespawnInput,\n\tOnFriendlyMinionSummonedTrinketInput,\n\tOnOtherSpawnAuraInput,\n\tOnOtherSpawnInput,\n\tOnSpawnInput,\n} from '../simulation/add-minion-to-board';\nimport {\n\tOnAfterDeathInput,\n\tOnAfterFriendlyMinionDeathInput,\n\tOnDeathInput,\n\tOnMinionKilledInput,\n} from '../simulation/attack';\nimport { AvengeInput } from '../simulation/avenge';\nimport { BattlecryInput, OnBattlecryTriggeredInput } from '../simulation/battlecries';\nimport { PlayedBloodGemsOnAnyInput, PlayedBloodGemsOnMeInput } from '../simulation/blood-gems';\nimport { OnCardAddedToHandInput } from '../simulation/cards-in-hand';\nimport { AfterDealDamageInput, AfterFriendlyMinionDamagedInput } from '../simulation/damage-effects';\nimport { AfterHeroDamagedInput } from '../simulation/damage-to-hero';\nimport { DeathrattleTriggeredInput } from '../simulation/deathrattle-on-trigger';\nimport { FullGameState } from '../simulation/internal-game-state';\nimport {\n\tOnAfterMagnetizeInput,\n\tOnAfterMagnetizeSelfInput,\n\tOnBeforeMagnetizeInput,\n\tOnBeforeMagnetizeSelfInput,\n} from '../simulation/magnetize';\nimport { OnAttackInput } from '../simulation/on-attack';\nimport { OnMinionAttackedInput } from '../simulation/on-being-attacked';\nimport { RebornEffectInput } from '../simulation/reborn';\nimport { SoCInput } from '../simulation/start-of-combat/start-of-combat-input';\nimport { OnStatsChangedInput } from '../simulation/stats';\n\nexport interface Card {\n\t// Maybe should make this mandatory\n\tcardIds?: readonly string[];\n\tstartOfCombat?: (\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\n\t\tinput: SoCInput,\n\t) => boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean };\n}\n\nexport interface DefaultChargesCard extends Card {\n\tdefaultCharges: (entity: BoardEntity) => number;\n}\nexport const hasDefaultCharges = (card: Card): card is DefaultChargesCard =>\n\t(card as DefaultChargesCard)?.defaultCharges !== undefined;\n\nexport interface StartOfCombatCard extends Card {\n\tstartOfCombatTiming?: StartOfCombatTiming;\n\tstartOfCombat: NonNullable<Card['startOfCombat']>;\n}\nexport const hasStartOfCombat = (card: Card): card is StartOfCombatCard =>\n\t(card as StartOfCombatCard)?.startOfCombat !== undefined;\nexport interface StartOfCombatFromHandCard extends StartOfCombatCard {\n\tstartOfCombatFromHand: true;\n}\nexport const hasStartOfCombatFromHand = (card: Card): card is StartOfCombatFromHandCard =>\n\t(card as StartOfCombatFromHandCard)?.startOfCombatFromHand !== undefined;\nexport type StartOfCombatTiming = 'start-of-combat' | 'pre-combat' | 'illidan';\n\nexport interface TavernSpellCard extends Card {\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => void;\n}\nexport const hasCastTavernSpell = (card: Card): card is TavernSpellCard =>\n\t(card as TavernSpellCard)?.castTavernSpell !== undefined;\n\nexport interface OnTavernSpellCastCard extends Card {\n\tonTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\n}\nexport const hasOnTavernSpellCast = (card: Card): card is OnTavernSpellCastCard =>\n\t(card as OnTavernSpellCastCard)?.onTavernSpellCast !== undefined;\n\nexport interface AfterTavernSpellCastCard extends Card {\n\tafterTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\n}\nexport const hasAfterTavernSpellCast = (card: Card): card is AfterTavernSpellCastCard =>\n\t(card as AfterTavernSpellCastCard)?.afterTavernSpellCast !== undefined;\n\n// Whenever this attacks\nexport interface RallyCard extends Card {\n\trally: (\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\n\t\tinput: OnAttackInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasRally = (card: Card): card is RallyCard => (card as RallyCard)?.rally !== undefined;\n\nexport interface OnWheneverAnotherMinionAttacksCard extends Card {\n\tonWheneverAnotherMinionAttacks: (\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\n\t\tinput: OnAttackInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasOnWheneverAnotherMinionAttacks = (card: Card): card is OnWheneverAnotherMinionAttacksCard =>\n\t(card as OnWheneverAnotherMinionAttacksCard)?.onWheneverAnotherMinionAttacks !== undefined;\n\nexport interface AfterAnotherMinionAttacksCard extends Card {\n\tafterAnotherMinionAttacks: (\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\n\t\tinput: OnAttackInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasAfterAnotherMinionAttacks = (card: Card): card is AfterAnotherMinionAttacksCard =>\n\t(card as AfterAnotherMinionAttacksCard)?.afterAnotherMinionAttacks !== undefined;\n\nexport interface OnMinionAttackedCard extends Card {\n\tonAttacked: (minion: BoardEntity, input: OnMinionAttackedInput) => void;\n}\nexport const hasOnMinionAttacked = (card: Card): card is OnMinionAttackedCard =>\n\t(card as OnMinionAttackedCard)?.onAttacked !== undefined;\n\nexport interface OnSpawnedCard extends Card {\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => void;\n}\nexport const hasOnSpawned = (card: Card): card is OnSpawnedCard => (card as OnSpawnedCard)?.onSpawned !== undefined;\n\nexport interface OnOtherSpawnedAuraCard extends Card {\n\tonOtherSpawnedAura: (minion: BoardEntity, input: OnOtherSpawnAuraInput) => void;\n}\nexport const hasOnOtherAuraSpawned = (card: Card): card is OnOtherSpawnedAuraCard =>\n\t(card as OnOtherSpawnedAuraCard)?.onOtherSpawnedAura !== undefined;\n\nexport interface OnOtherSpawnedCard extends Card {\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => void;\n}\nexport const hasOnOtherSpawned = (card: Card): card is OnOtherSpawnedCard =>\n\t(card as OnOtherSpawnedCard)?.onOtherSpawned !== undefined;\n\nexport interface AfterOtherSpawnedCard extends Card {\n\tafterOtherSpawned: (minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput) => void;\n}\nexport const hasAfterOtherSpawned = (card: Card): card is AfterOtherSpawnedCard =>\n\t(card as AfterOtherSpawnedCard)?.afterOtherSpawned !== undefined;\n\nexport interface OnFriendlyMinionSummonedTrinketCard extends Card {\n\tonFriendlyMinionSummoned: (trinket: BoardTrinket, input: OnFriendlyMinionSummonedTrinketInput) => void;\n}\nexport const hasOnFriendlyMinionSummonedTrinket = (card: Card): card is OnFriendlyMinionSummonedTrinketCard =>\n\t(card as OnFriendlyMinionSummonedTrinketCard)?.onFriendlyMinionSummoned !== undefined;\n\nexport interface OnDespawnedCard extends Card {\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => void;\n}\nexport const hasOnDespawned = (card: Card): card is OnDespawnedCard =>\n\t(card as OnDespawnedCard)?.onDespawned !== undefined;\n\nexport interface DeathrattleSpawnCard extends Card {\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => readonly BoardEntity[];\n}\nexport const hasDeathrattleSpawn = (card: Card): card is DeathrattleSpawnCard =>\n\t(card as DeathrattleSpawnCard)?.deathrattleSpawn !== undefined;\n\n/** Deathrattle that does not return board spawns (hand buffs, stat grants, etc.). */\nexport interface DeathrattleEffectCard extends Card {\n\tdeathrattleEffect: (minion: BoardEntity, input: DeathrattleTriggeredInput) => void;\n}\nexport const hasDeathrattleEffect = (card: Card): card is DeathrattleEffectCard =>\n\t(card as DeathrattleEffectCard)?.deathrattleEffect !== undefined;\n\nexport interface BattlecryCard extends Card {\n\t// boolean return type is used only for conditional battlecries (eg cards that only work as battlecries if a specific trinket\n\t// is in game)\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => boolean;\n}\nexport const hasBattlecry = (card: Card): card is BattlecryCard => (card as BattlecryCard)?.battlecry !== undefined;\n\nexport interface RebornEffectCard extends Card {\n\trebornEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\n}\nexport const hasRebornEffect = (card: Card): card is RebornEffectCard =>\n\t(card as RebornEffectCard)?.rebornEffect !== undefined;\n\nexport interface RebornSelfEffectCard extends Card {\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\n}\nexport const hasRebornSelfEffect = (card: Card): card is RebornSelfEffectCard =>\n\t(card as RebornSelfEffectCard)?.rebornSelfEffect !== undefined;\n\nexport interface OnBattlecryTriggeredCard extends Card {\n\tonBattlecryTriggered: (minion: BoardEntity, input: OnBattlecryTriggeredInput) => void;\n}\nexport const hasOnBattlecryTriggered = (card: Card): card is OnBattlecryTriggeredCard =>\n\t(card as OnBattlecryTriggeredCard)?.onBattlecryTriggered !== undefined;\n\nexport interface AvengeCard extends Card {\n\tavenge: (minion: BoardEntity | BoardTrinket, input: AvengeInput) => void | readonly BoardEntity[];\n\tbaseAvengeValue: (cardId: string) => number;\n}\nexport const hasAvenge = (card: Card): card is AvengeCard => (card as AvengeCard)?.avenge !== undefined;\n\nexport interface DefaultScriptDataNumCard extends Card {\n\tdefaultScriptDataNum: (cardId: string) => number;\n}\nexport const hasDefaultScriptDataNum = (card: Card): card is DefaultScriptDataNumCard =>\n\t(card as DefaultScriptDataNumCard)?.defaultScriptDataNum !== undefined;\n\n/** To use when another deathrattle is triggered */\nexport interface DeathrattleTriggeredCard extends Card {\n\tonDeathrattleTriggered: (minion: BoardEntity | BoardTrinket, input: DeathrattleTriggeredInput) => void;\n}\nexport const hasOnDeathrattleTriggered = (card: Card): card is DeathrattleTriggeredCard =>\n\t(card as DeathrattleTriggeredCard)?.onDeathrattleTriggered !== undefined;\n\n// export interface DeathrattleEnchantmentEffectCard extends Card {\n// \tdeathrattleEffectEnchantmentEffect: (\n// \t\tminion: { cardId: string; originEntityId?: number; repeats?: number },\n// \t\tinput: DeathrattleTriggeredInput,\n// \t) => void;\n// \tcardIds: readonly string[];\n// }\n// export const hasDeathrattleEnchantmentEffect = (card: Card): card is DeathrattleEnchantmentEffectCard =>\n// \t(card as DeathrattleEnchantmentEffectCard)?.deathrattleEffectEnchantmentEffect !== undefined;\n\nexport interface DeathrattleSpawnEnchantmentCard extends Card {\n\tdeathrattleSpawnEnchantmentEffect: (\n\t\tenchantment: { cardId: string; originEntityId?: number; repeats?: number },\n\t\tminion: BoardEntity | null | undefined,\n\t\tinput: DeathrattleTriggeredInput,\n\t) => readonly BoardEntity[];\n\tcardIds: readonly string[];\n}\nexport const hasDeathrattleSpawnEnchantment = (card: Card): card is DeathrattleSpawnEnchantmentCard =>\n\t(card as DeathrattleSpawnEnchantmentCard)?.deathrattleSpawnEnchantmentEffect !== undefined;\n\nexport interface OnCardAddedToHandCard extends Card {\n\tonCardAddedToHand: (entity: BoardEntity | BgsQuestEntity | BoardTrinket, input: OnCardAddedToHandInput) => void;\n}\nexport const hasOnCardAddedToHand = (card: Card): card is OnCardAddedToHandCard =>\n\t(card as OnCardAddedToHandCard)?.onCardAddedToHand !== undefined;\n\nexport interface EndOfTurnCard extends Card {\n\t// Use BattlecryInput because it's the only way end of turn effects are triggered\n\tendOfTurn: (entity: BoardEntity, input: EndOfTurnInput) => void;\n}\nexport const hasEndOfTurn = (card: Card): card is EndOfTurnCard => (card as EndOfTurnCard)?.endOfTurn !== undefined;\nexport type EndOfTurnInput = BattlecryInput;\n\nexport interface OnDivineShieldUpdatedCard extends Card {\n\tonDivineShieldUpdated: (entity: BoardEntity | BoardTrinket, input: OnDivineShieldUpdatedInput) => void;\n}\nexport const hasOnDivineShieldUpdated = (card: Card): card is OnDivineShieldUpdatedCard =>\n\t(card as OnDivineShieldUpdatedCard)?.onDivineShieldUpdated !== undefined;\n\nexport interface OnTauntUpdatedCard extends Card {\n\tonTauntUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnTauntUpdatedInput,\n\t) => void;\n}\nexport const hasOnTauntUpdated = (card: Card): card is OnTauntUpdatedCard =>\n\t(card as OnTauntUpdatedCard)?.onTauntUpdated !== undefined;\n\nexport interface OnRebornUpdatedCard extends Card {\n\tonRebornUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnRebornUpdatedInput,\n\t) => void;\n}\nexport const hasOnRebornUpdated = (card: Card): card is OnRebornUpdatedCard =>\n\t(card as OnRebornUpdatedCard)?.onRebornUpdated !== undefined;\n\nexport interface OnStealthUpdatedCard extends Card {\n\tonStealthUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnStealthUpdatedInput,\n\t) => void;\n}\nexport const hasOnStealthUpdated = (card: Card): card is OnStealthUpdatedCard =>\n\t(card as OnStealthUpdatedCard)?.onStealthUpdated !== undefined;\n\nexport interface OnVenomousUpdatedCard extends Card {\n\tonVenomousUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnVenomousUpdatedInput,\n\t) => void;\n}\nexport const hasOnVenomousUpdated = (card: Card): card is OnVenomousUpdatedCard =>\n\t(card as OnVenomousUpdatedCard)?.onVenomousUpdated !== undefined;\n\nexport interface OnWindfuryUpdatedCard extends Card {\n\tonWindfuryUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnWindfuryUpdatedInput,\n\t) => void;\n}\nexport const hasOnWindfuryUpdated = (card: Card): card is OnWindfuryUpdatedCard =>\n\t(card as OnWindfuryUpdatedCard)?.onWindfuryUpdated !== undefined;\n\nexport interface OnStatsChangedCard extends Card {\n\tonStatsChanged: (entity: BoardEntity, input: OnStatsChangedInput) => void;\n}\nexport const hasOnStatsChanged = (card: Card): card is OnStatsChangedCard =>\n\t(card as OnStatsChangedCard)?.onStatsChanged !== undefined;\n\nexport interface AfterHeroDamagedCard extends Card {\n\tafterHeroDamaged: (entity: BoardEntity | BoardTrinket, input: AfterHeroDamagedInput) => void;\n}\nexport const hasAfterHeroDamaged = (card: Card): card is AfterHeroDamagedCard =>\n\t(card as AfterHeroDamagedCard)?.afterHeroDamaged !== undefined;\n\nexport interface OnDamagedCard extends Card {\n\tonDamaged: (entity: BoardEntity, input: OnDamagedInput) => void;\n}\nexport const hasOnDamaged = (card: Card): card is OnDamagedCard => (card as OnDamagedCard)?.onDamaged !== undefined;\n\nexport interface AfterDealDamageCard extends Card {\n\t// Called whenever damage is dealt, both on the friendly and enemy side\n\t// So you need to check the \"friendly\" flag\n\tafterDealDamage: (entity: BoardEntity, input: AfterDealDamageInput) => void;\n}\nexport const hasAfterDealDamage = (card: Card): card is AfterDealDamageCard =>\n\t(card as AfterDealDamageCard)?.afterDealDamage !== undefined;\n\nexport interface AfterFriendlyMinionDamagedTrinketCard extends Card {\n\tafterFriendlyMinionDamaged: (trinket: BoardTrinket, input: AfterFriendlyMinionDamagedInput) => void;\n}\nexport const hasAfterFriendlyMinionDamagedTrinket = (card: Card): card is AfterFriendlyMinionDamagedTrinketCard =>\n\t(card as AfterFriendlyMinionDamagedTrinketCard)?.afterFriendlyMinionDamaged !== undefined;\n\nexport interface OnDeathCard extends Card {\n\tonDeath: (entity: BoardEntity, input: OnDeathInput) => void;\n}\nexport const hasOnDeath = (card: Card): card is OnDeathCard => (card as OnDeathCard)?.onDeath !== undefined;\n\nexport interface OnAfterDeathCard extends Card {\n\tonAfterDeath: (entity: BoardEntity | BoardTrinket, input: OnAfterDeathInput) => void;\n}\nexport const hasOnAfterDeath = (card: Card): card is OnAfterDeathCard =>\n\t(card as OnAfterDeathCard)?.onAfterDeath !== undefined;\n\n/**\n * After any friendly board minion dies (during `applyWheneverMinionDiesEffect`). Filter in the card\n * (e.g. only if `input.deadEntity.taunt`). Dispatch mirrors `handleAfterMinionsDeaths` via `cardMappings`.\n */\nexport interface OnAfterFriendlyMinionDeathCard extends Card {\n\tonAfterFriendlyMinionDeath: (listener: BoardEntity, input: OnAfterFriendlyMinionDeathInput) => void;\n}\nexport const hasOnAfterFriendlyMinionDeath = (card: Card): card is OnAfterFriendlyMinionDeathCard =>\n\t(card as OnAfterFriendlyMinionDeathCard)?.onAfterFriendlyMinionDeath !== undefined;\n\nexport interface OnMinionKilledCard extends Card {\n\tonMinionKilled: (\n\t\tentity: BoardEntity,\n\t\tinput: OnMinionKilledInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasOnMinionKilled = (card: Card): card is OnMinionKilledCard =>\n\t(card as OnMinionKilledCard)?.onMinionKilled !== undefined;\n\nexport interface OnBeforeMagnetizeCard extends Card {\n\tonBeforeMagnetize: (entity: BoardEntity | BoardTrinket, input: OnBeforeMagnetizeInput) => void;\n}\nexport const hasOnBeforeMagnetize = (card: Card): card is OnBeforeMagnetizeCard =>\n\t(card as OnBeforeMagnetizeCard)?.onBeforeMagnetize !== undefined;\n\nexport interface OnBeforeMagnetizeSelfCard extends Card {\n\tonBeforeMagnetizeSelf: (entity: BoardEntity, input: OnBeforeMagnetizeSelfInput) => void;\n}\nexport const hasOnBeforeMagnetizeSelf = (card: Card): card is OnBeforeMagnetizeSelfCard =>\n\t(card as OnBeforeMagnetizeSelfCard)?.onBeforeMagnetizeSelf !== undefined;\n\nexport interface OnAfterMagnetizeToSelfCard extends Card {\n\tonAfterMagnetizeToSelf: (entity: BoardEntity, input: OnAfterMagnetizeSelfInput) => void;\n}\nexport const hasOnAfterMagnetizeToSelf = (card: Card): card is OnAfterMagnetizeToSelfCard =>\n\t(card as OnAfterMagnetizeToSelfCard)?.onAfterMagnetizeToSelf !== undefined;\n\nexport interface OnAfterMagnetizeSelfCard extends Card {\n\tonAfterMagnetizeSelf: (entity: BoardEntity, input: OnAfterMagnetizeInput) => void;\n}\nexport const hasOnAfterMagnetizeSelf = (card: Card): card is OnAfterMagnetizeSelfCard =>\n\t(card as OnAfterMagnetizeSelfCard)?.onAfterMagnetizeSelf !== undefined;\n\nexport interface OnAfterMagnetizeCard extends Card {\n\tonAfterMagnetize: (entity: BoardEntity | BoardTrinket, input: OnAfterMagnetizeInput) => void;\n}\nexport const hasOnAfterMagnetize = (card: Card): card is OnAfterMagnetizeCard =>\n\t(card as OnAfterMagnetizeCard)?.onAfterMagnetize !== undefined;\n\nexport interface OnSpawnFailCard extends Card {\n\tonSpawnFail: (entity: BoardEntity, input: OnSpawnFailInput) => void;\n}\nexport const hasOnSpawnFail = (card: Card): card is OnSpawnFailCard =>\n\t(card as OnSpawnFailCard)?.onSpawnFail !== undefined;\n\nexport interface PlayedBloodGemsOnMeCard extends Card {\n\tplayedBloodGemsOnMe: (entity: BoardEntity, input: PlayedBloodGemsOnMeInput) => void;\n}\nexport const hasPlayedBloodGemsOnMe = (card: Card): card is PlayedBloodGemsOnMeCard =>\n\t(card as PlayedBloodGemsOnMeCard)?.playedBloodGemsOnMe !== undefined;\n\nexport interface PlayedBloodGemsOnAnyCard extends Card {\n\tplayedBloodGemsOnAny: (entity: BoardEntity, input: PlayedBloodGemsOnAnyInput) => void;\n}\nexport const hasPlayedBloodGemsOnAny = (card: Card): card is PlayedBloodGemsOnAnyCard =>\n\t(card as PlayedBloodGemsOnAnyCard)?.playedBloodGemsOnAny !== undefined;\n\nexport interface OnSpawnFailInput {\n\tfailedSpawn: BoardEntity;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\n\nexport interface CastSpellInput {\n\tspellCardId: string;\n\tsource: BoardEntity | BoardTrinket | BgsPlayerEntity;\n\ttarget: BoardEntity;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\totherBoard: BoardEntity[];\n\totherHero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\nexport interface OnDamagedInput {\n\tdamagedEntity: BoardEntity;\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\n\tdamage: number;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\totherHero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\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';\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\nimport { BoardSecret } from '../board-secret';\nimport { OnDivineShieldUpdatedInput } from '../keywords/divine-shield';\nimport { OnRebornUpdatedInput } from '../keywords/reborn';\nimport { OnStealthUpdatedInput } from '../keywords/stealth';\nimport { OnTauntUpdatedInput } from '../keywords/taunt';\nimport { OnVenomousUpdatedInput } from '../keywords/venomous';\nimport { OnWindfuryUpdatedInput } from '../keywords/windfury';\nimport {\n\tOnDespawnInput,\n\tOnFriendlyMinionSummonedTrinketInput,\n\tOnOtherSpawnAuraInput,\n\tOnOtherSpawnInput,\n\tOnSpawnInput,\n} from '../simulation/add-minion-to-board';\nimport {\n\tOnAfterDeathInput,\n\tOnAfterFriendlyMinionDeathInput,\n\tOnDeathInput,\n\tOnMinionKilledInput,\n} from '../simulation/attack';\nimport { AvengeInput } from '../simulation/avenge';\nimport { BattlecryInput, OnBattlecryTriggeredInput } from '../simulation/battlecries';\nimport { PlayedBloodGemsOnAnyInput, PlayedBloodGemsOnMeInput } from '../simulation/blood-gems';\nimport { OnCardAddedToHandInput } from '../simulation/cards-in-hand';\nimport { AfterDealDamageInput, AfterFriendlyMinionDamagedInput } from '../simulation/damage-effects';\nimport { AfterHeroDamagedInput } from '../simulation/damage-to-hero';\nimport { DeathrattleTriggeredInput } from '../simulation/deathrattle-on-trigger';\nimport { FullGameState } from '../simulation/internal-game-state';\nimport {\n\tOnAfterMagnetizeInput,\n\tOnAfterMagnetizeSelfInput,\n\tOnBeforeMagnetizeInput,\n\tOnBeforeMagnetizeSelfInput,\n} from '../simulation/magnetize';\nimport { OnAttackInput } from '../simulation/on-attack';\nimport { OnMinionAttackedInput } from '../simulation/on-being-attacked';\nimport { RebornEffectInput } from '../simulation/reborn';\nimport { SoCInput } from '../simulation/start-of-combat/start-of-combat-input';\nimport { OnStatsChangedInput } from '../simulation/stats';\n\nexport interface Card {\n\t// Maybe should make this mandatory\n\tcardIds?: readonly string[];\n\tstartOfCombat?: (\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\n\t\tinput: SoCInput,\n\t) => boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean };\n}\n\nexport interface DefaultChargesCard extends Card {\n\tdefaultCharges: (entity: BoardEntity) => number;\n}\nexport const hasDefaultCharges = (card: Card): card is DefaultChargesCard =>\n\t(card as DefaultChargesCard)?.defaultCharges !== undefined;\n\nexport interface StartOfCombatCard extends Card {\n\tstartOfCombatTiming?: StartOfCombatTiming;\n\tstartOfCombat: NonNullable<Card['startOfCombat']>;\n}\nexport const hasStartOfCombat = (card: Card): card is StartOfCombatCard =>\n\t(card as StartOfCombatCard)?.startOfCombat !== undefined;\nexport interface StartOfCombatFromHandCard extends StartOfCombatCard {\n\tstartOfCombatFromHand: true;\n}\nexport const hasStartOfCombatFromHand = (card: Card): card is StartOfCombatFromHandCard =>\n\t(card as StartOfCombatFromHandCard)?.startOfCombatFromHand !== undefined;\nexport type StartOfCombatTiming = 'start-of-combat' | 'pre-combat' | 'illidan';\n\nexport interface TavernSpellCard extends Card {\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => void;\n}\nexport const hasCastTavernSpell = (card: Card): card is TavernSpellCard =>\n\t(card as TavernSpellCard)?.castTavernSpell !== undefined;\n\nexport interface OnTavernSpellCastCard extends Card {\n\tonTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\n}\nexport const hasOnTavernSpellCast = (card: Card): card is OnTavernSpellCastCard =>\n\t(card as OnTavernSpellCastCard)?.onTavernSpellCast !== undefined;\n\nexport interface AfterTavernSpellCastCard extends Card {\n\tafterTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\n}\nexport const hasAfterTavernSpellCast = (card: Card): card is AfterTavernSpellCastCard =>\n\t(card as AfterTavernSpellCastCard)?.afterTavernSpellCast !== undefined;\n\n// Whenever this attacks\nexport interface RallyCard extends Card {\n\trally: (\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\n\t\tinput: OnAttackInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasRally = (card: Card): card is RallyCard => (card as RallyCard)?.rally !== undefined;\n\nexport interface OnWheneverAnotherMinionAttacksCard extends Card {\n\tonWheneverAnotherMinionAttacks: (\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\n\t\tinput: OnAttackInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasOnWheneverAnotherMinionAttacks = (card: Card): card is OnWheneverAnotherMinionAttacksCard =>\n\t(card as OnWheneverAnotherMinionAttacksCard)?.onWheneverAnotherMinionAttacks !== undefined;\n\nexport interface AfterAnotherMinionAttacksCard extends Card {\n\tafterAnotherMinionAttacks: (\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\n\t\tinput: OnAttackInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasAfterAnotherMinionAttacks = (card: Card): card is AfterAnotherMinionAttacksCard =>\n\t(card as AfterAnotherMinionAttacksCard)?.afterAnotherMinionAttacks !== undefined;\n\nexport interface OnMinionAttackedCard extends Card {\n\tonAttacked: (minion: BoardEntity, input: OnMinionAttackedInput) => void;\n}\nexport const hasOnMinionAttacked = (card: Card): card is OnMinionAttackedCard =>\n\t(card as OnMinionAttackedCard)?.onAttacked !== undefined;\n\nexport interface OnSpawnedCard extends Card {\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => void;\n}\nexport const hasOnSpawned = (card: Card): card is OnSpawnedCard => (card as OnSpawnedCard)?.onSpawned !== undefined;\n\nexport interface OnOtherSpawnedAuraCard extends Card {\n\tonOtherSpawnedAura: (minion: BoardEntity, input: OnOtherSpawnAuraInput) => void;\n}\nexport const hasOnOtherAuraSpawned = (card: Card): card is OnOtherSpawnedAuraCard =>\n\t(card as OnOtherSpawnedAuraCard)?.onOtherSpawnedAura !== undefined;\n\nexport interface OnOtherSpawnedCard extends Card {\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => void;\n}\nexport const hasOnOtherSpawned = (card: Card): card is OnOtherSpawnedCard =>\n\t(card as OnOtherSpawnedCard)?.onOtherSpawned !== undefined;\n\nexport interface AfterOtherSpawnedCard extends Card {\n\tafterOtherSpawned: (minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput) => void;\n}\nexport const hasAfterOtherSpawned = (card: Card): card is AfterOtherSpawnedCard =>\n\t(card as AfterOtherSpawnedCard)?.afterOtherSpawned !== undefined;\n\nexport interface OnFriendlyMinionSummonedTrinketCard extends Card {\n\tonFriendlyMinionSummoned: (trinket: BoardTrinket, input: OnFriendlyMinionSummonedTrinketInput) => void;\n}\nexport const hasOnFriendlyMinionSummonedTrinket = (card: Card): card is OnFriendlyMinionSummonedTrinketCard =>\n\t(card as OnFriendlyMinionSummonedTrinketCard)?.onFriendlyMinionSummoned !== undefined;\n\nexport interface OnDespawnedCard extends Card {\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => void;\n}\nexport const hasOnDespawned = (card: Card): card is OnDespawnedCard =>\n\t(card as OnDespawnedCard)?.onDespawned !== undefined;\n\nexport interface DeathrattleSpawnCard extends Card {\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => readonly BoardEntity[];\n}\nexport const hasDeathrattleSpawn = (card: Card): card is DeathrattleSpawnCard =>\n\t(card as DeathrattleSpawnCard)?.deathrattleSpawn !== undefined;\n\n/** Deathrattle that does not return board spawns (hand buffs, stat grants, etc.). */\nexport interface DeathrattleEffectCard extends Card {\n\tdeathrattleEffect: (minion: BoardEntity, input: DeathrattleTriggeredInput) => void;\n}\nexport const hasDeathrattleEffect = (card: Card): card is DeathrattleEffectCard =>\n\t(card as DeathrattleEffectCard)?.deathrattleEffect !== undefined;\n\nexport interface BattlecryCard extends Card {\n\t// boolean return type is used only for conditional battlecries (eg cards that only work as battlecries if a specific trinket\n\t// is in game)\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => boolean;\n}\nexport const hasBattlecry = (card: Card): card is BattlecryCard => (card as BattlecryCard)?.battlecry !== undefined;\n\nexport interface RebornEffectCard extends Card {\n\trebornEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\n}\nexport const hasRebornEffect = (card: Card): card is RebornEffectCard =>\n\t(card as RebornEffectCard)?.rebornEffect !== undefined;\n\nexport interface RebornSelfEffectCard extends Card {\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\n}\nexport const hasRebornSelfEffect = (card: Card): card is RebornSelfEffectCard =>\n\t(card as RebornSelfEffectCard)?.rebornSelfEffect !== undefined;\n\nexport interface OnBattlecryTriggeredCard extends Card {\n\tonBattlecryTriggered: (minion: BoardEntity, input: OnBattlecryTriggeredInput) => void;\n}\nexport const hasOnBattlecryTriggered = (card: Card): card is OnBattlecryTriggeredCard =>\n\t(card as OnBattlecryTriggeredCard)?.onBattlecryTriggered !== undefined;\n\nexport interface AvengeCard extends Card {\n\tavenge: (minion: BoardEntity | BoardTrinket, input: AvengeInput) => void | readonly BoardEntity[];\n\tbaseAvengeValue: (cardId: string) => number;\n}\nexport const hasAvenge = (card: Card): card is AvengeCard => (card as AvengeCard)?.avenge !== undefined;\n\nexport interface DefaultScriptDataNumCard extends Card {\n\tdefaultScriptDataNum: (cardId: string) => number;\n}\nexport const hasDefaultScriptDataNum = (card: Card): card is DefaultScriptDataNumCard =>\n\t(card as DefaultScriptDataNumCard)?.defaultScriptDataNum !== undefined;\n\n/** To use when another deathrattle is triggered */\nexport interface DeathrattleTriggeredCard extends Card {\n\tonDeathrattleTriggered: (minion: BoardEntity | BoardTrinket, input: DeathrattleTriggeredInput) => void;\n}\nexport const hasOnDeathrattleTriggered = (card: Card): card is DeathrattleTriggeredCard =>\n\t(card as DeathrattleTriggeredCard)?.onDeathrattleTriggered !== undefined;\n\n// export interface DeathrattleEnchantmentEffectCard extends Card {\n// \tdeathrattleEffectEnchantmentEffect: (\n// \t\tminion: { cardId: string; originEntityId?: number; repeats?: number },\n// \t\tinput: DeathrattleTriggeredInput,\n// \t) => void;\n// \tcardIds: readonly string[];\n// }\n// export const hasDeathrattleEnchantmentEffect = (card: Card): card is DeathrattleEnchantmentEffectCard =>\n// \t(card as DeathrattleEnchantmentEffectCard)?.deathrattleEffectEnchantmentEffect !== undefined;\n\nexport interface DeathrattleSpawnEnchantmentCard extends Card {\n\tdeathrattleSpawnEnchantmentEffect: (\n\t\tenchantment: { cardId: string; originEntityId?: number; repeats?: number },\n\t\tminion: BoardEntity | null | undefined,\n\t\tinput: DeathrattleTriggeredInput,\n\t) => readonly BoardEntity[];\n\tcardIds: readonly string[];\n}\nexport const hasDeathrattleSpawnEnchantment = (card: Card): card is DeathrattleSpawnEnchantmentCard =>\n\t(card as DeathrattleSpawnEnchantmentCard)?.deathrattleSpawnEnchantmentEffect !== undefined;\n\nexport interface OnCardAddedToHandCard extends Card {\n\tonCardAddedToHand: (entity: BoardEntity | BgsQuestEntity | BoardTrinket, input: OnCardAddedToHandInput) => void;\n}\nexport const hasOnCardAddedToHand = (card: Card): card is OnCardAddedToHandCard =>\n\t(card as OnCardAddedToHandCard)?.onCardAddedToHand !== undefined;\n\nexport interface EndOfTurnCard extends Card {\n\t// Use BattlecryInput because it's the only way end of turn effects are triggered\n\tendOfTurn: (entity: BoardEntity, input: EndOfTurnInput) => void;\n}\nexport const hasEndOfTurn = (card: Card): card is EndOfTurnCard => (card as EndOfTurnCard)?.endOfTurn !== undefined;\nexport type EndOfTurnInput = BattlecryInput;\n\nexport interface OnDivineShieldUpdatedCard extends Card {\n\tonDivineShieldUpdated: (entity: BoardEntity | BoardTrinket, input: OnDivineShieldUpdatedInput) => void;\n}\nexport const hasOnDivineShieldUpdated = (card: Card): card is OnDivineShieldUpdatedCard =>\n\t(card as OnDivineShieldUpdatedCard)?.onDivineShieldUpdated !== undefined;\n\nexport interface OnTauntUpdatedCard extends Card {\n\tonTauntUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnTauntUpdatedInput,\n\t) => void;\n}\nexport const hasOnTauntUpdated = (card: Card): card is OnTauntUpdatedCard =>\n\t(card as OnTauntUpdatedCard)?.onTauntUpdated !== undefined;\n\nexport interface OnRebornUpdatedCard extends Card {\n\tonRebornUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnRebornUpdatedInput,\n\t) => void;\n}\nexport const hasOnRebornUpdated = (card: Card): card is OnRebornUpdatedCard =>\n\t(card as OnRebornUpdatedCard)?.onRebornUpdated !== undefined;\n\nexport interface OnStealthUpdatedCard extends Card {\n\tonStealthUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnStealthUpdatedInput,\n\t) => void;\n}\nexport const hasOnStealthUpdated = (card: Card): card is OnStealthUpdatedCard =>\n\t(card as OnStealthUpdatedCard)?.onStealthUpdated !== undefined;\n\nexport interface OnVenomousUpdatedCard extends Card {\n\tonVenomousUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnVenomousUpdatedInput,\n\t) => void;\n}\nexport const hasOnVenomousUpdated = (card: Card): card is OnVenomousUpdatedCard =>\n\t(card as OnVenomousUpdatedCard)?.onVenomousUpdated !== undefined;\n\nexport interface OnWindfuryUpdatedCard extends Card {\n\tonWindfuryUpdated: (\n\t\tentity: BoardEntity,\n\t\timpactedEntity: BoardEntity,\n\t\tpreviousValue: boolean,\n\t\tinput: OnWindfuryUpdatedInput,\n\t) => void;\n}\nexport const hasOnWindfuryUpdated = (card: Card): card is OnWindfuryUpdatedCard =>\n\t(card as OnWindfuryUpdatedCard)?.onWindfuryUpdated !== undefined;\n\nexport interface OnStatsChangedCard extends Card {\n\tonStatsChanged: (entity: BoardEntity, input: OnStatsChangedInput) => void;\n}\nexport const hasOnStatsChanged = (card: Card): card is OnStatsChangedCard =>\n\t(card as OnStatsChangedCard)?.onStatsChanged !== undefined;\n\nexport interface AfterHeroDamagedCard extends Card {\n\tafterHeroDamaged: (entity: BoardEntity | BoardTrinket, input: AfterHeroDamagedInput) => void;\n}\nexport const hasAfterHeroDamaged = (card: Card): card is AfterHeroDamagedCard =>\n\t(card as AfterHeroDamagedCard)?.afterHeroDamaged !== undefined;\n\nexport interface OnDamagedCard extends Card {\n\tonDamaged: (entity: BoardEntity, input: OnDamagedInput) => void;\n}\nexport const hasOnDamaged = (card: Card): card is OnDamagedCard => (card as OnDamagedCard)?.onDamaged !== undefined;\n\nexport interface AfterDealDamageCard extends Card {\n\t// Called whenever damage is dealt, both on the friendly and enemy side\n\t// So you need to check the \"friendly\" flag\n\tafterDealDamage: (entity: BoardEntity, input: AfterDealDamageInput) => void;\n}\nexport const hasAfterDealDamage = (card: Card): card is AfterDealDamageCard =>\n\t(card as AfterDealDamageCard)?.afterDealDamage !== undefined;\n\nexport interface AfterFriendlyMinionDamagedTrinketCard extends Card {\n\tafterFriendlyMinionDamaged: (trinket: BoardTrinket, input: AfterFriendlyMinionDamagedInput) => void;\n}\nexport const hasAfterFriendlyMinionDamagedTrinket = (card: Card): card is AfterFriendlyMinionDamagedTrinketCard =>\n\t(card as AfterFriendlyMinionDamagedTrinketCard)?.afterFriendlyMinionDamaged !== undefined;\n\nexport interface OnDeathCard extends Card {\n\tonDeath: (entity: BoardEntity, input: OnDeathInput) => void;\n}\nexport const hasOnDeath = (card: Card): card is OnDeathCard => (card as OnDeathCard)?.onDeath !== undefined;\n\nexport interface OnAfterDeathCard extends Card {\n\tonAfterDeath: (entity: BoardEntity | BoardTrinket, input: OnAfterDeathInput) => void;\n}\nexport const hasOnAfterDeath = (card: Card): card is OnAfterDeathCard =>\n\t(card as OnAfterDeathCard)?.onAfterDeath !== undefined;\n\n/**\n * After any friendly board minion dies (during `applyWheneverMinionDiesEffect`). Filter in the card\n * (e.g. only if `input.deadEntity.taunt`). Board minions and trinkets that implement this are dispatched\n * from `deathrattle-effects`.\n */\nexport interface OnAfterFriendlyMinionDeathCard extends Card {\n\tonAfterFriendlyMinionDeath: (listener: BoardEntity | BoardTrinket, input: OnAfterFriendlyMinionDeathInput) => void;\n}\nexport const hasOnAfterFriendlyMinionDeath = (card: Card): card is OnAfterFriendlyMinionDeathCard =>\n\t(card as OnAfterFriendlyMinionDeathCard)?.onAfterFriendlyMinionDeath !== undefined;\n\nexport interface OnMinionKilledCard extends Card {\n\tonMinionKilled: (\n\t\tentity: BoardEntity,\n\t\tinput: OnMinionKilledInput,\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\n}\nexport const hasOnMinionKilled = (card: Card): card is OnMinionKilledCard =>\n\t(card as OnMinionKilledCard)?.onMinionKilled !== undefined;\n\nexport interface OnBeforeMagnetizeCard extends Card {\n\tonBeforeMagnetize: (entity: BoardEntity | BoardTrinket, input: OnBeforeMagnetizeInput) => void;\n}\nexport const hasOnBeforeMagnetize = (card: Card): card is OnBeforeMagnetizeCard =>\n\t(card as OnBeforeMagnetizeCard)?.onBeforeMagnetize !== undefined;\n\nexport interface OnBeforeMagnetizeSelfCard extends Card {\n\tonBeforeMagnetizeSelf: (entity: BoardEntity, input: OnBeforeMagnetizeSelfInput) => void;\n}\nexport const hasOnBeforeMagnetizeSelf = (card: Card): card is OnBeforeMagnetizeSelfCard =>\n\t(card as OnBeforeMagnetizeSelfCard)?.onBeforeMagnetizeSelf !== undefined;\n\nexport interface OnAfterMagnetizeToSelfCard extends Card {\n\tonAfterMagnetizeToSelf: (entity: BoardEntity, input: OnAfterMagnetizeSelfInput) => void;\n}\nexport const hasOnAfterMagnetizeToSelf = (card: Card): card is OnAfterMagnetizeToSelfCard =>\n\t(card as OnAfterMagnetizeToSelfCard)?.onAfterMagnetizeToSelf !== undefined;\n\nexport interface OnAfterMagnetizeSelfCard extends Card {\n\tonAfterMagnetizeSelf: (entity: BoardEntity, input: OnAfterMagnetizeInput) => void;\n}\nexport const hasOnAfterMagnetizeSelf = (card: Card): card is OnAfterMagnetizeSelfCard =>\n\t(card as OnAfterMagnetizeSelfCard)?.onAfterMagnetizeSelf !== undefined;\n\nexport interface OnAfterMagnetizeCard extends Card {\n\tonAfterMagnetize: (entity: BoardEntity | BoardTrinket, input: OnAfterMagnetizeInput) => void;\n}\nexport const hasOnAfterMagnetize = (card: Card): card is OnAfterMagnetizeCard =>\n\t(card as OnAfterMagnetizeCard)?.onAfterMagnetize !== undefined;\n\nexport interface OnSpawnFailCard extends Card {\n\tonSpawnFail: (entity: BoardEntity, input: OnSpawnFailInput) => void;\n}\nexport const hasOnSpawnFail = (card: Card): card is OnSpawnFailCard =>\n\t(card as OnSpawnFailCard)?.onSpawnFail !== undefined;\n\nexport interface PlayedBloodGemsOnMeCard extends Card {\n\tplayedBloodGemsOnMe: (entity: BoardEntity, input: PlayedBloodGemsOnMeInput) => void;\n}\nexport const hasPlayedBloodGemsOnMe = (card: Card): card is PlayedBloodGemsOnMeCard =>\n\t(card as PlayedBloodGemsOnMeCard)?.playedBloodGemsOnMe !== undefined;\n\nexport interface PlayedBloodGemsOnAnyCard extends Card {\n\tplayedBloodGemsOnAny: (entity: BoardEntity, input: PlayedBloodGemsOnAnyInput) => void;\n}\nexport const hasPlayedBloodGemsOnAny = (card: Card): card is PlayedBloodGemsOnAnyCard =>\n\t(card as PlayedBloodGemsOnAnyCard)?.playedBloodGemsOnAny !== undefined;\n\nexport interface OnSpawnFailInput {\n\tfailedSpawn: BoardEntity;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\n\nexport interface CastSpellInput {\n\tspellCardId: string;\n\tsource: BoardEntity | BoardTrinket | BgsPlayerEntity;\n\ttarget: BoardEntity;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\totherBoard: BoardEntity[];\n\totherHero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\nexport interface OnDamagedInput {\n\tdamagedEntity: BoardEntity;\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\n\tdamage: number;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\totherHero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\n"]}
@@ -234,7 +234,8 @@ class CardsData {
234
234
  }
235
235
  }
236
236
  }
237
- return (_a = (0, utils_1.pickRandom)(pool)) === null || _a === void 0 ? void 0 : _a.id;
237
+ const result = (_a = (0, utils_1.pickRandom)(pool)) === null || _a === void 0 ? void 0 : _a.id;
238
+ return result;
238
239
  }
239
240
  getRandomDivineShield(tavernLimitUpper) {
240
241
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"cards-data.js","sourceRoot":"","sources":["../../src/cards/cards-data.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAllCardsService,\n\tCardType,\n\tGameTag,\n\tisBattlegroundsCard,\n\tRace,\n\tReferenceCard,\n\tSpellSchool,\n} from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\nimport { BoardEntity } from '../board-entity';\nimport { debugState } from '../debug-state';\nimport { CardIds } from '../services/card-ids';\nimport { groupByFunction, pickRandom } from '../services/utils';\nimport { getRaceEnum, hasMechanic, isCorrectTribe, isVolumizer } from '../utils';\nimport { hasAvenge, hasDefaultScriptDataNum } from './card.interface';\nimport { cardMappings } from './impl/_card-mappings';\n\nexport const isWhelp = (cardId: string, allCards: AllCardsService): boolean => {\n\treturn allCards.getCard(cardId).mechanics?.includes(GameTag[GameTag.WHELP]);\n};\n\nexport const validBonusKeywords = [\n\tGameTag.TAUNT,\n\tGameTag.DIVINE_SHIELD,\n\tGameTag.VENOMOUS,\n\tGameTag.POISONOUS,\n\tGameTag.WINDFURY,\n\tGameTag.STEALTH,\n\tGameTag.REBORN,\n];\n\nexport const hasKeyword = (entity: BoardEntity, keyword: GameTag) => {\n\tswitch (keyword) {\n\t\tcase GameTag.TAUNT:\n\t\t\treturn entity.taunt;\n\t\tcase GameTag.DIVINE_SHIELD:\n\t\t\treturn entity.divineShield;\n\t\tcase GameTag.VENOMOUS:\n\t\t\treturn entity.venomous;\n\t\tcase GameTag.WINDFURY:\n\t\t\treturn entity.windfury;\n\t\tcase GameTag.STEALTH:\n\t\t\treturn entity.stealth;\n\t\tcase GameTag.REBORN:\n\t\t\treturn entity.reborn;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n\nexport class CardsData {\n\tpublic ghastcoilerSpawns: readonly string[];\n\tpublic impMamaSpawns: readonly string[];\n\tpublic demonSpawns: readonly string[];\n\tpublic gentleDjinniSpawns: readonly string[];\n\tpublic kilrekSpawns: readonly string[];\n\tpublic battlecryMinions: readonly string[];\n\tpublic deathrattleMinions: readonly string[];\n\tpublic pirateSpawns: readonly string[];\n\tpublic beastSpawns: readonly string[];\n\tpublic scrapScraperSpawns: readonly string[];\n\t/** Tavern spells with BACON_BOUNTY (Proud Privateer, Lost City Looter). */\n\tpublic bountyTavernSpellIds: readonly string[];\n\tpublic endOfTurnMinions: readonly string[];\n\tpublic magneticMinions: readonly ReferenceCard[];\n\tpublic spellcraftPool: readonly ReferenceCard[];\n\n\tpublic putricidePool1: readonly string[];\n\tpublic putricidePool2: readonly string[];\n\tpublic putridicePool2ForEternalSummoner: readonly string[];\n\n\tprivate pool: readonly ReferenceCard[];\n\tprivate minionsForTier: { [key: string]: readonly ReferenceCard[] };\n\n\tconstructor(private readonly allCards: AllCardsService, init = true) {\n\t\tif (init) {\n\t\t\tthis.inititialize();\n\t\t}\n\t}\n\n\tpublic inititialize(validTribes?: readonly Race[], anomalies?: readonly string[]): void {\n\t\tconst poolWithGolden = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => isBattlegroundsCard(card))\n\t\t\t// Premiums are not in bacon pool\n\t\t\t.filter((card) => card.isBaconPool || this.allCards.getCard(card.battlegroundsNormalDbfId)?.isBaconPool)\n\t\t\t.filter((card) => card.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((card) => !hasMechanic(card, GameTag.BACON_BUDDY))\n\t\t\t.filter((card) => card.set !== 'Vanilla')\n\t\t\t.filter((card) =>\n\t\t\t\tanomalies?.includes(CardIds.BigLeague_BG27_Anomaly_100)\n\t\t\t\t\t? card.techLevel >= 3\n\t\t\t\t\t: anomalies?.includes(CardIds.LittleLeague_BG27_Anomaly_800)\n\t\t\t\t\t? card.techLevel <= 4\n\t\t\t\t\t: true,\n\t\t\t);\n\t\tthis.pool = poolWithGolden\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\n\t\t\t.filter((card) =>\n\t\t\t\tanomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)\n\t\t\t\t\t? this.isGolden(card)\n\t\t\t\t\t: !this.isGolden(card),\n\t\t\t);\n\t\tthis.minionsForTier = groupByFunction((card: ReferenceCard) => card.techLevel)(this.pool);\n\t\tthis.ghastcoilerSpawns = this.pool\n\t\t\t.filter((card) => card.id !== 'BGS_008')\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\n\t\t\t.map((card) => card.id);\n\t\tthis.demonSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.DEMON)).map((card) => card.id);\n\t\tthis.impMamaSpawns = this.demonSpawns.filter((cardId) => cardId !== CardIds.ImpMama_BGS_044);\n\t\tthis.gentleDjinniSpawns = this.pool\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.ELEMENTAL))\n\t\t\t.filter((card) => card.id !== CardIds.GentleDjinni_BGS_121)\n\t\t\t.map((card) => card.id);\n\t\t// FIXME: just spawn a random undead instead of an Undead Creation\n\t\t// this.festergutSpawns = pool\n\t\t// \t.filter((card) => !this.isGolden(card))\n\t\t// \t.filter((card) => isCorrectTribe(card.races, Race.UNDEAD))\n\t\t// \t.filter((card) => card.id !== CardIds.Festergut_BG25_HERO_100_Buddy)\n\t\t// \t// .filter((card) => REMOVED_CARD_IDS.indexOf(card.id) === -1)\n\t\t// \t.map((card) => card.id);\n\t\tthis.kilrekSpawns = this.pool\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.DEMON))\n\t\t\t.filter((card) => card.id !== CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy)\n\t\t\t.map((card) => card.id);\n\t\tthis.battlecryMinions = this.pool.filter((card) => hasMechanic(card, GameTag.BATTLECRY)).map((card) => card.id);\n\t\tthis.deathrattleMinions = this.pool\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\n\t\t\t.map((card) => card.id);\n\t\tthis.pirateSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.PIRATE)).map((card) => card.id);\n\t\tthis.beastSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.BEAST)).map((card) => card.id);\n\t\tthis.scrapScraperSpawns = this.pool\n\t\t\t.filter((card) => hasMechanic(card, GameTag.MAGNETIC))\n\t\t\t.map((card) => card.id);\n\t\tthis.endOfTurnMinions = this.pool\n\t\t\t.filter((card) => hasMechanic(card, GameTag.END_OF_TURN))\n\t\t\t.map((card) => card.id);\n\t\tthis.magneticMinions = this.pool.filter((card) => hasMechanic(card, GameTag.MAGNETIC));\n\t\tthis.spellcraftPool = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((c) => c.spellSchool === SpellSchool[SpellSchool.SPELLCRAFT])\n\t\t\t.filter((c) => !c.premium)\n\t\t\t.filter((c) => c.set === 'Battlegrounds')\n\t\t\t// Remove unimplemented ones (mainly spellcrafts that don't have sense in combat)\n\t\t\t.filter((c) => cardMappings[c.id] != null);\n\n\t\tthis.bountyTavernSpellIds = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((c) => c.set === 'Battlegrounds' && !c.premium)\n\t\t\t.filter((c) => c.type?.toUpperCase() === CardType[CardType.SPELL])\n\t\t\t.filter((c) => c.mechanics?.includes('BACON_BOUNTY'))\n\t\t\t.filter((c) => cardMappings[c.id] != null)\n\t\t\t.map((c) => c.id);\n\n\t\tthis.putricidePool1 = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => card.battlegroundsPutridicePool1)\n\t\t\t.map((card) => card.id);\n\t\tthis.putricidePool2 = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\n\t\t\t.map((card) => card.id);\n\t\tthis.putridicePool2ForEternalSummoner = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\n\t\t\t.filter((card) => !card.battlegroundsPutridiceSummonerExclusion)\n\t\t\t.map((card) => card.id);\n\t}\n\n\tpublic avengeValue(cardId: string): number {\n\t\tconst avengeImpl = cardMappings[cardId];\n\t\tif (hasAvenge(avengeImpl)) {\n\t\t\treturn avengeImpl.baseAvengeValue(cardId);\n\t\t}\n\t\tswitch (cardId) {\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\n\t\t\t\t// case CardIds.IceSickle:\n\t\t\t\treturn 1;\n\t\t\tcase CardIds.MechanoTank_BG21_023:\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\n\t\t\tcase CardIds.Bristlebach_BG26_157:\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\n\t\t\t\treturn 2;\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\n\t\t\t\treturn 3;\n\t\t\tcase CardIds.Onyxia_Broodmother:\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\n\t\t\t// case CardIds.Sisefin_BG21_009:\n\t\t\t// case CardIds.Sisefin_BG21_009_G:\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031:\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031_G:\n\t\t\t// case CardIds.ScrapScraper_BG26_148:\n\t\t\t// case CardIds.ScrapScraper_BG26_148_G:\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\n\t\t\t\treturn 4;\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\n\t\t\t\treturn 5;\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\n\t\t\t\treturn 7;\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\n\t\t\t\treturn 9;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tpublic defaultScriptDataNum(cardId: string): number {\n\t\tconst defaultScriptDataNumImpl = cardMappings[cardId];\n\t\tif (hasDefaultScriptDataNum(defaultScriptDataNumImpl)) {\n\t\t\treturn defaultScriptDataNumImpl.defaultScriptDataNum(cardId);\n\t\t}\n\t\tswitch (cardId) {\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\n\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\n\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\n\t\t\tcase CardIds.BoomController_BG30_MagicItem_440:\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\n\t\t\tcase CardIds.DeathlyPhylactery_BG30_MagicItem_700:\n\t\t\tcase CardIds.PromoPortrait_BG30_MagicItem_918:\n\t\t\t\treturn 1;\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\n\t\t\tcase CardIds.MechagonAdapter_BG30_MagicItem_910:\n\t\t\tcase CardIds.FaerieDragonScale_BG32_MagicItem_363:\n\t\t\t\treturn 3;\n\t\t\tdefault:\n\t\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpublic getTavernLevel(cardId: string): number {\n\t\treturn this.allCards.getCard(cardId).techLevel ?? 1;\n\t}\n\n\tpublic getRandomMinionForTavernTier(tavernTier: number): string {\n\t\t// Tzvern tier can be undefined for hero-power specific tokens, like the Amalgam, or when\n\t\t// for some reason tokens end up in the shop. For now, defaulting to 1 for tavern\n\t\t// level seems to work in all cases\n\t\tconst minionsForTier = this.minionsForTier[tavernTier ?? 1];\n\t\tif (!minionsForTier?.length) {\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\n\t\t}\n\t\treturn pickRandom(minionsForTier)?.id;\n\t}\n\n\tpublic getRandomMinionForMinTavernTier(tavernTier: number): string {\n\t\tconst minionsForTier = this.pool.filter((m) => m.techLevel >= tavernTier);\n\t\tif (!minionsForTier?.length) {\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\n\t\t}\n\t\treturn pickRandom(minionsForTier)?.id;\n\t}\n\n\tpublic getRandomMechToMagnetize(tavernLimitUpper: number): string {\n\t\tconst magneticMechs = this.pool\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => hasMechanic(m, GameTag.MODULAR));\n\t\tconst pool = magneticMechs.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomMagneticVolumizer(\n\t\tplayerEntity: BgsPlayerEntity,\n\t\tanomalies: readonly string[],\n\t\ttavernLimitUpper: number,\n\t\tsourceEntity?: BoardEntity,\n\t\ttargetEntity?: BoardEntity,\n\t): string {\n\t\tconst magneticVolumizers = this.magneticMinions.filter((m) =>\n\t\t\tisVolumizer(m.id, playerEntity, anomalies, this.allCards),\n\t\t);\n\t\tconst pool = magneticVolumizers.filter((m) => m.techLevel <= tavernLimitUpper);\n\n\t\tif (sourceEntity && targetEntity && debugState.active && debugState.forcedRandomPicks.length > 0) {\n\t\t\tconst forced = debugState.forcedRandomPicks.find(\n\t\t\t\t(p) =>\n\t\t\t\t\tdebugState.isCorrectEntity(p.source, sourceEntity) &&\n\t\t\t\t\tdebugState.isCorrectEntity(p.target, targetEntity),\n\t\t\t);\n\t\t\tif (forced?.chosenCardId) {\n\t\t\t\tconst inPool = pool.some((m) => m.id === forced.chosenCardId);\n\t\t\t\tif (inPool) {\n\t\t\t\t\tdebugState.forcedRandomPicks = debugState.forcedRandomPicks.filter((p) => p !== forced);\n\t\t\t\t\treturn forced.chosenCardId;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomDivineShield(tavernLimitUpper: number) {\n\t\tconst divineShieldPool = this.pool\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => hasMechanic(m, GameTag.DIVINE_SHIELD));\n\t\tconst pool = divineShieldPool.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomRally(tavernLimitUpper: number) {\n\t\tconst targetPool = this.pool\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => hasMechanic(m, GameTag.BACON_RALLY));\n\t\tconst pool = targetPool.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomMinionForTribe(\n\t\ttribe: Race,\n\t\ttavernLimitUpper: number,\n\t\texcludedCards: readonly string[] = [],\n\t): string {\n\t\tconst pool = this.pool\n\t\t\t.filter((m) => this.isValidTribe([tribe], m.races, false))\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper)\n\t\t\t.filter((m) => !excludedCards.includes(m.id));\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomProtossMinion(tavernLimitUpper: number): string {\n\t\tconst pool = this.pool\n\t\t\t.filter((m) => m.mechanics?.includes(GameTag[GameTag.PROTOSS]))\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomSpellcraft(options: { maxTavernTier?: number }): string {\n\t\tconst pool = this.spellcraftPool.filter((c) =>\n\t\t\toptions.maxTavernTier ? c.techLevel <= options.maxTavernTier : true,\n\t\t);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic isGolden(card: ReferenceCard): boolean {\n\t\treturn card.premium;\n\t}\n\n\tprivate isValidTribe(validTribes: readonly Race[], cardRaces: readonly string[], allowEmptyRaces = true): boolean {\n\t\tif (!cardRaces?.length && allowEmptyRaces) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (cardRaces ?? [])\n\t\t\t.map((race) => getRaceEnum(race))\n\t\t\t.some((raceEnum) => raceEnum === Race.ALL || !validTribes?.length || validTribes.includes(raceEnum));\n\t}\n\n\tpublic getRandomTavernSpell(options?: { exactTavernTier?: number; maxTavernTier?: number }): string {\n\t\treturn null;\n\t}\n\n\t/** BG 2-cost spells that have simulator support (cardMappings). */\n\tpublic getTwoCostBattlegroundsSpellIdsImplemented(): string[] {\n\t\treturn this.allCards\n\t\t\t.getCards()\n\t\t\t.filter(\n\t\t\t\t(c) =>\n\t\t\t\t\tc.set === 'Battlegrounds' &&\n\t\t\t\t\t!c.premium &&\n\t\t\t\t\t(c.cost ?? 0) === 2 &&\n\t\t\t\t\tc.type?.toUpperCase() === CardType[CardType.SPELL] &&\n\t\t\t\t\tcardMappings[c.id] != null,\n\t\t\t)\n\t\t\t.map((c) => c.id);\n\t}\n}\n"]}
1
+ {"version":3,"file":"cards-data.js","sourceRoot":"","sources":["../../src/cards/cards-data.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAllCardsService,\n\tCardType,\n\tGameTag,\n\tisBattlegroundsCard,\n\tRace,\n\tReferenceCard,\n\tSpellSchool,\n} from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\nimport { BoardEntity } from '../board-entity';\nimport { debugState } from '../debug-state';\nimport { CardIds } from '../services/card-ids';\nimport { groupByFunction, pickRandom } from '../services/utils';\nimport { getRaceEnum, hasMechanic, isCorrectTribe, isVolumizer } from '../utils';\nimport { hasAvenge, hasDefaultScriptDataNum } from './card.interface';\nimport { cardMappings } from './impl/_card-mappings';\n\nexport const isWhelp = (cardId: string, allCards: AllCardsService): boolean => {\n\treturn allCards.getCard(cardId).mechanics?.includes(GameTag[GameTag.WHELP]);\n};\n\nexport const validBonusKeywords = [\n\tGameTag.TAUNT,\n\tGameTag.DIVINE_SHIELD,\n\tGameTag.VENOMOUS,\n\tGameTag.POISONOUS,\n\tGameTag.WINDFURY,\n\tGameTag.STEALTH,\n\tGameTag.REBORN,\n];\n\nexport const hasKeyword = (entity: BoardEntity, keyword: GameTag) => {\n\tswitch (keyword) {\n\t\tcase GameTag.TAUNT:\n\t\t\treturn entity.taunt;\n\t\tcase GameTag.DIVINE_SHIELD:\n\t\t\treturn entity.divineShield;\n\t\tcase GameTag.VENOMOUS:\n\t\t\treturn entity.venomous;\n\t\tcase GameTag.WINDFURY:\n\t\t\treturn entity.windfury;\n\t\tcase GameTag.STEALTH:\n\t\t\treturn entity.stealth;\n\t\tcase GameTag.REBORN:\n\t\t\treturn entity.reborn;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n\nexport class CardsData {\n\tpublic ghastcoilerSpawns: readonly string[];\n\tpublic impMamaSpawns: readonly string[];\n\tpublic demonSpawns: readonly string[];\n\tpublic gentleDjinniSpawns: readonly string[];\n\tpublic kilrekSpawns: readonly string[];\n\tpublic battlecryMinions: readonly string[];\n\tpublic deathrattleMinions: readonly string[];\n\tpublic pirateSpawns: readonly string[];\n\tpublic beastSpawns: readonly string[];\n\tpublic scrapScraperSpawns: readonly string[];\n\t/** Tavern spells with BACON_BOUNTY (Proud Privateer, Lost City Looter). */\n\tpublic bountyTavernSpellIds: readonly string[];\n\tpublic endOfTurnMinions: readonly string[];\n\tpublic magneticMinions: readonly ReferenceCard[];\n\tpublic spellcraftPool: readonly ReferenceCard[];\n\n\tpublic putricidePool1: readonly string[];\n\tpublic putricidePool2: readonly string[];\n\tpublic putridicePool2ForEternalSummoner: readonly string[];\n\n\tprivate pool: readonly ReferenceCard[];\n\tprivate minionsForTier: { [key: string]: readonly ReferenceCard[] };\n\n\tconstructor(private readonly allCards: AllCardsService, init = true) {\n\t\tif (init) {\n\t\t\tthis.inititialize();\n\t\t}\n\t}\n\n\tpublic inititialize(validTribes?: readonly Race[], anomalies?: readonly string[]): void {\n\t\tconst poolWithGolden = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => isBattlegroundsCard(card))\n\t\t\t// Premiums are not in bacon pool\n\t\t\t.filter((card) => card.isBaconPool || this.allCards.getCard(card.battlegroundsNormalDbfId)?.isBaconPool)\n\t\t\t.filter((card) => card.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((card) => !hasMechanic(card, GameTag.BACON_BUDDY))\n\t\t\t.filter((card) => card.set !== 'Vanilla')\n\t\t\t.filter((card) =>\n\t\t\t\tanomalies?.includes(CardIds.BigLeague_BG27_Anomaly_100)\n\t\t\t\t\t? card.techLevel >= 3\n\t\t\t\t\t: anomalies?.includes(CardIds.LittleLeague_BG27_Anomaly_800)\n\t\t\t\t\t? card.techLevel <= 4\n\t\t\t\t\t: true,\n\t\t\t);\n\t\tthis.pool = poolWithGolden\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\n\t\t\t.filter((card) =>\n\t\t\t\tanomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)\n\t\t\t\t\t? this.isGolden(card)\n\t\t\t\t\t: !this.isGolden(card),\n\t\t\t);\n\t\tthis.minionsForTier = groupByFunction((card: ReferenceCard) => card.techLevel)(this.pool);\n\t\tthis.ghastcoilerSpawns = this.pool\n\t\t\t.filter((card) => card.id !== 'BGS_008')\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\n\t\t\t.map((card) => card.id);\n\t\tthis.demonSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.DEMON)).map((card) => card.id);\n\t\tthis.impMamaSpawns = this.demonSpawns.filter((cardId) => cardId !== CardIds.ImpMama_BGS_044);\n\t\tthis.gentleDjinniSpawns = this.pool\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.ELEMENTAL))\n\t\t\t.filter((card) => card.id !== CardIds.GentleDjinni_BGS_121)\n\t\t\t.map((card) => card.id);\n\t\t// FIXME: just spawn a random undead instead of an Undead Creation\n\t\t// this.festergutSpawns = pool\n\t\t// \t.filter((card) => !this.isGolden(card))\n\t\t// \t.filter((card) => isCorrectTribe(card.races, Race.UNDEAD))\n\t\t// \t.filter((card) => card.id !== CardIds.Festergut_BG25_HERO_100_Buddy)\n\t\t// \t// .filter((card) => REMOVED_CARD_IDS.indexOf(card.id) === -1)\n\t\t// \t.map((card) => card.id);\n\t\tthis.kilrekSpawns = this.pool\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.DEMON))\n\t\t\t.filter((card) => card.id !== CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy)\n\t\t\t.map((card) => card.id);\n\t\tthis.battlecryMinions = this.pool.filter((card) => hasMechanic(card, GameTag.BATTLECRY)).map((card) => card.id);\n\t\tthis.deathrattleMinions = this.pool\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\n\t\t\t.map((card) => card.id);\n\t\tthis.pirateSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.PIRATE)).map((card) => card.id);\n\t\tthis.beastSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.BEAST)).map((card) => card.id);\n\t\tthis.scrapScraperSpawns = this.pool\n\t\t\t.filter((card) => hasMechanic(card, GameTag.MAGNETIC))\n\t\t\t.map((card) => card.id);\n\t\tthis.endOfTurnMinions = this.pool\n\t\t\t.filter((card) => hasMechanic(card, GameTag.END_OF_TURN))\n\t\t\t.map((card) => card.id);\n\t\tthis.magneticMinions = this.pool.filter((card) => hasMechanic(card, GameTag.MAGNETIC));\n\t\tthis.spellcraftPool = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((c) => c.spellSchool === SpellSchool[SpellSchool.SPELLCRAFT])\n\t\t\t.filter((c) => !c.premium)\n\t\t\t.filter((c) => c.set === 'Battlegrounds')\n\t\t\t// Remove unimplemented ones (mainly spellcrafts that don't have sense in combat)\n\t\t\t.filter((c) => cardMappings[c.id] != null);\n\n\t\tthis.bountyTavernSpellIds = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((c) => c.set === 'Battlegrounds' && !c.premium)\n\t\t\t.filter((c) => c.type?.toUpperCase() === CardType[CardType.SPELL])\n\t\t\t.filter((c) => c.mechanics?.includes('BACON_BOUNTY'))\n\t\t\t.filter((c) => cardMappings[c.id] != null)\n\t\t\t.map((c) => c.id);\n\n\t\tthis.putricidePool1 = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => card.battlegroundsPutridicePool1)\n\t\t\t.map((card) => card.id);\n\t\tthis.putricidePool2 = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\n\t\t\t.map((card) => card.id);\n\t\tthis.putridicePool2ForEternalSummoner = this.allCards\n\t\t\t.getCards()\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\n\t\t\t.filter((card) => !card.battlegroundsPutridiceSummonerExclusion)\n\t\t\t.map((card) => card.id);\n\t}\n\n\tpublic avengeValue(cardId: string): number {\n\t\tconst avengeImpl = cardMappings[cardId];\n\t\tif (hasAvenge(avengeImpl)) {\n\t\t\treturn avengeImpl.baseAvengeValue(cardId);\n\t\t}\n\t\tswitch (cardId) {\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\n\t\t\t\t// case CardIds.IceSickle:\n\t\t\t\treturn 1;\n\t\t\tcase CardIds.MechanoTank_BG21_023:\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\n\t\t\tcase CardIds.Bristlebach_BG26_157:\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\n\t\t\t\treturn 2;\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\n\t\t\t\treturn 3;\n\t\t\tcase CardIds.Onyxia_Broodmother:\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\n\t\t\t// case CardIds.Sisefin_BG21_009:\n\t\t\t// case CardIds.Sisefin_BG21_009_G:\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031:\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031_G:\n\t\t\t// case CardIds.ScrapScraper_BG26_148:\n\t\t\t// case CardIds.ScrapScraper_BG26_148_G:\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\n\t\t\t\treturn 4;\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\n\t\t\t\treturn 5;\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\n\t\t\t\treturn 7;\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\n\t\t\t\treturn 9;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tpublic defaultScriptDataNum(cardId: string): number {\n\t\tconst defaultScriptDataNumImpl = cardMappings[cardId];\n\t\tif (hasDefaultScriptDataNum(defaultScriptDataNumImpl)) {\n\t\t\treturn defaultScriptDataNumImpl.defaultScriptDataNum(cardId);\n\t\t}\n\t\tswitch (cardId) {\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\n\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\n\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\n\t\t\tcase CardIds.BoomController_BG30_MagicItem_440:\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\n\t\t\tcase CardIds.DeathlyPhylactery_BG30_MagicItem_700:\n\t\t\tcase CardIds.PromoPortrait_BG30_MagicItem_918:\n\t\t\t\treturn 1;\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\n\t\t\tcase CardIds.MechagonAdapter_BG30_MagicItem_910:\n\t\t\tcase CardIds.FaerieDragonScale_BG32_MagicItem_363:\n\t\t\t\treturn 3;\n\t\t\tdefault:\n\t\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpublic getTavernLevel(cardId: string): number {\n\t\treturn this.allCards.getCard(cardId).techLevel ?? 1;\n\t}\n\n\tpublic getRandomMinionForTavernTier(tavernTier: number): string {\n\t\t// Tzvern tier can be undefined for hero-power specific tokens, like the Amalgam, or when\n\t\t// for some reason tokens end up in the shop. For now, defaulting to 1 for tavern\n\t\t// level seems to work in all cases\n\t\tconst minionsForTier = this.minionsForTier[tavernTier ?? 1];\n\t\tif (!minionsForTier?.length) {\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\n\t\t}\n\t\treturn pickRandom(minionsForTier)?.id;\n\t}\n\n\tpublic getRandomMinionForMinTavernTier(tavernTier: number): string {\n\t\tconst minionsForTier = this.pool.filter((m) => m.techLevel >= tavernTier);\n\t\tif (!minionsForTier?.length) {\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\n\t\t}\n\t\treturn pickRandom(minionsForTier)?.id;\n\t}\n\n\tpublic getRandomMechToMagnetize(tavernLimitUpper: number): string {\n\t\tconst magneticMechs = this.pool\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => hasMechanic(m, GameTag.MODULAR));\n\t\tconst pool = magneticMechs.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomMagneticVolumizer(\n\t\tplayerEntity: BgsPlayerEntity,\n\t\tanomalies: readonly string[],\n\t\ttavernLimitUpper: number,\n\t\tsourceEntity?: BoardEntity,\n\t\ttargetEntity?: BoardEntity,\n\t): string {\n\t\tconst magneticVolumizers = this.magneticMinions.filter((m) =>\n\t\t\tisVolumizer(m.id, playerEntity, anomalies, this.allCards),\n\t\t);\n\t\tconst pool = magneticVolumizers.filter((m) => m.techLevel <= tavernLimitUpper);\n\n\t\tif (sourceEntity && targetEntity && debugState.active && debugState.forcedRandomPicks.length > 0) {\n\t\t\tconst forced = debugState.forcedRandomPicks.find(\n\t\t\t\t(p) =>\n\t\t\t\t\tdebugState.isCorrectEntity(p.source, sourceEntity) &&\n\t\t\t\t\tdebugState.isCorrectEntity(p.target, targetEntity),\n\t\t\t);\n\t\t\tif (forced?.chosenCardId) {\n\t\t\t\tconst inPool = pool.some((m) => m.id === forced.chosenCardId);\n\t\t\t\tif (inPool) {\n\t\t\t\t\tdebugState.forcedRandomPicks = debugState.forcedRandomPicks.filter((p) => p !== forced);\n\t\t\t\t\treturn forced.chosenCardId;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst result = pickRandom(pool)?.id;\n\t\treturn result;\n\t}\n\n\tpublic getRandomDivineShield(tavernLimitUpper: number) {\n\t\tconst divineShieldPool = this.pool\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => hasMechanic(m, GameTag.DIVINE_SHIELD));\n\t\tconst pool = divineShieldPool.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomRally(tavernLimitUpper: number) {\n\t\tconst targetPool = this.pool\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => hasMechanic(m, GameTag.BACON_RALLY));\n\t\tconst pool = targetPool.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomMinionForTribe(\n\t\ttribe: Race,\n\t\ttavernLimitUpper: number,\n\t\texcludedCards: readonly string[] = [],\n\t): string {\n\t\tconst pool = this.pool\n\t\t\t.filter((m) => this.isValidTribe([tribe], m.races, false))\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper)\n\t\t\t.filter((m) => !excludedCards.includes(m.id));\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomProtossMinion(tavernLimitUpper: number): string {\n\t\tconst pool = this.pool\n\t\t\t.filter((m) => m.mechanics?.includes(GameTag[GameTag.PROTOSS]))\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic getRandomSpellcraft(options: { maxTavernTier?: number }): string {\n\t\tconst pool = this.spellcraftPool.filter((c) =>\n\t\t\toptions.maxTavernTier ? c.techLevel <= options.maxTavernTier : true,\n\t\t);\n\t\treturn pickRandom(pool)?.id;\n\t}\n\n\tpublic isGolden(card: ReferenceCard): boolean {\n\t\treturn card.premium;\n\t}\n\n\tprivate isValidTribe(validTribes: readonly Race[], cardRaces: readonly string[], allowEmptyRaces = true): boolean {\n\t\tif (!cardRaces?.length && allowEmptyRaces) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (cardRaces ?? [])\n\t\t\t.map((race) => getRaceEnum(race))\n\t\t\t.some((raceEnum) => raceEnum === Race.ALL || !validTribes?.length || validTribes.includes(raceEnum));\n\t}\n\n\tpublic getRandomTavernSpell(options?: { exactTavernTier?: number; maxTavernTier?: number }): string {\n\t\treturn null;\n\t}\n\n\t/** BG 2-cost spells that have simulator support (cardMappings). */\n\tpublic getTwoCostBattlegroundsSpellIdsImplemented(): string[] {\n\t\treturn this.allCards\n\t\t\t.getCards()\n\t\t\t.filter(\n\t\t\t\t(c) =>\n\t\t\t\t\tc.set === 'Battlegrounds' &&\n\t\t\t\t\t!c.premium &&\n\t\t\t\t\t(c.cost ?? 0) === 2 &&\n\t\t\t\t\tc.type?.toUpperCase() === CardType[CardType.SPELL] &&\n\t\t\t\t\tcardMappings[c.id] != null,\n\t\t\t)\n\t\t\t.map((c) => c.id);\n\t}\n}\n"]}
@@ -2,7 +2,6 @@
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.cardMappings = void 0;
5
- const arcane_absorption_bg352_1 = require("./bg-spell/arcane-absorption-bg352");
6
5
  const azerite_empowerment_1 = require("./bg-spell/azerite-empowerment");
7
6
  const back_to_back_1 = require("./bg-spell/back-to-back");
8
7
  const blood_gem_barrage_1 = require("./bg-spell/blood-gem-barrage");
@@ -12,7 +11,7 @@ const blood_gem_quilboar_taunt_1 = require("./bg-spell/blood-gem-quilboar-taunt"
12
11
  const brood_of_nozdormu_1 = require("./bg-spell/brood-of-nozdormu");
13
12
  const butchering_1 = require("./bg-spell/butchering");
14
13
  const chefs_choice_1 = require("./bg-spell/chefs-choice");
15
- const conflagration_bg352_1 = require("./bg-spell/conflagration-bg352");
14
+ const conflagration_1 = require("./bg-spell/conflagration");
16
15
  const deepwater_clan_1 = require("./bg-spell/deepwater-clan");
17
16
  const eyes_of_the_earth_mother_1 = require("./bg-spell/eyes-of-the-earth-mother");
18
17
  const friendly_bounty_1 = require("./bg-spell/friendly-bounty");
@@ -55,10 +54,8 @@ const stormpike_1 = require("./hero-power/stormpike");
55
54
  const swatting_insects_1 = require("./hero-power/swatting-insects");
56
55
  const abyssal_bruiser_1 = require("./minion/abyssal-bruiser");
57
56
  const admiral_eliza_goreblade_1 = require("./minion/admiral-eliza-goreblade");
58
- const alert_alarmist_1 = require("./minion/alert-alarmist");
59
57
  const all_seeing_elder_1 = require("./minion/all-seeing-elder");
60
58
  const alleycat_1 = require("./minion/alleycat");
61
- const ancestral_automaton_1 = require("./minion/ancestral-automaton");
62
59
  const anubarak_nerubian_king_1 = require("./minion/anubarak-nerubian-king");
63
60
  const apexis_guardian_1 = require("./minion/apexis-guardian");
64
61
  const apprentice_of_sefin_1 = require("./minion/apprentice-of-sefin");
@@ -74,7 +71,6 @@ const auto_assembler_enchantment_1 = require("./minion/auto-assembler-enchantmen
74
71
  const avalanche_caller_1 = require("./minion/avalanche-caller");
75
72
  const azsharan_cutlassier_1 = require("./minion/azsharan-cutlassier");
76
73
  const baby_yshaarj_1 = require("./minion/baby-yshaarj");
77
- const balinda_stonehearth_1 = require("./minion/balinda-stonehearth");
78
74
  const banana_slamma_1 = require("./minion/banana-slamma");
79
75
  const baneling_1 = require("./minion/baneling");
80
76
  const bannerboar_1 = require("./minion/bannerboar");
@@ -138,7 +134,6 @@ const deathly_striker_1 = require("./minion/deathly-striker");
138
134
  const deepwater_chieftain_1 = require("./minion/deepwater-chieftain");
139
135
  const defiant_shipwright_1 = require("./minion/defiant-shipwright");
140
136
  const deflecto_bot_1 = require("./minion/deflecto-bot");
141
- const demon_fodder_1 = require("./minion/demon-fodder");
142
137
  const determined_defender_1 = require("./minion/determined-defender");
143
138
  const devout_hellcaller_1 = require("./minion/devout-hellcaller");
144
139
  const disguised_graverobber_1 = require("./minion/disguised-graverobber");
@@ -152,7 +147,6 @@ const dustbone_devastator_1 = require("./minion/dustbone-devastator");
152
147
  const earthsong_shaman_1 = require("./minion/earthsong-shaman");
153
148
  const echoing_roar_1 = require("./minion/echoing-roar");
154
149
  const efficient_engineer_1 = require("./minion/efficient-engineer");
155
- const egg_of_the_endtimes_1 = require("./minion/egg-of-the-endtimes");
156
150
  const electric_synthesizer_1 = require("./minion/electric-synthesizer");
157
151
  const elite_navigator_1 = require("./minion/elite-navigator");
158
152
  const enchanted_sentinel_1 = require("./minion/enchanted-sentinel");
@@ -192,7 +186,6 @@ const gilded_gargoyle_1 = require("./minion/gilded-gargoyle");
192
186
  const gleaming_trader_1 = require("./minion/gleaming-trader");
193
187
  const glowgullet_warlord_1 = require("./minion/glowgullet-warlord");
194
188
  const glowing_cinder_1 = require("./minion/glowing-cinder");
195
- const gluttonous_trogg_1 = require("./minion/gluttonous-trogg");
196
189
  const goldgrubber_1 = require("./minion/goldgrubber");
197
190
  const goldrinn_the_great_wolf_1 = require("./minion/goldrinn-the-great-wolf");
198
191
  const gormling_gourmet_1 = require("./minion/gormling-gourmet");
@@ -209,7 +202,6 @@ const hardy_orca_1 = require("./minion/hardy-orca");
209
202
  const harmless_bonehead_1 = require("./minion/harmless-bonehead");
210
203
  const heroic_underdog_1 = require("./minion/heroic-underdog");
211
204
  const highkeeper_ra_1 = require("./minion/highkeeper-ra");
212
- const hired_ritualist_1 = require("./minion/hired-ritualist");
213
205
  const hog_watcher_1 = require("./minion/hog-watcher");
214
206
  const holo_rover_1 = require("./minion/holo-rover");
215
207
  const hot_springer_1 = require("./minion/hot-springer");
@@ -236,7 +228,6 @@ const kalecgos_arcane_aspect_1 = require("./minion/kalecgos-arcane-aspect");
236
228
  const kangors_apprentice_1 = require("./minion/kangors-apprentice");
237
229
  const karmic_chameleon_1 = require("./minion/karmic-chameleon");
238
230
  const king_bagurgle_1 = require("./minion/king-bagurgle");
239
- const laboratory_assistant_1 = require("./minion/laboratory-assistant");
240
231
  const leeroy_the_reckless_1 = require("./minion/leeroy-the-reckless");
241
232
  const leyline_surfacer_1 = require("./minion/leyline-surfacer");
242
233
  const lightfang_enforcer_1 = require("./minion/lightfang-enforcer");
@@ -249,7 +240,6 @@ const lovesick_balladist_1 = require("./minion/lovesick-balladist");
249
240
  const low_flier_1 = require("./minion/low-flier");
250
241
  const lurker_1 = require("./minion/lurker");
251
242
  const lurking_leviathan_1 = require("./minion/lurking-leviathan");
252
- const maelstrom_emergent_1 = require("./minion/maelstrom-emergent");
253
243
  const magicfin_apprentice_1 = require("./minion/magicfin-apprentice");
254
244
  const malorne_1 = require("./minion/malorne");
255
245
  const mama_mrrglton_1 = require("./minion/mama-mrrglton");
@@ -289,7 +279,6 @@ const nimble_hatchling_1 = require("./minion/nimble-hatchling");
289
279
  const niuzao_1 = require("./minion/niuzao");
290
280
  const noisul_of_the_many_faces_1 = require("./minion/noisul-of-the-many-faces");
291
281
  const obisidian_ravager_1 = require("./minion/obisidian-ravager");
292
- const old_soul_1 = require("./minion/old-soul");
293
282
  const oozeling_gladiator_1 = require("./minion/oozeling-gladiator");
294
283
  const operatic_belcher_1 = require("./minion/operatic-belcher");
295
284
  const oranomonos_the_wilted_1 = require("./minion/oranomonos-the-wilted");
@@ -311,7 +300,6 @@ const primeval_monstrosity_1 = require("./minion/primeval-monstrosity");
311
300
  const prized_promo_drake_1 = require("./minion/prized-promo-drake");
312
301
  const prodigious_tusker_1 = require("./minion/prodigious-tusker");
313
302
  const profound_thinker_1 = require("./minion/profound-thinker");
314
- const proud_privateer_1 = require("./minion/proud-privateer");
315
303
  const psychus_1 = require("./minion/psychus");
316
304
  const pufferquil_1 = require("./minion/pufferquil");
317
305
  const radio_star_1 = require("./minion/radio-star");
@@ -369,7 +357,6 @@ const silithid_burrower_1 = require("./minion/silithid-burrower");
369
357
  const silky_shimmermoth_1 = require("./minion/silky-shimmermoth");
370
358
  const silver_handed_recruit_1 = require("./minion/silver-handed-recruit");
371
359
  const sinodorei_straight_shot_1 = require("./minion/sinodorei-straight-shot");
372
- const sinrunner_blanchy_1 = require("./minion/sinrunner-blanchy");
373
360
  const skeletal_strafer_1 = require("./minion/skeletal-strafer");
374
361
  const skulking_bristlemane_1 = require("./minion/skulking-bristlemane");
375
362
  const sky_pirate_flagbearer_1 = require("./minion/sky-pirate-flagbearer");
@@ -523,7 +510,6 @@ const twilight_broodmother_1 = require("./minion/twilight-broodmother");
523
510
  const twilight_hatchling_1 = require("./minion/twilight-hatchling");
524
511
  const twilight_primordium_1 = require("./minion/twilight-primordium");
525
512
  const twilight_watcher_1 = require("./minion/twilight-watcher");
526
- const twisted_wrathguard_1 = require("./minion/twisted-wrathguard");
527
513
  const ultralisk_1 = require("./minion/ultralisk");
528
514
  const ultraviolet_ascendant_1 = require("./minion/ultraviolet-ascendant");
529
515
  const unforgiving_treant_1 = require("./minion/unforgiving-treant");
@@ -613,6 +599,7 @@ const herald_sticker_1 = require("./trinket/herald-sticker");
613
599
  const hogwash_basin_1 = require("./trinket/hogwash-basin");
614
600
  const jar_o_gems_1 = require("./trinket/jar-o-gems");
615
601
  const lorewalker_scroll_1 = require("./trinket/lorewalker-scroll");
602
+ const lucky_tabby_1 = require("./trinket/lucky-tabby");
616
603
  const miniature_ship_1 = require("./trinket/miniature-ship");
617
604
  const powder_keg_1 = require("./trinket/powder-keg");
618
605
  const powder_keg_enchantment_1 = require("./trinket/powder-keg-enchantment");
@@ -620,11 +607,12 @@ const protective_ring_1 = require("./trinket/protective-ring");
620
607
  const quilligraphy_set_1 = require("./trinket/quilligraphy-set");
621
608
  const reinforced_shield_1 = require("./trinket/reinforced-shield");
622
609
  const saltscale_honcho_1 = require("./trinket/saltscale-honcho");
610
+ const scrapsmith_portrait_1 = require("./trinket/scrapsmith-portrait");
623
611
  const sepulchral_sergent_1 = require("./trinket/sepulchral-sergent");
624
612
  const slamma_sticker_1 = require("./trinket/slamma-sticker");
625
613
  const stegodon_portrait_1 = require("./trinket/stegodon-portrait");
614
+ const stormcoil_sticker_1 = require("./trinket/stormcoil-sticker");
626
615
  const sthara_sticker_1 = require("./trinket/sthara-sticker");
627
- const tarecgosa_sticker_1 = require("./trinket/tarecgosa-sticker");
628
616
  const thornspike_pauldron_1 = require("./trinket/thornspike-pauldron");
629
617
  const tide_raiser_portrait_1 = require("./trinket/tide-raiser-portrait");
630
618
  const tiger_carving_token_1 = require("./trinket/tiger-carving-token");
@@ -765,7 +753,6 @@ const cards = [
765
753
  springy_spriggan_1.SpringySpriggan,
766
754
  rickety_repairbot_1.RicketyRepairbot,
767
755
  mechagnome_interpreter_1.MechagnomeInterpreter,
768
- ancestral_automaton_1.AncestralAutomaton,
769
756
  auto_assembler_1.AutoAssembler,
770
757
  auto_assembler_enchantment_1.AutoAssemblerEnchantment,
771
758
  deadstomper_1.Deadstomper,
@@ -1068,7 +1055,6 @@ const cards = [
1068
1055
  timewarped_duskmaw_1.TimewarpedDuskmaw,
1069
1056
  timewarped_primscale_1.TimewarpedPrimscale,
1070
1057
  plankwalker_1.Plankwalker,
1071
- proud_privateer_1.ProudPrivateer,
1072
1058
  menagerie_tableware_1.MenagerieTableware,
1073
1059
  veterans_tactics_1.VeteransTactics,
1074
1060
  charging_czarina_1.ChargingCzarina,
@@ -1157,14 +1143,12 @@ const cards = [
1157
1143
  natural_blessing_1.NaturalBlessing,
1158
1144
  shifting_tide_1.ShiftingTide,
1159
1145
  chefs_choice_1.ChefsChoice,
1160
- arcane_absorption_bg352_1.ArcaneAbsorptionBg352,
1161
- conflagration_bg352_1.ConflagrationBg352,
1146
+ conflagration_1.Conflagration,
1162
1147
  deepwater_clan_1.DeepwaterClan,
1163
1148
  queens_command_1.QueensCommand,
1164
1149
  determined_defender_1.DeterminedDefender,
1165
1150
  living_azerite_1.LivingAzerite,
1166
1151
  tidemistress_athissa_1.TidemistressAthissa,
1167
- balinda_stonehearth_1.BalindaStonehearth,
1168
1152
  black_chromadrake_1.BlackChromadrake,
1169
1153
  blue_chromadrake_1.BlueChromadrake,
1170
1154
  blood_gem_quilboar_reborn_1.BloodGemQuilboarRebornSpell,
@@ -1187,26 +1171,18 @@ const cards = [
1187
1171
  skeletal_strafer_1.SkeletalStrafer,
1188
1172
  very_hungry_winterfinner_1.VeryHungryWinterfinner,
1189
1173
  abyssal_bruiser_1.AbyssalBruiser,
1190
- alert_alarmist_1.AlertAlarmist,
1191
1174
  bristleback_bully_1.BristlebackBully,
1192
1175
  bristlebach_1.Bristlebach,
1193
1176
  bristlemane_scrapsmith_1.BristlemaneScrapsmith,
1194
1177
  cataclysmic_harbinger_1.CataclysmicHarbinger,
1195
1178
  consummate_conqueror_1.ConsummateConqueror,
1196
1179
  deepwater_chieftain_1.DeepwaterChieftain,
1197
- demon_fodder_1.DemonFodder,
1198
1180
  draconic_warden_1.DraconicWarden,
1199
1181
  dustbone_devastator_1.DustboneDevastator,
1200
- egg_of_the_endtimes_1.EggOfTheEndtimes,
1201
1182
  falling_sky_golem_1.FallingSkyGolem,
1202
1183
  firelands_fugitive_1.FirelandsFugitive,
1203
- gluttonous_trogg_1.GluttonousTrogg,
1204
- hired_ritualist_1.HiredRitualist,
1205
1184
  incubation_researcher_1.IncubationResearcher,
1206
- laboratory_assistant_1.LaboratoryAssistant,
1207
1185
  leyline_surfacer_1.LeylineSurfacer,
1208
- maelstrom_emergent_1.MaelstromEmergent,
1209
- old_soul_1.OldSoul,
1210
1186
  plaguerunner_1.Plaguerunner,
1211
1187
  ring_bearer_1.RingBearer,
1212
1188
  ruthless_queensguard_1.RuthlessQueensguard,
@@ -1218,9 +1194,7 @@ const cards = [
1218
1194
  sewer_lord_1.SewerLord,
1219
1195
  sewer_rat_1.SewerRat,
1220
1196
  ship_jumper_1.ShipJumper,
1221
- sinrunner_blanchy_1.SinrunnerBlanchy,
1222
1197
  tide_raiser_1.TideRaiser,
1223
- twisted_wrathguard_1.TwistedWrathguard,
1224
1198
  vinespeaker_1.Vinespeaker,
1225
1199
  void_pup_trainer_1.VoidPupTrainer,
1226
1200
  woodland_defiler_1.WoodlandDefiler,
@@ -1240,7 +1214,9 @@ const cards = [
1240
1214
  powder_keg_enchantment_1.PowderKegEnchantment,
1241
1215
  dramaloc_sticker_1.DramalocSticker,
1242
1216
  slamma_sticker_1.SlammaSticker,
1217
+ scrapsmith_portrait_1.ScrapsmithPortrait,
1243
1218
  stegodon_portrait_1.StegodonPortrait,
1219
+ stormcoil_sticker_1.StormcoilSticker,
1244
1220
  cloud_serpent_horn_1.CloudSerpentHorn,
1245
1221
  quilligraphy_set_1.QuilligraphySet,
1246
1222
  quilligraphy_set_1.QuilligraphySetToken,
@@ -1251,6 +1227,7 @@ const cards = [
1251
1227
  blood_amulet_1.BloodAmulet,
1252
1228
  copper_coil_1.CopperCoil,
1253
1229
  lorewalker_scroll_1.LorewalkerScroll,
1230
+ lucky_tabby_1.LuckyTabby,
1254
1231
  bewitched_ribbon_1.BewitchedRibbon,
1255
1232
  coral_spear_1.CoralSpear,
1256
1233
  miniature_ship_1.MiniatureShip,
@@ -1266,7 +1243,6 @@ const cards = [
1266
1243
  tide_raiser_portrait_1.TideRaiserPortrait,
1267
1244
  felburned_ledger_1.FelburnedLedger,
1268
1245
  fridge_magnet_1.FridgeMagnet,
1269
- tarecgosa_sticker_1.TarecgosaSticker,
1270
1246
  jailer_sticker_306_1.JailerSticker306,
1271
1247
  jailer_sticker_733_1.JailerSticker733,
1272
1248
  ophidian_staff_1.OphidianStaff,