@firestone-hs/simulate-bgs-battle 1.1.682 → 1.1.684

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 (114) hide show
  1. package/dist/bgs-player-entity.d.ts +4 -0
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/cards/card.interface.d.ts +6 -1
  4. package/dist/cards/card.interface.js +3 -1
  5. package/dist/cards/card.interface.js.map +1 -1
  6. package/dist/cards/cards-data.d.ts +1 -2
  7. package/dist/cards/cards-data.js +6 -4
  8. package/dist/cards/cards-data.js.map +1 -1
  9. package/dist/cards/impl/_card-mappings.js +38 -2
  10. package/dist/cards/impl/_card-mappings.js.map +1 -1
  11. package/dist/cards/impl/bg-spell/menagerie-tableware.d.ts +2 -0
  12. package/dist/cards/impl/bg-spell/menagerie-tableware.js +14 -0
  13. package/dist/cards/impl/bg-spell/menagerie-tableware.js.map +1 -0
  14. package/dist/cards/impl/hero-power/rapid-reanimation.js +2 -2
  15. package/dist/cards/impl/hero-power/rapid-reanimation.js.map +1 -1
  16. package/dist/cards/impl/minion/amplifying-lightspawn.js +1 -8
  17. package/dist/cards/impl/minion/amplifying-lightspawn.js.map +1 -1
  18. package/dist/cards/impl/minion/apprentice-of-sefin.js +1 -1
  19. package/dist/cards/impl/minion/apprentice-of-sefin.js.map +1 -1
  20. package/dist/cards/impl/minion/burgeoning-whelp.d.ts +2 -0
  21. package/dist/cards/impl/minion/burgeoning-whelp.js +29 -0
  22. package/dist/cards/impl/minion/burgeoning-whelp.js.map +1 -0
  23. package/dist/cards/impl/minion/defiant-shipwright.js +10 -3
  24. package/dist/cards/impl/minion/defiant-shipwright.js.map +1 -1
  25. package/dist/cards/impl/minion/eternal-tycoon.d.ts +2 -0
  26. package/dist/cards/impl/minion/eternal-tycoon.js +19 -0
  27. package/dist/cards/impl/minion/eternal-tycoon.js.map +1 -0
  28. package/dist/cards/impl/minion/felhorn.d.ts +2 -0
  29. package/dist/cards/impl/minion/felhorn.js +23 -0
  30. package/dist/cards/impl/minion/felhorn.js.map +1 -0
  31. package/dist/cards/impl/minion/photobomber.d.ts +2 -0
  32. package/dist/cards/impl/minion/photobomber.js +20 -0
  33. package/dist/cards/impl/minion/photobomber.js.map +1 -0
  34. package/dist/cards/impl/minion/relentless-deflector.d.ts +2 -0
  35. package/dist/cards/impl/minion/relentless-deflector.js +18 -0
  36. package/dist/cards/impl/minion/relentless-deflector.js.map +1 -0
  37. package/dist/cards/impl/minion/shore-marauder.d.ts +2 -0
  38. package/dist/cards/impl/minion/shore-marauder.js +23 -0
  39. package/dist/cards/impl/minion/shore-marauder.js.map +1 -0
  40. package/dist/cards/impl/minion/showy-cyclist.js +2 -2
  41. package/dist/cards/impl/minion/showy-cyclist.js.map +1 -1
  42. package/dist/cards/impl/minion/stellar-freebooter.d.ts +2 -0
  43. package/dist/cards/impl/minion/stellar-freebooter.js +19 -0
  44. package/dist/cards/impl/minion/stellar-freebooter.js.map +1 -0
  45. package/dist/cards/impl/minion/timewarped-chimera.d.ts +2 -0
  46. package/dist/cards/impl/minion/timewarped-chimera.js +15 -0
  47. package/dist/cards/impl/minion/timewarped-chimera.js.map +1 -0
  48. package/dist/cards/impl/minion/timewarped-collector.d.ts +2 -0
  49. package/dist/cards/impl/minion/timewarped-collector.js +16 -0
  50. package/dist/cards/impl/minion/timewarped-collector.js.map +1 -0
  51. package/dist/cards/impl/minion/timewarped-hag.d.ts +2 -0
  52. package/dist/cards/impl/minion/timewarped-hag.js +30 -0
  53. package/dist/cards/impl/minion/timewarped-hag.js.map +1 -0
  54. package/dist/cards/impl/minion/timewarped-icky-imp.d.ts +2 -0
  55. package/dist/cards/impl/minion/timewarped-icky-imp.js +20 -0
  56. package/dist/cards/impl/minion/timewarped-icky-imp.js.map +1 -0
  57. package/dist/cards/impl/minion/timewarped-magnanimoose.d.ts +2 -0
  58. package/dist/cards/impl/minion/timewarped-magnanimoose.js +21 -0
  59. package/dist/cards/impl/minion/timewarped-magnanimoose.js.map +1 -0
  60. package/dist/cards/impl/minion/timewarped-mythraw.d.ts +2 -0
  61. package/dist/cards/impl/minion/timewarped-mythraw.js +21 -0
  62. package/dist/cards/impl/minion/timewarped-mythraw.js.map +1 -0
  63. package/dist/cards/impl/minion/timewarped-nest-swarmer.d.ts +2 -0
  64. package/dist/cards/impl/minion/timewarped-nest-swarmer.js +42 -0
  65. package/dist/cards/impl/minion/timewarped-nest-swarmer.js.map +1 -0
  66. package/dist/cards/impl/minion/timewarped-stone-drake.d.ts +2 -0
  67. package/dist/cards/impl/minion/timewarped-stone-drake.js +15 -0
  68. package/dist/cards/impl/minion/timewarped-stone-drake.js.map +1 -0
  69. package/dist/cards/impl/minion/timewarped-swirler.d.ts +2 -0
  70. package/dist/cards/impl/minion/timewarped-swirler.js +19 -0
  71. package/dist/cards/impl/minion/timewarped-swirler.js.map +1 -0
  72. package/dist/cards/impl/minion/timewarped-traveler.d.ts +2 -0
  73. package/dist/cards/impl/minion/timewarped-traveler.js +14 -0
  74. package/dist/cards/impl/minion/timewarped-traveler.js.map +1 -0
  75. package/dist/cards/impl/minion/timewarped-wargear.d.ts +2 -0
  76. package/dist/cards/impl/minion/timewarped-wargear.js +12 -0
  77. package/dist/cards/impl/minion/timewarped-wargear.js.map +1 -0
  78. package/dist/cards/impl/spellcraft/veterans-tactics.d.ts +2 -0
  79. package/dist/cards/impl/spellcraft/veterans-tactics.js +25 -0
  80. package/dist/cards/impl/spellcraft/veterans-tactics.js.map +1 -0
  81. package/dist/debug-state.d.ts +1 -0
  82. package/dist/debug-state.js +3 -0
  83. package/dist/debug-state.js.map +1 -1
  84. package/dist/keywords/divine-shield.js +0 -5
  85. package/dist/keywords/divine-shield.js.map +1 -1
  86. package/dist/services/card-ids.d.ts +267 -33
  87. package/dist/services/card-ids.js.map +1 -1
  88. package/dist/simulation/add-minion-to-board.js +9 -5
  89. package/dist/simulation/add-minion-to-board.js.map +1 -1
  90. package/dist/simulation/attack.d.ts +1 -1
  91. package/dist/simulation/attack.js +7 -1
  92. package/dist/simulation/attack.js.map +1 -1
  93. package/dist/simulation/auras.js +26 -22
  94. package/dist/simulation/auras.js.map +1 -1
  95. package/dist/simulation/damage-effects.js +1 -0
  96. package/dist/simulation/damage-effects.js.map +1 -1
  97. package/dist/simulation/deathrattle-orchestration.js +6 -0
  98. package/dist/simulation/deathrattle-orchestration.js.map +1 -1
  99. package/dist/simulation/deathrattle-spawns.d.ts +1 -1
  100. package/dist/simulation/deathrattle-spawns.js +1 -1
  101. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  102. package/dist/simulation/magnetize.d.ts +6 -0
  103. package/dist/simulation/magnetize.js +9 -0
  104. package/dist/simulation/magnetize.js.map +1 -1
  105. package/dist/simulation/reborn.js +3 -1
  106. package/dist/simulation/reborn.js.map +1 -1
  107. package/dist/simulation/stats.d.ts +1 -0
  108. package/dist/simulation/stats.js +12 -4
  109. package/dist/simulation/stats.js.map +1 -1
  110. package/dist/simulation/summon-when-space.js.map +1 -1
  111. package/dist/utils.d.ts +1 -0
  112. package/dist/utils.js +13 -5
  113. package/dist/utils.js.map +1 -1
  114. package/package.json +2 -2
@@ -80,11 +80,15 @@ export interface BgsPlayerGlobalInfo {
80
80
  BeetleHealthBuff?: number;
81
81
  ElementalAttackBuff?: number;
82
82
  ElementalHealthBuff?: number;
83
+ PirateAttackBuff?: number;
84
+ PirateHealthBuff?: number;
83
85
  TavernSpellHealthBuff?: number;
84
86
  TavernSpellAttackBuff?: number;
85
87
  GoldSpentThisGame?: number;
86
88
  VolumizerHealthBuff?: number;
87
89
  VolumizerAttackBuff?: number;
90
+ WhelpAttackBuff?: number;
91
+ WhelpHealthBuff?: number;
88
92
  DeepBluesPlayed?: number;
89
93
  MutatedLasherAttackBuff?: number;
90
94
  MutatedLasherHealthBuff?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"bgs-player-entity.js","sourceRoot":"","sources":["../src/bgs-player-entity.ts"],"names":[],"mappings":"","sourcesContent":["import { BoardEnchantment, BoardEntity } from './board-entity';\r\nimport { BoardSecret } from './board-secret';\r\n\r\nexport interface BgsPlayerEntity {\r\n\tcardId: string;\r\n\t// readonly nonGhostCardId?: string;\r\n\thpLeft: number;\r\n\treadonly tavernTier: number;\r\n\theroPowers: readonly BgsHeroPower[];\r\n\r\n\t/** @deprecated */\r\n\theroPowerId?: string | undefined | null;\r\n\t/** @deprecated */\r\n\treadonly heroPowerEntityId?: number;\r\n\t/** @deprecated */\r\n\treadonly heroPowerUsed?: boolean;\r\n\t/** @deprecated */\r\n\treadonly heroPowerInfo?: number | string;\r\n\t/** @deprecated */\r\n\theroPowerInfo2?: number;\r\n\t/** @deprecated */\r\n\tavengeCurrent?: number;\r\n\t/** @deprecated */\r\n\tavengeDefault?: number;\r\n\t// For Ozumat\r\n\t/** @deprecated */\r\n\theroPowerActivated?: boolean;\r\n\r\n\tfriendly?: boolean;\r\n\tentityId?: number;\r\n\tquestEntities: BgsQuestEntity[];\r\n\tquestRewards?: string[];\r\n\tquestRewardEntities?: {\r\n\t\tcardId: string;\r\n\t\tentityId: number;\r\n\t\tavengeDefault?: number;\r\n\t\tavengeCurrent?: number;\r\n\t\tscriptDataNum1: number;\r\n\t}[];\r\n\thand?: BoardEntity[];\r\n\tsecrets?: BoardSecret[];\r\n\ttrinkets?: BoardTrinket[];\r\n\tglobalInfo?: BgsPlayerGlobalInfo;\r\n\tstartOfCombatDone?: boolean;\r\n\t// Not really used, but needed for compatibility with BoardEntity\r\n\tenchantments?: BoardEnchantment[];\r\n\r\n\tdeadEyeDamageDone?: number;\r\n\trapidReanimationMinion?: BoardEntity;\r\n\trapidReanimationIndexFromLeft?: number;\r\n\trapidReanimationIndexFromRight?: number;\r\n}\r\n\r\nexport interface BgsHeroPower {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tused: boolean;\r\n\tinfo: number | string | BoardEntity;\r\n\tinfo2: number;\r\n\tinfo3: number;\r\n\tinfo4: number;\r\n\tinfo5: number;\r\n\tinfo6: number;\r\n\tscoreValue1?: number;\r\n\tscoreValue2?: number;\r\n\tscoreValue3?: number;\r\n\tavengeCurrent?: number;\r\n\tavengeDefault?: number;\r\n\tlocked?: number;\r\n\t// Always false when coming from the input, we set it in the appropriate place\r\n\tready?: boolean;\r\n\t// For Ozumat's Tentacular\r\n\tactivated?: boolean;\r\n}\r\n\r\nexport interface BgsPlayerGlobalInfo {\r\n\tEternalKnightsDeadThisGame?: number;\r\n\tSanlaynScribesDeadThisGame?: number;\r\n\tUndeadAttackBonus?: number;\r\n\tHauntedCarapaceAttackBonus?: number;\r\n\tHauntedCarapaceHealthBonus?: number;\r\n\tFrostlingBonus?: number;\r\n\tBloodGemAttackBonus?: number;\r\n\tBloodGemHealthBonus?: number;\r\n\tGoldrinnBuffAtk?: number;\r\n\tGoldrinnBuffHealth?: number;\r\n\tSpellsCastThisGame?: number;\r\n\tTavernSpellsCastThisGame?: number;\r\n\tPiratesPlayedThisGame?: number;\r\n\tBeastsSummonedThisGame?: number;\r\n\tBeastsSummonedThisCombat?: number;\r\n\tMagnetizedThisGame?: number;\r\n\tPiratesSummonedThisGame?: number;\r\n\tPirateAttackBonus?: number;\r\n\tAstralAutomatonsSummonedThisGame?: number;\r\n\tChoralAttackBuff?: number;\r\n\tChoralHealthBuff?: number;\r\n\tBeetleAttackBuff?: number;\r\n\tBeetleHealthBuff?: number;\r\n\tElementalAttackBuff?: number;\r\n\tElementalHealthBuff?: number;\r\n\tTavernSpellHealthBuff?: number;\r\n\tTavernSpellAttackBuff?: number;\r\n\tGoldSpentThisGame?: number;\r\n\tVolumizerHealthBuff?: number;\r\n\tVolumizerAttackBuff?: number;\r\n\tDeepBluesPlayed?: number;\r\n\r\n\tMutatedLasherAttackBuff?: number;\r\n\tMutatedLasherHealthBuff?: number;\r\n\tBattlecriesTriggeredThisGame?: number;\r\n\tFriendlyMinionsDeadLastCombat?: number;\r\n\tAdditionalAttack?: number;\r\n}\r\n\r\nexport interface BgsQuestEntity {\r\n\tCardId: string;\r\n\tRewardDbfId: number;\r\n\tProgressCurrent: number;\r\n\tProgressTotal: number;\r\n}\r\n\r\nexport interface BoardTrinket {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tscriptDataNum1: number;\r\n\tscriptDataNum2?: number;\r\n\tscriptDataNum6?: number;\r\n\trememberedMinion?: BoardEntity;\r\n\tavengeDefault?: number;\r\n\tavengeCurrent?: number;\r\n}\r\n"]}
