@firestone-hs/simulate-bgs-battle 1.1.700 → 1.1.702
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.
- package/dist/cards/card.interface.d.ts +2 -6
- package/dist/cards/card.interface.js.map +1 -1
- package/dist/cards/impl/_card-mappings.js +9 -1
- package/dist/cards/impl/_card-mappings.js.map +1 -1
- package/dist/cards/impl/bg-spell/azerite-empowerment.js +1 -2
- package/dist/cards/impl/bg-spell/azerite-empowerment.js.map +1 -1
- package/dist/cards/impl/bg-spell/back-to-back.js +3 -1
- package/dist/cards/impl/bg-spell/back-to-back.js.map +1 -1
- package/dist/cards/impl/bg-spell/conflagration.js +4 -2
- package/dist/cards/impl/bg-spell/conflagration.js.map +1 -1
- package/dist/cards/impl/bg-spell/deepwater-clan.js +3 -2
- package/dist/cards/impl/bg-spell/deepwater-clan.js.map +1 -1
- package/dist/cards/impl/bg-spell/healthy-bounty.js +3 -1
- package/dist/cards/impl/bg-spell/healthy-bounty.js.map +1 -1
- package/dist/cards/impl/bg-spell/hostile-bounty.js +3 -1
- package/dist/cards/impl/bg-spell/hostile-bounty.js.map +1 -1
- package/dist/cards/impl/bg-spell/menagerie-tableware.js +2 -1
- package/dist/cards/impl/bg-spell/menagerie-tableware.js.map +1 -1
- package/dist/cards/impl/bg-spell/might-of-stormwind.js +3 -1
- package/dist/cards/impl/bg-spell/might-of-stormwind.js.map +1 -1
- package/dist/cards/impl/bg-spell/murkys-fish.js +2 -1
- package/dist/cards/impl/bg-spell/murkys-fish.js.map +1 -1
- package/dist/cards/impl/bg-spell/natural-blessing.js +2 -2
- package/dist/cards/impl/bg-spell/natural-blessing.js.map +1 -1
- package/dist/cards/impl/bg-spell/queens-command.js +3 -2
- package/dist/cards/impl/bg-spell/queens-command.js.map +1 -1
- package/dist/cards/impl/bg-spell/selfish-bounty.js +3 -1
- package/dist/cards/impl/bg-spell/selfish-bounty.js.map +1 -1
- package/dist/cards/impl/bg-spell/shifting-tide.js +3 -2
- package/dist/cards/impl/bg-spell/shifting-tide.js.map +1 -1
- package/dist/cards/impl/bg-spell/shiny-ring.js +1 -2
- package/dist/cards/impl/bg-spell/shiny-ring.js.map +1 -1
- package/dist/cards/impl/bg-spell/wave-of-gold.js +3 -2
- package/dist/cards/impl/bg-spell/wave-of-gold.js.map +1 -1
- package/dist/cards/impl/minion/auto-assembler-enchantment.js +6 -1
- package/dist/cards/impl/minion/auto-assembler-enchantment.js.map +1 -1
- package/dist/cards/impl/minion/banana-slamma.js +1 -1
- package/dist/cards/impl/minion/banana-slamma.js.map +1 -1
- package/dist/cards/impl/minion/battlecruiser.js +9 -11
- package/dist/cards/impl/minion/battlecruiser.js.map +1 -1
- package/dist/cards/impl/minion/determined-defender.js +2 -2
- package/dist/cards/impl/minion/determined-defender.js.map +1 -1
- package/dist/cards/impl/minion/diremuck-forager.js +1 -1
- package/dist/cards/impl/minion/diremuck-forager.js.map +1 -1
- package/dist/cards/impl/minion/pufferquil.d.ts +2 -2
- package/dist/cards/impl/minion/pufferquil.js +3 -0
- package/dist/cards/impl/minion/pufferquil.js.map +1 -1
- package/dist/cards/impl/minion/radio-star.js +4 -0
- package/dist/cards/impl/minion/radio-star.js.map +1 -1
- package/dist/cards/impl/minion/ring-bearer.d.ts +2 -2
- package/dist/cards/impl/minion/ring-bearer.js +4 -4
- package/dist/cards/impl/minion/ring-bearer.js.map +1 -1
- package/dist/cards/impl/minion/scallywag.js.map +1 -1
- package/dist/cards/impl/minion/scarlet-survivor.d.ts +2 -2
- package/dist/cards/impl/minion/scarlet-survivor.js +12 -2
- package/dist/cards/impl/minion/scarlet-survivor.js.map +1 -1
- package/dist/cards/impl/minion/skulking-bristlemane.js +1 -1
- package/dist/cards/impl/minion/skulking-bristlemane.js.map +1 -1
- package/dist/cards/impl/minion/timecapn-hooktail.d.ts +2 -0
- package/dist/cards/impl/minion/timecapn-hooktail.js +14 -0
- package/dist/cards/impl/minion/timecapn-hooktail.js.map +1 -0
- package/dist/cards/impl/minion/timewarped-magnanimoose.js +1 -1
- package/dist/cards/impl/minion/timewarped-magnanimoose.js.map +1 -1
- package/dist/cards/impl/minion/timewarped-radio-star.js +2 -1
- package/dist/cards/impl/minion/timewarped-radio-star.js.map +1 -1
- package/dist/cards/impl/trinket/automaton-portrait.d.ts +4 -0
- package/dist/cards/impl/trinket/automaton-portrait.js +12 -6
- package/dist/cards/impl/trinket/automaton-portrait.js.map +1 -1
- package/dist/cards/impl/trinket/fang-anklet.js +2 -17
- package/dist/cards/impl/trinket/fang-anklet.js.map +1 -1
- package/dist/cards/impl/trinket/jar-o-gems.js +1 -1
- package/dist/cards/impl/trinket/jar-o-gems.js.map +1 -1
- package/dist/cards/impl/trinket/mama-bear-sticker.d.ts +2 -0
- package/dist/cards/impl/trinket/mama-bear-sticker.js +18 -0
- package/dist/cards/impl/trinket/mama-bear-sticker.js.map +1 -0
- package/dist/cards/impl/trinket/powder-keg-enchantment.js +5 -5
- package/dist/cards/impl/trinket/powder-keg-enchantment.js.map +1 -1
- package/dist/cards/impl/trinket/powder-keg.js +3 -1
- package/dist/cards/impl/trinket/powder-keg.js.map +1 -1
- package/dist/cards/impl/trinket/slamma-sticker.js +1 -1
- package/dist/cards/impl/trinket/slamma-sticker.js.map +1 -1
- package/dist/mechanics/cast-tavern-spell.js +8 -8
- package/dist/mechanics/cast-tavern-spell.js.map +1 -1
- package/dist/simulation/add-minion-to-board.js +15 -1
- package/dist/simulation/add-minion-to-board.js.map +1 -1
- package/dist/simulation/start-of-combat/soc-action-processor.js +0 -3
- package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
- package/dist/simulation/summon-when-space.js +7 -1
- package/dist/simulation/summon-when-space.js.map +1 -1
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +15 -1
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battlecruiser.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/battlecruiser.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { dealDamageToMinion } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getRandomMinionWithHighestHealth } from '../../../utils';\r\nimport { DeathrattleSpawnCard, RallyCard, RebornSelfEffectCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const Battlecruiser: StartOfCombatCard & RebornSelfEffectCard & RallyCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.LiftOff_BattlecruiserToken_BG31_HERO_801pt, CardIds.Battlecruiser_BG31_HERO_801pt_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Enchantments can appear multiple times???\r\n\t\tconst yamatoCannons = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.YamatoCannon_YamatoCannonEnchantment_BG31_HERO_801ptce);\r\n\t\tif (!yamatoCannons?.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Still not sure how these should be processed\r\n\t\t// In some cases, it feels like it takes the sum of the damage, in other cases it runs them one after the other\r\n\t\t// (but maybe that's just the replay aggregating the values)\r\n\t\t// I'm not sure about the BACON_YAMATO_CANNON tag; it seems like it indicates multiple cannons, but I'm not sure\r\n\t\t// Other issues: looks like that if there are multiple cannon enchantments but no divine shield, everything is applied to the same target\r\n\t\t// So it looks as if the target is selected first, then everything targets it\r\n\t\t// https://replays.firestoneapp.com/?reviewId=e8f38ab0-3380-4275-88d8-0715d69d3f08&turn=21&action=1\r\n\t\t// Even more than that: the target is the same between multiple battlecruisers\r\n\t\t// https://replays.firestoneapp.com/?reviewId=cbfd6fe9-1a58-400a-a593-6b8852df5427&turn=9&action=0\r\n\t\t// However I'm pretty sure I've seen another behavior\r\n\r\n\t\t// Get the highest health opponent minion at the start of the phase\r\n\t\t// Update 2025-05-16: it looks like it now takes the highest health current minion\r\n\t\t// https://replays.firestoneapp.com/?reviewId=c2620528-e0de-4862-9b11-cf055440b2b8&turn=19&action=2\r\n\t\tconst aliveEntities = input.opponentBoard.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\tconst targetEntityId = getRandomMinionWithHighestHealth(aliveEntities)?.entityId;\r\n\t\t// const numberOfCannons = yamatoCannons.length;\r\n\t\tconst cannonDamage = Math.max(...yamatoCannons.map((e) => e.tagScriptDataNum1));\r\n\t\tfor (const yamatoCannon of yamatoCannons) {\r\n\t\t\t// const damage = yamatoCannon.tagScriptDataNum1;\r\n\t\t\t// Could this simply be tagScriptDataNum2 on the battlecruiser?\r\n\t\t\t// I don't understand how this relates to the number enchants in the cruiser itself\r\n\t\t\tconst loops = minion.tags?.[GameTag.BACON_YAMATO_CANNON] === 1 ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t\tlet target = input.opponentBoard.find((entity) => entity.entityId === targetEntityId);\r\n\t\t\t\tif (!target || target.health <= 0 || target.definitelyDead) {\r\n\t\t\t\t\ttarget = getRandomMinionWithHighestHealth(input.opponentBoard);\r\n\t\t\t\t}\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tcannonDamage,\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Since 33.6 we recompute the first attacker\r\n\t\t// https://replays.firestoneapp.com/?reviewId=f7a4a78c-269c-47b5-a0ae-099123290ccd&turn=13&action=0\r\n\t\treturn {\r\n\t\t\thasTriggered: true,\r\n\t\t\tshouldRecomputeCurrentAttacker: true,\r\n\t\t};\r\n\t},\r\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => {\r\n\t\tconst ultraCapacitors = [...input.rebornEntity.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.UltraCapacitor_UltraCapacitorEnchantment_BG31_HERO_801ptje);\r\n\t\tif (!ultraCapacitors?.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tminion.enchantments = input.rebornEntity.enchantments;\r\n\t\tminion.attack = input.rebornEntity.maxAttack;\r\n\t\tminion.maxAttack = input.rebornEntity.maxAttack;\r\n\t\tminion.health = input.rebornEntity.maxHealth;\r\n\t\tminion.maxHealth = input.rebornEntity.maxHealth;\r\n\t\tminion.divineShield = input.rebornEntity.hadDivineShield;\r\n\t\tminion.taunt = input.rebornEntity.taunt;\r\n\t\tminion.windfury = input.rebornEntity.windfury;\r\n\t\tminion.poisonous = input.rebornEntity.poisonous;\r\n\t},\r\n\trally: (\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnAttackInput,\r\n\t): {\r\n\t\tdmgDoneByAttacker: number;\r\n\t\tdmgDoneByDefender: number;\r\n\t} => {\r\n\t\tconst advancedBallistics = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.AdvancedBallistics_AdvancedBallisticsEnchantment_BG31_HERO_801ptde);\r\n\t\tif (!advancedBallistics?.length) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = advancedBallistics.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tconst targets = input.attackingBoard.filter((entity) => entity !== minion);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(target, minion, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst caduceusReactors = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.CaduceusReactor_CaduceusReactorEnchantment_BG31_HERO_801ptee);\r\n\t\tif (!caduceusReactors?.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst target = input.boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!target) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst buff = caduceusReactors.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tmodifyStats(\r\n\t\t\ttarget,\r\n\t\t\tminion,\r\n\t\t\tbuff,\r\n\t\t\tbuff,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"battlecruiser.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/battlecruiser.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { dealDamageToMinion } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getRandomMinionWithHighestHealth } from '../../../utils';\r\nimport { DeathrattleSpawnCard, RallyCard, RebornSelfEffectCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const Battlecruiser: StartOfCombatCard & RebornSelfEffectCard & RallyCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.LiftOff_BattlecruiserToken_BG31_HERO_801pt, CardIds.Battlecruiser_BG31_HERO_801pt_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Enchantments can appear multiple times???\r\n\t\tconst yamatoCannons = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.YamatoCannon_YamatoCannonEnchantment_BG31_HERO_801ptce);\r\n\t\tif (!yamatoCannons?.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Still not sure how these should be processed\r\n\t\t// In some cases, it feels like it takes the sum of the damage, in other cases it runs them one after the other\r\n\t\t// (but maybe that's just the replay aggregating the values)\r\n\t\t// I'm not sure about the BACON_YAMATO_CANNON tag; it seems like it indicates multiple cannons, but I'm not sure\r\n\t\t// Other issues: looks like that if there are multiple cannon enchantments but no divine shield, everything is applied to the same target\r\n\t\t// So it looks as if the target is selected first, then everything targets it\r\n\t\t// https://replays.firestoneapp.com/?reviewId=e8f38ab0-3380-4275-88d8-0715d69d3f08&turn=21&action=1\r\n\t\t// Even more than that: the target is the same between multiple battlecruisers\r\n\t\t// https://replays.firestoneapp.com/?reviewId=cbfd6fe9-1a58-400a-a593-6b8852df5427&turn=9&action=0\r\n\t\t// However I'm pretty sure I've seen another behavior\r\n\r\n\t\t// Get the highest health opponent minion at the start of the phase\r\n\t\t// Update 2025-05-16: it looks like it now takes the highest health current minion\r\n\t\t// https://replays.firestoneapp.com/?reviewId=c2620528-e0de-4862-9b11-cf055440b2b8&turn=19&action=2\r\n\t\tconst aliveEntities = input.opponentBoard.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\tconst targetEntityId = getRandomMinionWithHighestHealth(aliveEntities)?.entityId;\r\n\t\t// const numberOfCannons = yamatoCannons.length;\r\n\t\tconst cannonDamage = Math.max(...yamatoCannons.map((e) => e.tagScriptDataNum1));\r\n\t\t// for (const yamatoCannon of yamatoCannons) {\r\n\t\t// const damage = yamatoCannon.tagScriptDataNum1;\r\n\t\t// Could this simply be tagScriptDataNum2 on the battlecruiser?\r\n\t\t// I don't understand how this relates to the number enchants in the cruiser itself\r\n\t\t// 35.2 now fires a single time?\r\n\t\t// https://replays.firestoneapp.com/?reviewId=96618003-04fa-4e41-9baa-539f0b63fb9f&turn=17&action=2\r\n\t\tconst loops = minion.tags?.[GameTag.BACON_YAMATO_CANNON] === 1 ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\tlet target = input.opponentBoard.find((entity) => entity.entityId === targetEntityId);\r\n\t\t\tif (!target || target.health <= 0 || target.definitelyDead) {\r\n\t\t\t\ttarget = getRandomMinionWithHighestHealth(input.opponentBoard);\r\n\t\t\t}\r\n\t\t\tif (!!target) {\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t);\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\tcannonDamage,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// }\r\n\t\t// Since 33.6 we recompute the first attacker\r\n\t\t// https://replays.firestoneapp.com/?reviewId=f7a4a78c-269c-47b5-a0ae-099123290ccd&turn=13&action=0\r\n\t\treturn {\r\n\t\t\thasTriggered: true,\r\n\t\t\tshouldRecomputeCurrentAttacker: true,\r\n\t\t};\r\n\t},\r\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => {\r\n\t\tconst ultraCapacitors = [...input.rebornEntity.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.UltraCapacitor_UltraCapacitorEnchantment_BG31_HERO_801ptje);\r\n\t\tif (!ultraCapacitors?.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tminion.enchantments = input.rebornEntity.enchantments;\r\n\t\tminion.attack = input.rebornEntity.maxAttack;\r\n\t\tminion.maxAttack = input.rebornEntity.maxAttack;\r\n\t\tminion.health = input.rebornEntity.maxHealth;\r\n\t\tminion.maxHealth = input.rebornEntity.maxHealth;\r\n\t\tminion.divineShield = input.rebornEntity.hadDivineShield;\r\n\t\tminion.taunt = input.rebornEntity.taunt;\r\n\t\tminion.windfury = input.rebornEntity.windfury;\r\n\t\tminion.poisonous = input.rebornEntity.poisonous;\r\n\t},\r\n\trally: (\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnAttackInput,\r\n\t): {\r\n\t\tdmgDoneByAttacker: number;\r\n\t\tdmgDoneByDefender: number;\r\n\t} => {\r\n\t\tconst advancedBallistics = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.AdvancedBallistics_AdvancedBallisticsEnchantment_BG31_HERO_801ptde);\r\n\t\tif (!advancedBallistics?.length) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = advancedBallistics.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tconst targets = input.attackingBoard.filter((entity) => entity !== minion);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(target, minion, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst caduceusReactors = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.CaduceusReactor_CaduceusReactorEnchantment_BG31_HERO_801ptee);\r\n\t\tif (!caduceusReactors?.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst target = input.boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!target) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst buff = caduceusReactors.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tmodifyStats(\r\n\t\t\ttarget,\r\n\t\t\tminion,\r\n\t\t\tbuff,\r\n\t\t\tbuff,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DeterminedDefender = void 0;
|
|
4
|
-
const attack_1 = require("../../../simulation/attack");
|
|
5
4
|
const taunt_1 = require("../../../keywords/taunt");
|
|
5
|
+
const attack_1 = require("../../../simulation/attack");
|
|
6
6
|
const stats_1 = require("../../../simulation/stats");
|
|
7
7
|
exports.DeterminedDefender = {
|
|
8
8
|
cardIds: ["BG35_122", "BG35_122_G"],
|
|
9
9
|
deathrattleSpawn: (minion, input) => {
|
|
10
10
|
const mult = minion.cardId === "BG35_122_G" ? 2 : 1;
|
|
11
|
-
const neighbours = (0, attack_1.getNeighbours)(input.boardWithDeadEntity, minion);
|
|
11
|
+
const neighbours = (0, attack_1.getNeighbours)(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight);
|
|
12
12
|
for (const n of neighbours) {
|
|
13
13
|
(0, stats_1.modifyStats)(n, minion, 5 * mult, 5 * mult, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.gameState);
|
|
14
14
|
(0, taunt_1.updateTaunt)(n, true, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoardHero, input.gameState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"determined-defender.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/determined-defender.ts"],"names":[],"mappings":";;;AAQA,uDAA2D;AAE3D,
|
|
1
|
+
{"version":3,"file":"determined-defender.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/determined-defender.ts"],"names":[],"mappings":";;;AAQA,mDAAsD;AAEtD,uDAA2D;AAE3D,qDAAwD;AAG3C,QAAA,kBAAkB,GAAyB;IACvD,OAAO,EAAE,0BAA4E;IACrF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpG,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;YAC3B,IAAA,mBAAW,EACV,CAAC,EACD,MAAM,EACN,CAAC,GAAG,IAAI,EACR,CAAC,GAAG,IAAI,EACR,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;YACF,IAAA,mBAAW,EACV,CAAC,EACD,IAAI,EACJ,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAChG;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Determined Defender (Tier 4, 5/5)\r\n * Taunt. Deathrattle: Give adjacent minions +5/+5 and Taunt.\r\n *\r\n * Golden Determined Defender (Tier 4, 10/10)\r\n * Taunt. Deathrattle: Give adjacent minions +10/+10 and Taunt.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { updateTaunt } from '../../../keywords/taunt';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const DeterminedDefender: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.DeterminedDefender_BG35_122, CardIds.DeterminedDefender_BG35_122_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.DeterminedDefender_BG35_122_G ? 2 : 1;\r\n\t\tconst neighbours = getNeighbours(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight);\r\n\t\tfor (const n of neighbours) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\tn,\r\n\t\t\t\tminion,\r\n\t\t\t\t5 * mult,\r\n\t\t\t\t5 * mult,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tupdateTaunt(\r\n\t\t\t\tn,\r\n\t\t\t\ttrue,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.otherBoardHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(minion, n, input.boardWithDeadEntity, null, null);\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
@@ -14,7 +14,7 @@ const summonHandMinionFromDiremuck = (forager, handTarget, playerBoard, playerEn
|
|
|
14
14
|
s.onCanceledSummon = () => (handTarget.locked = false);
|
|
15
15
|
}
|
|
16
16
|
const spawnSource = forager !== null && forager !== void 0 ? forager : playerEntity;
|
|
17
|
-
const indexFromRight =
|
|
17
|
+
const indexFromRight = 0;
|
|
18
18
|
(0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, spawnSource, indexFromRight, opponentBoard, opponentEntity, gameState);
|
|
19
19
|
};
|
|
20
20
|
const handleDiremuckPendingSummons = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diremuck-forager.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/diremuck-forager.ts"],"names":[],"mappings":";;;AAUA,iFAA4G;AAC5G,+EAAuE;AAEvE,uDAAiE;AAIjE,MAAM,mBAAmB,GAAG,CAAC,QAAmC,EAAE,EAAE,CAAC,CAAC,CAAc,EAAE,EAAE,CACvF,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,IAAA,4CAAqB,EAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAC,OAAA,MAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,CAAA,EAAA,CAAC,CAAC;AAG7F,MAAM,4BAA4B,GAAG,CACpC,OAA2B,EAC3B,UAAuB,EACvB,WAA0B,EAC1B,YAA6B,EAC7B,aAA4B,EAC5B,cAA+B,EAC/B,SAAwB,EACjB,EAAE;;IACT,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,YAAY,CAAC,QAAQ,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAA,kCAAa,EAC/B,UAAU,CAAC,MAAM,EACjB,CAAC,EACD,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,SAAS,EACT,QAAQ,EACR,KAAK,EACL,KAAK,EACL,IAAI,EACJ,EAAE,GAAG,UAAU,EAAiB,CAChC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;QAC3B,CAAC,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;KACvD;IACD,MAAM,WAAW,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,YAAY,CAAC;IAC5C,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"diremuck-forager.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/diremuck-forager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Diremuck Forager (Tier 4, 5/6)\r\n * Start of Combat: When you have space, summon the highest-Attack minion from your hand for this combat only.\r\n *\r\n * Golden Diremuck Forager (Tier 4, 10/12)\r\n * Start of Combat: When you have space, summon the two highest-Attack minions from your hand for this combat only.\r\n */\r\nimport { BgsPlayerEntity } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getHighestAttackHandMinions, isHandMinionCandidate } from '../../../services/hand-minion-priority';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { FullGameState } from '../../../simulation/internal-game-state';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nconst handMinionPredicate = (allCards: FullGameState['allCards']) => (e: BoardEntity) =>\r\n\t!!e.maxHealth && isHandMinionCandidate(e, (id) => allCards.getCard(id).type?.toUpperCase());\r\n\r\n/** If the Forager died after SOC, pass `null` — summons still resolve (spawn source = hero, index from right = 0). */\r\nconst summonHandMinionFromDiremuck = (\r\n\tforager: BoardEntity | null,\r\n\thandTarget: BoardEntity,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thandTarget.locked = true;\r\n\tconst friendly = forager?.friendly ?? playerEntity.friendly;\r\n\tconst newMinions = spawnEntities(\r\n\t\thandTarget.cardId,\r\n\t\t1,\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tfriendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\ttrue,\r\n\t\t{ ...handTarget } as BoardEntity,\r\n\t);\r\n\tfor (const s of newMinions) {\r\n\t\ts.onCanceledSummon = () => (handTarget.locked = false);\r\n\t}\r\n\tconst spawnSource = forager ?? playerEntity;\r\n\tconst indexFromRight = 0;\r\n\tperformEntitySpawns(\r\n\t\tnewMinions,\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\tspawnSource,\r\n\t\tindexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t);\r\n};\r\n\r\n/** Called from `summon-when-space` when board space opens during start-of-combat. */\r\nexport const handleDiremuckPendingSummons = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst raw = playerEntity.globalInfo?.DiremuckPendingSummons;\r\n\tif (!raw?.length) {\r\n\t\treturn;\r\n\t}\r\n\tconst allCards = gameState.allCards;\r\n\tconst predicate = handMinionPredicate(allCards);\r\n\tconst nextQueue: { foragerEntityId: number; remaining: number }[] = [];\r\n\r\n\tfor (const entry of raw) {\r\n\t\tlet remaining = entry.remaining;\r\n\t\tconst forager = playerBoard.find((e) => e.entityId === entry.foragerEntityId) ?? null;\r\n\t\twhile (playerBoard.length < 7 && remaining > 0) {\r\n\t\t\tconst targets = getHighestAttackHandMinions(playerEntity.hand, 1, predicate);\r\n\t\t\tconst handTarget = targets[0];\r\n\t\t\tif (!handTarget?.cardId || handTarget.locked) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tsummonHandMinionFromDiremuck(\r\n\t\t\t\tforager,\r\n\t\t\t\thandTarget,\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tremaining--;\r\n\t\t}\r\n\t\tif (remaining > 0) {\r\n\t\t\tnextQueue.push({ foragerEntityId: entry.foragerEntityId, remaining });\r\n\t\t}\r\n\t}\r\n\tplayerEntity.globalInfo.DiremuckPendingSummons = nextQueue.length ? nextQueue : undefined;\r\n};\r\n\r\nexport const DiremuckForager: StartOfCombatCard = {\r\n\tcardIds: [CardIds.DiremuckForager_BG27_556, CardIds.DiremuckForager_BG27_556_G],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst allCards = input.gameState.allCards;\r\n\t\tinput.playerEntity.globalInfo.DiremuckPendingSummons = undefined;\r\n\r\n\t\tconst totalWanted = minion.cardId === CardIds.DiremuckForager_BG27_556_G ? 2 : 1;\r\n\t\tconst predicate = handMinionPredicate(allCards);\r\n\r\n\t\tlet remaining = totalWanted;\r\n\t\twhile (remaining > 0 && input.playerBoard.length < 7) {\r\n\t\t\tconst targets = getHighestAttackHandMinions(input.playerEntity.hand, 1, predicate);\r\n\t\t\tconst target = targets[0];\r\n\t\t\tif (!target?.cardId || target.locked) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tsummonHandMinionFromDiremuck(\r\n\t\t\t\tminion,\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentBoard,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tremaining--;\r\n\t\t}\r\n\r\n\t\tif (remaining > 0) {\r\n\t\t\tinput.playerEntity.globalInfo.DiremuckPendingSummons = [{ foragerEntityId: minion.entityId, remaining }];\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { OnTavernSpellCastCard } from '../../card.interface';
|
|
2
|
-
export declare const Pufferquil: OnTavernSpellCastCard;
|
|
1
|
+
import { OnTavernSpellCastCard, PlayedBloodGemsOnMeCard } from '../../card.interface';
|
|
2
|
+
export declare const Pufferquil: OnTavernSpellCastCard & PlayedBloodGemsOnMeCard;
|
|
@@ -10,5 +10,8 @@ exports.Pufferquil = {
|
|
|
10
10
|
}
|
|
11
11
|
(0, venomous_1.updateVenomous)(minion, true, input.board, input.hero, input.otherHero, input.gameState);
|
|
12
12
|
},
|
|
13
|
+
playedBloodGemsOnMe: (minion, input) => {
|
|
14
|
+
(0, venomous_1.updateVenomous)(minion, true, input.board, input.hero, input.otherHero, input.gameState);
|
|
15
|
+
},
|
|
13
16
|
};
|
|
14
17
|
//# sourceMappingURL=pufferquil.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pufferquil.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/pufferquil.ts"],"names":[],"mappings":";;;AACA,yDAA4D;
|
|
1
|
+
{"version":3,"file":"pufferquil.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/pufferquil.ts"],"names":[],"mappings":";;;AACA,yDAA4D;AAK/C,QAAA,UAAU,GAAoD;IAC1E,OAAO,EAAE,0BAA4D;IACrE,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE;YAC/D,OAAO;SACP;QACD,IAAA,yBAAc,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;IACD,mBAAmB,EAAE,CAAC,MAAmB,EAAE,KAA+B,EAAE,EAAE;QAC7E,IAAA,yBAAc,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { updateVenomous } from '../../../keywords/venomous';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { PlayedBloodGemsOnMeInput } from '../../../simulation/blood-gems';\r\nimport { CastSpellInput, OnTavernSpellCastCard, PlayedBloodGemsOnMeCard } from '../../card.interface';\r\n\r\nexport const Pufferquil: OnTavernSpellCastCard & PlayedBloodGemsOnMeCard = {\r\n\tcardIds: [CardIds.Pufferquil_BG25_039, CardIds.Pufferquil_BG25_039_G],\r\n\tonTavernSpellCast: (minion: BoardEntity, input: CastSpellInput) => {\r\n\t\tif (!input.target || input.target.entityId !== minion.entityId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tupdateVenomous(minion, true, input.board, input.hero, input.otherHero, input.gameState);\r\n\t},\r\n\tplayedBloodGemsOnMe: (minion: BoardEntity, input: PlayedBloodGemsOnMeInput) => {\r\n\t\tupdateVenomous(minion, true, input.board, input.hero, input.otherHero, input.gameState);\r\n\t},\r\n};\r\n"]}
|
|
@@ -6,6 +6,10 @@ const utils_1 = require("../../../utils");
|
|
|
6
6
|
exports.RadioStar = {
|
|
7
7
|
cardIds: ["BG25_399", "BG25_399_G"],
|
|
8
8
|
deathrattleSpawn: (minion, input) => {
|
|
9
|
+
const isMinionDead = minion.definitelyDead || minion.health <= 0;
|
|
10
|
+
if (!isMinionDead || !minion.lastAffectedByEntity) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
9
13
|
const mult = minion.cardId === "BG25_399_G" ? 2 : 1;
|
|
10
14
|
const clone = (0, utils_1.copyEntity)(minion.lastAffectedByEntity);
|
|
11
15
|
clone.health = clone.maxHealth;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio-star.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/radio-star.ts"],"names":[],"mappings":";;;AAEA,qEAAmE;AAEnE,0CAA4C;AAG/B,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,0BAA0D;IACnE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;
|
|
1
|
+
{"version":3,"file":"radio-star.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/radio-star.ts"],"names":[],"mappings":";;;AAEA,qEAAmE;AAEnE,0CAA4C;AAG/B,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,0BAA0D;IACnE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QAEnG,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;YAClD,OAAO,EAAE,CAAC;SACV;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACtD,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7D,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;SACvD,CAAC,CAAC,CAAC;QACJ,IAAA,8BAAc,EAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,mBAAmB,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACzG,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { copyEntity } from '../../../utils';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const RadioStar: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.RadioStar_BG25_399, CardIds.RadioStar_BG25_399_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\t// E.g deathrattle is triggered by Hand of Deios at the start of combat\r\n\t\tconst isMinionDead = minion.definitelyDead || minion.health <= 0;\r\n\t\tif (!isMinionDead || !minion.lastAffectedByEntity) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst mult = minion.cardId === CardIds.RadioStar_BG25_399_G ? 2 : 1;\r\n\t\tconst clone = copyEntity(minion.lastAffectedByEntity);\r\n\t\tclone.health = clone.maxHealth;\r\n\t\tconst radioEntities = Array.from({ length: mult }).map(() => ({\r\n\t\t\t...clone,\r\n\t\t\tentityId: input.gameState.sharedState.currentEntityId++,\r\n\t\t}));\r\n\t\taddCardsInHand(input.boardWithDeadEntityHero, input.boardWithDeadEntity, radioEntities, input.gameState);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { OnWheneverAnotherMinionAttacksCard, RallyCard } from '../../card.interface';
|
|
2
|
-
export declare const RingBearer: OnWheneverAnotherMinionAttacksCard & RallyCard;
|
|
1
|
+
import { DefaultChargesCard, OnWheneverAnotherMinionAttacksCard, RallyCard } from '../../card.interface';
|
|
2
|
+
export declare const RingBearer: OnWheneverAnotherMinionAttacksCard & RallyCard & DefaultChargesCard;
|
|
@@ -3,11 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RingBearer = void 0;
|
|
4
4
|
const cast_tavern_spell_1 = require("../../../mechanics/cast-tavern-spell");
|
|
5
5
|
const tickRingBearer = (ringBearer, input) => {
|
|
6
|
-
|
|
7
|
-
ringBearer.scriptDataNum1 = ((_a = ringBearer.scriptDataNum1) !== null && _a !== void 0 ? _a : 0) + 1;
|
|
6
|
+
ringBearer.abiityChargesLeft = ringBearer.abiityChargesLeft - 1;
|
|
8
7
|
const ringMult = ringBearer.cardId === "BG34_921_G" ? 2 : 1;
|
|
9
|
-
while (ringBearer.
|
|
10
|
-
ringBearer.
|
|
8
|
+
while (ringBearer.abiityChargesLeft <= 0) {
|
|
9
|
+
ringBearer.abiityChargesLeft = exports.RingBearer.defaultCharges(ringBearer);
|
|
11
10
|
for (let i = 0; i < ringMult; i++) {
|
|
12
11
|
(0, cast_tavern_spell_1.castTavernSpell)("BG28_168", {
|
|
13
12
|
spellCardId: "BG28_168",
|
|
@@ -25,6 +24,7 @@ const tickRingBearer = (ringBearer, input) => {
|
|
|
25
24
|
};
|
|
26
25
|
exports.RingBearer = {
|
|
27
26
|
cardIds: ["BG34_921", "BG34_921_G"],
|
|
27
|
+
defaultCharges: (entity) => 2,
|
|
28
28
|
onWheneverAnotherMinionAttacks: (minion, input) => tickRingBearer(minion, input),
|
|
29
29
|
rally: (minion, input) => tickRingBearer(minion, input),
|
|
30
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ring-bearer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/ring-bearer.ts"],"names":[],"mappings":";;;AACA,4EAAuE;AAKvE,MAAM,cAAc,GAAG,CAAC,UAAuB,EAAE,KAAoB,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"ring-bearer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/ring-bearer.ts"],"names":[],"mappings":";;;AACA,4EAAuE;AAKvE,MAAM,cAAc,GAAG,CAAC,UAAuB,EAAE,KAAoB,EAAE,EAAE;IACxE,UAAU,CAAC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,iBAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,UAAU,CAAC,iBAAiB,IAAI,CAAC,EAAE;QACzC,UAAU,CAAC,iBAAiB,GAAG,kBAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YAClC,IAAA,mCAAe,cAA6B;gBAC3C,WAAW,YAA4B;gBACvC,MAAM,EAAE,KAAK,CAAC,aAAa;gBAC3B,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,KAAK,CAAC,cAAc;gBAC3B,IAAI,EAAE,KAAK,CAAC,aAAa;gBACzB,UAAU,EAAE,KAAK,CAAC,cAAc;gBAChC,SAAS,EAAE,KAAK,CAAC,aAAa;gBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;aAC1B,CAAC,CAAC;SACH;KACD;IACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;AACvD,CAAC,CAAC;AAEW,QAAA,UAAU,GAAwE;IAC9F,OAAO,EAAE,0BAA4D;IACrE,cAAc,EAAE,CAAC,MAAmB,EAAE,EAAE,CAAC,CAAC;IAC1C,8BAA8B,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;IAC5G,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;CACnF,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { castTavernSpell } from '../../../mechanics/cast-tavern-spell';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { DefaultChargesCard, OnWheneverAnotherMinionAttacksCard, RallyCard } from '../../card.interface';\r\n\r\nconst tickRingBearer = (ringBearer: BoardEntity, input: OnAttackInput) => {\r\n\tringBearer.abiityChargesLeft = ringBearer.abiityChargesLeft - 1;\r\n\tconst ringMult = ringBearer.cardId === CardIds.RingBearer_BG34_921_G ? 2 : 1;\r\n\twhile (ringBearer.abiityChargesLeft <= 0) {\r\n\t\tringBearer.abiityChargesLeft = RingBearer.defaultCharges(ringBearer);\r\n\t\tfor (let i = 0; i < ringMult; i++) {\r\n\t\t\tcastTavernSpell(CardIds.ShinyRing_BG28_168, {\r\n\t\t\t\tspellCardId: CardIds.ShinyRing_BG28_168,\r\n\t\t\t\tsource: input.attackingHero,\r\n\t\t\t\ttarget: null,\r\n\t\t\t\tboard: input.attackingBoard,\r\n\t\t\t\thero: input.attackingHero,\r\n\t\t\t\totherBoard: input.defendingBoard,\r\n\t\t\t\totherHero: input.defendingHero,\r\n\t\t\t\tgameState: input.gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n};\r\n\r\nexport const RingBearer: OnWheneverAnotherMinionAttacksCard & RallyCard & DefaultChargesCard = {\r\n\tcardIds: [CardIds.RingBearer_BG34_921, CardIds.RingBearer_BG34_921_G],\r\n\tdefaultCharges: (entity: BoardEntity) => 2,\r\n\tonWheneverAnotherMinionAttacks: (minion: BoardEntity, input: OnAttackInput) => tickRingBearer(minion, input),\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => tickRingBearer(minion, input),\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scallywag.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scallywag.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,8BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,OAAO,IAAA,4CAAuB,EAC7B,MAAM,CAAC,MAAM,sBAAsC;YAClD,CAAC;YACD,CAAC,WAA0C,EAC5C,CAAC,EACD,KAAK,CACL,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"scallywag.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scallywag.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,8BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,OAAO,IAAA,4CAAuB,EAC7B,MAAM,CAAC,MAAM,sBAAsC;YAClD,CAAC;YACD,CAAC,WAA0C,EAC5C,CAAC,EACD,KAAK,CACL,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const Scallywag: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.Scallywag_BGS_061, CardIds.Scallywag_TB_BaconUps_141],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\treturn simplifiedSpawnEntities(\r\n\t\t\tminion.cardId === CardIds.Scallywag_TB_BaconUps_141\r\n\t\t\t\t? CardIds.Scallywag_SkyPirateToken_TB_BaconUps_141t\r\n\t\t\t\t: CardIds.Scallywag_SkyPirateToken_BGS_061t,\r\n\t\t\t1,\r\n\t\t\tinput,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { OnSpawnedCard, OnStatsChangedCard } from '../../card.interface';
|
|
2
|
-
export declare const ScarletSurvivor: OnSpawnedCard & OnStatsChangedCard;
|
|
1
|
+
import { DefaultChargesCard, OnSpawnedCard, OnStatsChangedCard } from '../../card.interface';
|
|
2
|
+
export declare const ScarletSurvivor: OnSpawnedCard & OnStatsChangedCard & DefaultChargesCard;
|
|
@@ -4,14 +4,24 @@ exports.ScarletSurvivor = void 0;
|
|
|
4
4
|
const divine_shield_1 = require("../../../keywords/divine-shield");
|
|
5
5
|
const THRESHOLD = 6;
|
|
6
6
|
const tryGrantDivineShieldOnce = (minion, board, hero, otherHero, gameState) => {
|
|
7
|
-
if (minion.
|
|
7
|
+
if (minion.abiityChargesLeft <= 0 ||
|
|
8
|
+
minion.attack < THRESHOLD ||
|
|
9
|
+
minion.enchantments.some((e) => e.cardId === "BG35_814e")) {
|
|
8
10
|
return;
|
|
9
11
|
}
|
|
10
|
-
minion.
|
|
12
|
+
minion.abiityChargesLeft = 0;
|
|
11
13
|
(0, divine_shield_1.updateDivineShield)(minion, board, hero, otherHero, true, gameState);
|
|
14
|
+
minion.enchantments.push({
|
|
15
|
+
cardId: "BG35_814e",
|
|
16
|
+
originEntityId: minion.entityId,
|
|
17
|
+
timing: gameState.sharedState.currentEntityId++,
|
|
18
|
+
tagScriptDataNum1: -1,
|
|
19
|
+
tagScriptDataNum2: -1,
|
|
20
|
+
});
|
|
12
21
|
};
|
|
13
22
|
exports.ScarletSurvivor = {
|
|
14
23
|
cardIds: ["BG35_814", "BG35_814_G"],
|
|
24
|
+
defaultCharges: (entity) => 1,
|
|
15
25
|
onSpawned: (minion, input) => {
|
|
16
26
|
const otherHero = input.gameState.gameState.player.player === input.hero
|
|
17
27
|
? input.gameState.gameState.opponent.player
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scarlet-survivor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scarlet-survivor.ts"],"names":[],"mappings":";;;AAEA,mEAAqE;AAOrE,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,wBAAwB,GAAG,CAChC,MAAmB,EACnB,KAAoB,EACpB,IAAqB,EACrB,SAA0B,EAC1B,SAAwB,EACjB,EAAE;IACT,
|
|
1
|
+
{"version":3,"file":"scarlet-survivor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scarlet-survivor.ts"],"names":[],"mappings":";;;AAEA,mEAAqE;AAOrE,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,wBAAwB,GAAG,CAChC,MAAmB,EACnB,KAAoB,EACpB,IAAqB,EACrB,SAA0B,EAC1B,SAAwB,EACjB,EAAE;IACT,IACC,MAAM,CAAC,iBAAiB,IAAI,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,SAAS;QACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,gBAA0D,CAAC,EAClG;QACD,OAAO;KACP;IACD,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC7B,IAAA,kCAAkB,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;QACxB,MAAM,aAAuD;QAC7D,cAAc,EAAE,MAAM,CAAC,QAAQ;QAC/B,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QAC/C,iBAAiB,EAAE,CAAC,CAAC;QACrB,iBAAiB,EAAE,CAAC,CAAC;KACrB,CAAC,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,eAAe,GAA4D;IACvF,OAAO,EAAE,0BAAsE;IAC/E,cAAc,EAAE,CAAC,MAAmB,EAAE,EAAE,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,SAAS,GACd,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI;YACrD,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM;YAC3C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC;IACD,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE;YAC9C,OAAO;SACP;QACD,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7F,CAAC;CACD,CAAC","sourcesContent":["import { BgsPlayerEntity } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { FullGameState } from '../../../simulation/internal-game-state';\r\nimport { OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { DefaultChargesCard, OnSpawnedCard, OnStatsChangedCard } from '../../card.interface';\r\n\r\nconst THRESHOLD = 6;\r\n\r\nconst tryGrantDivineShieldOnce = (\r\n\tminion: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (\r\n\t\tminion.abiityChargesLeft <= 0 ||\r\n\t\tminion.attack < THRESHOLD ||\r\n\t\tminion.enchantments.some((e) => e.cardId === CardIds.ScarletSurvivor_SurvivedEnchantment_BG35_814e)\r\n\t) {\r\n\t\treturn;\r\n\t}\r\n\tminion.abiityChargesLeft = 0;\r\n\tupdateDivineShield(minion, board, hero, otherHero, true, gameState);\r\n\tminion.enchantments.push({\r\n\t\tcardId: CardIds.ScarletSurvivor_SurvivedEnchantment_BG35_814e,\r\n\t\toriginEntityId: minion.entityId,\r\n\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\ttagScriptDataNum1: -1,\r\n\t\ttagScriptDataNum2: -1,\r\n\t});\r\n};\r\n\r\nexport const ScarletSurvivor: OnSpawnedCard & OnStatsChangedCard & DefaultChargesCard = {\r\n\tcardIds: [CardIds.ScarletSurvivor_BG35_814, CardIds.ScarletSurvivor_BG35_814_G],\r\n\tdefaultCharges: (entity: BoardEntity) => 1,\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst otherHero =\r\n\t\t\tinput.gameState.gameState.player.player === input.hero\r\n\t\t\t\t? input.gameState.gameState.opponent.player\r\n\t\t\t\t: input.gameState.gameState.player.player;\r\n\t\ttryGrantDivineShieldOnce(minion, input.board, input.hero, otherHero, input.gameState);\r\n\t},\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tif (input.target.entityId !== minion.entityId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttryGrantDivineShieldOnce(minion, input.board, input.hero, input.otherHero, input.gameState);\r\n\t},\r\n};\r\n"]}
|
|
@@ -7,7 +7,7 @@ exports.SkulkingBristlemane = {
|
|
|
7
7
|
cardIds: ["BG32_434", "BG32_434_G"],
|
|
8
8
|
deathrattleSpawn: (minion, input) => {
|
|
9
9
|
const mult = minion.cardId === "BG32_434_G" ? 2 : 1;
|
|
10
|
-
const neighbours = (0, attack_1.getNeighbours)(input.boardWithDeadEntity, minion);
|
|
10
|
+
const neighbours = (0, attack_1.getNeighbours)(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight);
|
|
11
11
|
for (const neighbour of neighbours) {
|
|
12
12
|
(0, blood_gems_1.playBloodGemsOn)(minion, neighbour, 1 * mult, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoard, input.otherBoardHero, input.gameState);
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skulking-bristlemane.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/skulking-bristlemane.ts"],"names":[],"mappings":";;;AASA,uDAA2D;AAC3D,+DAAiE;AAIpD,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,0BAA8E;IACvF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA2C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"skulking-bristlemane.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/skulking-bristlemane.ts"],"names":[],"mappings":";;;AASA,uDAA2D;AAC3D,+DAAiE;AAIpD,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,0BAA8E;IACvF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA2C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YACnC,IAAA,4BAAe,EACd,MAAM,EACN,SAAS,EACT,CAAC,GAAG,IAAI,EACR,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Skulking Bristlemane (Tier 3, 5/2)\r\n * Taunt. Deathrattle: This plays a permanent Blood Gem on adjacent minions.\r\n *\r\n * Golden Skulking Bristlemane (Tier 3, 10/4)\r\n * Taunt. Deathrattle: This plays 2 permanent Blood Gems on adjacent minions.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { playBloodGemsOn } from '../../../simulation/blood-gems';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const SkulkingBristlemane: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.SkulkingBristlemane_BG32_434, CardIds.SkulkingBristlemane_BG32_434_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.SkulkingBristlemane_BG32_434_G ? 2 : 1;\r\n\t\tconst neighbours = getNeighbours(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight);\r\n\t\tfor (const neighbour of neighbours) {\r\n\t\t\tplayBloodGemsOn(\r\n\t\t\t\tminion,\r\n\t\t\t\tneighbour,\r\n\t\t\t\t1 * mult,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.otherBoard,\r\n\t\t\t\tinput.otherBoardHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TimecapnHooktail = void 0;
|
|
4
|
+
const utils_1 = require("../../../utils");
|
|
5
|
+
exports.TimecapnHooktail = {
|
|
6
|
+
cardIds: ["BG27_005", "BG27_005_G"],
|
|
7
|
+
onTavernSpellCast: (entity, input) => {
|
|
8
|
+
const loops = entity.cardId === "BG27_005_G" ? 2 : 1;
|
|
9
|
+
for (let i = 0; i < loops; i++) {
|
|
10
|
+
(0, utils_1.addStatsToBoard)(entity, input.board, input.hero, 1, 0, input.gameState);
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=timecapn-hooktail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timecapn-hooktail.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timecapn-hooktail.ts"],"names":[],"mappings":";;;AAEA,0CAAiD;AAGpC,QAAA,gBAAgB,GAA0B;IACtD,OAAO,EAAE,0BAAwE;IACjF,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACxE;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\n\r\nexport const TimecapnHooktail: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.TimecapnHooktail_BG27_005, CardIds.TimecapnHooktail_BG27_005_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tconst loops = entity.cardId === CardIds.TimecapnHooktail_BG27_005_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\taddStatsToBoard(entity, input.board, input.hero, 1, 0, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
|
|
@@ -7,7 +7,7 @@ const utils_2 = require("../../../utils");
|
|
|
7
7
|
exports.TimewarpedMagnanimoose = {
|
|
8
8
|
cardIds: ["BG34_Giant_619", "BG34_Giant_619_G"],
|
|
9
9
|
deathrattleSpawn: (minion, input) => {
|
|
10
|
-
const playerInitialState =
|
|
10
|
+
const playerInitialState = input.gameState.gameState.playerInitial;
|
|
11
11
|
const loops = minion.cardId === "BG34_Giant_619_G" ? 2 : 1;
|
|
12
12
|
const spawned = [];
|
|
13
13
|
for (let i = 0; i < loops; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timewarped-magnanimoose.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-magnanimoose.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,+EAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"timewarped-magnanimoose.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-magnanimoose.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,+EAAiF;AACjF,0CAA4C;AAG/B,QAAA,sBAAsB,GAAyB;IAC3D,OAAO,EAAE,sCAAgG;IACzG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,kBAAkB,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,uBAAoD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAE/B,MAAM,YAAY,GAAG,IAAA,kBAAU,EAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,4CAAuB,EAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;SACxE;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { copyEntity } from '../../../utils';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TimewarpedMagnanimoose: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TimewarpedMagnanimoose_BG34_Giant_619, CardIds.TimewarpedMagnanimoose_BG34_Giant_619_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst playerInitialState = input.gameState.gameState.playerInitial;\r\n\t\tconst loops = minion.cardId === CardIds.TimewarpedMagnanimoose_BG34_Giant_619_G ? 2 : 1;\r\n\t\tconst spawned = [];\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t// We don't know the opponents warbands, so we pick something from our own warband instead, as a proxy\r\n\t\t\tconst randomMinion = pickRandom(playerInitialState.board);\r\n\t\t\tconst clone = copyEntity(randomMinion);\r\n\t\t\tspawned.push(...simplifiedSpawnEntities(clone.cardId, 1, input, clone));\r\n\t\t}\r\n\t\treturn spawned;\r\n\t},\r\n};\r\n"]}
|
|
@@ -6,7 +6,8 @@ const utils_1 = require("../../../utils");
|
|
|
6
6
|
exports.TimewarpedRadioStar = {
|
|
7
7
|
cardIds: ["BG34_Giant_330", "BG34_Giant_330_G"],
|
|
8
8
|
deathrattleSpawn: (minion, input) => {
|
|
9
|
-
|
|
9
|
+
const isMinionDead = minion.definitelyDead || minion.health <= 0;
|
|
10
|
+
if (!isMinionDead || !minion.lastAffectedByEntity) {
|
|
10
11
|
return [];
|
|
11
12
|
}
|
|
12
13
|
const mult = minion.cardId === "BG34_Giant_330_G" ? 2 : 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timewarped-radio-star.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-radio-star.ts"],"names":[],"mappings":";;;AAEA,qEAAmE;AAEnE,0CAA4C;AAG/B,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,sCAA0F;IACnG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QAEnG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;
|
|
1
|
+
{"version":3,"file":"timewarped-radio-star.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-radio-star.ts"],"names":[],"mappings":";;;AAEA,qEAAmE;AAEnE,0CAA4C;AAG/B,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,sCAA0F;IACnG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QAEnG,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;YAClD,OAAO,EAAE,CAAC;SACV;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACtD,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7D,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;SACvD,CAAC,CAAC,CAAC;QACJ,IAAA,8BAAc,EAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,mBAAmB,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACzG,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { copyEntity } from '../../../utils';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TimewarpedRadioStar: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TimewarpedRadioStar_BG34_Giant_330, CardIds.TimewarpedRadioStar_BG34_Giant_330_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\t// E.g deathrattle is triggered by Hand of Deios at the start of combat\r\n\t\tconst isMinionDead = minion.definitelyDead || minion.health <= 0;\r\n\t\tif (!isMinionDead || !minion.lastAffectedByEntity) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedRadioStar_BG34_Giant_330_G ? 2 : 1;\r\n\t\tconst clone = copyEntity(minion.lastAffectedByEntity);\r\n\t\tclone.health = clone.maxHealth;\r\n\t\tconst radioEntities = Array.from({ length: mult }).map(() => ({\r\n\t\t\t...clone,\r\n\t\t\tentityId: input.gameState.sharedState.currentEntityId++,\r\n\t\t}));\r\n\t\taddCardsInHand(input.boardWithDeadEntityHero, input.boardWithDeadEntity, radioEntities, input.gameState);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';
|
|
2
|
+
import { BoardEntity } from '../../../board-entity';
|
|
3
|
+
import { FullGameState } from '../../../simulation/internal-game-state';
|
|
1
4
|
import { StartOfCombatCard } from '../../card.interface';
|
|
2
5
|
export declare const AutomatonPortrait: StartOfCombatCard;
|
|
6
|
+
export declare const handleAutomatonPortraitForPlayer: (trinket: BoardTrinket, playerBoard: BoardEntity[], playerEntity: BgsPlayerEntity, opponentBoard: BoardEntity[], opponentEntity: BgsPlayerEntity, gameState: FullGameState) => void;
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AutomatonPortrait = void 0;
|
|
3
|
+
exports.handleAutomatonPortraitForPlayer = exports.AutomatonPortrait = void 0;
|
|
4
4
|
const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
|
|
5
5
|
const spawns_1 = require("../../../simulation/spawns");
|
|
6
6
|
exports.AutomatonPortrait = {
|
|
7
7
|
cardIds: ["BG30_MagicItem_303"],
|
|
8
|
+
startOfCombatTiming: 'start-of-combat',
|
|
8
9
|
startOfCombat: (trinket, input) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(0, spawns_1.performEntitySpawns)(newMinions, input.playerBoard, input.playerEntity, input.playerEntity, 0, input.opponentBoard, input.opponentEntity, input.gameState);
|
|
12
|
-
return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
|
|
13
|
-
}
|
|
10
|
+
trinket.scriptDataNum1 = 1;
|
|
11
|
+
return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
|
|
14
12
|
},
|
|
15
13
|
};
|
|
14
|
+
const handleAutomatonPortraitForPlayer = (trinket, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
|
|
15
|
+
if (playerBoard.length < 7 && trinket.scriptDataNum1 > 0) {
|
|
16
|
+
const newMinions = (0, deathrattle_spawns_1.spawnEntities)("BG_TTN_401", 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, playerEntity.friendly, false);
|
|
17
|
+
(0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, playerEntity, 0, opponentBoard, opponentEntity, gameState);
|
|
18
|
+
trinket.scriptDataNum1 = 0;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.handleAutomatonPortraitForPlayer = handleAutomatonPortraitForPlayer;
|
|
16
22
|
//# sourceMappingURL=automaton-portrait.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automaton-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/automaton-portrait.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"automaton-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/automaton-portrait.ts"],"names":[],"mappings":";;;AAGA,+EAAuE;AAEvE,uDAAiE;AAIpD,QAAA,iBAAiB,GAAsB;IACnD,OAAO,EAAE,sBAA8C;IACvD,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;QAC3B,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;CACD,CAAC;AAEK,MAAM,gCAAgC,GAAG,CAC/C,OAAqB,EACrB,WAA0B,EAC1B,YAA6B,EAC7B,aAA4B,EAC5B,cAA+B,EAC/B,SAAwB,EACjB,EAAE;IACT,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE;QACzD,MAAM,UAAU,GAAG,IAAA,kCAAa,gBAE/B,CAAC,EACD,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,CAAC,QAAQ,EACrB,KAAK,CACL,CAAC;QACF,IAAA,4BAAmB,EAClB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,CAAC,EACD,aAAa,EACb,cAAc,EACd,SAAS,CACT,CAAC;QACF,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;KAC3B;AACF,CAAC,CAAC;AAhCW,QAAA,gCAAgC,oCAgC3C","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { FullGameState } from '../../../simulation/internal-game-state';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const AutomatonPortrait: StartOfCombatCard = {\r\n\tcardIds: [CardIds.AutomatonPortrait_BG30_MagicItem_303],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\ttrinket.scriptDataNum1 = 1;\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: true };\r\n\t},\r\n};\r\n\r\nexport const handleAutomatonPortraitForPlayer = (\r\n\ttrinket: BoardTrinket,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (playerBoard.length < 7 && trinket.scriptDataNum1 > 0) {\r\n\t\tconst newMinions = spawnEntities(\r\n\t\t\tCardIds.AstralAutomaton_BG_TTN_401,\r\n\t\t\t1,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t\tplayerEntity.friendly,\r\n\t\t\tfalse,\r\n\t\t);\r\n\t\tperformEntitySpawns(\r\n\t\t\tnewMinions,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\t0,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\ttrinket.scriptDataNum1 = 0;\r\n\t}\r\n};\r\n"]}
|
|
@@ -1,30 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FangAnklet = void 0;
|
|
4
|
-
const reference_data_1 = require("@firestone-hs/reference-data");
|
|
5
4
|
const global_info_helpers_1 = require("../../../simulation/global-info-helpers");
|
|
6
|
-
const stats_1 = require("../../../simulation/stats");
|
|
7
|
-
const utils_1 = require("../../../utils");
|
|
8
5
|
exports.FangAnklet = {
|
|
9
6
|
cardIds: ["BG35_MagicItem_701"],
|
|
10
7
|
startOfCombat: (trinket, input) => {
|
|
11
8
|
const buff = trinket.scriptDataNum1 || 1;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if ((0, utils_1.hasCorrectTribe)(entity, input.playerEntity, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
|
|
15
|
-
(0, stats_1.modifyStats)(entity, trinket, buff, buff, input.playerBoard, input.playerEntity, input.gameState);
|
|
16
|
-
triggered = true;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
input.playerEntity.globalInfo.GoldrinnBuffAtk += buff;
|
|
20
|
-
input.playerEntity.globalInfo.GoldrinnBuffHealth += buff;
|
|
21
|
-
return { hasTriggered: triggered, shouldRecomputeCurrentAttacker: false };
|
|
9
|
+
(0, global_info_helpers_1.increaseGoldrinnBuff)(trinket, input.playerBoard, input.playerEntity, buff, buff, input.gameState);
|
|
10
|
+
return { hasTriggered: true, shouldRecomputeCurrentAttacker: false };
|
|
22
11
|
},
|
|
23
12
|
afterOtherSpawned: (trinket, input) => {
|
|
24
|
-
if ((0, utils_1.hasCorrectTribe)(input.spawned, input.hero, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
|
|
25
|
-
(0, global_info_helpers_1.increaseGoldrinnBuff)(trinket, input.board, input.hero, 1, 1, input.gameState);
|
|
26
|
-
trinket.scriptDataNum1 = (trinket.scriptDataNum1 || 1) + 1;
|
|
27
|
-
}
|
|
28
13
|
},
|
|
29
14
|
};
|
|
30
15
|
//# sourceMappingURL=fang-anklet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fang-anklet.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/fang-anklet.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fang-anklet.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/fang-anklet.ts"],"names":[],"mappings":";;;AAGA,iFAA+E;AAIlE,QAAA,UAAU,GAA8C;IACpE,OAAO,EAAE,sBAAuC;IAChD,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QAEzD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;QACzC,IAAA,0CAAoB,EAAC,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClG,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;IACD,iBAAiB,EAAE,CAAC,OAAqB,EAAE,KAAwB,EAAE,EAAE;IAEvE,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnOtherSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { increaseGoldrinnBuff } from '../../../simulation/global-info-helpers';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { AfterOtherSpawnedCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const FangAnklet: StartOfCombatCard & AfterOtherSpawnedCard = {\r\n\tcardIds: [CardIds.FangAnklet_BG35_MagicItem_701],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\t// Can be permanently buffed in previous combats\r\n\t\tconst buff = trinket.scriptDataNum1 || 1;\r\n\t\tincreaseGoldrinnBuff(trinket, input.playerBoard, input.playerEntity, buff, buff, input.gameState);\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n\tafterOtherSpawned: (trinket: BoardTrinket, input: OnOtherSpawnInput) => {\r\n\t\t// The buff only happens at the start of the combat, so there is no point in incrementing anything here\r\n\t},\r\n};\r\n"]}
|
|
@@ -13,7 +13,7 @@ exports.JarOGems = {
|
|
|
13
13
|
if (t.scriptDataNum1 <= 0) {
|
|
14
14
|
for (const entity of input.attackingBoard.filter((e) => (0, utils_1.hasCorrectTribe)(e, input.attackingHero, reference_data_1.Race.QUILBOAR, input.gameState.anomalies, input.gameState.allCards))) {
|
|
15
15
|
(0, blood_gems_1.playBloodGemsOn)(t, entity, 1, input.attackingBoard, input.attackingHero, input.defendingBoard, input.defendingHero, input.gameState);
|
|
16
|
-
input.gameState.spectator.registerPowerTarget(t, entity, input.attackingBoard, input.attackingHero, input.
|
|
16
|
+
input.gameState.spectator.registerPowerTarget(t, entity, input.attackingBoard, input.attackingHero, input.defendingHero);
|
|
17
17
|
}
|
|
18
18
|
t.scriptDataNum1 = input.gameState.cardsData.defaultScriptDataNum(t.cardId);
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jar-o-gems.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/jar-o-gems.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,+DAAiE;AAEjE,0CAAiD;AAGpC,QAAA,QAAQ,GAA6D;IACjF,OAAO,EAAE,sBAAqC;IAC9C,oBAAoB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAC3C,yBAAyB,EAAE,CAAC,OAAsD,EAAE,KAAoB,EAAE,EAAE;QAC3G,MAAM,CAAC,GAAG,OAAuB,CAAC;QAClC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,EAAE;YAC1B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,QAAQ,EACb,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,EAAE;gBACF,IAAA,4BAAe,EACd,CAAC,EACD,MAAM,EACN,CAAC,EACD,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,CAAC,EACD,MAAM,EACN,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,CACnB,CAAC;aACF;YACD,CAAC,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC5E;QACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { playBloodGemsOn } from '../../../simulation/blood-gems';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterAnotherMinionAttacksCard, DefaultScriptDataNumCard } from '../../card.interface';\r\n\r\nexport const JarOGems: AfterAnotherMinionAttacksCard & DefaultScriptDataNumCard = {\r\n\tcardIds: [CardIds.JarOGems_BG30_MagicItem_546],\r\n\tdefaultScriptDataNum: (cardId: string) => 2,\r\n\tafterAnotherMinionAttacks: (trinket: BoardEntity | BoardTrinket | BoardEnchantment, input: OnAttackInput) => {\r\n\t\tconst t = trinket as BoardTrinket;\r\n\t\tt.scriptDataNum1--;\r\n\t\tif (t.scriptDataNum1 <= 0) {\r\n\t\t\tfor (const entity of input.attackingBoard.filter((e) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tRace.QUILBOAR,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t),\r\n\t\t\t)) {\r\n\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.
|
|
1
|
+
{"version":3,"file":"jar-o-gems.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/jar-o-gems.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,+DAAiE;AAEjE,0CAAiD;AAGpC,QAAA,QAAQ,GAA6D;IACjF,OAAO,EAAE,sBAAqC;IAC9C,oBAAoB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAC3C,yBAAyB,EAAE,CAAC,OAAsD,EAAE,KAAoB,EAAE,EAAE;QAC3G,MAAM,CAAC,GAAG,OAAuB,CAAC;QAClC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,EAAE;YAC1B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,QAAQ,EACb,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,EAAE;gBACF,IAAA,4BAAe,EACd,CAAC,EACD,MAAM,EACN,CAAC,EACD,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,CAAC,EACD,MAAM,EACN,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,CACnB,CAAC;aACF;YACD,CAAC,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC5E;QACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { playBloodGemsOn } from '../../../simulation/blood-gems';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterAnotherMinionAttacksCard, DefaultScriptDataNumCard } from '../../card.interface';\r\n\r\nexport const JarOGems: AfterAnotherMinionAttacksCard & DefaultScriptDataNumCard = {\r\n\tcardIds: [CardIds.JarOGems_BG30_MagicItem_546],\r\n\tdefaultScriptDataNum: (cardId: string) => 2,\r\n\tafterAnotherMinionAttacks: (trinket: BoardEntity | BoardTrinket | BoardEnchantment, input: OnAttackInput) => {\r\n\t\tconst t = trinket as BoardTrinket;\r\n\t\tt.scriptDataNum1--;\r\n\t\tif (t.scriptDataNum1 <= 0) {\r\n\t\t\tfor (const entity of input.attackingBoard.filter((e) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tRace.QUILBOAR,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t),\r\n\t\t\t)) {\r\n\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tt.scriptDataNum1 = input.gameState.cardsData.defaultScriptDataNum(t.cardId);\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
|