@firestone-hs/simulate-bgs-battle 1.1.659 → 1.1.661

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 (61) hide show
  1. package/dist/cards/cards-data.d.ts +3 -1
  2. package/dist/cards/cards-data.js +3 -2
  3. package/dist/cards/cards-data.js.map +1 -1
  4. package/dist/cards/impl/_card-mappings.js +4 -0
  5. package/dist/cards/impl/_card-mappings.js.map +1 -1
  6. package/dist/cards/impl/minion/apexis-guardian.js +7 -1
  7. package/dist/cards/impl/minion/apexis-guardian.js.map +1 -1
  8. package/dist/cards/impl/minion/bassgill.js +1 -1
  9. package/dist/cards/impl/minion/bassgill.js.map +1 -1
  10. package/dist/cards/impl/minion/blue-volumizer.d.ts +2 -2
  11. package/dist/cards/impl/minion/blue-volumizer.js +1 -1
  12. package/dist/cards/impl/minion/blue-volumizer.js.map +1 -1
  13. package/dist/cards/impl/minion/bluesy-siren.js +1 -1
  14. package/dist/cards/impl/minion/bluesy-siren.js.map +1 -1
  15. package/dist/cards/impl/minion/pashmar-the-vengeful.js +2 -1
  16. package/dist/cards/impl/minion/pashmar-the-vengeful.js.map +1 -1
  17. package/dist/cards/impl/minion/profound-thinker.d.ts +2 -2
  18. package/dist/cards/impl/minion/profound-thinker.js +11 -8
  19. package/dist/cards/impl/minion/profound-thinker.js.map +1 -1
  20. package/dist/cards/impl/minion/red-volumizer.d.ts +2 -2
  21. package/dist/cards/impl/minion/red-volumizer.js +1 -1
  22. package/dist/cards/impl/minion/red-volumizer.js.map +1 -1
  23. package/dist/cards/impl/minion/roaring-rallier.d.ts +2 -2
  24. package/dist/cards/impl/minion/roaring-rallier.js +1 -1
  25. package/dist/cards/impl/minion/roaring-rallier.js.map +1 -1
  26. package/dist/cards/impl/minion/silent-enforcer.js +1 -1
  27. package/dist/cards/impl/minion/silent-enforcer.js.map +1 -1
  28. package/dist/cards/impl/minion/soulsplitter.js +6 -11
  29. package/dist/cards/impl/minion/soulsplitter.js.map +1 -1
  30. package/dist/cards/impl/minion/the-glad-iator.d.ts +2 -0
  31. package/dist/cards/impl/minion/the-glad-iator.js +12 -0
  32. package/dist/cards/impl/minion/the-glad-iator.js.map +1 -0
  33. package/dist/cards/impl/minion/timewarped-immortal.js +2 -2
  34. package/dist/cards/impl/minion/timewarped-immortal.js.map +1 -1
  35. package/dist/cards/impl/minion/timewarped-interpreter.js +2 -1
  36. package/dist/cards/impl/minion/timewarped-interpreter.js.map +1 -1
  37. package/dist/cards/impl/minion/timewarped-murcules.js +3 -0
  38. package/dist/cards/impl/minion/timewarped-murcules.js.map +1 -1
  39. package/dist/cards/impl/minion/timewarped-pashmar.js +2 -1
  40. package/dist/cards/impl/minion/timewarped-pashmar.js.map +1 -1
  41. package/dist/cards/impl/minion/timewarped-trickster.js +5 -8
  42. package/dist/cards/impl/minion/timewarped-trickster.js.map +1 -1
  43. package/dist/cards/impl/minion/timewarped-warghoul.js +9 -1
  44. package/dist/cards/impl/minion/timewarped-warghoul.js.map +1 -1
  45. package/dist/cards/impl/spellcraft/crab-mount.d.ts +2 -0
  46. package/dist/cards/impl/spellcraft/crab-mount.js +23 -0
  47. package/dist/cards/impl/spellcraft/crab-mount.js.map +1 -0
  48. package/dist/cards/impl/spellcraft/deep-blues.js +2 -1
  49. package/dist/cards/impl/spellcraft/deep-blues.js.map +1 -1
  50. package/dist/simulation/damage-effects.js +1 -1
  51. package/dist/simulation/damage-effects.js.map +1 -1
  52. package/dist/simulation/deathrattle-effects.js +10 -2
  53. package/dist/simulation/deathrattle-effects.js.map +1 -1
  54. package/dist/simulation/deathrattle-spawns.js +10 -10
  55. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  56. package/dist/simulation/magnetize.js +3 -1
  57. package/dist/simulation/magnetize.js.map +1 -1
  58. package/dist/utils.d.ts +3 -1
  59. package/dist/utils.js +10 -8
  60. package/dist/utils.js.map +1 -1
  61. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"damage-effects.js","sourceRoot":"","sources":["../../src/simulation/damage-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: board,\r\n\t\t\thero: hero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, board, hero, otherHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(damagedEntity, damagedEntity, board, hero, otherHero);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, board, hero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\t// case CardIds.CraftyAranasi_BG29_821:\r\n\t\t// case CardIds.CraftyAranasi_BG29_821_G:\r\n\t\t// \tconst aranasiLoops = damagedEntity.cardId === CardIds.CraftyAranasi_BG29_821_G ? 2 : 1;\r\n\t\t// \tfor (let i = 0; i < aranasiLoops; i++) {\r\n\t\t// \t\tdealDamageToRandomEnemy(\r\n\t\t// \t\t\tenemyBoard,\r\n\t\t// \t\t\tenemyHero,\r\n\t\t// \t\t\tdamagedEntity,\r\n\t\t// \t\t\t5,\r\n\t\t// \t\t\tfriendlyBoard,\r\n\t\t// \t\t\tfriendlyHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.MarineMatriarch_BG29_610:\r\n\t\t// case CardIds.MarineMatriarch_BG29_610_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.MarineMatriarch_BG29_610_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300:\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300_G:\r\n\t\t// \tconst winterfinnerStats = damagedEntity.cardId === CardIds.VeryHungryWinterfinner_BG29_300_G ? 2 : 1;\r\n\t\t// \tconst minionInHand = pickRandom(\r\n\t\t// \t\thero.hand.filter(\r\n\t\t// \t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// \tif (!!minionInHand) {\r\n\t\t// \t\tminionInHand.attack += 2 * winterfinnerStats;\r\n\t\t// \t\tminionInHand.health += winterfinnerStats;\r\n\t\t// \t\tminionInHand.maxHealth += winterfinnerStats;\r\n\t\t// \t\tgameState.spectator.registerPowerTarget(damagedEntity, minionInHand, board, hero, otherHero);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590:\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.SoftHeartedSiren_BG26_590_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.LongJohnCopper_BG29_831:\r\n\t\t// case CardIds.LongJohnCopper_BG29_831_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.LongJohnCopper_BG29_831_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160:\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.BristlingBuffoon_BG29_160_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => CardIds.BloodGem);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(damagedEntity, board, hero, otherBoard, otherHero, spawnedEntities, gameState);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tboard,\r\n\t\thero,\r\n\t\tdamagedEntity,\r\n\t\tboard.length - (board.indexOf(damagedEntity) + 1),\r\n\t\totherBoard,\r\n\t\totherHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = board[board.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of board) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of otherBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: otherBoard,\r\n\t\t\t\t\thero: otherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 2 * stats, stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\thero.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_BG30_MagicItem_427 ||\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t,\r\n\t\t)\r\n\t\t.forEach((carving) => {\r\n\t\t\tconst target = pickRandomAlive(board);\r\n\t\t\tif (!!target) {\r\n\t\t\t\tconst buff = carving.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t ? 4 : 2;\r\n\t\t\t\tmodifyStats(target, carving, buff, 0, board, hero, gameState);\r\n\t\t\t}\r\n\t\t});\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\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":"damage-effects.js","sourceRoot":"","sources":["../../src/simulation/damage-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: board,\r\n\t\t\thero: hero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, board, hero, otherHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(damagedEntity, damagedEntity, board, hero, otherHero);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, board, hero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\t// case CardIds.CraftyAranasi_BG29_821:\r\n\t\t// case CardIds.CraftyAranasi_BG29_821_G:\r\n\t\t// \tconst aranasiLoops = damagedEntity.cardId === CardIds.CraftyAranasi_BG29_821_G ? 2 : 1;\r\n\t\t// \tfor (let i = 0; i < aranasiLoops; i++) {\r\n\t\t// \t\tdealDamageToRandomEnemy(\r\n\t\t// \t\t\tenemyBoard,\r\n\t\t// \t\t\tenemyHero,\r\n\t\t// \t\t\tdamagedEntity,\r\n\t\t// \t\t\t5,\r\n\t\t// \t\t\tfriendlyBoard,\r\n\t\t// \t\t\tfriendlyHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.MarineMatriarch_BG29_610:\r\n\t\t// case CardIds.MarineMatriarch_BG29_610_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.MarineMatriarch_BG29_610_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300:\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300_G:\r\n\t\t// \tconst winterfinnerStats = damagedEntity.cardId === CardIds.VeryHungryWinterfinner_BG29_300_G ? 2 : 1;\r\n\t\t// \tconst minionInHand = pickRandom(\r\n\t\t// \t\thero.hand.filter(\r\n\t\t// \t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// \tif (!!minionInHand) {\r\n\t\t// \t\tminionInHand.attack += 2 * winterfinnerStats;\r\n\t\t// \t\tminionInHand.health += winterfinnerStats;\r\n\t\t// \t\tminionInHand.maxHealth += winterfinnerStats;\r\n\t\t// \t\tgameState.spectator.registerPowerTarget(damagedEntity, minionInHand, board, hero, otherHero);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590:\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.SoftHeartedSiren_BG26_590_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.LongJohnCopper_BG29_831:\r\n\t\t// case CardIds.LongJohnCopper_BG29_831_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.LongJohnCopper_BG29_831_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160:\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.BristlingBuffoon_BG29_160_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => CardIds.BloodGem);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(damagedEntity, board, hero, otherBoard, otherHero, spawnedEntities, gameState);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tboard,\r\n\t\thero,\r\n\t\tdamagedEntity,\r\n\t\tboard.length - (board.indexOf(damagedEntity) + 1),\r\n\t\totherBoard,\r\n\t\totherHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = board[board.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of board) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of otherBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: otherBoard,\r\n\t\t\t\t\thero: otherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 2 * stats, 1 * stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\thero.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_BG30_MagicItem_427 ||\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t,\r\n\t\t)\r\n\t\t.forEach((carving) => {\r\n\t\t\tconst target = pickRandomAlive(board);\r\n\t\t\tif (!!target) {\r\n\t\t\t\tconst buff = carving.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t ? 4 : 2;\r\n\t\t\t\tmodifyStats(target, carving, buff, 0, board, hero, gameState);\r\n\t\t\t}\r\n\t\t});\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\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"]}