1
+ {"version":3,"file":"bgs-player-entity.js","sourceRoot":"","sources":["../src/bgs-player-entity.ts"],"names":[],"mappings":"","sourcesContent":["import { BoardEnchantment, BoardEntity } from './board-entity';\r\nimport { BoardSecret } from './board-secret';\r\n\r\nexport interface BgsPlayerEntity {\r\n\tcardId: string;\r\n\t// readonly nonGhostCardId?: string;\r\n\thpLeft: number;\r\n\treadonly tavernTier: number;\r\n\theroPowers: readonly BgsHeroPower[];\r\n\r\n\t/** @deprecated */\r\n\theroPowerId?: string | undefined | null;\r\n\t/** @deprecated */\r\n\treadonly heroPowerEntityId?: number;\r\n\t/** @deprecated */\r\n\treadonly heroPowerUsed?: boolean;\r\n\t/** @deprecated */\r\n\treadonly heroPowerInfo?: number | string;\r\n\t/** @deprecated */\r\n\theroPowerInfo2?: number;\r\n\t/** @deprecated */\r\n\tavengeCurrent?: number;\r\n\t/** @deprecated */\r\n\tavengeDefault?: number;\r\n\t// For Ozumat\r\n\t/** @deprecated */\r\n\theroPowerActivated?: boolean;\r\n\r\n\tfriendly?: boolean;\r\n\tentityId?: number;\r\n\tquestEntities: BgsQuestEntity[];\r\n\tquestRewards?: string[];\r\n\tquestRewardEntities?: {\r\n\t\tcardId: string;\r\n\t\tentityId: number;\r\n\t\tavengeDefault?: number;\r\n\t\tavengeCurrent?: number;\r\n\t\tscriptDataNum1: number;\r\n\t}[];\r\n\thand?: BoardEntity[];\r\n\tsecrets?: BoardSecret[];\r\n\ttrinkets?: BoardTrinket[];\r\n\tglobalInfo?: BgsPlayerGlobalInfo;\r\n\tstartOfCombatDone?: boolean;\r\n\t// Not really used, but needed for compatibility with BoardEntity\r\n\tenchantments?: BoardEnchantment[];\r\n\r\n\tdeadEyeDamageDone?: number;\r\n\trapidReanimationMinion?: BoardEntity;\r\n\trapidReanimationIndexFromLeft?: number;\r\n\trapidReanimationIndexFromRight?: number;\r\n}\r\n\r\nexport interface BgsHeroPower {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tused: boolean;\r\n\tinfo: number | string | BoardEntity;\r\n\tinfo2: number;\r\n\tinfo3: number;\r\n\tinfo4: number;\r\n\tinfo5: number;\r\n\tinfo6: number;\r\n\tscoreValue1?: number;\r\n\tscoreValue2?: number;\r\n\tscoreValue3?: number;\r\n\tavengeCurrent?: number;\r\n\tavengeDefault?: number;\r\n\tlocked?: number;\r\n\t// Always false when coming from the input, we set it in the appropriate place\r\n\tready?: boolean;\r\n\t// For Ozumat's Tentacular\r\n\tactivated?: boolean;\r\n}\r\n\r\nexport interface BgsPlayerGlobalInfo {\r\n\tEternalKnightsDeadThisGame?: number;\r\n\tSanlaynScribesDeadThisGame?: number;\r\n\tUndeadAttackBonus?: number;\r\n\tHauntedCarapaceAttackBonus?: number;\r\n\tHauntedCarapaceHealthBonus?: number;\r\n\tFrostlingBonus?: number;\r\n\tBloodGemAttackBonus?: number;\r\n\tBloodGemHealthBonus?: number;\r\n\tGoldrinnBuffAtk?: number;\r\n\tGoldrinnBuffHealth?: number;\r\n\tSpellsCastThisGame?: number;\r\n\tTavernSpellsCastThisGame?: number;\r\n\tPiratesPlayedThisGame?: number;\r\n\tBeastsSummonedThisGame?: number;\r\n\tBeastsSummonedThisCombat?: number;\r\n\tMagnetizedThisGame?: number;\r\n\tPiratesSummonedThisGame?: number;\r\n\tPirateAttackBonus?: number;\r\n\tAstralAutomatonsSummonedThisGame?: number;\r\n\tChoralAttackBuff?: number;\r\n\tChoralHealthBuff?: number;\r\n\tBeetleAttackBuff?: number;\r\n\tBeetleHealthBuff?: number;\r\n\t// There is some naming confusion. This is \"elementals grant more stats\", not \"elementals have more stats\"\r\n\tElementalAttackBuff?: number;\r\n\tElementalHealthBuff?: number;\r\n\t// Same for these pirates\r\n\tPirateAttackBuff?: number;\r\n\tPirateHealthBuff?: number;\r\n\tTavernSpellHealthBuff?: number;\r\n\tTavernSpellAttackBuff?: number;\r\n\tGoldSpentThisGame?: number;\r\n\tVolumizerHealthBuff?: number;\r\n\tVolumizerAttackBuff?: number;\r\n\tWhelpAttackBuff?: number;\r\n\tWhelpHealthBuff?: number;\r\n\tDeepBluesPlayed?: number;\r\n\r\n\tMutatedLasherAttackBuff?: number;\r\n\tMutatedLasherHealthBuff?: number;\r\n\tBattlecriesTriggeredThisGame?: number;\r\n\tFriendlyMinionsDeadLastCombat?: number;\r\n\tAdditionalAttack?: number;\r\n}\r\n\r\nexport interface BgsQuestEntity {\r\n\tCardId: string;\r\n\tRewardDbfId: number;\r\n\tProgressCurrent: number;\r\n\tProgressTotal: number;\r\n}\r\n\r\nexport interface BoardTrinket {\r\n\tcardId: string;\r\n\tentityId: number;\r\n\tscriptDataNum1: number;\r\n\tscriptDataNum2?: number;\r\n\tscriptDataNum6?: number;\r\n\trememberedMinion?: BoardEntity;\r\n\tavengeDefault?: number;\r\n\tavengeCurrent?: number;\r\n}\r\n"]}
@@ -17,7 +17,7 @@ import { AfterDealDamageInput } from '../simulation/damage-effects';
17
17
  import { AfterHeroDamagedInput } from '../simulation/damage-to-hero';
18
18
  import { DeathrattleTriggeredInput } from '../simulation/deathrattle-on-trigger';
19
19
  import { FullGameState } from '../simulation/internal-game-state';
20
- import { OnAfterMagnetizeInput, OnBeforeMagnetizeInput, OnBeforeMagnetizeSelfInput } from '../simulation/magnetize';
20
+ import { OnAfterMagnetizeInput, OnAfterMagnetizeSelfInput, OnBeforeMagnetizeInput, OnBeforeMagnetizeSelfInput } from '../simulation/magnetize';
21
21
  import { OnAttackInput } from '../simulation/on-attack';
22
22
  import { OnMinionAttackedInput } from '../simulation/on-being-attacked';
23
23
  import { RebornEffectInput } from '../simulation/reborn';
@@ -208,6 +208,10 @@ export interface OnBeforeMagnetizeSelfCard extends Card {
208
208
  onBeforeMagnetizeSelf: (entity: BoardEntity, input: OnBeforeMagnetizeSelfInput) => void;
209
209
  }
210
210
  export declare const hasOnBeforeMagnetizeSelf: (card: Card) => card is OnBeforeMagnetizeSelfCard;
211
+ export interface OnAfterMagnetizeSelfCard extends Card {
212
+ onAfterMagnetizeSelf: (entity: BoardEntity, input: OnAfterMagnetizeSelfInput) => void;
213
+ }
214
+ export declare const hasOnAfterMagnetizeSelf: (card: Card) => card is OnAfterMagnetizeSelfCard;
211
215
  export interface OnAfterMagnetizeCard extends Card {
212
216
  onAfterMagnetize: (entity: BoardEntity, input: OnAfterMagnetizeInput) => void;
213
217
  }