@@ -324,10 +324,18 @@ const rememberDeathrattles = (fish, inputDeadEntities, cardsData, allCards, shar
324
324
  else {
325
325
  fish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];
326
326
  }
327
- if (newDeathrattles.some((d) => { var _a; return (_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000"); })) {
327
+ if (newDeathrattles.some((d) => {
328
+ var _a, _b;
329
+ return ((_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000")) ||
330
+ ((_b = d.cardId) === null || _b === void 0 ? void 0 : _b.startsWith("BG34_Giant_031"));
331
+ })) {
328
332
  const leapfroggerDeathrattles = (0, remembered_deathrattle_1.groupLeapfroggerDeathrattles)(fish.rememberedDeathrattles);
329
333
  fish.rememberedDeathrattles = [
330
- ...fish.rememberedDeathrattles.filter((d) => { var _a; return !((_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000")); }),
334
+ ...fish.rememberedDeathrattles.filter((d) => {
335
+ var _a, _b;
336
+ return !((_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000")) &&
337
+ !((_b = d.cardId) === null || _b === void 0 ? void 0 : _b.startsWith("BG34_Giant_031"));
338
+ }),
331
339
  ...leapfroggerDeathrattles,
332
340
  ];
333
341
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deathrattle-effects.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-effects.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { AllCardsService, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardsData } from '../cards/cards-data';\r\nimport { eternalKnightAttack, eternalKnightHealth } from '../cards/impl/trinket/eternal-portrait';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickMultipleRandomDifferent } from '../services/utils';\r\nimport { isValidDeathrattleEnchantment } from '../simulate-bgs-battle';\r\nimport {\r\n\tgetRandomMinionWithHighestHealth,\r\n\tgrantRandomStats,\r\n\thasCorrectTribe,\r\n\tisDead,\r\n\tisFish,\r\n\tisGolden,\r\n} from '../utils';\r\nimport { dealDamageToMinion } from './attack';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { groupLeapfroggerDeathrattles } from './remembered-deathrattle';\r\nimport { SharedState } from './shared-state';\r\nimport { modifyStats } from './stats';\r\n\r\nconst DEATHRATTLES_REQUIRE_MEMORY = [CardIds.StitchedSalvager_BG31_999, CardIds.StitchedSalvager_BG31_999_G];\r\nconst DOUBLE_DEATHRATTLE_CARD_IDS = [\r\n\tCardIds.MoiraBronzebeard_BG27_518,\r\n\tCardIds.TitusTribute_BG28_843,\r\n\tCardIds.TimewarpedDeios_BG34_Giant_376,\r\n];\r\nconst TRIPLE_DEATHRATTLE_CARD_IDS = [CardIds.MoiraBronzebeard_BG27_518_G, CardIds.TimewarpedDeios_BG34_Giant_376_G];\r\n\r\nexport const computeDeathrattleMultiplier = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tsharedState: SharedState,\r\n): number => {\r\n\tconst cardIds = [...board.map((e) => e.cardId), ...(boardHero.secrets?.map((e) => e.cardId) ?? [])];\r\n\tconst triggerMult = cardIds.some((cardId) => TRIPLE_DEATHRATTLE_CARD_IDS.includes(cardId as CardIds))\r\n\t\t? 3\r\n\t\t: cardIds.some((cardId) => DOUBLE_DEATHRATTLE_CARD_IDS.includes(cardId as CardIds))\r\n\t\t? 2\r\n\t\t: 1;\r\n\r\n\tconst titus = board.filter((entity) => entity.cardId === CardIds.TitusRivendare_BG25_354).length;\r\n\tconst goldenTitus = board.filter((entity) => entity.cardId === CardIds.TitusRivendare_BG25_354_G).length;\r\n\tconst deathlyPhylacteries = boardHero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.DeathlyPhylactery_BG30_MagicItem_700 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n\tconst tombs =\r\n\t\tboardHero.questRewardEntities?.filter((entity) => entity.cardId === CardIds.TurbulentTombs)?.length ?? 0;\r\n\tconst echoesOfArgus = sharedState.anomalies.includes(CardIds.EchoesOfArgus_BG27_Anomaly_802) ? 1 : 0;\r\n\tconst scourgeMultiplier = deadEntity.additionalCards?.includes(CardIds.ScourgeTroll) ? 2 : 1;\r\n\r\n\tconst multiplier =\r\n\t\tscourgeMultiplier * (triggerMult + deathlyPhylacteries + titus + 2 * goldenTitus + tombs + echoesOfArgus);\r\n\treturn multiplier;\r\n};\r\n\r\nexport const applyLightningInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity | BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// Because the golden version doubles all the remembered effects\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tconst previousVenomous = (deadEntity as BoardEntity).venomous;\r\n\t(deadEntity as BoardEntity).venomous = false;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst targets = pickMultipleRandomDifferent(otherBoard, 5);\r\n\t\tfor (const target of targets) {\r\n\t\t\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\t1,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\t(deadEntity as BoardEntity).venomous = previousVenomous;\r\n};\r\n\r\nexport const applyWaterInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity, // Can be null when trinket is used\r\n\tsourceEntity: BgsPlayerEntity | BoardEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst validBoard = boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\t\tconst target: BoardEntity = validBoard[validBoard.length - 1];\r\n\t\tif (!!target) {\r\n\t\t\tupdateTaunt(target, true, boardWithDeadEntity, boardWithDeadEntityHero, otherHero, gameState);\r\n\t\t\tupdateDivineShield(target, boardWithDeadEntity, boardWithDeadEntityHero, otherHero, true, gameState);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const applyFireInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tsourceEntity: BgsPlayerEntity | BoardEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst target: BoardEntity = boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tsourceEntity,\r\n\t\t\t\ttarget.attack,\r\n\t\t\t\t0,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const applyEarthInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tdeadEntity: BoardEntity,\r\n\tsourceEntity: BgsPlayerEntity | BoardEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst minionsGrantedDeathrattle: BoardEntity[] = pickMultipleRandomDifferent(boardWithDeadEntity, 4);\r\n\t\tminionsGrantedDeathrattle.forEach((minion) => {\r\n\t\t\tminion.enchantments.push({\r\n\t\t\t\tcardId: CardIds.EarthInvocation_ElementEarthEnchantment,\r\n\t\t\t\toriginEntityId: deadEntity?.entityId,\r\n\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t});\r\n\t\t\tgameState.spectator.registerPowerTarget(sourceEntity, minion, boardWithDeadEntity, null, null);\r\n\t\t});\r\n\t}\r\n};\r\n\r\nexport const applyLeapFroggerEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tisPremium: boolean,\r\n\tgameState: FullGameState,\r\n\tmultiplier: number,\r\n): void => {\r\n\tmultiplier = multiplier ?? deadEntity.deathrattleRepeats ?? 1;\r\n\t// console.debug('applying leapfrogger effect', deadEntity.entityId, multiplier);\r\n\tconst buffed = grantRandomStats(\r\n\t\tdeadEntity,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tRace.BEAST,\r\n\t\tfalse,\r\n\t\tgameState,\r\n\t);\r\n\tif (buffed) {\r\n\t\tbuffed.enchantments.push({\r\n\t\t\tcardId: isPremium\r\n\t\t\t\t? CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge\r\n\t\t\t\t: CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\toriginEntityId: deadEntity.entityId,\r\n\t\t\trepeats: multiplier > 1 ? multiplier : 1,\r\n\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t});\r\n\t}\r\n};\r\n\r\nexport const applyRecurringNightmareDeathrattleEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tisPremium: boolean,\r\n\tgameState: FullGameState,\r\n\tmultiplier = 1,\r\n): void => {\r\n\t// multiplier = multiplier || 1;\r\n\t// const target = pickRandom(\r\n\t// \tboardWithDeadEntity\r\n\t// \t\t.filter((e) =>\r\n\t// \t\t\thasCorrectTribe(e, boardWithDeadEntityHero, Race.UNDEAD, gameState.anomalies, gameState.allCards),\r\n\t// \t\t)\r\n\t// \t\t.filter(\r\n\t// \t\t\t(e) =>\r\n\t// \t\t\t\te.cardId !== CardIds.RecurringNightmare_BG26_055 &&\r\n\t// \t\t\t\te.cardId !== CardIds.RecurringNightmare_BG26_055_G,\r\n\t// \t\t),\r\n\t// );\r\n\t// if (target) {\r\n\t// \ttarget.enchantments = target.enchantments ?? [];\r\n\t// \ttarget.enchantments.push({\r\n\t// \t\tcardId: isPremium\r\n\t// \t\t\t? CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055_Ge\r\n\t// \t\t\t: CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055e,\r\n\t// \t\toriginEntityId: deadEntity.entityId,\r\n\t// \t\trepeats: multiplier > 1 ? multiplier : 1,\r\n\t// \t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t// \t});\r\n\t// \tgameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, null, null);\r\n\t// }\r\n};\r\n\r\n// Some minions like Icesnarl can revive themselves when killing a minion, so it needs to be handled before\r\n// we actually make the minion die\r\nexport const handleWheneverMinionsKillEffect = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thandleWheneverMinionsKillEffectForBoard(board, hero, otherBoard, otherHero, gameState);\r\n\t// It's called once for each board already, so don't duplicate it here\r\n\t// handleWheneverMinionsKillEffectForBoard(otherBoard, otherHero, board, hero, gameState);\r\n};\r\n\r\nconst handleWheneverMinionsKillEffectForBoard = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\tconst futureDeadEntity = board[i];\r\n\t\t\tconst killer = futureDeadEntity.lastAffectedByEntity;\r\n\t\t\tif (!killer) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Killed an enemy minion\r\n\t\t\tif (killer.friendly !== futureDeadEntity.friendly) {\r\n\t\t\t\tfor (const heroPower of otherHero.heroPowers) {\r\n\t\t\t\t\t// Can't be used to resurrect a dead minion\r\n\t\t\t\t\t// https://replays.firestoneapp.com/?reviewId=d1fffee8-0bc3-40f5-9a59-85eef8367095&turn=11&action=4\r\n\t\t\t\t\tif (heroPower.cardId === CardIds.Rokara_GloryOfCombat && !isDead(killer)) {\r\n\t\t\t\t\t\tmodifyStats(killer, otherHero, 1, 0, otherBoard, otherHero, gameState);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Icesnarl the Mighty\r\n\t\t\t\totherBoard\r\n\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy ||\r\n\t\t\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_G,\r\n\t\t\t\t\t)\r\n\t\t\t\t\t// Can't be revived\r\n\t\t\t\t\t// 33.6 https://replays.firestoneapp.com/?reviewId=608ddffb-6c04-4def-a8de-fd39228f4de4&turn=11&action=4\r\n\t\t\t\t\t// Maybe should move to an \"after kill\" phase, where dead minions are already dead?\r\n\t\t\t\t\t.filter((e) => e.health > 0 && !e.definitelyDead)\r\n\t\t\t\t\t.forEach((icesnarl) => {\r\n\t\t\t\t\t\tconst mult = icesnarl.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tmodifyStats(icesnarl, icesnarl, 0, 3 * mult, board, hero, gameState);\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const handleAfterMinionKillsEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// Moved to \"whenever kills\", as these can revive the minion that kills\r\n\t// const killer = deadEntity.lastAffectedByEntity;\r\n\t// if (!killer) {\r\n\t// \treturn;\r\n\t// }\r\n\t// // Killed an enemy minion\r\n\t// if (killer.friendly !== deadEntity.friendly) {\r\n\t// }\r\n};\r\n\r\nexport const applyAfterMinionDiesEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.DEMON, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplySoulJugglerEffect(boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);\r\n\t}\r\n};\r\n\r\nexport const applyWheneverMinionDiesEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// console.log('applying minion death effect', stringifySimpleCard(deadEntity, allCards));\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplyScavengingHyenaEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MECH, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplyJunkbotEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MURLOC, gameState.anomalies, gameState.allCards)) {\r\n\t\tremoveOldMurkEyeAttack(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tremoveOldMurkEyeAttack(otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.ELEMENTAL, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplyMossOfTheSchlossEffect(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\tif (deadEntity.taunt) {\r\n\t\tapplyBristlemaneScrapsmithEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tapplyQirajiHarbringerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntityIndexFromRight, gameState);\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008_G\r\n\t) {\r\n\t\tapplyEternalKnightEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\t// Putricide-only\r\n\tboardWithDeadEntity\r\n\t\t.filter((e) => e.additionalCards?.includes(CardIds.FlesheatingGhoulLegacy_BG26_tt_004))\r\n\t\t.forEach((e) => {\r\n\t\t\tmodifyStats(e, null, 1, 0, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t});\r\n\r\n\tapplyRotHideGnollEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\r\n\t// Overkill\r\n\tif (\r\n\t\tdeadEntity.health < 0 &&\r\n\t\tgameState.sharedState.currentAttackerEntityId != null &&\r\n\t\tgameState.sharedState.currentAttackerEntityId === deadEntity.lastAffectedByEntity?.entityId\r\n\t) {\r\n\t\t// if (deadEntity.lastAffectedByEntity.cardId === CardIds.HeraldOfFlame_BGS_032) {\r\n\t\t// \tconst targets = boardWithDeadEntity.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\t// \tif (targets.length > 0) {\r\n\t\t// \t\tconst target = targets[0];\r\n\t\t// \t\tdealDamageToMinion(\r\n\t\t// \t\t\ttarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\t3,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.HeraldOfFlame_TB_BaconUps_103) {\r\n\t\t// \tconst targets = boardWithDeadEntity.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\t// \tif (targets.length > 0) {\r\n\t\t// \t\tconst target = targets[0];\r\n\t\t// \t\tdealDamageToMinion(\r\n\t\t// \t\t\ttarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\t6,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// }\r\n\t\t// else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental && deadEntity.lastAffectedByEntity.attacking) {\r\n\t\t// \t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental) {\r\n\t\t// \t// console.log('applying WildfireElemental effect', stringifySimple(boardWithDeadEntity, allCards));\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \t// Prevent propagation of the effect\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \t// console.log('neighbours', stringifySimple(neighbours, allCards));\r\n\t\t// \tif (neighbours.length > 0) {\r\n\t\t// \t\tconst randomTarget = neighbours[Math.floor(Math.random() * neighbours.length)];\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\trandomTarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// } else if (\r\n\t\t// \tdeadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElementalBattlegrounds &&\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking\r\n\t\t// ) {\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \tneighbours.forEach((neighbour) =>\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\tneighbour,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// }\r\n\t\tif (deadEntity.lastAffectedByEntity.cardId === CardIds.IronhideDirehorn_TRL_232) {\r\n\t\t\tconst newEntities = spawnEntities(\r\n\t\t\t\tCardIds.IronhideDirehorn_IronhideRuntToken_TRL_232t,\r\n\t\t\t\t1,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t\t!deadEntity.friendly,\r\n\t\t\t\tfalse,\r\n\t\t\t);\r\n\t\t\totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.IronhideDirehorn_TB_BaconUps_051) {\r\n\t\t\t// \tconst newEntities = spawnEntities(\r\n\t\t\t// \t\tCardIds.IronhideDirehorn_IronhideRuntToken_TB_BaconUps_051t,\r\n\t\t\t// \t\t1,\r\n\t\t\t// \t\totherBoard,\r\n\t\t\t// \t\totherBoardHero,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\tgameState,\r\n\t\t\t// \t\t!deadEntity.friendly,\r\n\t\t\t// \t\tfalse,\r\n\t\t\t// \t);\r\n\t\t\t// \totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_BGS_080) {\r\n\t\t\t// \tconst otherPirates = otherBoard\r\n\t\t\t// \t\t.filter((entity) =>\r\n\t\t\t// \t\t\thasCorrectTribe(\r\n\t\t\t// \t\t\t\tentity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\tRace.PIRATE,\r\n\t\t\t// \t\t\t\tgameState.anomalies,\r\n\t\t\t// \t\t\t\tgameState.allCards,\r\n\t\t\t// \t\t\t),\r\n\t\t\t// \t\t)\r\n\t\t\t// \t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\t// \totherPirates.forEach((pirate) => {\r\n\t\t\t// \t\tmodifyStats(\r\n\t\t\t// \t\t\tpirate,\r\n\t\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t// \t\t\t2,\r\n\t\t\t// \t\t\t2,\r\n\t\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\tgameState,\r\n\t\t\t// \t\t);\r\n\t\t\t// \t});\r\n\t\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_TB_BaconUps_142) {\r\n\t\t\t// \tconst otherPirates = otherBoard\r\n\t\t\t// \t\t.filter((entity) =>\r\n\t\t\t// \t\t\thasCorrectTribe(\r\n\t\t\t// \t\t\t\tentity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\tRace.PIRATE,\r\n\t\t\t// \t\t\t\tgameState.anomalies,\r\n\t\t\t// \t\t\t\tgameState.allCards,\r\n\t\t\t// \t\t\t),\r\n\t\t\t// \t\t)\r\n\t\t\t// \t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\t// \totherPirates.forEach((pirate) => {\r\n\t\t\t// \t\tmodifyStats(\r\n\t\t\t// \t\t\tpirate,\r\n\t\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t// \t\t\t4,\r\n\t\t\t// \t\t\t4,\r\n\t\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\tgameState,\r\n\t\t\t// \t\t);\r\n\t\t\t// \t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/** @deprecated */\r\nexport const dealDamageToAllMinions = (\r\n\tboard1: BoardEntity[],\r\n\tboard1Hero: BgsPlayerEntity,\r\n\tboard2: BoardEntity[],\r\n\tboard2Hero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity,\r\n\tdamageDealt: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (board1.length === 0 && board2.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\tfor (let i = 0; i < board1.length; i++) {\r\n\t\tdealDamageToMinion(board1[i], board1, board1Hero, damageSource, damageDealt, board2, board2Hero, gameState);\r\n\t}\r\n\tfor (let i = 0; i < board2.length; i++) {\r\n\t\tdealDamageToMinion(board2[i], board2, board2Hero, damageSource, damageDealt, board1, board1Hero, gameState);\r\n\t}\r\n};\r\n\r\nexport const applySoulJugglerEffect = (\r\n\tboardWithJugglers: BoardEntity[],\r\n\tboardWithJugglersHero: BgsPlayerEntity,\r\n\tboardToAttack: BoardEntity[],\r\n\tboardToAttackHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (boardWithJugglers.length === 0 && boardToAttack.length === 0) {\r\n\t\treturn;\r\n\t\t// return [boardWithJugglers, boardToAttack];\r\n\t}\r\n\tconst jugglers = boardWithJugglers.filter((entity) => entity.cardId === CardIds.SoulJuggler_BGS_002);\r\n\tfor (const juggler of jugglers) {\r\n\t\tconst target = getRandomMinionWithHighestHealth(boardToAttack);\r\n\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\tjuggler,\r\n\t\t\ttarget,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tboardToAttackHero,\r\n\t\t);\r\n\t\tdealDamageToMinion(\r\n\t\t\ttarget,\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t4,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\tconst goldenJugglers = boardWithJugglers.filter((entity) => entity.cardId === CardIds.SoulJuggler_TB_BaconUps_075);\r\n\tfor (const juggler of goldenJugglers) {\r\n\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\tconst target = getRandomMinionWithHighestHealth(boardToAttack);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tjuggler,\r\n\t\t\t\ttarget,\r\n\t\t\t\tboardWithJugglers,\r\n\t\t\t\tboardWithJugglersHero,\r\n\t\t\t\tboardToAttackHero,\r\n\t\t\t);\r\n\t\t\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\tboardToAttack,\r\n\t\t\t\tboardToAttackHero,\r\n\t\t\t\tjuggler,\r\n\t\t\t\t4,\r\n\t\t\t\tboardWithJugglers,\r\n\t\t\t\tboardWithJugglersHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\t// processMinionDeath(\r\n\t// \tboardWithJugglers,\r\n\t// \tboardWithJugglersHero,\r\n\t// \tboardToAttack,\r\n\t// \tboardToAttackHero,\r\n\t// \tallCards,\r\n\t// \tcardsData,\r\n\t// \tsharedState,\r\n\t// \tspectator,\r\n\t// );\r\n};\r\n\r\nconst applyScavengingHyenaEffect = (\r\n\tboard: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// const copy = [...board];\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.ScavengingHyenaLegacy_BG_EX1_531) {\r\n\t\t\tmodifyStats(board[i], null, 2, 1, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t} else if (board[i].cardId === CardIds.ScavengingHyenaLegacy_TB_BaconUps_043) {\r\n\t\t\tmodifyStats(board[i], null, 4, 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyEternalKnightEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008_G\r\n\t\t) {\r\n\t\t\tconst multiplier = board[i].cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\r\n\t\t\tmodifyStats(\r\n\t\t\t\tboard[i],\r\n\t\t\t\tnull,\r\n\t\t\t\tmultiplier * eternalKnightAttack,\r\n\t\t\t\tmultiplier * eternalKnightHealth,\r\n\t\t\t\tboard,\r\n\t\t\t\thero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyRotHideGnollEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.RotHideGnoll_BG25_013 || board[i].cardId === CardIds.RotHideGnoll_BG25_013_G) {\r\n\t\t\tconst multiplier = board[i].cardId === CardIds.RotHideGnoll_BG25_013_G ? 2 : 1;\r\n\t\t\tmodifyStats(board[i], null, multiplier * 1, 0, board, hero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyBristlemaneScrapsmithEffect = (\r\n\tboard: BoardEntity[],\r\n\tboardPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707 ||\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707_G\r\n\t\t) {\r\n\t\t\tconst cardsToAdd = Array(CardIds.BristlemaneScrapsmith_BG24_707_G ? 2 : 1).fill(CardIds.BloodGem);\r\n\t\t\taddCardsInHand(boardPlayerEntity, board, cardsToAdd, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, boardPlayerEntity, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyMossOfTheSchlossEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tboard\r\n\t\t.filter(\r\n\t\t\t(e) => e.cardId === CardIds.MossOfTheSchloss_BG30_111 || e.cardId === CardIds.MossOfTheSchloss_BG30_111_G,\r\n\t\t)\r\n\t\t.filter((e) => e.abiityChargesLeft > 0)\r\n\t\t.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, null, deadEntity.maxAttack, deadEntity.maxHealth, board, hero, gameState);\r\n\t\t\tentity.abiityChargesLeft--;\r\n\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\r\n\t\t});\r\n};\r\n\r\nconst applyJunkbotEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.Junkbot_GVG_106) {\r\n\t\t\tmodifyStats(board[i], board[i], 2, 2, board, hero, gameState);\r\n\t\t\t// } else if (board[i].cardId === CardIds.Junkbot_TB_BaconUps_046) {\r\n\t\t\t// \tmodifyStats(board[i], board[i], 4, 4, board, hero, gameState);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyQirajiHarbringerEffect = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// const qiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_BGS_112);\r\n\t// const goldenQiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_TB_BaconUps_303);\r\n\t// // TODO: if reactivated, properly apply buffs one by one, instead of all together\r\n\t// if (qiraji.length + goldenQiraji.length > 0) {\r\n\t// \tconst neighbours = getNeighbours(board, null, deadEntityIndexFromRight);\r\n\t// \tconst buff = 2 * qiraji.length + 4 * goldenQiraji.length;\r\n\t// \tneighbours.forEach((entity) => {\r\n\t// \t\tmodifyStats(entity, null, buff, buff, board, hero, gameState);\r\n\t// \t});\r\n\t// }\r\n};\r\n\r\nexport const rememberDeathrattles = (\r\n\tfish: BoardEntity,\r\n\tinputDeadEntities: readonly BoardEntity[],\r\n\tcardsData: CardsData,\r\n\tallCards: AllCardsService,\r\n\tsharedState: SharedState,\r\n): void => {\r\n\tconst deadEntities = inputDeadEntities.filter((e) => !isFish(e));\r\n\tif (!deadEntities?.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Some infinite loops going on?\r\n\tif (fish.rememberedDeathrattles?.length > 100) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst debug = deadEntities.some((e) => e.cardId === CardIds.CorruptedBristler_BG32_431);\r\n\r\n\tconst validDeathrattles = deadEntities\r\n\t\t.filter((entity) => allCards.getCard(entity.cardId).mechanics?.includes(GameTag[GameTag.DEATHRATTLE]))\r\n\t\t.filter((e) => !DEATHRATTLES_REQUIRE_MEMORY.includes(e.cardId as CardIds) || e.memory)\r\n\t\t.map((entity) => ({\r\n\t\t\tcardId: entity.cardId,\r\n\t\t\trepeats: 1,\r\n\t\t\ttiming: sharedState.currentEntityId++,\r\n\t\t\tmemory: entity.memory,\r\n\t\t\tscriptDataNum1: entity.scriptDataNum1,\r\n\t\t\tscriptDataNum2: entity.scriptDataNum2,\r\n\t\t}));\r\n\tconst validEnchantments = deadEntities\r\n\t\t.map((entity) => entity.enchantments)\r\n\t\t.reduce((a, b) => a.concat(b), [])\r\n\t\t.flatMap((enchantment) => ({\r\n\t\t\tcardId: enchantment.cardId,\r\n\t\t\trepeats: enchantment.repeats ?? 1,\r\n\t\t\ttiming: sharedState.currentEntityId++,\r\n\t\t}))\r\n\t\t.filter((enchantment) => isValidDeathrattleEnchantment(enchantment.cardId));\r\n\t// Multiple fish\r\n\tconst deadEntityRememberedDeathrattles =\r\n\t\tdeadEntities\r\n\t\t\t.filter((e) => !!e.rememberedDeathrattles?.length)\r\n\t\t\t// If the fish has reborn, it will inherit its own Deathrattles, and we don't want that\r\n\t\t\t.filter((e) => e.entityId !== fish.rebornFromEntityId)\r\n\t\t\t.filter((e) => !DEATHRATTLES_REQUIRE_MEMORY.includes(e.cardId as CardIds) || e.memory)\r\n\t\t\t.flatMap((e) => e.rememberedDeathrattles) ?? [];\r\n\tconst newDeathrattles = [...validDeathrattles, ...validEnchantments, ...deadEntityRememberedDeathrattles];\r\n\r\n\tif (newDeathrattles.length > 0) {\r\n\t\t// Order is important - the DR are triggered in the order d the minions have died\r\n\t\t// The \"golden\" part is handled at the card level for the other non-fish cards, like Piloted Whirl-o-Tron\r\n\t\tif (isFish(fish) && isGolden(fish.cardId, allCards)) {\r\n\t\t\t// https://stackoverflow.com/questions/33305152/how-to-duplicate-elements-in-a-js-array\r\n\t\t\tconst doubleDr = newDeathrattles.reduce((res, current) => res.concat([current, current]), []);\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...doubleDr];\r\n\t\t} else {\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];\r\n\t\t}\r\n\r\n\t\tif (newDeathrattles.some((d) => d.cardId?.startsWith(CardIds.Leapfrogger_BG21_000))) {\r\n\t\t\t// Not sure exactly why, but if a leapfrogger dies first, then a manasaber,\r\n\t\t\t// when the fish dies, the manasaber's effect (spawning tokens) is triggered first\r\n\t\t\t// https://replays.firestoneapp.com/?reviewId=521733fb-8ba1-4663-9a87-3da58e8a09c8&turn=21&action=3\r\n\t\t\t// HACK: So I will hardcode a rule for now to put leapfrogger effects last\r\n\t\t\tconst leapfroggerDeathrattles = groupLeapfroggerDeathrattles(fish.rememberedDeathrattles);\r\n\t\t\tfish.rememberedDeathrattles = [\r\n\t\t\t\t...fish.rememberedDeathrattles.filter((d) => !d.cardId?.startsWith(CardIds.Leapfrogger_BG21_000)),\r\n\t\t\t\t...leapfroggerDeathrattles,\r\n\t\t\t];\r\n\t\t}\r\n\t}\r\n\t// console.debug(\r\n\t// \t'remembered',\r\n\t// \tfish.cardId,\r\n\t// \tfish.entityId,\r\n\t// \tfish.rememberedDeathrattles.map((d) => ({\r\n\t// \t\tcardId: d.cardId,\r\n\t// \t\tname: allCards.getCard(d.cardId)?.name,\r\n\t// \t\t// repeats: d.repeats,\r\n\t// \t\t// timing: d.timing,\r\n\t// \t})),\r\n\t// );\r\n};\r\n\r\nconst removeOldMurkEyeAttack = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// const murkeyes = boardWithDeadEntity.filter(\r\n\t// \t(entity) => entity.cardId === CardIds.OldMurkEyeLegacy || entity.cardId === CardIds.OldMurkEyeVanilla,\r\n\t// );\r\n\t// const goldenMurkeyes = boardWithDeadEntity.filter((entity) => entity.cardId === CardIds.OldMurkEye);\r\n\t// murkeyes.forEach((entity) => {\r\n\t// \tmodifyStats(entity, null, -1, 0, boardWithDeadEntity, hero, gameState);\r\n\t// });\r\n\t// goldenMurkeyes.forEach((entity) => {\r\n\t// \tmodifyStats(entity, null, -2, 0, boardWithDeadEntity, hero, gameState);\r\n\t// });\r\n};\r\n"]}
1
+ {"version":3,"file":"deathrattle-effects.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-effects.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { AllCardsService, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardsData } from '../cards/cards-data';\r\nimport { eternalKnightAttack, eternalKnightHealth } from '../cards/impl/trinket/eternal-portrait';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickMultipleRandomDifferent } from '../services/utils';\r\nimport { isValidDeathrattleEnchantment } from '../simulate-bgs-battle';\r\nimport {\r\n\tgetRandomMinionWithHighestHealth,\r\n\tgrantRandomStats,\r\n\thasCorrectTribe,\r\n\tisDead,\r\n\tisFish,\r\n\tisGolden,\r\n} from '../utils';\r\nimport { dealDamageToMinion } from './attack';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { groupLeapfroggerDeathrattles } from './remembered-deathrattle';\r\nimport { SharedState } from './shared-state';\r\nimport { modifyStats } from './stats';\r\n\r\nconst DEATHRATTLES_REQUIRE_MEMORY = [CardIds.StitchedSalvager_BG31_999, CardIds.StitchedSalvager_BG31_999_G];\r\nconst DOUBLE_DEATHRATTLE_CARD_IDS = [\r\n\tCardIds.MoiraBronzebeard_BG27_518,\r\n\tCardIds.TitusTribute_BG28_843,\r\n\tCardIds.TimewarpedDeios_BG34_Giant_376,\r\n];\r\nconst TRIPLE_DEATHRATTLE_CARD_IDS = [CardIds.MoiraBronzebeard_BG27_518_G, CardIds.TimewarpedDeios_BG34_Giant_376_G];\r\n\r\nexport const computeDeathrattleMultiplier = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tsharedState: SharedState,\r\n): number => {\r\n\tconst cardIds = [...board.map((e) => e.cardId), ...(boardHero.secrets?.map((e) => e.cardId) ?? [])];\r\n\tconst triggerMult = cardIds.some((cardId) => TRIPLE_DEATHRATTLE_CARD_IDS.includes(cardId as CardIds))\r\n\t\t? 3\r\n\t\t: cardIds.some((cardId) => DOUBLE_DEATHRATTLE_CARD_IDS.includes(cardId as CardIds))\r\n\t\t? 2\r\n\t\t: 1;\r\n\r\n\tconst titus = board.filter((entity) => entity.cardId === CardIds.TitusRivendare_BG25_354).length;\r\n\tconst goldenTitus = board.filter((entity) => entity.cardId === CardIds.TitusRivendare_BG25_354_G).length;\r\n\tconst deathlyPhylacteries = boardHero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.DeathlyPhylactery_BG30_MagicItem_700 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n\tconst tombs =\r\n\t\tboardHero.questRewardEntities?.filter((entity) => entity.cardId === CardIds.TurbulentTombs)?.length ?? 0;\r\n\tconst echoesOfArgus = sharedState.anomalies.includes(CardIds.EchoesOfArgus_BG27_Anomaly_802) ? 1 : 0;\r\n\tconst scourgeMultiplier = deadEntity.additionalCards?.includes(CardIds.ScourgeTroll) ? 2 : 1;\r\n\r\n\tconst multiplier =\r\n\t\tscourgeMultiplier * (triggerMult + deathlyPhylacteries + titus + 2 * goldenTitus + tombs + echoesOfArgus);\r\n\treturn multiplier;\r\n};\r\n\r\nexport const applyLightningInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity | BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// Because the golden version doubles all the remembered effects\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tconst previousVenomous = (deadEntity as BoardEntity).venomous;\r\n\t(deadEntity as BoardEntity).venomous = false;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst targets = pickMultipleRandomDifferent(otherBoard, 5);\r\n\t\tfor (const target of targets) {\r\n\t\t\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\t1,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\t(deadEntity as BoardEntity).venomous = previousVenomous;\r\n};\r\n\r\nexport const applyWaterInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity, // Can be null when trinket is used\r\n\tsourceEntity: BgsPlayerEntity | BoardEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst validBoard = boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\t\tconst target: BoardEntity = validBoard[validBoard.length - 1];\r\n\t\tif (!!target) {\r\n\t\t\tupdateTaunt(target, true, boardWithDeadEntity, boardWithDeadEntityHero, otherHero, gameState);\r\n\t\t\tupdateDivineShield(target, boardWithDeadEntity, boardWithDeadEntityHero, otherHero, true, gameState);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const applyFireInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tsourceEntity: BgsPlayerEntity | BoardEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst target: BoardEntity = boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tsourceEntity,\r\n\t\t\t\ttarget.attack,\r\n\t\t\t\t0,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const applyEarthInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tdeadEntity: BoardEntity,\r\n\tsourceEntity: BgsPlayerEntity | BoardEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = deadEntity?.cardId === CardIds.SpiritRaptor_BG22_HERO_001_Buddy_G ? 2 : 1;\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst minionsGrantedDeathrattle: BoardEntity[] = pickMultipleRandomDifferent(boardWithDeadEntity, 4);\r\n\t\tminionsGrantedDeathrattle.forEach((minion) => {\r\n\t\t\tminion.enchantments.push({\r\n\t\t\t\tcardId: CardIds.EarthInvocation_ElementEarthEnchantment,\r\n\t\t\t\toriginEntityId: deadEntity?.entityId,\r\n\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t});\r\n\t\t\tgameState.spectator.registerPowerTarget(sourceEntity, minion, boardWithDeadEntity, null, null);\r\n\t\t});\r\n\t}\r\n};\r\n\r\nexport const applyLeapFroggerEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tisPremium: boolean,\r\n\tgameState: FullGameState,\r\n\tmultiplier: number,\r\n): void => {\r\n\tmultiplier = multiplier ?? deadEntity.deathrattleRepeats ?? 1;\r\n\t// console.debug('applying leapfrogger effect', deadEntity.entityId, multiplier);\r\n\tconst buffed = grantRandomStats(\r\n\t\tdeadEntity,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tRace.BEAST,\r\n\t\tfalse,\r\n\t\tgameState,\r\n\t);\r\n\tif (buffed) {\r\n\t\tbuffed.enchantments.push({\r\n\t\t\tcardId: isPremium\r\n\t\t\t\t? CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge\r\n\t\t\t\t: CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\toriginEntityId: deadEntity.entityId,\r\n\t\t\trepeats: multiplier > 1 ? multiplier : 1,\r\n\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t});\r\n\t}\r\n};\r\n\r\nexport const applyRecurringNightmareDeathrattleEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tisPremium: boolean,\r\n\tgameState: FullGameState,\r\n\tmultiplier = 1,\r\n): void => {\r\n\t// multiplier = multiplier || 1;\r\n\t// const target = pickRandom(\r\n\t// \tboardWithDeadEntity\r\n\t// \t\t.filter((e) =>\r\n\t// \t\t\thasCorrectTribe(e, boardWithDeadEntityHero, Race.UNDEAD, gameState.anomalies, gameState.allCards),\r\n\t// \t\t)\r\n\t// \t\t.filter(\r\n\t// \t\t\t(e) =>\r\n\t// \t\t\t\te.cardId !== CardIds.RecurringNightmare_BG26_055 &&\r\n\t// \t\t\t\te.cardId !== CardIds.RecurringNightmare_BG26_055_G,\r\n\t// \t\t),\r\n\t// );\r\n\t// if (target) {\r\n\t// \ttarget.enchantments = target.enchantments ?? [];\r\n\t// \ttarget.enchantments.push({\r\n\t// \t\tcardId: isPremium\r\n\t// \t\t\t? CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055_Ge\r\n\t// \t\t\t: CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055e,\r\n\t// \t\toriginEntityId: deadEntity.entityId,\r\n\t// \t\trepeats: multiplier > 1 ? multiplier : 1,\r\n\t// \t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t// \t});\r\n\t// \tgameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, null, null);\r\n\t// }\r\n};\r\n\r\n// Some minions like Icesnarl can revive themselves when killing a minion, so it needs to be handled before\r\n// we actually make the minion die\r\nexport const handleWheneverMinionsKillEffect = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\thandleWheneverMinionsKillEffectForBoard(board, hero, otherBoard, otherHero, gameState);\r\n\t// It's called once for each board already, so don't duplicate it here\r\n\t// handleWheneverMinionsKillEffectForBoard(otherBoard, otherHero, board, hero, gameState);\r\n};\r\n\r\nconst handleWheneverMinionsKillEffectForBoard = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\tconst futureDeadEntity = board[i];\r\n\t\t\tconst killer = futureDeadEntity.lastAffectedByEntity;\r\n\t\t\tif (!killer) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Killed an enemy minion\r\n\t\t\tif (killer.friendly !== futureDeadEntity.friendly) {\r\n\t\t\t\tfor (const heroPower of otherHero.heroPowers) {\r\n\t\t\t\t\t// Can't be used to resurrect a dead minion\r\n\t\t\t\t\t// https://replays.firestoneapp.com/?reviewId=d1fffee8-0bc3-40f5-9a59-85eef8367095&turn=11&action=4\r\n\t\t\t\t\tif (heroPower.cardId === CardIds.Rokara_GloryOfCombat && !isDead(killer)) {\r\n\t\t\t\t\t\tmodifyStats(killer, otherHero, 1, 0, otherBoard, otherHero, gameState);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Icesnarl the Mighty\r\n\t\t\t\totherBoard\r\n\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy ||\r\n\t\t\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_G,\r\n\t\t\t\t\t)\r\n\t\t\t\t\t// Can't be revived\r\n\t\t\t\t\t// 33.6 https://replays.firestoneapp.com/?reviewId=608ddffb-6c04-4def-a8de-fd39228f4de4&turn=11&action=4\r\n\t\t\t\t\t// Maybe should move to an \"after kill\" phase, where dead minions are already dead?\r\n\t\t\t\t\t.filter((e) => e.health > 0 && !e.definitelyDead)\r\n\t\t\t\t\t.forEach((icesnarl) => {\r\n\t\t\t\t\t\tconst mult = icesnarl.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tmodifyStats(icesnarl, icesnarl, 0, 3 * mult, board, hero, gameState);\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const handleAfterMinionKillsEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// Moved to \"whenever kills\", as these can revive the minion that kills\r\n\t// const killer = deadEntity.lastAffectedByEntity;\r\n\t// if (!killer) {\r\n\t// \treturn;\r\n\t// }\r\n\t// // Killed an enemy minion\r\n\t// if (killer.friendly !== deadEntity.friendly) {\r\n\t// }\r\n};\r\n\r\nexport const applyAfterMinionDiesEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.DEMON, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplySoulJugglerEffect(boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);\r\n\t}\r\n};\r\n\r\nexport const applyWheneverMinionDiesEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// console.log('applying minion death effect', stringifySimpleCard(deadEntity, allCards));\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplyScavengingHyenaEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MECH, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplyJunkbotEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MURLOC, gameState.anomalies, gameState.allCards)) {\r\n\t\tremoveOldMurkEyeAttack(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tremoveOldMurkEyeAttack(otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.ELEMENTAL, gameState.anomalies, gameState.allCards)) {\r\n\t\tapplyMossOfTheSchlossEffect(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\tif (deadEntity.taunt) {\r\n\t\tapplyBristlemaneScrapsmithEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tapplyQirajiHarbringerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntityIndexFromRight, gameState);\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008_G\r\n\t) {\r\n\t\tapplyEternalKnightEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\t// Putricide-only\r\n\tboardWithDeadEntity\r\n\t\t.filter((e) => e.additionalCards?.includes(CardIds.FlesheatingGhoulLegacy_BG26_tt_004))\r\n\t\t.forEach((e) => {\r\n\t\t\tmodifyStats(e, null, 1, 0, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t});\r\n\r\n\tapplyRotHideGnollEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\r\n\t// Overkill\r\n\tif (\r\n\t\tdeadEntity.health < 0 &&\r\n\t\tgameState.sharedState.currentAttackerEntityId != null &&\r\n\t\tgameState.sharedState.currentAttackerEntityId === deadEntity.lastAffectedByEntity?.entityId\r\n\t) {\r\n\t\t// if (deadEntity.lastAffectedByEntity.cardId === CardIds.HeraldOfFlame_BGS_032) {\r\n\t\t// \tconst targets = boardWithDeadEntity.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\t// \tif (targets.length > 0) {\r\n\t\t// \t\tconst target = targets[0];\r\n\t\t// \t\tdealDamageToMinion(\r\n\t\t// \t\t\ttarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\t3,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.HeraldOfFlame_TB_BaconUps_103) {\r\n\t\t// \tconst targets = boardWithDeadEntity.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\t// \tif (targets.length > 0) {\r\n\t\t// \t\tconst target = targets[0];\r\n\t\t// \t\tdealDamageToMinion(\r\n\t\t// \t\t\ttarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\t6,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// }\r\n\t\t// else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental && deadEntity.lastAffectedByEntity.attacking) {\r\n\t\t// \t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental) {\r\n\t\t// \t// console.log('applying WildfireElemental effect', stringifySimple(boardWithDeadEntity, allCards));\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \t// Prevent propagation of the effect\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \t// console.log('neighbours', stringifySimple(neighbours, allCards));\r\n\t\t// \tif (neighbours.length > 0) {\r\n\t\t// \t\tconst randomTarget = neighbours[Math.floor(Math.random() * neighbours.length)];\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\trandomTarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// } else if (\r\n\t\t// \tdeadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElementalBattlegrounds &&\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking\r\n\t\t// ) {\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \tneighbours.forEach((neighbour) =>\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\tneighbour,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// }\r\n\t\tif (deadEntity.lastAffectedByEntity.cardId === CardIds.IronhideDirehorn_TRL_232) {\r\n\t\t\tconst newEntities = spawnEntities(\r\n\t\t\t\tCardIds.IronhideDirehorn_IronhideRuntToken_TRL_232t,\r\n\t\t\t\t1,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t\t!deadEntity.friendly,\r\n\t\t\t\tfalse,\r\n\t\t\t);\r\n\t\t\totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.IronhideDirehorn_TB_BaconUps_051) {\r\n\t\t\t// \tconst newEntities = spawnEntities(\r\n\t\t\t// \t\tCardIds.IronhideDirehorn_IronhideRuntToken_TB_BaconUps_051t,\r\n\t\t\t// \t\t1,\r\n\t\t\t// \t\totherBoard,\r\n\t\t\t// \t\totherBoardHero,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\tgameState,\r\n\t\t\t// \t\t!deadEntity.friendly,\r\n\t\t\t// \t\tfalse,\r\n\t\t\t// \t);\r\n\t\t\t// \totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_BGS_080) {\r\n\t\t\t// \tconst otherPirates = otherBoard\r\n\t\t\t// \t\t.filter((entity) =>\r\n\t\t\t// \t\t\thasCorrectTribe(\r\n\t\t\t// \t\t\t\tentity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\tRace.PIRATE,\r\n\t\t\t// \t\t\t\tgameState.anomalies,\r\n\t\t\t// \t\t\t\tgameState.allCards,\r\n\t\t\t// \t\t\t),\r\n\t\t\t// \t\t)\r\n\t\t\t// \t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\t// \totherPirates.forEach((pirate) => {\r\n\t\t\t// \t\tmodifyStats(\r\n\t\t\t// \t\t\tpirate,\r\n\t\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t// \t\t\t2,\r\n\t\t\t// \t\t\t2,\r\n\t\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\tgameState,\r\n\t\t\t// \t\t);\r\n\t\t\t// \t});\r\n\t\t\t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_TB_BaconUps_142) {\r\n\t\t\t// \tconst otherPirates = otherBoard\r\n\t\t\t// \t\t.filter((entity) =>\r\n\t\t\t// \t\t\thasCorrectTribe(\r\n\t\t\t// \t\t\t\tentity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\tRace.PIRATE,\r\n\t\t\t// \t\t\t\tgameState.anomalies,\r\n\t\t\t// \t\t\t\tgameState.allCards,\r\n\t\t\t// \t\t\t),\r\n\t\t\t// \t\t)\r\n\t\t\t// \t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\t// \totherPirates.forEach((pirate) => {\r\n\t\t\t// \t\tmodifyStats(\r\n\t\t\t// \t\t\tpirate,\r\n\t\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t// \t\t\t4,\r\n\t\t\t// \t\t\t4,\r\n\t\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\tgameState,\r\n\t\t\t// \t\t);\r\n\t\t\t// \t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/** @deprecated */\r\nexport const dealDamageToAllMinions = (\r\n\tboard1: BoardEntity[],\r\n\tboard1Hero: BgsPlayerEntity,\r\n\tboard2: BoardEntity[],\r\n\tboard2Hero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity,\r\n\tdamageDealt: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (board1.length === 0 && board2.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\tfor (let i = 0; i < board1.length; i++) {\r\n\t\tdealDamageToMinion(board1[i], board1, board1Hero, damageSource, damageDealt, board2, board2Hero, gameState);\r\n\t}\r\n\tfor (let i = 0; i < board2.length; i++) {\r\n\t\tdealDamageToMinion(board2[i], board2, board2Hero, damageSource, damageDealt, board1, board1Hero, gameState);\r\n\t}\r\n};\r\n\r\nexport const applySoulJugglerEffect = (\r\n\tboardWithJugglers: BoardEntity[],\r\n\tboardWithJugglersHero: BgsPlayerEntity,\r\n\tboardToAttack: BoardEntity[],\r\n\tboardToAttackHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (boardWithJugglers.length === 0 && boardToAttack.length === 0) {\r\n\t\treturn;\r\n\t\t// return [boardWithJugglers, boardToAttack];\r\n\t}\r\n\tconst jugglers = boardWithJugglers.filter((entity) => entity.cardId === CardIds.SoulJuggler_BGS_002);\r\n\tfor (const juggler of jugglers) {\r\n\t\tconst target = getRandomMinionWithHighestHealth(boardToAttack);\r\n\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\tjuggler,\r\n\t\t\ttarget,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tboardToAttackHero,\r\n\t\t);\r\n\t\tdealDamageToMinion(\r\n\t\t\ttarget,\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t4,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\tconst goldenJugglers = boardWithJugglers.filter((entity) => entity.cardId === CardIds.SoulJuggler_TB_BaconUps_075);\r\n\tfor (const juggler of goldenJugglers) {\r\n\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\tconst target = getRandomMinionWithHighestHealth(boardToAttack);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tjuggler,\r\n\t\t\t\ttarget,\r\n\t\t\t\tboardWithJugglers,\r\n\t\t\t\tboardWithJugglersHero,\r\n\t\t\t\tboardToAttackHero,\r\n\t\t\t);\r\n\t\t\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\tboardToAttack,\r\n\t\t\t\tboardToAttackHero,\r\n\t\t\t\tjuggler,\r\n\t\t\t\t4,\r\n\t\t\t\tboardWithJugglers,\r\n\t\t\t\tboardWithJugglersHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\t// processMinionDeath(\r\n\t// \tboardWithJugglers,\r\n\t// \tboardWithJugglersHero,\r\n\t// \tboardToAttack,\r\n\t// \tboardToAttackHero,\r\n\t// \tallCards,\r\n\t// \tcardsData,\r\n\t// \tsharedState,\r\n\t// \tspectator,\r\n\t// );\r\n};\r\n\r\nconst applyScavengingHyenaEffect = (\r\n\tboard: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// const copy = [...board];\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.ScavengingHyenaLegacy_BG_EX1_531) {\r\n\t\t\tmodifyStats(board[i], null, 2, 1, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t} else if (board[i].cardId === CardIds.ScavengingHyenaLegacy_TB_BaconUps_043) {\r\n\t\t\tmodifyStats(board[i], null, 4, 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyEternalKnightEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008_G\r\n\t\t) {\r\n\t\t\tconst multiplier = board[i].cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\r\n\t\t\tmodifyStats(\r\n\t\t\t\tboard[i],\r\n\t\t\t\tnull,\r\n\t\t\t\tmultiplier * eternalKnightAttack,\r\n\t\t\t\tmultiplier * eternalKnightHealth,\r\n\t\t\t\tboard,\r\n\t\t\t\thero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyRotHideGnollEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.RotHideGnoll_BG25_013 || board[i].cardId === CardIds.RotHideGnoll_BG25_013_G) {\r\n\t\t\tconst multiplier = board[i].cardId === CardIds.RotHideGnoll_BG25_013_G ? 2 : 1;\r\n\t\t\tmodifyStats(board[i], null, multiplier * 1, 0, board, hero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyBristlemaneScrapsmithEffect = (\r\n\tboard: BoardEntity[],\r\n\tboardPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707 ||\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707_G\r\n\t\t) {\r\n\t\t\tconst cardsToAdd = Array(CardIds.BristlemaneScrapsmith_BG24_707_G ? 2 : 1).fill(CardIds.BloodGem);\r\n\t\t\taddCardsInHand(boardPlayerEntity, board, cardsToAdd, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, boardPlayerEntity, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyMossOfTheSchlossEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tboard\r\n\t\t.filter(\r\n\t\t\t(e) => e.cardId === CardIds.MossOfTheSchloss_BG30_111 || e.cardId === CardIds.MossOfTheSchloss_BG30_111_G,\r\n\t\t)\r\n\t\t.filter((e) => e.abiityChargesLeft > 0)\r\n\t\t.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, null, deadEntity.maxAttack, deadEntity.maxHealth, board, hero, gameState);\r\n\t\t\tentity.abiityChargesLeft--;\r\n\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\r\n\t\t});\r\n};\r\n\r\nconst applyJunkbotEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.Junkbot_GVG_106) {\r\n\t\t\tmodifyStats(board[i], board[i], 2, 2, board, hero, gameState);\r\n\t\t\t// } else if (board[i].cardId === CardIds.Junkbot_TB_BaconUps_046) {\r\n\t\t\t// \tmodifyStats(board[i], board[i], 4, 4, board, hero, gameState);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyQirajiHarbringerEffect = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// const qiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_BGS_112);\r\n\t// const goldenQiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_TB_BaconUps_303);\r\n\t// // TODO: if reactivated, properly apply buffs one by one, instead of all together\r\n\t// if (qiraji.length + goldenQiraji.length > 0) {\r\n\t// \tconst neighbours = getNeighbours(board, null, deadEntityIndexFromRight);\r\n\t// \tconst buff = 2 * qiraji.length + 4 * goldenQiraji.length;\r\n\t// \tneighbours.forEach((entity) => {\r\n\t// \t\tmodifyStats(entity, null, buff, buff, board, hero, gameState);\r\n\t// \t});\r\n\t// }\r\n};\r\n\r\nexport const rememberDeathrattles = (\r\n\tfish: BoardEntity,\r\n\tinputDeadEntities: readonly BoardEntity[],\r\n\tcardsData: CardsData,\r\n\tallCards: AllCardsService,\r\n\tsharedState: SharedState,\r\n): void => {\r\n\tconst deadEntities = inputDeadEntities.filter((e) => !isFish(e));\r\n\tif (!deadEntities?.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Some infinite loops going on?\r\n\tif (fish.rememberedDeathrattles?.length > 100) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst debug = deadEntities.some((e) => e.cardId === CardIds.CorruptedBristler_BG32_431);\r\n\r\n\tconst validDeathrattles = deadEntities\r\n\t\t.filter((entity) => allCards.getCard(entity.cardId).mechanics?.includes(GameTag[GameTag.DEATHRATTLE]))\r\n\t\t.filter((e) => !DEATHRATTLES_REQUIRE_MEMORY.includes(e.cardId as CardIds) || e.memory)\r\n\t\t.map((entity) => ({\r\n\t\t\tcardId: entity.cardId,\r\n\t\t\trepeats: 1,\r\n\t\t\ttiming: sharedState.currentEntityId++,\r\n\t\t\tmemory: entity.memory,\r\n\t\t\tscriptDataNum1: entity.scriptDataNum1,\r\n\t\t\tscriptDataNum2: entity.scriptDataNum2,\r\n\t\t}));\r\n\tconst validEnchantments = deadEntities\r\n\t\t.map((entity) => entity.enchantments)\r\n\t\t.reduce((a, b) => a.concat(b), [])\r\n\t\t.flatMap((enchantment) => ({\r\n\t\t\tcardId: enchantment.cardId,\r\n\t\t\trepeats: enchantment.repeats ?? 1,\r\n\t\t\ttiming: sharedState.currentEntityId++,\r\n\t\t}))\r\n\t\t.filter((enchantment) => isValidDeathrattleEnchantment(enchantment.cardId));\r\n\t// Multiple fish\r\n\tconst deadEntityRememberedDeathrattles =\r\n\t\tdeadEntities\r\n\t\t\t.filter((e) => !!e.rememberedDeathrattles?.length)\r\n\t\t\t// If the fish has reborn, it will inherit its own Deathrattles, and we don't want that\r\n\t\t\t.filter((e) => e.entityId !== fish.rebornFromEntityId)\r\n\t\t\t.filter((e) => !DEATHRATTLES_REQUIRE_MEMORY.includes(e.cardId as CardIds) || e.memory)\r\n\t\t\t.flatMap((e) => e.rememberedDeathrattles) ?? [];\r\n\tconst newDeathrattles = [...validDeathrattles, ...validEnchantments, ...deadEntityRememberedDeathrattles];\r\n\r\n\tif (newDeathrattles.length > 0) {\r\n\t\t// Order is important - the DR are triggered in the order d the minions have died\r\n\t\t// The \"golden\" part is handled at the card level for the other non-fish cards, like Piloted Whirl-o-Tron\r\n\t\tif (isFish(fish) && isGolden(fish.cardId, allCards)) {\r\n\t\t\t// https://stackoverflow.com/questions/33305152/how-to-duplicate-elements-in-a-js-array\r\n\t\t\tconst doubleDr = newDeathrattles.reduce((res, current) => res.concat([current, current]), []);\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...doubleDr];\r\n\t\t} else {\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tnewDeathrattles.some(\r\n\t\t\t\t(d) =>\r\n\t\t\t\t\td.cardId?.startsWith(CardIds.Leapfrogger_BG21_000) ||\r\n\t\t\t\t\td.cardId?.startsWith(CardIds.TimewarpedLeapfrogger_BG34_Giant_031),\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\t// Not sure exactly why, but if a leapfrogger dies first, then a manasaber,\r\n\t\t\t// when the fish dies, the manasaber's effect (spawning tokens) is triggered first\r\n\t\t\t// https://replays.firestoneapp.com/?reviewId=521733fb-8ba1-4663-9a87-3da58e8a09c8&turn=21&action=3\r\n\t\t\t// HACK: So I will hardcode a rule for now to put leapfrogger effects last\r\n\t\t\tconst leapfroggerDeathrattles = groupLeapfroggerDeathrattles(fish.rememberedDeathrattles);\r\n\t\t\tfish.rememberedDeathrattles = [\r\n\t\t\t\t...fish.rememberedDeathrattles.filter(\r\n\t\t\t\t\t(d) =>\r\n\t\t\t\t\t\t!d.cardId?.startsWith(CardIds.Leapfrogger_BG21_000) &&\r\n\t\t\t\t\t\t!d.cardId?.startsWith(CardIds.TimewarpedLeapfrogger_BG34_Giant_031),\r\n\t\t\t\t),\r\n\t\t\t\t...leapfroggerDeathrattles,\r\n\t\t\t];\r\n\t\t}\r\n\t}\r\n\t// console.debug(\r\n\t// \t'remembered',\r\n\t// \tfish.cardId,\r\n\t// \tfish.entityId,\r\n\t// \tfish.rememberedDeathrattles.map((d) => ({\r\n\t// \t\tcardId: d.cardId,\r\n\t// \t\tname: allCards.getCard(d.cardId)?.name,\r\n\t// \t\t// repeats: d.repeats,\r\n\t// \t\t// timing: d.timing,\r\n\t// \t})),\r\n\t// );\r\n};\r\n\r\nconst removeOldMurkEyeAttack = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// const murkeyes = boardWithDeadEntity.filter(\r\n\t// \t(entity) => entity.cardId === CardIds.OldMurkEyeLegacy || entity.cardId === CardIds.OldMurkEyeVanilla,\r\n\t// );\r\n\t// const goldenMurkeyes = boardWithDeadEntity.filter((entity) => entity.cardId === CardIds.OldMurkEye);\r\n\t// murkeyes.forEach((entity) => {\r\n\t// \tmodifyStats(entity, null, -1, 0, boardWithDeadEntity, hero, gameState);\r\n\t// });\r\n\t// goldenMurkeyes.forEach((entity) => {\r\n\t// \tmodifyStats(entity, null, -2, 0, boardWithDeadEntity, hero, gameState);\r\n\t// });\r\n};\r\n"]}
@@ -520,16 +520,6 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
520
520
  }
521
521
  }
522
522
  break;
523
- case "BG30_MagicItem_917e":
524
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);
525
- break;
526
- case "BG30_MagicItem_411e":
527
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, ["BG20_GEM"], gameState);
528
- break;
529
- case "BG21_000e":
530
- case "BG21_000_Ge":
531
- (0, deathrattle_effects_1.applyLeapFroggerEffect)(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, deadEntityCardId === "BG21_000_Ge", gameState, 1);
532
- break;
533
523
  default:
534
524
  if ((_e = deadEntity.additionalCards) === null || _e === void 0 ? void 0 : _e.includes(deadEntityCardId)) {
535
525
  if (!(0, utils_2.hasMechanic)(gameState.allCards.getCard(deadEntityCardId), reference_data_1.GameTag.DEATHRATTLE)) {
@@ -605,6 +595,16 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
605
595
  case "BG30_MagicItem_952e":
606
596
  spawnedEntities.push(...(0, exports.spawnEntities)("BG26_537", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
607
597
  break;
598
+ case "BG30_MagicItem_917e":
599
+ (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);
600
+ break;
601
+ case "BG30_MagicItem_411e":
602
+ (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, ["BG20_GEM"], gameState);
603
+ break;
604
+ case "BG21_000e":
605
+ case "BG21_000_Ge":
606
+ (0, deathrattle_effects_1.applyLeapFroggerEffect)(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, enchantment.cardId === "BG21_000_Ge", gameState, enchantment.repeats || 1);
607
+ break;
608
608
  default:
609
609
  hasTriggeredThisLoop = false;
610
610
  break;