@@ -246,5 +250,6 @@ export interface OnDamagedInput {
246
250
  damage: number;
247
251
  board: BoardEntity[];
248
252
  hero: BgsPlayerEntity;
253
+ otherHero: BgsPlayerEntity;
249
254
  gameState: FullGameState;
250
255
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasPlayedBloodGemsOnAny = exports.hasPlayedBloodGemsOnMe = exports.hasOnSpawnFail = exports.hasOnAfterMagnetize = exports.hasOnBeforeMagnetizeSelf = exports.hasOnBeforeMagnetize = exports.hasOnMinionKilled = exports.hasOnAfterDeath = exports.hasOnDeath = exports.hasAfterDealDamage = exports.hasOnDamaged = exports.hasAfterHeroDamaged = exports.hasOnStatsChanged = exports.hasOnWindfuryUpdated = exports.hasOnVenomousUpdated = exports.hasOnStealthUpdated = exports.hasOnRebornUpdated = exports.hasOnTauntUpdated = exports.hasOnDivineShieldUpdated = exports.hasEndOfTurn = exports.hasOnCardAddedToHand = exports.hasDeathrattleSpawnEnchantment = exports.hasOnDeathrattleTriggered = exports.hasDefaultScriptDataNum = exports.hasAvenge = exports.hasOnBattlecryTriggered = exports.hasRebornSelfEffect = exports.hasRebornEffect = exports.hasBattlecry = exports.hasDeathrattleSpawn = exports.hasOnDespawned = exports.hasAfterOtherSpawned = exports.hasOnOtherSpawned = exports.hasOnOtherAuraSpawned = exports.hasOnSpawned = exports.hasOnMinionAttacked = exports.hasOnWheneverAnotherMinionAttacks = exports.hasRally = exports.hasAfterTavernSpellCast = exports.hasOnTavernSpellCast = exports.hasCastTavernSpell = exports.hasStartOfCombatFromHand = exports.hasStartOfCombat = exports.hasDefaultCharges = void 0;
3
+ exports.hasPlayedBloodGemsOnAny = exports.hasPlayedBloodGemsOnMe = exports.hasOnSpawnFail = exports.hasOnAfterMagnetize = exports.hasOnAfterMagnetizeSelf = exports.hasOnBeforeMagnetizeSelf = exports.hasOnBeforeMagnetize = exports.hasOnMinionKilled = exports.hasOnAfterDeath = exports.hasOnDeath = exports.hasAfterDealDamage = exports.hasOnDamaged = exports.hasAfterHeroDamaged = exports.hasOnStatsChanged = exports.hasOnWindfuryUpdated = exports.hasOnVenomousUpdated = exports.hasOnStealthUpdated = exports.hasOnRebornUpdated = exports.hasOnTauntUpdated = exports.hasOnDivineShieldUpdated = exports.hasEndOfTurn = exports.hasOnCardAddedToHand = exports.hasDeathrattleSpawnEnchantment = exports.hasOnDeathrattleTriggered = exports.hasDefaultScriptDataNum = exports.hasAvenge = exports.hasOnBattlecryTriggered = exports.hasRebornSelfEffect = exports.hasRebornEffect = exports.hasBattlecry = exports.hasDeathrattleSpawn = exports.hasOnDespawned = exports.hasAfterOtherSpawned = exports.hasOnOtherSpawned = exports.hasOnOtherAuraSpawned = exports.hasOnSpawned = exports.hasOnMinionAttacked = exports.hasOnWheneverAnotherMinionAttacks = exports.hasRally = exports.hasAfterTavernSpellCast = exports.hasOnTavernSpellCast = exports.hasCastTavernSpell = exports.hasStartOfCombatFromHand = exports.hasStartOfCombat = exports.hasDefaultCharges = void 0;
4
4
  const hasDefaultCharges = (card) => (card === null || card === void 0 ? void 0 : card.defaultCharges) !== undefined;
5
5
  exports.hasDefaultCharges = hasDefaultCharges;
6
6
  const hasStartOfCombat = (card) => (card === null || card === void 0 ? void 0 : card.startOfCombat) !== undefined;
@@ -81,6 +81,8 @@ const hasOnBeforeMagnetize = (card) => (card === null || card === void 0 ? void
81
81
  exports.hasOnBeforeMagnetize = hasOnBeforeMagnetize;
82
82
  const hasOnBeforeMagnetizeSelf = (card) => (card === null || card === void 0 ? void 0 : card.onBeforeMagnetizeSelf) !== undefined;
83
83
  exports.hasOnBeforeMagnetizeSelf = hasOnBeforeMagnetizeSelf;
84
+ const hasOnAfterMagnetizeSelf = (card) => (card === null || card === void 0 ? void 0 : card.onAfterMagnetizeSelf) !== undefined;
85
+ exports.hasOnAfterMagnetizeSelf = hasOnAfterMagnetizeSelf;
84
86
  const hasOnAfterMagnetize = (card) => (card === null || card === void 0 ? void 0 : card.onAfterMagnetize) !== undefined;
85
87
  exports.hasOnAfterMagnetize = hasOnAfterMagnetize;
86
88
  const hasOnSpawnFail = (card) => (card === null || card === void 0 ? void 0 : card.onSpawnFail) !== undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"card.interface.js","sourceRoot":"","sources":["../../src/cards/card.interface.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity, BgsQuestEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { OnDivineShieldUpdatedInput } from '../keywords/divine-shield';\r\nimport { OnRebornUpdatedInput } from '../keywords/reborn';\r\nimport { OnStealthUpdatedInput } from '../keywords/stealth';\r\nimport { OnTauntUpdatedInput } from '../keywords/taunt';\r\nimport { OnVenomousUpdatedInput } from '../keywords/venomous';\r\nimport { OnWindfuryUpdatedInput } from '../keywords/windfury';\r\nimport {\r\n\tOnDespawnInput,\r\n\tOnOtherSpawnAuraInput,\r\n\tOnOtherSpawnInput,\r\n\tOnSpawnInput,\r\n} from '../simulation/add-minion-to-board';\r\nimport { OnAfterDeathInput, OnDeathInput, OnMinionKilledInput } from '../simulation/attack';\r\nimport { AvengeInput } from '../simulation/avenge';\r\nimport { BattlecryInput, OnBattlecryTriggeredInput } from '../simulation/battlecries';\r\nimport { PlayedBloodGemsOnAnyInput, PlayedBloodGemsOnMeInput } from '../simulation/blood-gems';\r\nimport { OnCardAddedToHandInput } from '../simulation/cards-in-hand';\r\nimport { AfterDealDamageInput } from '../simulation/damage-effects';\r\nimport { AfterHeroDamagedInput } from '../simulation/damage-to-hero';\r\nimport { DeathrattleTriggeredInput } from '../simulation/deathrattle-on-trigger';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { OnAfterMagnetizeInput, OnBeforeMagnetizeInput, OnBeforeMagnetizeSelfInput } from '../simulation/magnetize';\r\nimport { OnAttackInput } from '../simulation/on-attack';\r\nimport { OnMinionAttackedInput } from '../simulation/on-being-attacked';\r\nimport { RebornEffectInput } from '../simulation/reborn';\r\nimport { SoCInput } from '../simulation/start-of-combat/start-of-combat-input';\r\nimport { OnStatsChangedInput } from '../simulation/stats';\r\n\r\nexport interface Card {\r\n\t// Maybe should make this mandatory\r\n\tcardIds?: readonly string[];\r\n\tstartOfCombat?: (\r\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\t\tinput: SoCInput,\r\n\t) => boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean };\r\n}\r\n\r\nexport interface DefaultChargesCard extends Card {\r\n\tdefaultCharges: (entity: BoardEntity) => number;\r\n}\r\nexport const hasDefaultCharges = (card: Card): card is DefaultChargesCard =>\r\n\t(card as DefaultChargesCard)?.defaultCharges !== undefined;\r\n\r\nexport interface StartOfCombatCard extends Card {\r\n\tstartOfCombatTiming?: StartOfCombatTiming;\r\n\tstartOfCombat: NonNullable<Card['startOfCombat']>;\r\n}\r\nexport const hasStartOfCombat = (card: Card): card is StartOfCombatCard =>\r\n\t(card as StartOfCombatCard)?.startOfCombat !== undefined;\r\nexport interface StartOfCombatFromHandCard extends StartOfCombatCard {\r\n\tstartOfCombatFromHand: true;\r\n}\r\nexport const hasStartOfCombatFromHand = (card: Card): card is StartOfCombatFromHandCard =>\r\n\t(card as StartOfCombatFromHandCard)?.startOfCombatFromHand !== undefined;\r\nexport type StartOfCombatTiming = 'start-of-combat' | 'pre-combat' | 'illidan';\r\n\r\nexport interface TavernSpellCard extends Card {\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => void;\r\n}\r\nexport const hasCastTavernSpell = (card: Card): card is TavernSpellCard =>\r\n\t(card as TavernSpellCard)?.castTavernSpell !== undefined;\r\n\r\nexport interface OnTavernSpellCastCard extends Card {\r\n\tonTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\r\n}\r\nexport const hasOnTavernSpellCast = (card: Card): card is OnTavernSpellCastCard =>\r\n\t(card as OnTavernSpellCastCard)?.onTavernSpellCast !== undefined;\r\n\r\nexport interface AfterTavernSpellCastCard extends Card {\r\n\tafterTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\r\n}\r\nexport const hasAfterTavernSpellCast = (card: Card): card is AfterTavernSpellCastCard =>\r\n\t(card as AfterTavernSpellCastCard)?.afterTavernSpellCast !== undefined;\r\n\r\n// Whenever this attacks\r\nexport interface RallyCard extends Card {\r\n\trally: (\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasRally = (card: Card): card is RallyCard => (card as RallyCard)?.rally !== undefined;\r\n\r\nexport interface OnWheneverAnotherMinionAttacksCard extends Card {\r\n\tonWheneverAnotherMinionAttacks: (\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnWheneverAnotherMinionAttacks = (card: Card): card is OnWheneverAnotherMinionAttacksCard =>\r\n\t(card as OnWheneverAnotherMinionAttacksCard)?.onWheneverAnotherMinionAttacks !== undefined;\r\n\r\nexport interface OnMinionAttackedCard extends Card {\r\n\tonAttacked: (minion: BoardEntity, input: OnMinionAttackedInput) => void;\r\n}\r\nexport const hasOnMinionAttacked = (card: Card): card is OnMinionAttackedCard =>\r\n\t(card as OnMinionAttackedCard)?.onAttacked !== undefined;\r\n\r\nexport interface OnSpawnedCard extends Card {\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => void;\r\n}\r\nexport const hasOnSpawned = (card: Card): card is OnSpawnedCard => (card as OnSpawnedCard)?.onSpawned !== undefined;\r\n\r\nexport interface OnOtherSpawnedAuraCard extends Card {\r\n\tonOtherSpawnedAura: (minion: BoardEntity, input: OnOtherSpawnAuraInput) => void;\r\n}\r\nexport const hasOnOtherAuraSpawned = (card: Card): card is OnOtherSpawnedAuraCard =>\r\n\t(card as OnOtherSpawnedAuraCard)?.onOtherSpawnedAura !== undefined;\r\n\r\nexport interface OnOtherSpawnedCard extends Card {\r\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => void;\r\n}\r\nexport const hasOnOtherSpawned = (card: Card): card is OnOtherSpawnedCard =>\r\n\t(card as OnOtherSpawnedCard)?.onOtherSpawned !== undefined;\r\n\r\nexport interface AfterOtherSpawnedCard extends Card {\r\n\tafterOtherSpawned: (minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput) => void;\r\n}\r\nexport const hasAfterOtherSpawned = (card: Card): card is AfterOtherSpawnedCard =>\r\n\t(card as AfterOtherSpawnedCard)?.afterOtherSpawned !== undefined;\r\n\r\nexport interface OnDespawnedCard extends Card {\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => void;\r\n}\r\nexport const hasOnDespawned = (card: Card): card is OnDespawnedCard =>\r\n\t(card as OnDespawnedCard)?.onDespawned !== undefined;\r\n\r\nexport interface DeathrattleSpawnCard extends Card {\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => readonly BoardEntity[];\r\n}\r\nexport const hasDeathrattleSpawn = (card: Card): card is DeathrattleSpawnCard =>\r\n\t(card as DeathrattleSpawnCard)?.deathrattleSpawn !== undefined;\r\n\r\nexport interface BattlecryCard extends Card {\r\n\t// boolean return type is used only for conditional battlecries (eg cards that only work as battlecries if a specific trinket\r\n\t// is in game)\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => boolean;\r\n}\r\nexport const hasBattlecry = (card: Card): card is BattlecryCard => (card as BattlecryCard)?.battlecry !== undefined;\r\n\r\nexport interface RebornEffectCard extends Card {\r\n\trebornEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\r\n}\r\nexport const hasRebornEffect = (card: Card): card is RebornEffectCard =>\r\n\t(card as RebornEffectCard)?.rebornEffect !== undefined;\r\n\r\nexport interface RebornSelfEffectCard extends Card {\r\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\r\n}\r\nexport const hasRebornSelfEffect = (card: Card): card is RebornSelfEffectCard =>\r\n\t(card as RebornSelfEffectCard)?.rebornSelfEffect !== undefined;\r\n\r\nexport interface OnBattlecryTriggeredCard extends Card {\r\n\tonBattlecryTriggered: (minion: BoardEntity, input: OnBattlecryTriggeredInput) => void;\r\n}\r\nexport const hasOnBattlecryTriggered = (card: Card): card is OnBattlecryTriggeredCard =>\r\n\t(card as OnBattlecryTriggeredCard)?.onBattlecryTriggered !== undefined;\r\n\r\nexport interface AvengeCard extends Card {\r\n\tavenge: (minion: BoardEntity | BoardTrinket, input: AvengeInput) => void | readonly BoardEntity[];\r\n\tbaseAvengeValue: (cardId: string) => number;\r\n}\r\nexport const hasAvenge = (card: Card): card is AvengeCard => (card as AvengeCard)?.avenge !== undefined;\r\n\r\nexport interface DefaultScriptDataNumCard extends Card {\r\n\tdefaultScriptDataNum: (cardId: string) => number;\r\n}\r\nexport const hasDefaultScriptDataNum = (card: Card): card is DefaultScriptDataNumCard =>\r\n\t(card as DefaultScriptDataNumCard)?.defaultScriptDataNum !== undefined;\r\n\r\n/** To use when another deathrattle is triggered */\r\nexport interface DeathrattleTriggeredCard extends Card {\r\n\tonDeathrattleTriggered: (minion: BoardEntity | BoardTrinket, input: DeathrattleTriggeredInput) => void;\r\n}\r\nexport const hasOnDeathrattleTriggered = (card: Card): card is DeathrattleTriggeredCard =>\r\n\t(card as DeathrattleTriggeredCard)?.onDeathrattleTriggered !== undefined;\r\n\r\n// export interface DeathrattleEnchantmentEffectCard extends Card {\r\n// \tdeathrattleEffectEnchantmentEffect: (\r\n// \t\tminion: { cardId: string; originEntityId?: number; repeats?: number },\r\n// \t\tinput: DeathrattleTriggeredInput,\r\n// \t) => void;\r\n// \tcardIds: readonly string[];\r\n// }\r\n// export const hasDeathrattleEnchantmentEffect = (card: Card): card is DeathrattleEnchantmentEffectCard =>\r\n// \t(card as DeathrattleEnchantmentEffectCard)?.deathrattleEffectEnchantmentEffect !== undefined;\r\n\r\nexport interface DeathrattleSpawnEnchantmentCard extends Card {\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: { cardId: string; originEntityId?: number; repeats?: number },\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => readonly BoardEntity[];\r\n\tcardIds: readonly string[];\r\n}\r\nexport const hasDeathrattleSpawnEnchantment = (card: Card): card is DeathrattleSpawnEnchantmentCard =>\r\n\t(card as DeathrattleSpawnEnchantmentCard)?.deathrattleSpawnEnchantmentEffect !== undefined;\r\n\r\nexport interface OnCardAddedToHandCard extends Card {\r\n\tonCardAddedToHand: (entity: BoardEntity | BgsQuestEntity, input: OnCardAddedToHandInput) => void;\r\n}\r\nexport const hasOnCardAddedToHand = (card: Card): card is OnCardAddedToHandCard =>\r\n\t(card as OnCardAddedToHandCard)?.onCardAddedToHand !== undefined;\r\n\r\nexport interface EndOfTurnCard extends Card {\r\n\t// Use BattlecryInput because it's the only way end of turn effects are triggered\r\n\tendOfTurn: (entity: BoardEntity, input: EndOfTurnInput) => void;\r\n}\r\nexport const hasEndOfTurn = (card: Card): card is EndOfTurnCard => (card as EndOfTurnCard)?.endOfTurn !== undefined;\r\nexport type EndOfTurnInput = BattlecryInput;\r\n\r\nexport interface OnDivineShieldUpdatedCard extends Card {\r\n\tonDivineShieldUpdated: (entity: BoardEntity | BoardTrinket, input: OnDivineShieldUpdatedInput) => void;\r\n}\r\nexport const hasOnDivineShieldUpdated = (card: Card): card is OnDivineShieldUpdatedCard =>\r\n\t(card as OnDivineShieldUpdatedCard)?.onDivineShieldUpdated !== undefined;\r\n\r\nexport interface OnTauntUpdatedCard extends Card {\r\n\tonTauntUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnTauntUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnTauntUpdated = (card: Card): card is OnTauntUpdatedCard =>\r\n\t(card as OnTauntUpdatedCard)?.onTauntUpdated !== undefined;\r\n\r\nexport interface OnRebornUpdatedCard extends Card {\r\n\tonRebornUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnRebornUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnRebornUpdated = (card: Card): card is OnRebornUpdatedCard =>\r\n\t(card as OnRebornUpdatedCard)?.onRebornUpdated !== undefined;\r\n\r\nexport interface OnStealthUpdatedCard extends Card {\r\n\tonStealthUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnStealthUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnStealthUpdated = (card: Card): card is OnStealthUpdatedCard =>\r\n\t(card as OnStealthUpdatedCard)?.onStealthUpdated !== undefined;\r\n\r\nexport interface OnVenomousUpdatedCard extends Card {\r\n\tonVenomousUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnVenomousUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnVenomousUpdated = (card: Card): card is OnVenomousUpdatedCard =>\r\n\t(card as OnVenomousUpdatedCard)?.onVenomousUpdated !== undefined;\r\n\r\nexport interface OnWindfuryUpdatedCard extends Card {\r\n\tonWindfuryUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnWindfuryUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnWindfuryUpdated = (card: Card): card is OnWindfuryUpdatedCard =>\r\n\t(card as OnWindfuryUpdatedCard)?.onWindfuryUpdated !== undefined;\r\n\r\nexport interface OnStatsChangedCard extends Card {\r\n\tonStatsChanged: (entity: BoardEntity, input: OnStatsChangedInput) => void;\r\n}\r\nexport const hasOnStatsChanged = (card: Card): card is OnStatsChangedCard =>\r\n\t(card as OnStatsChangedCard)?.onStatsChanged !== undefined;\r\n\r\nexport interface AfterHeroDamagedCard extends Card {\r\n\tafterHeroDamaged: (entity: BoardEntity, input: AfterHeroDamagedInput) => void;\r\n}\r\nexport const hasAfterHeroDamaged = (card: Card): card is AfterHeroDamagedCard =>\r\n\t(card as AfterHeroDamagedCard)?.afterHeroDamaged !== undefined;\r\n\r\nexport interface OnDamagedCard extends Card {\r\n\tonDamaged: (entity: BoardEntity, input: OnDamagedInput) => void;\r\n}\r\nexport const hasOnDamaged = (card: Card): card is OnDamagedCard => (card as OnDamagedCard)?.onDamaged !== undefined;\r\n\r\nexport interface AfterDealDamageCard extends Card {\r\n\t// Called whenever damage is dealt, both on the friendly and enemy side\r\n\t// So you need to check the \"friendly\" flag\r\n\tafterDealDamage: (entity: BoardEntity, input: AfterDealDamageInput) => void;\r\n}\r\nexport const hasAfterDealDamage = (card: Card): card is AfterDealDamageCard =>\r\n\t(card as AfterDealDamageCard)?.afterDealDamage !== undefined;\r\n\r\nexport interface OnDeathCard extends Card {\r\n\tonDeath: (entity: BoardEntity, input: OnDeathInput) => void;\r\n}\r\nexport const hasOnDeath = (card: Card): card is OnDeathCard => (card as OnDeathCard)?.onDeath !== undefined;\r\n\r\nexport interface OnAfterDeathCard extends Card {\r\n\tonAfterDeath: (entity: BoardEntity | BoardTrinket, input: OnAfterDeathInput) => void;\r\n}\r\nexport const hasOnAfterDeath = (card: Card): card is OnAfterDeathCard =>\r\n\t(card as OnAfterDeathCard)?.onAfterDeath !== undefined;\r\n\r\nexport interface OnMinionKilledCard extends Card {\r\n\tonMinionKilled: (\r\n\t\tentity: BoardEntity,\r\n\t\tinput: OnMinionKilledInput,\r\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnMinionKilled = (card: Card): card is OnMinionKilledCard =>\r\n\t(card as OnMinionKilledCard)?.onMinionKilled !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeCard extends Card {\r\n\tonBeforeMagnetize: (entity: BoardEntity, input: OnBeforeMagnetizeInput) => void;\r\n}\r\nexport const hasOnBeforeMagnetize = (card: Card): card is OnBeforeMagnetizeCard =>\r\n\t(card as OnBeforeMagnetizeCard)?.onBeforeMagnetize !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeSelfCard extends Card {\r\n\tonBeforeMagnetizeSelf: (entity: BoardEntity, input: OnBeforeMagnetizeSelfInput) => void;\r\n}\r\nexport const hasOnBeforeMagnetizeSelf = (card: Card): card is OnBeforeMagnetizeSelfCard =>\r\n\t(card as OnBeforeMagnetizeSelfCard)?.onBeforeMagnetizeSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeCard extends Card {\r\n\tonAfterMagnetize: (entity: BoardEntity, input: OnAfterMagnetizeInput) => void;\r\n}\r\nexport const hasOnAfterMagnetize = (card: Card): card is OnAfterMagnetizeCard =>\r\n\t(card as OnAfterMagnetizeCard)?.onAfterMagnetize !== undefined;\r\n\r\nexport interface OnSpawnFailCard extends Card {\r\n\tonSpawnFail: (entity: BoardEntity, input: OnSpawnFailInput) => void;\r\n}\r\nexport const hasOnSpawnFail = (card: Card): card is OnSpawnFailCard =>\r\n\t(card as OnSpawnFailCard)?.onSpawnFail !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnMeCard extends Card {\r\n\tplayedBloodGemsOnMe: (entity: BoardEntity, input: PlayedBloodGemsOnMeInput) => void;\r\n}\r\nexport const hasPlayedBloodGemsOnMe = (card: Card): card is PlayedBloodGemsOnMeCard =>\r\n\t(card as PlayedBloodGemsOnMeCard)?.playedBloodGemsOnMe !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnAnyCard extends Card {\r\n\tplayedBloodGemsOnAny: (entity: BoardEntity, input: PlayedBloodGemsOnAnyInput) => void;\r\n}\r\nexport const hasPlayedBloodGemsOnAny = (card: Card): card is PlayedBloodGemsOnAnyCard =>\r\n\t(card as PlayedBloodGemsOnAnyCard)?.playedBloodGemsOnAny !== undefined;\r\n\r\nexport interface OnSpawnFailInput {\r\n\tfailedSpawn: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface CastSpellInput {\r\n\tspellCardId: string;\r\n\tsource: BoardEntity | BoardTrinket | BgsPlayerEntity;\r\n\ttarget: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\nexport interface OnDamagedInput {\r\n\tdamagedEntity: BoardEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"card.interface.js","sourceRoot":"","sources":["../../src/cards/card.interface.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity, BgsQuestEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { OnDivineShieldUpdatedInput } from '../keywords/divine-shield';\r\nimport { OnRebornUpdatedInput } from '../keywords/reborn';\r\nimport { OnStealthUpdatedInput } from '../keywords/stealth';\r\nimport { OnTauntUpdatedInput } from '../keywords/taunt';\r\nimport { OnVenomousUpdatedInput } from '../keywords/venomous';\r\nimport { OnWindfuryUpdatedInput } from '../keywords/windfury';\r\nimport {\r\n\tOnDespawnInput,\r\n\tOnOtherSpawnAuraInput,\r\n\tOnOtherSpawnInput,\r\n\tOnSpawnInput,\r\n} from '../simulation/add-minion-to-board';\r\nimport { OnAfterDeathInput, OnDeathInput, OnMinionKilledInput } from '../simulation/attack';\r\nimport { AvengeInput } from '../simulation/avenge';\r\nimport { BattlecryInput, OnBattlecryTriggeredInput } from '../simulation/battlecries';\r\nimport { PlayedBloodGemsOnAnyInput, PlayedBloodGemsOnMeInput } from '../simulation/blood-gems';\r\nimport { OnCardAddedToHandInput } from '../simulation/cards-in-hand';\r\nimport { AfterDealDamageInput } from '../simulation/damage-effects';\r\nimport { AfterHeroDamagedInput } from '../simulation/damage-to-hero';\r\nimport { DeathrattleTriggeredInput } from '../simulation/deathrattle-on-trigger';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport {\r\n\tOnAfterMagnetizeInput,\r\n\tOnAfterMagnetizeSelfInput,\r\n\tOnBeforeMagnetizeInput,\r\n\tOnBeforeMagnetizeSelfInput,\r\n} from '../simulation/magnetize';\r\nimport { OnAttackInput } from '../simulation/on-attack';\r\nimport { OnMinionAttackedInput } from '../simulation/on-being-attacked';\r\nimport { RebornEffectInput } from '../simulation/reborn';\r\nimport { SoCInput } from '../simulation/start-of-combat/start-of-combat-input';\r\nimport { OnStatsChangedInput } from '../simulation/stats';\r\n\r\nexport interface Card {\r\n\t// Maybe should make this mandatory\r\n\tcardIds?: readonly string[];\r\n\tstartOfCombat?: (\r\n\t\ttrinket: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\t\tinput: SoCInput,\r\n\t) => boolean | { hasTriggered: boolean; shouldRecomputeCurrentAttacker: boolean };\r\n}\r\n\r\nexport interface DefaultChargesCard extends Card {\r\n\tdefaultCharges: (entity: BoardEntity) => number;\r\n}\r\nexport const hasDefaultCharges = (card: Card): card is DefaultChargesCard =>\r\n\t(card as DefaultChargesCard)?.defaultCharges !== undefined;\r\n\r\nexport interface StartOfCombatCard extends Card {\r\n\tstartOfCombatTiming?: StartOfCombatTiming;\r\n\tstartOfCombat: NonNullable<Card['startOfCombat']>;\r\n}\r\nexport const hasStartOfCombat = (card: Card): card is StartOfCombatCard =>\r\n\t(card as StartOfCombatCard)?.startOfCombat !== undefined;\r\nexport interface StartOfCombatFromHandCard extends StartOfCombatCard {\r\n\tstartOfCombatFromHand: true;\r\n}\r\nexport const hasStartOfCombatFromHand = (card: Card): card is StartOfCombatFromHandCard =>\r\n\t(card as StartOfCombatFromHandCard)?.startOfCombatFromHand !== undefined;\r\nexport type StartOfCombatTiming = 'start-of-combat' | 'pre-combat' | 'illidan';\r\n\r\nexport interface TavernSpellCard extends Card {\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => void;\r\n}\r\nexport const hasCastTavernSpell = (card: Card): card is TavernSpellCard =>\r\n\t(card as TavernSpellCard)?.castTavernSpell !== undefined;\r\n\r\nexport interface OnTavernSpellCastCard extends Card {\r\n\tonTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\r\n}\r\nexport const hasOnTavernSpellCast = (card: Card): card is OnTavernSpellCastCard =>\r\n\t(card as OnTavernSpellCastCard)?.onTavernSpellCast !== undefined;\r\n\r\nexport interface AfterTavernSpellCastCard extends Card {\r\n\tafterTavernSpellCast: (entity: BoardEntity | BoardTrinket, input: CastSpellInput) => void;\r\n}\r\nexport const hasAfterTavernSpellCast = (card: Card): card is AfterTavernSpellCastCard =>\r\n\t(card as AfterTavernSpellCastCard)?.afterTavernSpellCast !== undefined;\r\n\r\n// Whenever this attacks\r\nexport interface RallyCard extends Card {\r\n\trally: (\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasRally = (card: Card): card is RallyCard => (card as RallyCard)?.rally !== undefined;\r\n\r\nexport interface OnWheneverAnotherMinionAttacksCard extends Card {\r\n\tonWheneverAnotherMinionAttacks: (\r\n\t\tminion: BoardEntity | BoardTrinket | BoardEnchantment,\r\n\t\tinput: OnAttackInput,\r\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnWheneverAnotherMinionAttacks = (card: Card): card is OnWheneverAnotherMinionAttacksCard =>\r\n\t(card as OnWheneverAnotherMinionAttacksCard)?.onWheneverAnotherMinionAttacks !== undefined;\r\n\r\nexport interface OnMinionAttackedCard extends Card {\r\n\tonAttacked: (minion: BoardEntity, input: OnMinionAttackedInput) => void;\r\n}\r\nexport const hasOnMinionAttacked = (card: Card): card is OnMinionAttackedCard =>\r\n\t(card as OnMinionAttackedCard)?.onAttacked !== undefined;\r\n\r\nexport interface OnSpawnedCard extends Card {\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => void;\r\n}\r\nexport const hasOnSpawned = (card: Card): card is OnSpawnedCard => (card as OnSpawnedCard)?.onSpawned !== undefined;\r\n\r\nexport interface OnOtherSpawnedAuraCard extends Card {\r\n\tonOtherSpawnedAura: (minion: BoardEntity, input: OnOtherSpawnAuraInput) => void;\r\n}\r\nexport const hasOnOtherAuraSpawned = (card: Card): card is OnOtherSpawnedAuraCard =>\r\n\t(card as OnOtherSpawnedAuraCard)?.onOtherSpawnedAura !== undefined;\r\n\r\nexport interface OnOtherSpawnedCard extends Card {\r\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => void;\r\n}\r\nexport const hasOnOtherSpawned = (card: Card): card is OnOtherSpawnedCard =>\r\n\t(card as OnOtherSpawnedCard)?.onOtherSpawned !== undefined;\r\n\r\nexport interface AfterOtherSpawnedCard extends Card {\r\n\tafterOtherSpawned: (minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput) => void;\r\n}\r\nexport const hasAfterOtherSpawned = (card: Card): card is AfterOtherSpawnedCard =>\r\n\t(card as AfterOtherSpawnedCard)?.afterOtherSpawned !== undefined;\r\n\r\nexport interface OnDespawnedCard extends Card {\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => void;\r\n}\r\nexport const hasOnDespawned = (card: Card): card is OnDespawnedCard =>\r\n\t(card as OnDespawnedCard)?.onDespawned !== undefined;\r\n\r\nexport interface DeathrattleSpawnCard extends Card {\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => readonly BoardEntity[];\r\n}\r\nexport const hasDeathrattleSpawn = (card: Card): card is DeathrattleSpawnCard =>\r\n\t(card as DeathrattleSpawnCard)?.deathrattleSpawn !== undefined;\r\n\r\nexport interface BattlecryCard extends Card {\r\n\t// boolean return type is used only for conditional battlecries (eg cards that only work as battlecries if a specific trinket\r\n\t// is in game)\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => boolean;\r\n}\r\nexport const hasBattlecry = (card: Card): card is BattlecryCard => (card as BattlecryCard)?.battlecry !== undefined;\r\n\r\nexport interface RebornEffectCard extends Card {\r\n\trebornEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\r\n}\r\nexport const hasRebornEffect = (card: Card): card is RebornEffectCard =>\r\n\t(card as RebornEffectCard)?.rebornEffect !== undefined;\r\n\r\nexport interface RebornSelfEffectCard extends Card {\r\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => void;\r\n}\r\nexport const hasRebornSelfEffect = (card: Card): card is RebornSelfEffectCard =>\r\n\t(card as RebornSelfEffectCard)?.rebornSelfEffect !== undefined;\r\n\r\nexport interface OnBattlecryTriggeredCard extends Card {\r\n\tonBattlecryTriggered: (minion: BoardEntity, input: OnBattlecryTriggeredInput) => void;\r\n}\r\nexport const hasOnBattlecryTriggered = (card: Card): card is OnBattlecryTriggeredCard =>\r\n\t(card as OnBattlecryTriggeredCard)?.onBattlecryTriggered !== undefined;\r\n\r\nexport interface AvengeCard extends Card {\r\n\tavenge: (minion: BoardEntity | BoardTrinket, input: AvengeInput) => void | readonly BoardEntity[];\r\n\tbaseAvengeValue: (cardId: string) => number;\r\n}\r\nexport const hasAvenge = (card: Card): card is AvengeCard => (card as AvengeCard)?.avenge !== undefined;\r\n\r\nexport interface DefaultScriptDataNumCard extends Card {\r\n\tdefaultScriptDataNum: (cardId: string) => number;\r\n}\r\nexport const hasDefaultScriptDataNum = (card: Card): card is DefaultScriptDataNumCard =>\r\n\t(card as DefaultScriptDataNumCard)?.defaultScriptDataNum !== undefined;\r\n\r\n/** To use when another deathrattle is triggered */\r\nexport interface DeathrattleTriggeredCard extends Card {\r\n\tonDeathrattleTriggered: (minion: BoardEntity | BoardTrinket, input: DeathrattleTriggeredInput) => void;\r\n}\r\nexport const hasOnDeathrattleTriggered = (card: Card): card is DeathrattleTriggeredCard =>\r\n\t(card as DeathrattleTriggeredCard)?.onDeathrattleTriggered !== undefined;\r\n\r\n// export interface DeathrattleEnchantmentEffectCard extends Card {\r\n// \tdeathrattleEffectEnchantmentEffect: (\r\n// \t\tminion: { cardId: string; originEntityId?: number; repeats?: number },\r\n// \t\tinput: DeathrattleTriggeredInput,\r\n// \t) => void;\r\n// \tcardIds: readonly string[];\r\n// }\r\n// export const hasDeathrattleEnchantmentEffect = (card: Card): card is DeathrattleEnchantmentEffectCard =>\r\n// \t(card as DeathrattleEnchantmentEffectCard)?.deathrattleEffectEnchantmentEffect !== undefined;\r\n\r\nexport interface DeathrattleSpawnEnchantmentCard extends Card {\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: { cardId: string; originEntityId?: number; repeats?: number },\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => readonly BoardEntity[];\r\n\tcardIds: readonly string[];\r\n}\r\nexport const hasDeathrattleSpawnEnchantment = (card: Card): card is DeathrattleSpawnEnchantmentCard =>\r\n\t(card as DeathrattleSpawnEnchantmentCard)?.deathrattleSpawnEnchantmentEffect !== undefined;\r\n\r\nexport interface OnCardAddedToHandCard extends Card {\r\n\tonCardAddedToHand: (entity: BoardEntity | BgsQuestEntity, input: OnCardAddedToHandInput) => void;\r\n}\r\nexport const hasOnCardAddedToHand = (card: Card): card is OnCardAddedToHandCard =>\r\n\t(card as OnCardAddedToHandCard)?.onCardAddedToHand !== undefined;\r\n\r\nexport interface EndOfTurnCard extends Card {\r\n\t// Use BattlecryInput because it's the only way end of turn effects are triggered\r\n\tendOfTurn: (entity: BoardEntity, input: EndOfTurnInput) => void;\r\n}\r\nexport const hasEndOfTurn = (card: Card): card is EndOfTurnCard => (card as EndOfTurnCard)?.endOfTurn !== undefined;\r\nexport type EndOfTurnInput = BattlecryInput;\r\n\r\nexport interface OnDivineShieldUpdatedCard extends Card {\r\n\tonDivineShieldUpdated: (entity: BoardEntity | BoardTrinket, input: OnDivineShieldUpdatedInput) => void;\r\n}\r\nexport const hasOnDivineShieldUpdated = (card: Card): card is OnDivineShieldUpdatedCard =>\r\n\t(card as OnDivineShieldUpdatedCard)?.onDivineShieldUpdated !== undefined;\r\n\r\nexport interface OnTauntUpdatedCard extends Card {\r\n\tonTauntUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnTauntUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnTauntUpdated = (card: Card): card is OnTauntUpdatedCard =>\r\n\t(card as OnTauntUpdatedCard)?.onTauntUpdated !== undefined;\r\n\r\nexport interface OnRebornUpdatedCard extends Card {\r\n\tonRebornUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnRebornUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnRebornUpdated = (card: Card): card is OnRebornUpdatedCard =>\r\n\t(card as OnRebornUpdatedCard)?.onRebornUpdated !== undefined;\r\n\r\nexport interface OnStealthUpdatedCard extends Card {\r\n\tonStealthUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnStealthUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnStealthUpdated = (card: Card): card is OnStealthUpdatedCard =>\r\n\t(card as OnStealthUpdatedCard)?.onStealthUpdated !== undefined;\r\n\r\nexport interface OnVenomousUpdatedCard extends Card {\r\n\tonVenomousUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnVenomousUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnVenomousUpdated = (card: Card): card is OnVenomousUpdatedCard =>\r\n\t(card as OnVenomousUpdatedCard)?.onVenomousUpdated !== undefined;\r\n\r\nexport interface OnWindfuryUpdatedCard extends Card {\r\n\tonWindfuryUpdated: (\r\n\t\tentity: BoardEntity,\r\n\t\timpactedEntity: BoardEntity,\r\n\t\tpreviousValue: boolean,\r\n\t\tinput: OnWindfuryUpdatedInput,\r\n\t) => void;\r\n}\r\nexport const hasOnWindfuryUpdated = (card: Card): card is OnWindfuryUpdatedCard =>\r\n\t(card as OnWindfuryUpdatedCard)?.onWindfuryUpdated !== undefined;\r\n\r\nexport interface OnStatsChangedCard extends Card {\r\n\tonStatsChanged: (entity: BoardEntity, input: OnStatsChangedInput) => void;\r\n}\r\nexport const hasOnStatsChanged = (card: Card): card is OnStatsChangedCard =>\r\n\t(card as OnStatsChangedCard)?.onStatsChanged !== undefined;\r\n\r\nexport interface AfterHeroDamagedCard extends Card {\r\n\tafterHeroDamaged: (entity: BoardEntity, input: AfterHeroDamagedInput) => void;\r\n}\r\nexport const hasAfterHeroDamaged = (card: Card): card is AfterHeroDamagedCard =>\r\n\t(card as AfterHeroDamagedCard)?.afterHeroDamaged !== undefined;\r\n\r\nexport interface OnDamagedCard extends Card {\r\n\tonDamaged: (entity: BoardEntity, input: OnDamagedInput) => void;\r\n}\r\nexport const hasOnDamaged = (card: Card): card is OnDamagedCard => (card as OnDamagedCard)?.onDamaged !== undefined;\r\n\r\nexport interface AfterDealDamageCard extends Card {\r\n\t// Called whenever damage is dealt, both on the friendly and enemy side\r\n\t// So you need to check the \"friendly\" flag\r\n\tafterDealDamage: (entity: BoardEntity, input: AfterDealDamageInput) => void;\r\n}\r\nexport const hasAfterDealDamage = (card: Card): card is AfterDealDamageCard =>\r\n\t(card as AfterDealDamageCard)?.afterDealDamage !== undefined;\r\n\r\nexport interface OnDeathCard extends Card {\r\n\tonDeath: (entity: BoardEntity, input: OnDeathInput) => void;\r\n}\r\nexport const hasOnDeath = (card: Card): card is OnDeathCard => (card as OnDeathCard)?.onDeath !== undefined;\r\n\r\nexport interface OnAfterDeathCard extends Card {\r\n\tonAfterDeath: (entity: BoardEntity | BoardTrinket, input: OnAfterDeathInput) => void;\r\n}\r\nexport const hasOnAfterDeath = (card: Card): card is OnAfterDeathCard =>\r\n\t(card as OnAfterDeathCard)?.onAfterDeath !== undefined;\r\n\r\nexport interface OnMinionKilledCard extends Card {\r\n\tonMinionKilled: (\r\n\t\tentity: BoardEntity,\r\n\t\tinput: OnMinionKilledInput,\r\n\t) => { dmgDoneByAttacker: number; dmgDoneByDefender: number };\r\n}\r\nexport const hasOnMinionKilled = (card: Card): card is OnMinionKilledCard =>\r\n\t(card as OnMinionKilledCard)?.onMinionKilled !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeCard extends Card {\r\n\tonBeforeMagnetize: (entity: BoardEntity, input: OnBeforeMagnetizeInput) => void;\r\n}\r\nexport const hasOnBeforeMagnetize = (card: Card): card is OnBeforeMagnetizeCard =>\r\n\t(card as OnBeforeMagnetizeCard)?.onBeforeMagnetize !== undefined;\r\n\r\nexport interface OnBeforeMagnetizeSelfCard extends Card {\r\n\tonBeforeMagnetizeSelf: (entity: BoardEntity, input: OnBeforeMagnetizeSelfInput) => void;\r\n}\r\nexport const hasOnBeforeMagnetizeSelf = (card: Card): card is OnBeforeMagnetizeSelfCard =>\r\n\t(card as OnBeforeMagnetizeSelfCard)?.onBeforeMagnetizeSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeSelfCard extends Card {\r\n\tonAfterMagnetizeSelf: (entity: BoardEntity, input: OnAfterMagnetizeSelfInput) => void;\r\n}\r\nexport const hasOnAfterMagnetizeSelf = (card: Card): card is OnAfterMagnetizeSelfCard =>\r\n\t(card as OnAfterMagnetizeSelfCard)?.onAfterMagnetizeSelf !== undefined;\r\n\r\nexport interface OnAfterMagnetizeCard extends Card {\r\n\tonAfterMagnetize: (entity: BoardEntity, input: OnAfterMagnetizeInput) => void;\r\n}\r\nexport const hasOnAfterMagnetize = (card: Card): card is OnAfterMagnetizeCard =>\r\n\t(card as OnAfterMagnetizeCard)?.onAfterMagnetize !== undefined;\r\n\r\nexport interface OnSpawnFailCard extends Card {\r\n\tonSpawnFail: (entity: BoardEntity, input: OnSpawnFailInput) => void;\r\n}\r\nexport const hasOnSpawnFail = (card: Card): card is OnSpawnFailCard =>\r\n\t(card as OnSpawnFailCard)?.onSpawnFail !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnMeCard extends Card {\r\n\tplayedBloodGemsOnMe: (entity: BoardEntity, input: PlayedBloodGemsOnMeInput) => void;\r\n}\r\nexport const hasPlayedBloodGemsOnMe = (card: Card): card is PlayedBloodGemsOnMeCard =>\r\n\t(card as PlayedBloodGemsOnMeCard)?.playedBloodGemsOnMe !== undefined;\r\n\r\nexport interface PlayedBloodGemsOnAnyCard extends Card {\r\n\tplayedBloodGemsOnAny: (entity: BoardEntity, input: PlayedBloodGemsOnAnyInput) => void;\r\n}\r\nexport const hasPlayedBloodGemsOnAny = (card: Card): card is PlayedBloodGemsOnAnyCard =>\r\n\t(card as PlayedBloodGemsOnAnyCard)?.playedBloodGemsOnAny !== undefined;\r\n\r\nexport interface OnSpawnFailInput {\r\n\tfailedSpawn: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface CastSpellInput {\r\n\tspellCardId: string;\r\n\tsource: BoardEntity | BoardTrinket | BgsPlayerEntity;\r\n\ttarget: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\nexport interface OnDamagedInput {\r\n\tdamagedEntity: BoardEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -1,8 +1,7 @@
1
1
  import { AllCardsService, GameTag, Race, ReferenceCard } from '@firestone-hs/reference-data';
2
2
  import { BgsPlayerEntity } from '../bgs-player-entity';
3
3
  import { BoardEntity } from '../board-entity';
4
- import { CardIds } from '../services/card-ids';
5
- export declare const WHELP_CARD_IDS: CardIds[];
4
+ export declare const isWhelp: (cardId: string, allCards: AllCardsService) => boolean;
6
5
  export declare const validBonusKeywords: GameTag[];
7
6
  export declare const hasKeyword: (entity: BoardEntity, keyword: GameTag) => boolean;
8
7
  export declare class CardsData {
@@ -1,14 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CardsData = exports.hasKeyword = exports.validBonusKeywords = exports.WHELP_CARD_IDS = void 0;
3
+ exports.CardsData = exports.hasKeyword = exports.validBonusKeywords = exports.isWhelp = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const utils_1 = require("../services/utils");
6
6
  const utils_2 = require("../utils");
7
7
  const card_interface_1 = require("./card.interface");
8
8
  const _card_mappings_1 = require("./impl/_card-mappings");
9
- exports.WHELP_CARD_IDS = [
10
- "BG22_HERO_305t",
11
- ];
9
+ const isWhelp = (cardId, allCards) => {
10
+ var _a;
11
+ return (_a = allCards.getCard(cardId).mechanics) === null || _a === void 0 ? void 0 : _a.includes(reference_data_1.GameTag[reference_data_1.GameTag.WHELP]);
12
+ };
13
+ exports.isWhelp = isWhelp;
12
14
  exports.validBonusKeywords = [
13
15
  reference_data_1.GameTag.TAUNT,
14
16
  reference_data_1.GameTag.DIVINE_SHIELD,
@@ -1 +1 @@
1
- {"version":3,"file":"cards-data.js","sourceRoot":"","sources":["../../src/cards/cards-data.ts"],"names":[],"mappings":";;;AAAA,iEAQsC;AAItC,6CAAgE;AAChE,oCAAiF;AACjF,qDAAsE;AACtE,0DAAqD;AAExC,QAAA,cAAc,GAAG;;CAI7B,CAAC;AAEW,QAAA,kBAAkB,GAAG;IACjC,wBAAO,CAAC,KAAK;IACb,wBAAO,CAAC,aAAa;IACrB,wBAAO,CAAC,QAAQ;IAChB,wBAAO,CAAC,SAAS;IACjB,wBAAO,CAAC,QAAQ;IAChB,wBAAO,CAAC,OAAO;IACf,wBAAO,CAAC,MAAM;CACd,CAAC;AAEK,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,OAAgB,EAAE,EAAE;IACnE,QAAQ,OAAO,EAAE;QAChB,KAAK,wBAAO,CAAC,KAAK;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC;QACrB,KAAK,wBAAO,CAAC,aAAa;YACzB,OAAO,MAAM,CAAC,YAAY,CAAC;QAC5B,KAAK,wBAAO,CAAC,QAAQ;YACpB,OAAO,MAAM,CAAC,QAAQ,CAAC;QACxB,KAAK,wBAAO,CAAC,QAAQ;YACpB,OAAO,MAAM,CAAC,QAAQ,CAAC;QACxB,KAAK,wBAAO,CAAC,OAAO;YACnB,OAAO,MAAM,CAAC,OAAO,CAAC;QACvB,KAAK,wBAAO,CAAC,MAAM;YAClB,OAAO,MAAM,CAAC,MAAM,CAAC;QACtB;YACC,OAAO,KAAK,CAAC;KACd;AACF,CAAC,CAAC;AAjBW,QAAA,UAAU,cAiBrB;AAEF,MAAa,SAAS;IAsBrB,YAA6B,QAAyB,EAAE,IAAI,GAAG,IAAI;QAAtC,aAAQ,GAAR,QAAQ,CAAiB;QACrD,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,YAAY,EAAE,CAAC;SACpB;IACF,CAAC;IAEM,YAAY,CAAC,WAA6B,EAAE,SAA6B;QAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ;aAClC,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,oCAAmB,EAAC,IAAI,CAAC,CAAC;aAE3C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,IAAI,CAAC,WAAW,KAAI,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,0CAAE,WAAW,CAAA,CAAA,EAAA,CAAC;aACvG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC;aACxE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,wBAAO,CAAC,WAAW,CAAC,CAAC;aACzD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;aACxC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,oBAAoC;YACtD,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC;YACrB,CAAC,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,oBAAuC;gBAC5D,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC;gBACrB,CAAC,CAAC,IAAI,CACP,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,cAAc;aACxB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aAC5D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,oBAAyC;YAC3D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CACvB,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAA,uBAAe,EAAC,CAAC,IAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI;aAChC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC;aACvC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,wBAAO,CAAC,WAAW,CAAC,CAAC;aACxD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aAC5D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,EAAE,qBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7G,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,cAA4B,CAAC,CAAC;QAC7F,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI;aACjC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,EAAE,qBAAI,CAAC,SAAS,CAAC,CAAC;aAC5D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,cAAiC,CAAC;aAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAQzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI;aAC3B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,EAAE,qBAAI,CAAC,KAAK,CAAC,CAAC;aACxD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,iCAA8C,CAAC;aACvE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,wBAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI;aACjC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,wBAAO,CAAC,WAAW,CAAC,CAAC;aACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,EAAE,qBAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,KAAK,EAAE,qBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7G,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI;aACjC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,wBAAO,CAAC,QAAQ,CAAC,CAAC;aACrD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI;aAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,wBAAO,CAAC,WAAW,CAAC,CAAC;aACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,EAAE,wBAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;aACjC,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,4BAAW,CAAC,4BAAW,CAAC,UAAU,CAAC,CAAC;aACpE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC;aAExC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,6BAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;aACjC,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC;aAClD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;aACjC,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC;aAClD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,QAAQ;aACnD,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC;aAClD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC;aAC/D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAEM,WAAW,CAAC,MAAc;QAChC,MAAM,UAAU,GAAG,6BAAY,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAA,0BAAS,EAAC,UAAU,CAAC,EAAE;YAC1B,OAAO,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SAC1C;QACD,QAAQ,MAAM,EAAE;YACf,gBAA2C;YAC3C;gBAEC,OAAO,CAAC,CAAC;YACV,gBAAkC;YAClC,kBAAoC;YACpC,gBAAyC;YACzC,kBAA2C;YAC3C,2BAAqD;YACrD,6BAAuD;YACvD,gBAAkC;YAClC;gBACC,OAAO,CAAC,CAAC;YACV,uBAAuC;YACvC,gBAAuC;YACvC,kBAAyC;YACzC;gBACC,OAAO,CAAC,CAAC;YACV,0BAAmD;YACnD,sBAAgC;YAChC,gBAAyC;YACzC,kBAA2C;YAO3C,gBAAuC;YACvC,kBAAyC;YACzC,gBAA2C;YAC3C,kBAA6C;YAC7C,uBAA8C;YAC9C,uBAA2C;YAC3C,gBAAuC;YACvC,kBAAyC;YACzC,gBAAgC;YAChC,kBAAkC;YAClC,4BAAuE;YACvE;gBACC,OAAO,CAAC,CAAC;YACV,gBAAyC;YACzC,kBAA2C;YAC3C;gBACC,OAAO,CAAC,CAAC;YACV;gBACC,OAAO,CAAC,CAAC;YACV;gBACC,OAAO,CAAC,CAAC;SACV;QACD,OAAO,CAAC,CAAC;IACV,CAAC;IAEM,oBAAoB,CAAC,MAAc;QACzC,MAAM,wBAAwB,GAAG,6BAAY,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,IAAA,wCAAuB,EAAC,wBAAwB,CAAC,EAAE;YACtD,OAAO,wBAAwB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;SAC7D;QACD,QAAQ,MAAM,EAAE;YACf,uBAA8C;YAC9C,0BAAgD;YAChD,4BAAuE;YACvE,0BAA+C;YAC/C,0BAAiD;YACjD,2BAAwE;YACxE,0BAAkD;YAClD;gBACC,OAAO,CAAC,CAAC;YACV;gBACC,OAAO,CAAC,CAAC;YACV,0BAAkD;YAClD,0BAAgD;YAChD;gBACC,OAAO,CAAC,CAAC;YACV;gBACC,OAAO,CAAC,CAAC;YACV;gBACC,OAAO,CAAC,CAAC;SACV;IACF,CAAC;IAEM,cAAc,CAAC,MAAc;;QACnC,OAAO,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,mCAAI,CAAC,CAAC;IACrD,CAAC;IAEM,4BAA4B,CAAC,UAAkB;;QAIrD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM,CAAA,EAAE;YAC5B,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAAC;SACxD;QACD,OAAO,MAAA,IAAA,kBAAU,EAAC,cAAc,CAAC,0CAAE,EAAE,CAAC;IACvC,CAAC;IAEM,+BAA+B,CAAC,UAAkB;;QACxD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM,CAAA,EAAE;YAC5B,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAAC;SACxD;QACD,OAAO,MAAA,IAAA,kBAAU,EAAC,cAAc,CAAC,0CAAE,EAAE,CAAC;IACvC,CAAC;IAEM,wBAAwB,CAAC,gBAAwB;;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC;aAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,CAAC,EAAE,wBAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC;QAC1E,OAAO,MAAA,IAAA,kBAAU,EAAC,IAAI,CAAC,0CAAE,EAAE,CAAC;IAC7B,CAAC;IAEM,0BAA0B,CAChC,YAA6B,EAC7B,SAA4B,EAC5B,gBAAwB;;QAExB,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5D,IAAA,mBAAW,EAAC,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CACzD,CAAC;QACF,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC;QAC/E,OAAO,MAAA,IAAA,kBAAU,EAAC,IAAI,CAAC,0CAAE,EAAE,CAAC;IAC7B,CAAC;IAEM,qBAAqB,CAAC,gBAAwB;;QACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI;aAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC;aAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,CAAC,EAAE,wBAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC;QAC7E,OAAO,MAAA,IAAA,kBAAU,EAAC,IAAI,CAAC,0CAAE,EAAE,CAAC;IAC7B,CAAC;IAEM,cAAc,CAAC,gBAAwB;;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC;aAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,CAAC,EAAE,wBAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC;QACvE,OAAO,MAAA,IAAA,kBAAU,EAAC,IAAI,CAAC,0CAAE,EAAE,CAAC;IAC7B,CAAC;IAEM,uBAAuB,CAC7B,KAAW,EACX,gBAAwB,EACxB,gBAAmC,EAAE;;QAErC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACzD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC;aAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,gBAAgB,CAAC;aAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAA,IAAA,kBAAU,EAAC,IAAI,CAAC,0CAAE,EAAE,CAAC;IAC7B,CAAC;IAEM,sBAAsB,CAAC,gBAAwB;;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,SAAS,0CAAE,QAAQ,CAAC,wBAAO,CAAC,wBAAO,CAAC,OAAO,CAAC,CAAC,CAAA,EAAA,CAAC;aAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC;aAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,gBAAgB,CAAC,CAAC;QACjD,OAAO,MAAA,IAAA,kBAAU,EAAC,IAAI,CAAC,0CAAE,EAAE,CAAC;IAC7B,CAAC;IAEM,mBAAmB,CAAC,OAAmC;;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7C,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CACnE,CAAC;QACF,OAAO,MAAA,IAAA,kBAAU,EAAC,IAAI,CAAC,0CAAE,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ,CAAC,IAAmB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAEO,YAAY,CAAC,WAA4B,EAAE,SAA4B,EAAE,eAAe,GAAG,IAAI;QACtG,IAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAA,IAAI,eAAe,EAAE;YAC1C,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;aACtB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC;aAChC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,qBAAI,CAAC,GAAG,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvG,CAAC;IAEM,oBAAoB,CAAC,OAA8D;QACzF,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AA5SD,8BA4SC","sourcesContent":["import {\r\n\tAllCardsService,\r\n\tCardType,\r\n\tGameTag,\r\n\tisBattlegroundsCard,\r\n\tRace,\r\n\tReferenceCard,\r\n\tSpellSchool,\r\n} from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { groupByFunction, pickRandom } from '../services/utils';\r\nimport { getRaceEnum, hasMechanic, isCorrectTribe, isVolumizer } from '../utils';\r\nimport { hasAvenge, hasDefaultScriptDataNum } from './card.interface';\r\nimport { cardMappings } from './impl/_card-mappings';\r\n\r\nexport const WHELP_CARD_IDS = [\r\n\t// CardIds.RedWhelp_BGS_019,\r\n\t// CardIds.RedWhelp_TB_BaconUps_102,\r\n\tCardIds.Onyxia_OnyxianWhelpToken,\r\n];\r\n\r\nexport const validBonusKeywords = [\r\n\tGameTag.TAUNT,\r\n\tGameTag.DIVINE_SHIELD,\r\n\tGameTag.VENOMOUS,\r\n\tGameTag.POISONOUS,\r\n\tGameTag.WINDFURY,\r\n\tGameTag.STEALTH,\r\n\tGameTag.REBORN,\r\n];\r\n\r\nexport const hasKeyword = (entity: BoardEntity, keyword: GameTag) => {\r\n\tswitch (keyword) {\r\n\t\tcase GameTag.TAUNT:\r\n\t\t\treturn entity.taunt;\r\n\t\tcase GameTag.DIVINE_SHIELD:\r\n\t\t\treturn entity.divineShield;\r\n\t\tcase GameTag.VENOMOUS:\r\n\t\t\treturn entity.venomous;\r\n\t\tcase GameTag.WINDFURY:\r\n\t\t\treturn entity.windfury;\r\n\t\tcase GameTag.STEALTH:\r\n\t\t\treturn entity.stealth;\r\n\t\tcase GameTag.REBORN:\r\n\t\t\treturn entity.reborn;\r\n\t\tdefault:\r\n\t\t\treturn false;\r\n\t}\r\n};\r\n\r\nexport class CardsData {\r\n\tpublic ghastcoilerSpawns: readonly string[];\r\n\tpublic impMamaSpawns: readonly string[];\r\n\tpublic demonSpawns: readonly string[];\r\n\tpublic gentleDjinniSpawns: readonly string[];\r\n\tpublic kilrekSpawns: readonly string[];\r\n\tpublic battlecryMinions: readonly string[];\r\n\tpublic deathrattleMinions: readonly string[];\r\n\tpublic pirateSpawns: readonly string[];\r\n\tpublic beastSpawns: readonly string[];\r\n\tpublic scrapScraperSpawns: readonly string[];\r\n\tpublic endOfTurnMinions: readonly string[];\r\n\tpublic magneticMinions: readonly ReferenceCard[];\r\n\tpublic spellcraftPool: readonly ReferenceCard[];\r\n\r\n\tpublic putricidePool1: readonly string[];\r\n\tpublic putricidePool2: readonly string[];\r\n\tpublic putridicePool2ForEternalSummoner: readonly string[];\r\n\r\n\tprivate pool: readonly ReferenceCard[];\r\n\tprivate minionsForTier: { [key: string]: readonly ReferenceCard[] };\r\n\r\n\tconstructor(private readonly allCards: AllCardsService, init = true) {\r\n\t\tif (init) {\r\n\t\t\tthis.inititialize();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic inititialize(validTribes?: readonly Race[], anomalies?: readonly string[]): void {\r\n\t\tconst poolWithGolden = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => isBattlegroundsCard(card))\r\n\t\t\t// Premiums are not in bacon pool\r\n\t\t\t.filter((card) => card.isBaconPool || this.allCards.getCard(card.battlegroundsNormalDbfId)?.isBaconPool)\r\n\t\t\t.filter((card) => card.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((card) => !hasMechanic(card, GameTag.BACON_BUDDY))\r\n\t\t\t.filter((card) => card.set !== 'Vanilla')\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.BigLeague_BG27_Anomaly_100)\r\n\t\t\t\t\t? card.techLevel >= 3\r\n\t\t\t\t\t: anomalies?.includes(CardIds.LittleLeague_BG27_Anomaly_800)\r\n\t\t\t\t\t? card.techLevel <= 4\r\n\t\t\t\t\t: true,\r\n\t\t\t);\r\n\t\tthis.pool = poolWithGolden\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)\r\n\t\t\t\t\t? this.isGolden(card)\r\n\t\t\t\t\t: !this.isGolden(card),\r\n\t\t\t);\r\n\t\tthis.minionsForTier = groupByFunction((card: ReferenceCard) => card.techLevel)(this.pool);\r\n\t\tthis.ghastcoilerSpawns = this.pool\r\n\t\t\t.filter((card) => card.id !== 'BGS_008')\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.demonSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.DEMON)).map((card) => card.id);\r\n\t\tthis.impMamaSpawns = this.demonSpawns.filter((cardId) => cardId !== CardIds.ImpMama_BGS_044);\r\n\t\tthis.gentleDjinniSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.ELEMENTAL))\r\n\t\t\t.filter((card) => card.id !== CardIds.GentleDjinni_BGS_121)\r\n\t\t\t.map((card) => card.id);\r\n\t\t// FIXME: just spawn a random undead instead of an Undead Creation\r\n\t\t// this.festergutSpawns = pool\r\n\t\t// \t.filter((card) => !this.isGolden(card))\r\n\t\t// \t.filter((card) => isCorrectTribe(card.races, Race.UNDEAD))\r\n\t\t// \t.filter((card) => card.id !== CardIds.Festergut_BG25_HERO_100_Buddy)\r\n\t\t// \t// .filter((card) => REMOVED_CARD_IDS.indexOf(card.id) === -1)\r\n\t\t// \t.map((card) => card.id);\r\n\t\tthis.kilrekSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.DEMON))\r\n\t\t\t.filter((card) => card.id !== CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.battlecryMinions = this.pool.filter((card) => hasMechanic(card, GameTag.BATTLECRY)).map((card) => card.id);\r\n\t\tthis.deathrattleMinions = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.pirateSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.PIRATE)).map((card) => card.id);\r\n\t\tthis.beastSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.BEAST)).map((card) => card.id);\r\n\t\tthis.scrapScraperSpawns = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.MAGNETIC))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.endOfTurnMinions = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.END_OF_TURN))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.magneticMinions = this.pool.filter((card) => hasMechanic(card, GameTag.MAGNETIC));\r\n\t\tthis.spellcraftPool = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((c) => c.spellSchool === SpellSchool[SpellSchool.SPELLCRAFT])\r\n\t\t\t.filter((c) => !c.premium)\r\n\t\t\t.filter((c) => c.set === 'Battlegrounds')\r\n\t\t\t// Remove unimplemented ones (mainly spellcrafts that don't have sense in combat)\r\n\t\t\t.filter((c) => cardMappings[c.id] != null);\r\n\r\n\t\tthis.putricidePool1 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool1)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putricidePool2 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putridicePool2ForEternalSummoner = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.filter((card) => !card.battlegroundsPutridiceSummonerExclusion)\r\n\t\t\t.map((card) => card.id);\r\n\t}\r\n\r\n\tpublic avengeValue(cardId: string): number {\r\n\t\tconst avengeImpl = cardMappings[cardId];\r\n\t\tif (hasAvenge(avengeImpl)) {\r\n\t\t\treturn avengeImpl.baseAvengeValue(cardId);\r\n\t\t}\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\t\t// case CardIds.IceSickle:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\tcase CardIds.FridgeMagnet_BG30_MagicItem_545:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.GilneanThornedRose_BG30_MagicItem_864:\r\n\t\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\t// case CardIds.Sisefin_BG21_009:\r\n\t\t\t// case CardIds.Sisefin_BG21_009_G:\r\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\r\n\t\t\tcase CardIds.QuilligraphySet_QuilligraphySetToken_BG30_MagicItem_410t2:\r\n\t\t\tcase CardIds.QuilligraphySet_BG30_MagicItem_410:\r\n\t\t\t\treturn 4;\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\r\n\t\t\t\treturn 5;\r\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\t\treturn 7;\r\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\r\n\t\t\t\treturn 9;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tpublic defaultScriptDataNum(cardId: string): number {\r\n\t\tconst defaultScriptDataNumImpl = cardMappings[cardId];\r\n\t\tif (hasDefaultScriptDataNum(defaultScriptDataNumImpl)) {\r\n\t\t\treturn defaultScriptDataNumImpl.defaultScriptDataNum(cardId);\r\n\t\t}\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\r\n\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\r\n\t\t\tcase CardIds.BoomController_BG30_MagicItem_440:\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\tcase CardIds.DeathlyPhylactery_BG30_MagicItem_700:\r\n\t\t\tcase CardIds.PromoPortrait_BG30_MagicItem_918:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.JarOGems_BG30_MagicItem_546:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\tcase CardIds.MechagonAdapter_BG30_MagicItem_910:\r\n\t\t\tcase CardIds.FaerieDragonScale_BG32_MagicItem_363:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.ReinforcedShield_BG30_MagicItem_886:\r\n\t\t\t\treturn 5;\r\n\t\t\tdefault:\r\n\t\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getTavernLevel(cardId: string): number {\r\n\t\treturn this.allCards.getCard(cardId).techLevel ?? 1;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTavernTier(tavernTier: number): string {\r\n\t\t// Tzvern tier can be undefined for hero-power specific tokens, like the Amalgam, or when\r\n\t\t// for some reason tokens end up in the shop. For now, defaulting to 1 for tavern\r\n\t\t// level seems to work in all cases\r\n\t\tconst minionsForTier = this.minionsForTier[tavernTier ?? 1];\r\n\t\tif (!minionsForTier?.length) {\r\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\r\n\t\t}\r\n\t\treturn pickRandom(minionsForTier)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMinionForMinTavernTier(tavernTier: number): string {\r\n\t\tconst minionsForTier = this.pool.filter((m) => m.techLevel >= tavernTier);\r\n\t\tif (!minionsForTier?.length) {\r\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\r\n\t\t}\r\n\t\treturn pickRandom(minionsForTier)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMechToMagnetize(tavernLimitUpper: number): string {\r\n\t\tconst magneticMechs = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag.MODULAR));\r\n\t\tconst pool = magneticMechs.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMagneticVolumizer(\r\n\t\tplayerEntity: BgsPlayerEntity,\r\n\t\tanomalies: readonly string[],\r\n\t\ttavernLimitUpper: number,\r\n\t): string {\r\n\t\tconst magneticVolumizers = this.magneticMinions.filter((m) =>\r\n\t\t\tisVolumizer(m.id, playerEntity, anomalies, this.allCards),\r\n\t\t);\r\n\t\tconst pool = magneticVolumizers.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomDivineShield(tavernLimitUpper: number) {\r\n\t\tconst divineShieldPool = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag.DIVINE_SHIELD));\r\n\t\tconst pool = divineShieldPool.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomRally(tavernLimitUpper: number) {\r\n\t\tconst targetPool = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag.BACON_RALLY));\r\n\t\tconst pool = targetPool.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTribe(\r\n\t\ttribe: Race,\r\n\t\ttavernLimitUpper: number,\r\n\t\texcludedCards: readonly string[] = [],\r\n\t): string {\r\n\t\tconst pool = this.pool\r\n\t\t\t.filter((m) => this.isValidTribe([tribe], m.races, false))\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper)\r\n\t\t\t.filter((m) => !excludedCards.includes(m.id));\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomProtossMinion(tavernLimitUpper: number): string {\r\n\t\tconst pool = this.pool\r\n\t\t\t.filter((m) => m.mechanics?.includes(GameTag[GameTag.PROTOSS]))\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomSpellcraft(options: { maxTavernTier?: number }): string {\r\n\t\tconst pool = this.spellcraftPool.filter((c) =>\r\n\t\t\toptions.maxTavernTier ? c.techLevel <= options.maxTavernTier : true,\r\n\t\t);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic isGolden(card: ReferenceCard): boolean {\r\n\t\treturn card.premium;\r\n\t}\r\n\r\n\tprivate isValidTribe(validTribes: readonly Race[], cardRaces: readonly string[], allowEmptyRaces = true): boolean {\r\n\t\tif (!cardRaces?.length && allowEmptyRaces) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn (cardRaces ?? [])\r\n\t\t\t.map((race) => getRaceEnum(race))\r\n\t\t\t.some((raceEnum) => raceEnum === Race.ALL || !validTribes?.length || validTribes.includes(raceEnum));\r\n\t}\r\n\r\n\tpublic getRandomTavernSpell(options?: { exactTavernTier?: number; maxTavernTier?: number }): string {\r\n\t\treturn null;\r\n\t}\r\n}\r\n"]}
1
+ {"version":3,"file":"cards-data.js","sourceRoot":"","sources":["../../src/cards/cards-data.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tAllCardsService,\r\n\tCardType,\r\n\tGameTag,\r\n\tisBattlegroundsCard,\r\n\tRace,\r\n\tReferenceCard,\r\n\tSpellSchool,\r\n} from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { groupByFunction, pickRandom } from '../services/utils';\r\nimport { getRaceEnum, hasMechanic, isCorrectTribe, isVolumizer } from '../utils';\r\nimport { hasAvenge, hasDefaultScriptDataNum } from './card.interface';\r\nimport { cardMappings } from './impl/_card-mappings';\r\n\r\nexport const isWhelp = (cardId: string, allCards: AllCardsService): boolean => {\r\n\treturn allCards.getCard(cardId).mechanics?.includes(GameTag[GameTag.WHELP]);\r\n};\r\n\r\nexport const validBonusKeywords = [\r\n\tGameTag.TAUNT,\r\n\tGameTag.DIVINE_SHIELD,\r\n\tGameTag.VENOMOUS,\r\n\tGameTag.POISONOUS,\r\n\tGameTag.WINDFURY,\r\n\tGameTag.STEALTH,\r\n\tGameTag.REBORN,\r\n];\r\n\r\nexport const hasKeyword = (entity: BoardEntity, keyword: GameTag) => {\r\n\tswitch (keyword) {\r\n\t\tcase GameTag.TAUNT:\r\n\t\t\treturn entity.taunt;\r\n\t\tcase GameTag.DIVINE_SHIELD:\r\n\t\t\treturn entity.divineShield;\r\n\t\tcase GameTag.VENOMOUS:\r\n\t\t\treturn entity.venomous;\r\n\t\tcase GameTag.WINDFURY:\r\n\t\t\treturn entity.windfury;\r\n\t\tcase GameTag.STEALTH:\r\n\t\t\treturn entity.stealth;\r\n\t\tcase GameTag.REBORN:\r\n\t\t\treturn entity.reborn;\r\n\t\tdefault:\r\n\t\t\treturn false;\r\n\t}\r\n};\r\n\r\nexport class CardsData {\r\n\tpublic ghastcoilerSpawns: readonly string[];\r\n\tpublic impMamaSpawns: readonly string[];\r\n\tpublic demonSpawns: readonly string[];\r\n\tpublic gentleDjinniSpawns: readonly string[];\r\n\tpublic kilrekSpawns: readonly string[];\r\n\tpublic battlecryMinions: readonly string[];\r\n\tpublic deathrattleMinions: readonly string[];\r\n\tpublic pirateSpawns: readonly string[];\r\n\tpublic beastSpawns: readonly string[];\r\n\tpublic scrapScraperSpawns: readonly string[];\r\n\tpublic endOfTurnMinions: readonly string[];\r\n\tpublic magneticMinions: readonly ReferenceCard[];\r\n\tpublic spellcraftPool: readonly ReferenceCard[];\r\n\r\n\tpublic putricidePool1: readonly string[];\r\n\tpublic putricidePool2: readonly string[];\r\n\tpublic putridicePool2ForEternalSummoner: readonly string[];\r\n\r\n\tprivate pool: readonly ReferenceCard[];\r\n\tprivate minionsForTier: { [key: string]: readonly ReferenceCard[] };\r\n\r\n\tconstructor(private readonly allCards: AllCardsService, init = true) {\r\n\t\tif (init) {\r\n\t\t\tthis.inititialize();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic inititialize(validTribes?: readonly Race[], anomalies?: readonly string[]): void {\r\n\t\tconst poolWithGolden = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => isBattlegroundsCard(card))\r\n\t\t\t// Premiums are not in bacon pool\r\n\t\t\t.filter((card) => card.isBaconPool || this.allCards.getCard(card.battlegroundsNormalDbfId)?.isBaconPool)\r\n\t\t\t.filter((card) => card.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((card) => !hasMechanic(card, GameTag.BACON_BUDDY))\r\n\t\t\t.filter((card) => card.set !== 'Vanilla')\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.BigLeague_BG27_Anomaly_100)\r\n\t\t\t\t\t? card.techLevel >= 3\r\n\t\t\t\t\t: anomalies?.includes(CardIds.LittleLeague_BG27_Anomaly_800)\r\n\t\t\t\t\t? card.techLevel <= 4\r\n\t\t\t\t\t: true,\r\n\t\t\t);\r\n\t\tthis.pool = poolWithGolden\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)\r\n\t\t\t\t\t? this.isGolden(card)\r\n\t\t\t\t\t: !this.isGolden(card),\r\n\t\t\t);\r\n\t\tthis.minionsForTier = groupByFunction((card: ReferenceCard) => card.techLevel)(this.pool);\r\n\t\tthis.ghastcoilerSpawns = this.pool\r\n\t\t\t.filter((card) => card.id !== 'BGS_008')\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.demonSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.DEMON)).map((card) => card.id);\r\n\t\tthis.impMamaSpawns = this.demonSpawns.filter((cardId) => cardId !== CardIds.ImpMama_BGS_044);\r\n\t\tthis.gentleDjinniSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.ELEMENTAL))\r\n\t\t\t.filter((card) => card.id !== CardIds.GentleDjinni_BGS_121)\r\n\t\t\t.map((card) => card.id);\r\n\t\t// FIXME: just spawn a random undead instead of an Undead Creation\r\n\t\t// this.festergutSpawns = pool\r\n\t\t// \t.filter((card) => !this.isGolden(card))\r\n\t\t// \t.filter((card) => isCorrectTribe(card.races, Race.UNDEAD))\r\n\t\t// \t.filter((card) => card.id !== CardIds.Festergut_BG25_HERO_100_Buddy)\r\n\t\t// \t// .filter((card) => REMOVED_CARD_IDS.indexOf(card.id) === -1)\r\n\t\t// \t.map((card) => card.id);\r\n\t\tthis.kilrekSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.DEMON))\r\n\t\t\t.filter((card) => card.id !== CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.battlecryMinions = this.pool.filter((card) => hasMechanic(card, GameTag.BATTLECRY)).map((card) => card.id);\r\n\t\tthis.deathrattleMinions = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.DEATHRATTLE))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.pirateSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.PIRATE)).map((card) => card.id);\r\n\t\tthis.beastSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.BEAST)).map((card) => card.id);\r\n\t\tthis.scrapScraperSpawns = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.MAGNETIC))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.endOfTurnMinions = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag.END_OF_TURN))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.magneticMinions = this.pool.filter((card) => hasMechanic(card, GameTag.MAGNETIC));\r\n\t\tthis.spellcraftPool = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((c) => c.spellSchool === SpellSchool[SpellSchool.SPELLCRAFT])\r\n\t\t\t.filter((c) => !c.premium)\r\n\t\t\t.filter((c) => c.set === 'Battlegrounds')\r\n\t\t\t// Remove unimplemented ones (mainly spellcrafts that don't have sense in combat)\r\n\t\t\t.filter((c) => cardMappings[c.id] != null);\r\n\r\n\t\tthis.putricidePool1 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool1)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putricidePool2 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putridicePool2ForEternalSummoner = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.filter((card) => !card.battlegroundsPutridiceSummonerExclusion)\r\n\t\t\t.map((card) => card.id);\r\n\t}\r\n\r\n\tpublic avengeValue(cardId: string): number {\r\n\t\tconst avengeImpl = cardMappings[cardId];\r\n\t\tif (hasAvenge(avengeImpl)) {\r\n\t\t\treturn avengeImpl.baseAvengeValue(cardId);\r\n\t\t}\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\t\t// case CardIds.IceSickle:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\tcase CardIds.FridgeMagnet_BG30_MagicItem_545:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.GilneanThornedRose_BG30_MagicItem_864:\r\n\t\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\t// case CardIds.Sisefin_BG21_009:\r\n\t\t\t// case CardIds.Sisefin_BG21_009_G:\r\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\r\n\t\t\tcase CardIds.QuilligraphySet_QuilligraphySetToken_BG30_MagicItem_410t2:\r\n\t\t\tcase CardIds.QuilligraphySet_BG30_MagicItem_410:\r\n\t\t\t\treturn 4;\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\r\n\t\t\t\treturn 5;\r\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\t\treturn 7;\r\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\r\n\t\t\t\treturn 9;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tpublic defaultScriptDataNum(cardId: string): number {\r\n\t\tconst defaultScriptDataNumImpl = cardMappings[cardId];\r\n\t\tif (hasDefaultScriptDataNum(defaultScriptDataNumImpl)) {\r\n\t\t\treturn defaultScriptDataNumImpl.defaultScriptDataNum(cardId);\r\n\t\t}\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\r\n\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\r\n\t\t\tcase CardIds.BoomController_BG30_MagicItem_440:\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\tcase CardIds.DeathlyPhylactery_BG30_MagicItem_700:\r\n\t\t\tcase CardIds.PromoPortrait_BG30_MagicItem_918:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.JarOGems_BG30_MagicItem_546:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\tcase CardIds.MechagonAdapter_BG30_MagicItem_910:\r\n\t\t\tcase CardIds.FaerieDragonScale_BG32_MagicItem_363:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.ReinforcedShield_BG30_MagicItem_886:\r\n\t\t\t\treturn 5;\r\n\t\t\tdefault:\r\n\t\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getTavernLevel(cardId: string): number {\r\n\t\treturn this.allCards.getCard(cardId).techLevel ?? 1;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTavernTier(tavernTier: number): string {\r\n\t\t// Tzvern tier can be undefined for hero-power specific tokens, like the Amalgam, or when\r\n\t\t// for some reason tokens end up in the shop. For now, defaulting to 1 for tavern\r\n\t\t// level seems to work in all cases\r\n\t\tconst minionsForTier = this.minionsForTier[tavernTier ?? 1];\r\n\t\tif (!minionsForTier?.length) {\r\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\r\n\t\t}\r\n\t\treturn pickRandom(minionsForTier)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMinionForMinTavernTier(tavernTier: number): string {\r\n\t\tconst minionsForTier = this.pool.filter((m) => m.techLevel >= tavernTier);\r\n\t\tif (!minionsForTier?.length) {\r\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\r\n\t\t}\r\n\t\treturn pickRandom(minionsForTier)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMechToMagnetize(tavernLimitUpper: number): string {\r\n\t\tconst magneticMechs = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag.MODULAR));\r\n\t\tconst pool = magneticMechs.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMagneticVolumizer(\r\n\t\tplayerEntity: BgsPlayerEntity,\r\n\t\tanomalies: readonly string[],\r\n\t\ttavernLimitUpper: number,\r\n\t): string {\r\n\t\tconst magneticVolumizers = this.magneticMinions.filter((m) =>\r\n\t\t\tisVolumizer(m.id, playerEntity, anomalies, this.allCards),\r\n\t\t);\r\n\t\tconst pool = magneticVolumizers.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomDivineShield(tavernLimitUpper: number) {\r\n\t\tconst divineShieldPool = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag.DIVINE_SHIELD));\r\n\t\tconst pool = divineShieldPool.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomRally(tavernLimitUpper: number) {\r\n\t\tconst targetPool = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag.BACON_RALLY));\r\n\t\tconst pool = targetPool.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTribe(\r\n\t\ttribe: Race,\r\n\t\ttavernLimitUpper: number,\r\n\t\texcludedCards: readonly string[] = [],\r\n\t): string {\r\n\t\tconst pool = this.pool\r\n\t\t\t.filter((m) => this.isValidTribe([tribe], m.races, false))\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper)\r\n\t\t\t.filter((m) => !excludedCards.includes(m.id));\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomProtossMinion(tavernLimitUpper: number): string {\r\n\t\tconst pool = this.pool\r\n\t\t\t.filter((m) => m.mechanics?.includes(GameTag[GameTag.PROTOSS]))\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomSpellcraft(options: { maxTavernTier?: number }): string {\r\n\t\tconst pool = this.spellcraftPool.filter((c) =>\r\n\t\t\toptions.maxTavernTier ? c.techLevel <= options.maxTavernTier : true,\r\n\t\t);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic isGolden(card: ReferenceCard): boolean {\r\n\t\treturn card.premium;\r\n\t}\r\n\r\n\tprivate isValidTribe(validTribes: readonly Race[], cardRaces: readonly string[], allowEmptyRaces = true): boolean {\r\n\t\tif (!cardRaces?.length && allowEmptyRaces) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn (cardRaces ?? [])\r\n\t\t\t.map((race) => getRaceEnum(race))\r\n\t\t\t.some((raceEnum) => raceEnum === Race.ALL || !validTribes?.length || validTribes.includes(raceEnum));\r\n\t}\r\n\r\n\tpublic getRandomTavernSpell(options?: { exactTavernTier?: number; maxTavernTier?: number }): string {\r\n\t\treturn null;\r\n\t}\r\n}\r\n"]}
@@ -7,6 +7,7 @@ const blood_gem_barrage_1 = require("./bg-spell/blood-gem-barrage");
7
7
  const brood_of_nozdormu_1 = require("./bg-spell/brood-of-nozdormu");
8
8
  const eyes_of_the_earth_mother_1 = require("./bg-spell/eyes-of-the-earth-mother");
9
9
  const hand_of_deios_1 = require("./bg-spell/hand-of-deios");
10
+ const menagerie_tableware_1 = require("./bg-spell/menagerie-tableware");
10
11
  const murkys_fish_1 = require("./bg-spell/murkys-fish");
11
12
  const natural_blessing_1 = require("./bg-spell/natural-blessing");
12
13
  const sharing_is_caring_1 = require("./bg-spell/sharing-is-caring");
@@ -36,7 +37,6 @@ const swatting_insects_1 = require("./hero-power/swatting-insects");
36
37
  const admiral_eliza_goreblade_1 = require("./minion/admiral-eliza-goreblade");
37
38
  const all_seeing_elder_1 = require("./minion/all-seeing-elder");
38
39
  const alleycat_1 = require("./minion/alleycat");
39
- const amplifying_lightspawn_1 = require("./minion/amplifying-lightspawn");
40
40
  const anubarak_nerubian_king_1 = require("./minion/anubarak-nerubian-king");
41
41
  const apexis_guardian_1 = require("./minion/apexis-guardian");
42
42
  const apprentice_of_sefin_1 = require("./minion/apprentice-of-sefin");
@@ -75,6 +75,7 @@ const briny_bootlegger_1 = require("./minion/briny-bootlegger");
75
75
  const bronze_steward_1 = require("./minion/bronze-steward");
76
76
  const bubble_gunner_1 = require("./minion/bubble-gunner");
77
77
  const budding_greenthumb_1 = require("./minion/budding-greenthumb");
78
+ const burgeoning_whelp_1 = require("./minion/burgeoning-whelp");
78
79
  const buzzing_vermin_1 = require("./minion/buzzing-vermin");
79
80
  const cadaver_caretaker_1 = require("./minion/cadaver-caretaker");
80
81
  const campfire_shadow_1 = require("./minion/campfire-shadow");
@@ -112,11 +113,13 @@ const echoing_roar_1 = require("./minion/echoing-roar");
112
113
  const efficient_engineer_1 = require("./minion/efficient-engineer");
113
114
  const electric_synthesizer_1 = require("./minion/electric-synthesizer");
114
115
  const elite_navigator_1 = require("./minion/elite-navigator");
116
+ const eternal_tycoon_1 = require("./minion/eternal-tycoon");
115
117
  const exceptionnal_caretaker_1 = require("./minion/exceptionnal-caretaker");
116
118
  const expert_aviator_1 = require("./minion/expert-aviator");
117
119
  const expert_technician_1 = require("./minion/expert-technician");
118
120
  const fairy_gillmother_1 = require("./minion/fairy-gillmother");
119
121
  const fauna_whisperer_1 = require("./minion/fauna-whisperer");
122
+ const felhorn_1 = require("./minion/felhorn");
120
123
  const festergut_1 = require("./minion/festergut");
121
124
  const fire_forged_evoker_1 = require("./minion/fire-forged-evoker");
122
125
  const firescale_hoarder_1 = require("./minion/firescale-hoarder");
@@ -234,6 +237,7 @@ const paint_smudger_1 = require("./minion/paint-smudger");
234
237
  const parched_wanderer_1 = require("./minion/parched-wanderer");
235
238
  const pashmar_the_vengeful_1 = require("./minion/pashmar-the-vengeful");
236
239
  const peggy_sturdybone_1 = require("./minion/peggy-sturdybone");
240
+ const photobomber_1 = require("./minion/photobomber");
237
241
  const pilot_the_shredder_1 = require("./minion/pilot-the-shredder");
238
242
  const piloted_whirl_o_tron_1 = require("./minion/piloted-whirl-o-tron");
239
243
  const plankwalker_1 = require("./minion/plankwalker");
@@ -254,6 +258,7 @@ const razorfen_vineweaver_1 = require("./minion/razorfen-vineweaver");
254
258
  const razorgore_the_untamed_1 = require("./minion/razorgore-the-untamed");
255
259
  const reckless_cliffdiver_1 = require("./minion/reckless-cliffdiver");
256
260
  const red_volumizer_1 = require("./minion/red-volumizer");
261
+ const relentless_deflector_1 = require("./minion/relentless-deflector");
257
262
  const rickety_repairbot_1 = require("./minion/rickety-repairbot");
258
263
  const ride_or_die_1 = require("./minion/ride-or-die");
259
264
  const ripsnarl_captain_1 = require("./minion/ripsnarl-captain");
@@ -279,6 +284,7 @@ const sharptooth_snapper_1 = require("./minion/sharptooth-snapper");
279
284
  const shell_collector_1 = require("./minion/shell-collector");
280
285
  const ship_master_eudora_1 = require("./minion/ship-master-eudora");
281
286
  const shipwrecked_rascal_1 = require("./minion/shipwrecked-rascal");
287
+ const shore_marauder_1 = require("./minion/shore-marauder");
282
288
  const showy_cyclist_1 = require("./minion/showy-cyclist");
283
289
  const silent_enforcer_1 = require("./minion/silent-enforcer");
284
290
  const silithid_burrower_1 = require("./minion/silithid-burrower");
@@ -302,6 +308,7 @@ const spirit_of_air_1 = require("./minion/spirit-of-air");
302
308
  const spirited_whimsydrake_1 = require("./minion/spirited-whimsydrake");
303
309
  const springy_spriggan_1 = require("./minion/springy-spriggan");
304
310
  const stalwart_kodo_1 = require("./minion/stalwart-kodo");
311
+ const stellar_freebooter_1 = require("./minion/stellar-freebooter");
305
312
  const stitched_salvager_1 = require("./minion/stitched-salvager");
306
313
  const stomping_stegodon_1 = require("./minion/stomping-stegodon");
307
314
  const stomping_stegodon_enchantment_1 = require("./minion/stomping-stegodon-enchantment");
@@ -333,7 +340,9 @@ const timewarped_calligrapher_1 = require("./minion/timewarped-calligrapher");
333
340
  const timewarped_caretaker_1 = require("./minion/timewarped-caretaker");
334
341
  const timewarped_centurion_1 = require("./minion/timewarped-centurion");
335
342
  const timewarped_chameleon_1 = require("./minion/timewarped-chameleon");
343
+ const timewarped_chimera_1 = require("./minion/timewarped-chimera");
336
344
  const timewarped_clefthoof_1 = require("./minion/timewarped-clefthoof");
345
+ const timewarped_collector_1 = require("./minion/timewarped-collector");
337
346
  const timewarped_copter_1 = require("./minion/timewarped-copter");
338
347
  const timewarped_deadstomper_1 = require("./minion/timewarped-deadstomper");
339
348
  const timewarped_deathswarmer_1 = require("./minion/timewarped-deathswarmer");
@@ -356,6 +365,7 @@ const timewarped_hawkstrider_1 = require("./minion/timewarped-hawkstrider");
356
365
  const timewarped_hooktail_1 = require("./minion/timewarped-hooktail");
357
366
  const timewarped_hunter_1 = require("./minion/timewarped-hunter");
358
367
  const timewarped_hyena_1 = require("./minion/timewarped-hyena");
368
+ const timewarped_icky_imp_1 = require("./minion/timewarped-icky-imp");
359
369
  const timewarped_immortal_1 = require("./minion/timewarped-immortal");
360
370
  const timewarped_interpreter_1 = require("./minion/timewarped-interpreter");
361
371
  const timewarped_jazzer_1 = require("./minion/timewarped-jazzer");
@@ -366,13 +376,16 @@ const timewarped_kilrek_1 = require("./minion/timewarped-kilrek");
366
376
  const timewarped_lab_rat_1 = require("./minion/timewarped-lab-rat");
367
377
  const timewarped_lil_quilboar_1 = require("./minion/timewarped-lil-quilboar");
368
378
  const timewarped_low_flier_1 = require("./minion/timewarped-low-flier");
379
+ const timewarped_magnanimoose_1 = require("./minion/timewarped-magnanimoose");
369
380
  const timewarped_mothership_1 = require("./minion/timewarped-mothership");
370
381
  const timewarped_mrrrglr_1 = require("./minion/timewarped-mrrrglr");
371
382
  const timewarped_murcules_1 = require("./minion/timewarped-murcules");
372
383
  const timewarped_murk_eye_1 = require("./minion/timewarped-murk-eye");
373
384
  const timewarped_murky_1 = require("./minion/timewarped-murky");
385
+ const timewarped_mythraw_1 = require("./minion/timewarped-mythraw");
374
386
  const timewarped_nalaa_1 = require("./minion/timewarped-nalaa");
375
387
  const timewarped_nellies_ship_1 = require("./minion/timewarped-nellies-ship");
388
+ const timewarped_nest_swarmer_1 = require("./minion/timewarped-nest-swarmer");
376
389
  const timewarped_painter_1 = require("./minion/timewarped-painter");
377
390
  const timewarped_paleofin_1 = require("./minion/timewarped-paleofin");
378
391
  const timewarped_pashmar_1 = require("./minion/timewarped-pashmar");
@@ -398,18 +411,22 @@ const timewarped_shadowdancer_1 = require("./minion/timewarped-shadowdancer");
398
411
  const timewarped_spirit_of_air_1 = require("./minion/timewarped-spirit-of-air");
399
412
  const timewarped_sporebat_1 = require("./minion/timewarped-sporebat");
400
413
  const timewarped_steamer_1 = require("./minion/timewarped-steamer");
414
+ const timewarped_stone_drake_1 = require("./minion/timewarped-stone-drake");
401
415
  const timewarped_stormcloud_1 = require("./minion/timewarped-stormcloud");
402
416
  const timewarped_substrate_1 = require("./minion/timewarped-substrate");
417
+ const timewarped_swirler_1 = require("./minion/timewarped-swirler");
403
418
  const timewarped_sylvar_1 = require("./minion/timewarped-sylvar");
404
419
  const timewarped_tamuzo_1 = require("./minion/timewarped-tamuzo");
405
420
  const timewarped_tender_1 = require("./minion/timewarped-tender");
406
421
  const timewarped_thorncaller_1 = require("./minion/timewarped-thorncaller");
407
422
  const timewarped_tide_razor_1 = require("./minion/timewarped-tide-razor");
408
423
  const timewarped_tony_1 = require("./minion/timewarped-tony");
424
+ const timewarped_traveler_1 = require("./minion/timewarped-traveler");
409
425
  const timewarped_trickster_1 = require("./minion/timewarped-trickster");
410
426
  const timewarped_twirler_1 = require("./minion/timewarped-twirler");
411
427
  const timewarped_ultralisk_1 = require("./minion/timewarped-ultralisk");
412
428
  const timewarped_vaelastrasz_1 = require("./minion/timewarped-vaelastrasz");
429
+ const timewarped_wargear_1 = require("./minion/timewarped-wargear");
413
430
  const timewarped_warghoul_1 = require("./minion/timewarped-warghoul");
414
431
  const timewarped_whelp_smuggler_1 = require("./minion/timewarped-whelp-smuggler");
415
432
  const tomb_pillager_1 = require("./minion/tomb-pillager");
@@ -470,6 +487,7 @@ const timewarped_crown_1 = require("./spellcraft/timewarped-crown");
470
487
  const timewarped_eelectrify_1 = require("./spellcraft/timewarped-eelectrify");
471
488
  const timewarped_shoal_1 = require("./spellcraft/timewarped-shoal");
472
489
  const undersea_mount_1 = require("./spellcraft/undersea-mount");
490
+ const veterans_tactics_1 = require("./spellcraft/veterans-tactics");
473
491
  const all_purpose_kibble_1 = require("./trinket/all-purpose-kibble");
474
492
  const arm_of_the_empire_1 = require("./trinket/arm-of-the-empire");
475
493
  const artisanal_urn_1 = require("./trinket/artisanal-urn");
@@ -577,10 +595,13 @@ const cards = [
577
595
  monstrous_macaw_1.MonstrousMacaw,
578
596
  hogwash_basin_1.HogwashBasin,
579
597
  dreaming_thornweaver_1.DreamingThornweaver,
598
+ felhorn_1.Felhorn,
599
+ relentless_deflector_1.RelentlessDeflector,
600
+ photobomber_1.Photobomber,
601
+ stellar_freebooter_1.StellarFreebooter,
580
602
  skulking_bristlemane_1.SkulkingBristlemane,
581
603
  sharptooth_snapper_1.SharptoothSnapper,
582
604
  valiant_tiger_1.ValiantTiger,
583
- amplifying_lightspawn_1.AmplifyingLightspawn,
584
605
  glowing_cinder_1.GlowingCinder,
585
606
  sand_swirler_1.SandSwirler,
586
607
  bonker_1.Bonker,
@@ -617,6 +638,7 @@ const cards = [
617
638
  auto_assembler_enchantment_1.AutoAssemblerEnchantment,
618
639
  deadstomper_1.Deadstomper,
619
640
  arm_of_the_empire_1.ArmOfTheEmpire,
641
+ eternal_tycoon_1.EternalTycoon,
620
642
  battlecruiser_1.Battlecruiser,
621
643
  sharing_is_caring_1.SharingIsCaring,
622
644
  low_flier_1.LowFlier,
@@ -775,7 +797,19 @@ const cards = [
775
797
  meditation_1.Meditation,
776
798
  rime_or_reason_1.RimeOrReason,
777
799
  rushing_winds_1.RushingWinds,
800
+ timewarped_chimera_1.TimewarpedChimera,
801
+ timewarped_magnanimoose_1.TimewarpedMagnanimoose,
802
+ timewarped_nest_swarmer_1.TimewarpedNestSwarmer,
803
+ timewarped_swirler_1.TimewarpedSwirler,
804
+ shore_marauder_1.ShoreMarauder,
805
+ timewarped_stone_drake_1.TimewarpedStoneDrake,
806
+ timewarped_mythraw_1.TimewarpedMythrax,
807
+ timewarped_wargear_1.TimewarpedWargear,
808
+ timewarped_collector_1.TimewarpedCollector,
809
+ timewarped_icky_imp_1.TimewarpedIckyImp,
778
810
  undersea_mount_1.UnderseaMount,
811
+ burgeoning_whelp_1.BurgeoningWhelp,
812
+ timewarped_traveler_1.TimewarpedTraveler,
779
813
  sunken_advocate_1.SunkenAdvocate,
780
814
  bluesy_siren_1.BluesySiren,
781
815
  razorfen_flapper_1.RazorfenFlapper,
@@ -901,6 +935,8 @@ const cards = [
901
935
  timewarped_duskmaw_1.TimewarpedDuskmaw,
902
936
  timewarped_primscale_1.TimewarpedPrimscale,
903
937
  plankwalker_1.Plankwalker,
938
+ menagerie_tableware_1.MenagerieTableware,
939
+ veterans_tactics_1.VeteransTactics,
904
940
  charging_czarina_1.ChargingCzarina,
905
941
  paint_smudger_1.PaintSmudger,
906
942
  forsaken_weaver_1.ForsakenWeaver,