@firestone-hs/simulate-bgs-battle 1.1.386 → 1.1.387
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/simulation/avenge.js +0 -4
- package/dist/simulation/avenge.js.map +1 -1
- package/dist/simulation/deathrattle-effects.js +4 -0
- package/dist/simulation/deathrattle-effects.js.map +1 -1
- package/dist/simulation/summon-when-space.js +3 -0
- package/dist/simulation/summon-when-space.js.map +1 -1
- package/package.json +1 -1
|
@@ -104,10 +104,6 @@ const handleAvenge = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity,
|
|
|
104
104
|
case "BG28_967_G":
|
|
105
105
|
(0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);
|
|
106
106
|
break;
|
|
107
|
-
case "BG28_900":
|
|
108
|
-
case "BG28_900_G":
|
|
109
|
-
(0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);
|
|
110
|
-
break;
|
|
111
107
|
case "BG21_038":
|
|
112
108
|
case "BG21_038_G":
|
|
113
109
|
const nestmatronToAddQuantity = avenger.cardId === "BG21_038_G" ? 2 : 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avenge.js","sourceRoot":"","sources":["../../src/simulation/avenge.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { pickRandom } from '../services/utils';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgetRandomAliveMinion,\r\n\tgetRandomMinionWithHighestHealth,\r\n\tgrantRandomDivineShield,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\tisMinionGolden,\r\n\tmakeMinionGolden,\r\n} from '../utils';\r\nimport { dealDamageToEnemy, getNeighbours } from './attack';\r\nimport { playBloodGemsOn } from './blood-gems';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { afterStatsUpdate, modifyAttack, modifyHealth } from './stats';\r\n\r\nexport const applyAvengeEffects = (\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\tconst candidatesEntitiesSpawnedFromAvenge: BoardEntity[] = [];\r\n\t// updateAvengeCounters(boardWithDeadEntity, boardWithDeadEntityHero);\r\n\tconst avengers = boardWithDeadEntity\r\n\t\t.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0)\r\n\t\t// Get Tony to be processed first, because of the \"when turned golden, the minion ignores the death for the avenge counter\"\r\n\t\t// behavior\r\n\t\t.sort((a, b) => {\r\n\t\t\tif (a.cardId === CardIds.TonyTwoTusk_BG21_031 || a.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (b.cardId === CardIds.TonyTwoTusk_BG21_031 || b.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t});\r\n\tfor (const avenger of avengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\t// console.log('updating dead entity avenge counter', boardWithDeadEntityHero.avengeCurrent, stringifySimpleCard(deadEntity, allCards));\r\n\tconst heroAvenger = !!boardWithDeadEntityHero.avengeDefault && boardWithDeadEntityHero.avengeCurrent <= 0;\r\n\tif (heroAvenger) {\r\n\t\t// console.log(\r\n\t\t// \t'Hero is an avenger',\r\n\t\t// \tboardWithDeadEntityHero.avengeCurrent,\r\n\t\t// \tboardWithDeadEntityHero.avengeDefault,\r\n\t\t// \tboardWithDeadEntityHero.heroPowerId,\r\n\t\t// );\r\n\t\thandleHeroAvenge(\r\n\t\t\tdeadEntity,\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tconst questRewardAvengers = boardWithDeadEntityHero.questRewardEntities.filter(\r\n\t\t(e) => !!e.avengeDefault && e.avengeCurrent <= 0,\r\n\t);\r\n\tfor (const avenger of questRewardAvengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger as BoardEntity,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tperformEntitySpawns(\r\n\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n};\r\n\r\nexport const updateAvengeCounters = (board: readonly BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity) => {\r\n\tfor (const entity of board) {\r\n\t\tif (!!entity.avengeDefault) {\r\n\t\t\tentity.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\tif (!!boardWithDeadEntityHero.avengeDefault) {\r\n\t\tboardWithDeadEntityHero.avengeCurrent -= 1;\r\n\t}\r\n\r\n\tfor (const reward of boardWithDeadEntityHero.questRewardEntities) {\r\n\t\tif (!!reward.avengeDefault) {\r\n\t\t\treward.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleAvenge = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tavenger: BoardEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// Don't forget to update the avenge data in cards-data\r\n\tswitch (avenger.cardId) {\r\n\t\tcase CardIds.BirdBuddy_BG21_002:\r\n\t\t\taddStatsToBoard(avenger, boardWithDeadEntity, boardWithDeadEntityHero, 1, 1, gameState, 'BEAST');\r\n\t\t\tbreak;\r\n\t\tcase CardIds.BirdBuddy_BG21_002_G:\r\n\t\t\taddStatsToBoard(avenger, boardWithDeadEntity, boardWithDeadEntityHero, 2, 2, gameState, 'BEAST');\r\n\t\t\tbreak;\r\n\t\tcase CardIds.BuddingGreenthumb_BG21_030:\r\n\t\tcase CardIds.BuddingGreenthumb_BG21_030_G:\r\n\t\t\tconst neighbours = getNeighbours(boardWithDeadEntity, avenger);\r\n\t\t\tneighbours.forEach((entity) => {\r\n\t\t\t\tmodifyAttack(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 4 : 2,\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);\r\n\t\t\t\tmodifyHealth(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 2 : 1,\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);\r\n\t\t\t\tafterStatsUpdate(entity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\t// case CardIds.FrostwolfLieutenant:\r\n\t\t// case CardIds.FrostwolfLieutenantBattlegrounds:\r\n\t\t// \taddStatsToBoard(\r\n\t\t// \t\tavenger,\r\n\t\t// \t\tboardWithDeadEntity,\r\n\t\t// \t\tavenger.cardId === CardIds.FrostwolfLieutenantBattlegrounds ? 2 : 1,\r\n\t\t// \t\t0,\r\n\t\t// \t\tallCards,\r\n\t\t// \t\tspectator,\r\n\t\t// \t);\r\n\t\t// \tbreak;\r\n\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\t// Only for Tavern\r\n\t\t\t// addStatsToBoard(\r\n\t\t\t// \tavenger,\r\n\t\t\t// \tboardWithDeadEntity,\r\n\t\t\t// \t0,\r\n\t\t\t// \tavenger.cardId === CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G ? 2 : 1,\r\n\t\t\t// \tgameState.allCards,\r\n\t\t\t// \tgameState.spectator,\r\n\t\t\t// );\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\tconst target1 = grantRandomStats(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t6,\r\n\t\t\t\t6,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tif (!!target1) {\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\tconst target2 = grantRandomStats(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t12,\r\n\t\t\t\t12,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tif (!!target2) {\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget2,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\tconst doomsayerCardsToAddQuantity = avenger.cardId === CardIds.ImpatientDoomsayer_BG21_007_G ? 2 : 1;\r\n\t\t\tconst doomsayerCardsToAdd = [];\r\n\t\t\tfor (let i = 0; i < doomsayerCardsToAddQuantity; i++) {\r\n\t\t\t\tdoomsayerCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\r\n\t\t\t}\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, doomsayerCardsToAdd, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PashmarTheVengeful_BG23_014:\r\n\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.MysticSporebat_BG28_900:\r\n\t\tcase CardIds.MysticSporebat_BG28_900_G:\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.WitchwingNestmatron_BG21_038:\r\n\t\tcase CardIds.WitchwingNestmatron_BG21_038_G:\r\n\t\t\tconst nestmatronToAddQuantity = avenger.cardId === CardIds.WitchwingNestmatron_BG21_038_G ? 2 : 1;\r\n\t\t\tconst nestmatronCardsToAdd = [];\r\n\t\t\tfor (let i = 0; i < nestmatronToAddQuantity; i++) {\r\n\t\t\t\tnestmatronCardsToAdd.push(pickRandom(gameState.cardsData.brannEpicEggSpawns));\r\n\t\t\t}\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, nestmatronCardsToAdd, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Thorncaller_BG20_105:\r\n\t\tcase CardIds.Thorncaller_BG20_105_G:\r\n\t\t\tconst thorncallerToAddQuantity = avenger.cardId === CardIds.Thorncaller_BG20_105_G ? 2 : 1;\r\n\t\t\tconst thorncallerCardsToAdd = Array(thorncallerToAddQuantity).fill(CardIds.BloodGem);\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, thorncallerCardsToAdd, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Sisefin_BG21_009:\r\n\t\tcase CardIds.Sisefin_BG21_009_G:\r\n\t\t\tconst poisonousIterations = avenger.cardId === CardIds.Sisefin_BG21_009_G ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < poisonousIterations; i++) {\r\n\t\t\t\tconst validTargets = boardWithDeadEntity.filter((e) => !e.poisonous && !e.venomous);\r\n\t\t\t\tconst murloc = getRandomAliveMinion(validTargets, Race.MURLOC, gameState.allCards);\r\n\t\t\t\tif (murloc) {\r\n\t\t\t\t\tmurloc.venomous = true;\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tmurloc,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\t// This can be null if the avenge triggers when the last enemy minion dies as well\r\n\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tavenger,\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t);\r\n\t\t\tdealDamageToEnemy(\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tavenger,\r\n\t\t\t\t5,\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\tbreak;\r\n\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\t5,\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);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\tconst nonGoldenMinions = boardWithDeadEntity\r\n\t\t\t\t.filter((e) => e.entityId !== avenger.entityId)\r\n\t\t\t\t.filter((e) => {\r\n\t\t\t\t\tconst ref = gameState.allCards.getCard(e.cardId);\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t!!ref.battlegroundsPremiumDbfId &&\r\n\t\t\t\t\t\t!!gameState.allCards.getCardFromDbfId(ref.battlegroundsPremiumDbfId).id\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\tconst pirate = getRandomAliveMinion(nonGoldenMinions, Race.PIRATE, gameState.allCards);\r\n\t\t\tif (pirate) {\r\n\t\t\t\tmakeMinionGolden(pirate, avenger, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\t\tconst nonGoldenMinions = boardWithDeadEntity.filter((e) => !isMinionGolden(e, gameState.allCards));\r\n\t\t\t\tconst pirate = getRandomAliveMinion(nonGoldenMinions, Race.PIRATE, gameState.allCards);\r\n\t\t\t\tif (pirate) {\r\n\t\t\t\t\tmakeMinionGolden(pirate, avenger, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.GhoulOfTheFeast_BG25_002:\r\n\t\tcase CardIds.GhoulOfTheFeast_BG25_002_G:\r\n\t\t\tconst ghoulMultiplier = avenger.cardId === CardIds.GhoulOfTheFeast_BG25_002_G ? 2 : 1;\r\n\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tghoulMultiplier * 3,\r\n\t\t\t\t0,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\tconst bristlebachMultiplier = avenger.cardId === CardIds.Bristlebach_BG26_157_G ? 4 : 2;\r\n\t\t\tfor (let i = 0; i < bristlebachMultiplier; i++) {\r\n\t\t\t\tfor (const entity of boardWithDeadEntity) {\r\n\t\t\t\t\tif (hasCorrectTribe(entity, Race.QUILBOAR, gameState.allCards)) {\r\n\t\t\t\t\t\tplayBloodGemsOn(entity, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\tconst abominationMultiplier = avenger.cardId === CardIds.HungeringAbomination_BG25_014_G ? 2 : 1;\r\n\t\t\tmodifyAttack(avenger, abominationMultiplier * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tmodifyHealth(avenger, abominationMultiplier * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(avenger, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tavenger,\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.ShadowyConstruct_BG25_HERO_103_Buddy:\r\n\t\tcase CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G:\r\n\t\t\tconst neighboursShadowy = getNeighbours(boardWithDeadEntity, null, deadEntityIndexFromRight);\r\n\t\t\tconst multiplierShadowy = avenger.cardId === CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G ? 2 : 1;\r\n\t\t\tneighboursShadowy.forEach((neighbour) => {\r\n\t\t\t\tmodifyAttack(neighbour, multiplierShadowy * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tmodifyHealth(neighbour, multiplierShadowy * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(neighbour, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\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\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.IceSickle:\r\n\t\t\tgrantRandomStats(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntityHero.hand,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t4,\r\n\t\t\t\t0,\r\n\t\t\t\tnull,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\tconst highestHealthMinion = [...otherBoard].sort((a, b) => b.health - a.health)[0];\r\n\t\t\tdealDamageToEnemy(\r\n\t\t\t\thighestHealthMinion,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tavenger,\r\n\t\t\t\t10,\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\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tavenger,\r\n\t\t\t\thighestHealthMinion,\r\n\t\t\t\totherBoard,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\tavenger.reborn = true;\r\n\t\t\tavenger.taunt = true;\r\n\t\t\tbreak;\r\n\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\tavenger.reborn = true;\r\n\t\t\tbreak;\r\n\t\tcase CardIds.ChampionOfThePrimus_BG27_029:\r\n\t\tcase CardIds.ChampionOfThePrimus_BG27_029_G:\r\n\t\t\tconst championPrimusStat = avenger.cardId === CardIds.ChampionOfThePrimus_BG27_029_G ? 2 : 1;\r\n\t\t\tboardWithDeadEntityHero.globalInfo.UndeadAttackBonus += championPrimusStat;\r\n\t\t\taddStatsToBoard(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tchampionPrimusStat,\r\n\t\t\t\t0,\r\n\t\t\t\tgameState,\r\n\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\tconst phaerixLoops = avenger.cardId === CardIds.PhaerixWrathOfTheSun_BG28_403_G ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < phaerixLoops; i++) {\r\n\t\t\t\tgrantRandomDivineShield(avenger, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\tconst AugmentedLaborerLoops = avenger.cardId === CardIds.AugmentedLaborer_BG28_740_G ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < AugmentedLaborerLoops; i++) {\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tconst tumblingDisasterEntity = boardWithDeadEntityHero.questRewardEntities?.find(\r\n\t\t\t\t(e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505,\r\n\t\t\t);\r\n\t\t\tif (tumblingDisasterEntity) {\r\n\t\t\t\ttumblingDisasterEntity.scriptDataNum1++;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\tavenger.scriptDataNum1++;\r\n\t\t\tbreak;\r\n\t}\r\n\tavenger.avengeCurrent += avenger.avengeDefault;\r\n};\r\n\r\nconst handleHeroAvenge = (\r\n\tdeadEntity: BoardEntity,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\r\n\t// Not affected by Khadgar\r\n\tswitch (boardWithDeadEntityHero?.heroPowerId) {\r\n\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tCardIds.Onyxia_OnyxianWhelpToken,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\tgameState.spectator,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\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\tcase CardIds.VanndarStormpike_LeadTheStormpikes:\r\n\t\t\tboardWithDeadEntity\r\n\t\t\t\t// .filter((entity) => !entity.definitelyDead && entity.health > 0)\r\n\t\t\t\t.forEach((entity) => {\r\n\t\t\t\t\tmodifyHealth(entity, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\tafterStatsUpdate(entity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Drekthar_LeadTheFrostwolves:\r\n\t\t\tboardWithDeadEntity.forEach((entity) => {\r\n\t\t\t\tmodifyAttack(entity, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(entity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n\tboardWithDeadEntityHero.avengeCurrent += boardWithDeadEntityHero.avengeDefault;\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"avenge.js","sourceRoot":"","sources":["../../src/simulation/avenge.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { pickRandom } from '../services/utils';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgetRandomAliveMinion,\r\n\tgetRandomMinionWithHighestHealth,\r\n\tgrantRandomDivineShield,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\tisMinionGolden,\r\n\tmakeMinionGolden,\r\n} from '../utils';\r\nimport { dealDamageToEnemy, getNeighbours } from './attack';\r\nimport { playBloodGemsOn } from './blood-gems';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { afterStatsUpdate, modifyAttack, modifyHealth } from './stats';\r\n\r\nexport const applyAvengeEffects = (\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\tconst candidatesEntitiesSpawnedFromAvenge: BoardEntity[] = [];\r\n\t// updateAvengeCounters(boardWithDeadEntity, boardWithDeadEntityHero);\r\n\tconst avengers = boardWithDeadEntity\r\n\t\t.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0)\r\n\t\t// Get Tony to be processed first, because of the \"when turned golden, the minion ignores the death for the avenge counter\"\r\n\t\t// behavior\r\n\t\t.sort((a, b) => {\r\n\t\t\tif (a.cardId === CardIds.TonyTwoTusk_BG21_031 || a.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif (b.cardId === CardIds.TonyTwoTusk_BG21_031 || b.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t});\r\n\tfor (const avenger of avengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\t// console.log('updating dead entity avenge counter', boardWithDeadEntityHero.avengeCurrent, stringifySimpleCard(deadEntity, allCards));\r\n\tconst heroAvenger = !!boardWithDeadEntityHero.avengeDefault && boardWithDeadEntityHero.avengeCurrent <= 0;\r\n\tif (heroAvenger) {\r\n\t\t// console.log(\r\n\t\t// \t'Hero is an avenger',\r\n\t\t// \tboardWithDeadEntityHero.avengeCurrent,\r\n\t\t// \tboardWithDeadEntityHero.avengeDefault,\r\n\t\t// \tboardWithDeadEntityHero.heroPowerId,\r\n\t\t// );\r\n\t\thandleHeroAvenge(\r\n\t\t\tdeadEntity,\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tconst questRewardAvengers = boardWithDeadEntityHero.questRewardEntities.filter(\r\n\t\t(e) => !!e.avengeDefault && e.avengeCurrent <= 0,\r\n\t);\r\n\tfor (const avenger of questRewardAvengers) {\r\n\t\thandleAvenge(\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tavenger as BoardEntity,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\r\n\tperformEntitySpawns(\r\n\t\tcandidatesEntitiesSpawnedFromAvenge,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n};\r\n\r\nexport const updateAvengeCounters = (board: readonly BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity) => {\r\n\tfor (const entity of board) {\r\n\t\tif (!!entity.avengeDefault) {\r\n\t\t\tentity.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n\tif (!!boardWithDeadEntityHero.avengeDefault) {\r\n\t\tboardWithDeadEntityHero.avengeCurrent -= 1;\r\n\t}\r\n\r\n\tfor (const reward of boardWithDeadEntityHero.questRewardEntities) {\r\n\t\tif (!!reward.avengeDefault) {\r\n\t\t\treward.avengeCurrent -= 1;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleAvenge = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tavenger: BoardEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// Don't forget to update the avenge data in cards-data\r\n\tswitch (avenger.cardId) {\r\n\t\tcase CardIds.BirdBuddy_BG21_002:\r\n\t\t\taddStatsToBoard(avenger, boardWithDeadEntity, boardWithDeadEntityHero, 1, 1, gameState, 'BEAST');\r\n\t\t\tbreak;\r\n\t\tcase CardIds.BirdBuddy_BG21_002_G:\r\n\t\t\taddStatsToBoard(avenger, boardWithDeadEntity, boardWithDeadEntityHero, 2, 2, gameState, 'BEAST');\r\n\t\t\tbreak;\r\n\t\tcase CardIds.BuddingGreenthumb_BG21_030:\r\n\t\tcase CardIds.BuddingGreenthumb_BG21_030_G:\r\n\t\t\tconst neighbours = getNeighbours(boardWithDeadEntity, avenger);\r\n\t\t\tneighbours.forEach((entity) => {\r\n\t\t\t\tmodifyAttack(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 4 : 2,\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);\r\n\t\t\t\tmodifyHealth(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tavenger.cardId === CardIds.BuddingGreenthumb_BG21_030_G ? 2 : 1,\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);\r\n\t\t\t\tafterStatsUpdate(entity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\t// case CardIds.FrostwolfLieutenant:\r\n\t\t// case CardIds.FrostwolfLieutenantBattlegrounds:\r\n\t\t// \taddStatsToBoard(\r\n\t\t// \t\tavenger,\r\n\t\t// \t\tboardWithDeadEntity,\r\n\t\t// \t\tavenger.cardId === CardIds.FrostwolfLieutenantBattlegrounds ? 2 : 1,\r\n\t\t// \t\t0,\r\n\t\t// \t\tallCards,\r\n\t\t// \t\tspectator,\r\n\t\t// \t);\r\n\t\t// \tbreak;\r\n\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\t// Only for Tavern\r\n\t\t\t// addStatsToBoard(\r\n\t\t\t// \tavenger,\r\n\t\t\t// \tboardWithDeadEntity,\r\n\t\t\t// \t0,\r\n\t\t\t// \tavenger.cardId === CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G ? 2 : 1,\r\n\t\t\t// \tgameState.allCards,\r\n\t\t\t// \tgameState.spectator,\r\n\t\t\t// );\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\tconst target1 = grantRandomStats(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t6,\r\n\t\t\t\t6,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tif (!!target1) {\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\tconst target2 = grantRandomStats(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t12,\r\n\t\t\t\t12,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tif (!!target2) {\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget2,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\tconst doomsayerCardsToAddQuantity = avenger.cardId === CardIds.ImpatientDoomsayer_BG21_007_G ? 2 : 1;\r\n\t\t\tconst doomsayerCardsToAdd = [];\r\n\t\t\tfor (let i = 0; i < doomsayerCardsToAddQuantity; i++) {\r\n\t\t\t\tdoomsayerCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\r\n\t\t\t}\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, doomsayerCardsToAdd, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PashmarTheVengeful_BG23_014:\r\n\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.WitchwingNestmatron_BG21_038:\r\n\t\tcase CardIds.WitchwingNestmatron_BG21_038_G:\r\n\t\t\tconst nestmatronToAddQuantity = avenger.cardId === CardIds.WitchwingNestmatron_BG21_038_G ? 2 : 1;\r\n\t\t\tconst nestmatronCardsToAdd = [];\r\n\t\t\tfor (let i = 0; i < nestmatronToAddQuantity; i++) {\r\n\t\t\t\tnestmatronCardsToAdd.push(pickRandom(gameState.cardsData.brannEpicEggSpawns));\r\n\t\t\t}\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, nestmatronCardsToAdd, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Thorncaller_BG20_105:\r\n\t\tcase CardIds.Thorncaller_BG20_105_G:\r\n\t\t\tconst thorncallerToAddQuantity = avenger.cardId === CardIds.Thorncaller_BG20_105_G ? 2 : 1;\r\n\t\t\tconst thorncallerCardsToAdd = Array(thorncallerToAddQuantity).fill(CardIds.BloodGem);\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, thorncallerCardsToAdd, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Sisefin_BG21_009:\r\n\t\tcase CardIds.Sisefin_BG21_009_G:\r\n\t\t\tconst poisonousIterations = avenger.cardId === CardIds.Sisefin_BG21_009_G ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < poisonousIterations; i++) {\r\n\t\t\t\tconst validTargets = boardWithDeadEntity.filter((e) => !e.poisonous && !e.venomous);\r\n\t\t\t\tconst murloc = getRandomAliveMinion(validTargets, Race.MURLOC, gameState.allCards);\r\n\t\t\t\tif (murloc) {\r\n\t\t\t\t\tmurloc.venomous = true;\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\tmurloc,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\t// This can be null if the avenge triggers when the last enemy minion dies as well\r\n\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tavenger,\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t);\r\n\t\t\tdealDamageToEnemy(\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tavenger,\r\n\t\t\t\t5,\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\tbreak;\r\n\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tavenger,\r\n\t\t\t\t\t5,\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);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\tconst nonGoldenMinions = boardWithDeadEntity\r\n\t\t\t\t.filter((e) => e.entityId !== avenger.entityId)\r\n\t\t\t\t.filter((e) => {\r\n\t\t\t\t\tconst ref = gameState.allCards.getCard(e.cardId);\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t!!ref.battlegroundsPremiumDbfId &&\r\n\t\t\t\t\t\t!!gameState.allCards.getCardFromDbfId(ref.battlegroundsPremiumDbfId).id\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\tconst pirate = getRandomAliveMinion(nonGoldenMinions, Race.PIRATE, gameState.allCards);\r\n\t\t\tif (pirate) {\r\n\t\t\t\tmakeMinionGolden(pirate, avenger, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\tfor (let i = 0; i < 2; i++) {\r\n\t\t\t\tconst nonGoldenMinions = boardWithDeadEntity.filter((e) => !isMinionGolden(e, gameState.allCards));\r\n\t\t\t\tconst pirate = getRandomAliveMinion(nonGoldenMinions, Race.PIRATE, gameState.allCards);\r\n\t\t\t\tif (pirate) {\r\n\t\t\t\t\tmakeMinionGolden(pirate, avenger, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.GhoulOfTheFeast_BG25_002:\r\n\t\tcase CardIds.GhoulOfTheFeast_BG25_002_G:\r\n\t\t\tconst ghoulMultiplier = avenger.cardId === CardIds.GhoulOfTheFeast_BG25_002_G ? 2 : 1;\r\n\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tghoulMultiplier * 3,\r\n\t\t\t\t0,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\tconst bristlebachMultiplier = avenger.cardId === CardIds.Bristlebach_BG26_157_G ? 4 : 2;\r\n\t\t\tfor (let i = 0; i < bristlebachMultiplier; i++) {\r\n\t\t\t\tfor (const entity of boardWithDeadEntity) {\r\n\t\t\t\t\tif (hasCorrectTribe(entity, Race.QUILBOAR, gameState.allCards)) {\r\n\t\t\t\t\t\tplayBloodGemsOn(entity, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tavenger,\r\n\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\tconst abominationMultiplier = avenger.cardId === CardIds.HungeringAbomination_BG25_014_G ? 2 : 1;\r\n\t\t\tmodifyAttack(avenger, abominationMultiplier * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tmodifyHealth(avenger, abominationMultiplier * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(avenger, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tavenger,\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.ShadowyConstruct_BG25_HERO_103_Buddy:\r\n\t\tcase CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G:\r\n\t\t\tconst neighboursShadowy = getNeighbours(boardWithDeadEntity, null, deadEntityIndexFromRight);\r\n\t\t\tconst multiplierShadowy = avenger.cardId === CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G ? 2 : 1;\r\n\t\t\tneighboursShadowy.forEach((neighbour) => {\r\n\t\t\t\tmodifyAttack(neighbour, multiplierShadowy * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tmodifyHealth(neighbour, multiplierShadowy * 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(neighbour, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tavenger,\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\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.IceSickle:\r\n\t\t\tgrantRandomStats(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntityHero.hand,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t4,\r\n\t\t\t\t0,\r\n\t\t\t\tnull,\r\n\t\t\t\ttrue,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\tconst highestHealthMinion = [...otherBoard].sort((a, b) => b.health - a.health)[0];\r\n\t\t\tdealDamageToEnemy(\r\n\t\t\t\thighestHealthMinion,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tavenger,\r\n\t\t\t\t10,\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\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tavenger,\r\n\t\t\t\thighestHealthMinion,\r\n\t\t\t\totherBoard,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\tavenger.reborn = true;\r\n\t\t\tavenger.taunt = true;\r\n\t\t\tbreak;\r\n\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\tavenger.reborn = true;\r\n\t\t\tbreak;\r\n\t\tcase CardIds.ChampionOfThePrimus_BG27_029:\r\n\t\tcase CardIds.ChampionOfThePrimus_BG27_029_G:\r\n\t\t\tconst championPrimusStat = avenger.cardId === CardIds.ChampionOfThePrimus_BG27_029_G ? 2 : 1;\r\n\t\t\tboardWithDeadEntityHero.globalInfo.UndeadAttackBonus += championPrimusStat;\r\n\t\t\taddStatsToBoard(\r\n\t\t\t\tavenger,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tchampionPrimusStat,\r\n\t\t\t\t0,\r\n\t\t\t\tgameState,\r\n\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\tconst phaerixLoops = avenger.cardId === CardIds.PhaerixWrathOfTheSun_BG28_403_G ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < phaerixLoops; i++) {\r\n\t\t\t\tgrantRandomDivineShield(avenger, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\tconst AugmentedLaborerLoops = avenger.cardId === CardIds.AugmentedLaborer_BG28_740_G ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < AugmentedLaborerLoops; i++) {\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tconst tumblingDisasterEntity = boardWithDeadEntityHero.questRewardEntities?.find(\r\n\t\t\t\t(e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505,\r\n\t\t\t);\r\n\t\t\tif (tumblingDisasterEntity) {\r\n\t\t\t\ttumblingDisasterEntity.scriptDataNum1++;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\tavenger.scriptDataNum1++;\r\n\t\t\tbreak;\r\n\t}\r\n\tavenger.avengeCurrent += avenger.avengeDefault;\r\n};\r\n\r\nconst handleHeroAvenge = (\r\n\tdeadEntity: BoardEntity,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\r\n\t// Not affected by Khadgar\r\n\tswitch (boardWithDeadEntityHero?.heroPowerId) {\r\n\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tCardIds.Onyxia_OnyxianWhelpToken,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\tgameState.spectator,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\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\tcase CardIds.VanndarStormpike_LeadTheStormpikes:\r\n\t\t\tboardWithDeadEntity\r\n\t\t\t\t// .filter((entity) => !entity.definitelyDead && entity.health > 0)\r\n\t\t\t\t.forEach((entity) => {\r\n\t\t\t\t\tmodifyHealth(entity, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\tafterStatsUpdate(entity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Drekthar_LeadTheFrostwolves:\r\n\t\t\tboardWithDeadEntity.forEach((entity) => {\r\n\t\t\t\tmodifyAttack(entity, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(entity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t}\r\n\tboardWithDeadEntityHero.avengeCurrent += boardWithDeadEntityHero.avengeDefault;\r\n};\r\n"]}
|
|
@@ -313,6 +313,10 @@ const handleDeathrattleEffects = (boardWithDeadEntity, boardWithDeadEntityHero,
|
|
|
313
313
|
(0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
|
|
314
314
|
}
|
|
315
315
|
break;
|
|
316
|
+
case "BG28_900":
|
|
317
|
+
case "BG28_900_G":
|
|
318
|
+
(0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);
|
|
319
|
+
break;
|
|
316
320
|
case "TB_BaconShop_HERO_41_Buddy":
|
|
317
321
|
case "TB_BaconShop_HERO_41_Buddy_G":
|
|
318
322
|
for (let i = 0; i < multiplier; i++) {
|
|
@@ -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, CardIds, 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 { groupByFunction, pickMultipleRandomDifferent, pickRandom, pickRandomLowestHealth } from '../services/utils';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgrantRandomAttack,\r\n\tgrantRandomDivineShield,\r\n\tgrantRandomHealth,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\tisCorrectTribe,\r\n\tisFish,\r\n\tisGolden,\r\n\tisPilotedWhirlOTron,\r\n\tmakeMinionGolden,\r\n\tupdateDivineShield,\r\n} from '../utils';\r\nimport { dealDamageToEnemy, dealDamageToRandomEnemy, findNearestEnemies, getNeighbours } from './attack';\r\nimport { triggerBattlecry } from './battlecries';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { DeathrattleTriggeredInput, onDeathrattleTriggered } from './deathrattle-on-trigger';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { SharedState } from './shared-state';\r\nimport { Spectator } from './spectator/spectator';\r\nimport { afterStatsUpdate, modifyAttack, modifyHealth } from './stats';\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 rivendare =\r\n\t\t!!board.find(\r\n\t\t\t(entity) =>\r\n\t\t\t\tentity.cardId === CardIds.BaronRivendare_BG_FP1_031 ||\r\n\t\t\t\tentity.cardId === CardIds.MoiraBronzebeard_BG27_518,\r\n\t\t) || boardHero.secrets?.some((e) => e.cardId === CardIds.TitusTribute_BG28_843);\r\n\tconst goldenRivendare = board.find(\r\n\t\t(entity) =>\r\n\t\t\tentity.cardId === CardIds.BaronRivendare_TB_BaconUps_055 ||\r\n\t\t\tentity.cardId === CardIds.MoiraBronzebeard_BG27_518_G,\r\n\t);\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 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 *\r\n\t\t((goldenRivendare ? 3 : rivendare ? 2 : 1) + titus + 2 * goldenTitus + tombs + echoesOfArgus);\r\n\treturn multiplier;\r\n};\r\n\r\n// export const handleDeathrattles = (\r\n// \tboardWithKilledMinion: BoardEntity[],\r\n// \tboardWithKilledMinionHero: BgsPlayerEntity,\r\n// \tdeadEntity: BoardEntity,\r\n// \tdeadMinionIndexFromRight2: number,\r\n// \topponentBoard: BoardEntity[],\r\n// \topponentBoardHero: BgsPlayerEntity,\r\n// \tentitiesDeadThisAttack: readonly BoardEntity[],\r\n// \tgameState: InternalGameState,\r\n// ) => {};\r\n\r\nexport const handleDeathrattleEffects = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = computeDeathrattleMultiplier(\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tgameState.sharedState,\r\n\t);\r\n\tconst deathrattleTriggeredInput: DeathrattleTriggeredInput = {\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t};\r\n\r\n\t// We do it on a case by case basis so that we deal all the damage in one go for instance\r\n\t// and avoid proccing deathrattle spawns between the times the damage triggers\r\n\tconst cardIds = [deadEntity.cardId, ...(deadEntity.additionalCards ?? [])];\r\n\t// TODO put the muliplier look here, and handle onDeathrattleTriggered like is done for\r\n\t// deathrattle-spawns\r\n\tfor (const deadEntityCardId of cardIds) {\r\n\t\tswitch (deadEntityCardId) {\r\n\t\t\tcase CardIds.RylakMetalhead_BG26_801:\r\n\t\t\tcase CardIds.RylakMetalhead_BG26_801_G:\r\n\t\t\t\tconst rylakMutltiplier = deadEntityCardId === CardIds.RylakMetalhead_BG26_801_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst neighbours = getNeighbours(boardWithDeadEntity, deadEntity, deadEntityIndexFromRight);\r\n\t\t\t\t\tfor (const neighbour of neighbours) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tneighbour,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tfor (let j = 0; j < rylakMutltiplier; j++) {\r\n\t\t\t\t\t\t\ttriggerBattlecry(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tneighbour,\r\n\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SelflessHero_BG_OG_221:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomDivineShield(deadEntity, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SelflessHero_TB_BaconUps_014:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomDivineShield(deadEntity, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t\t\tgrantRandomDivineShield(deadEntity, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.OperaticBelcher_BG26_888:\r\n\t\t\tcase CardIds.OperaticBelcher_BG26_888_G:\r\n\t\t\t\tconst belcherMultiplier = deadEntityCardId === CardIds.OperaticBelcher_BG26_888_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < belcherMultiplier; j++) {\r\n\t\t\t\t\t\tconst possibleBelcherTargets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t.filter((entity) => !entity.venomous)\r\n\t\t\t\t\t\t\t.filter((entity) => !entity.poisonous)\r\n\t\t\t\t\t\t\t.filter((entity) => entity.health > 0 && !entity.definitelyDead)\r\n\t\t\t\t\t\t\t.filter((entity) => hasCorrectTribe(entity, Race.MURLOC, gameState.allCards));\r\n\t\t\t\t\t\tif (possibleBelcherTargets.length > 0) {\r\n\t\t\t\t\t\t\tconst chosen = pickRandom(possibleBelcherTargets);\r\n\t\t\t\t\t\t\tchosen.venomous = true;\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tchosen,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy:\r\n\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G:\r\n\t\t\t\tconst iterations = deadEntityCardId === CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < iterations; j++) {\r\n\t\t\t\t\t\tlet validTargets = boardWithDeadEntity.filter((entity) => !entity.divineShield);\r\n\t\t\t\t\t\tif (!validTargets?.length) {\r\n\t\t\t\t\t\t\tvalidTargets = boardWithDeadEntity.filter((entity) => !entity.taunt);\r\n\t\t\t\t\t\t\tif (!validTargets?.length) {\r\n\t\t\t\t\t\t\t\tvalidTargets = boardWithDeadEntity.filter((entity) => !entity.windfury);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\tif (!target.divineShield) {\r\n\t\t\t\t\t\t\t\tupdateDivineShield(target, boardWithDeadEntity, true, gameState.allCards);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttarget.taunt = true;\r\n\t\t\t\t\t\t\ttarget.windfury = true;\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.NadinaTheRed_BGS_040:\r\n\t\t\tcase CardIds.NadinaTheRed_TB_BaconUps_154:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst nadinaMultiplier = deadEntityCardId === CardIds.NadinaTheRed_TB_BaconUps_154 ? 6 : 3;\r\n\t\t\t\t\tfor (let j = 0; j < nadinaMultiplier; j++) {\r\n\t\t\t\t\t\tconst validTargets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t.filter((e) => hasCorrectTribe(e, Race.DRAGON, gameState.allCards))\r\n\t\t\t\t\t\t\t.filter((entity) => !entity.divineShield);\r\n\t\t\t\t\t\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\tupdateDivineShield(target, boardWithDeadEntity, true, gameState.allCards);\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SpawnOfNzoth_BG_OG_256:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 1, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SpawnOfNzoth_TB_BaconUps_025:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 2, 2, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GoldrinnTheGreatWolf_BGS_018:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 3, 2, gameState, 'BEAST');\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffAtk += 3;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffHealth += 2;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 6, 4, gameState, 'BEAST');\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffAtk += 6;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffHealth += 4;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.KingBagurgle_BGS_030:\r\n\t\t\t// \taddStatsToBoard(\r\n\t\t\t// \t\tdeadEntity,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tmultiplier * 2,\r\n\t\t\t// \t\tmultiplier * 3,\r\n\t\t\t// \t\tgameState.allCards,\r\n\t\t\t// \t\tgameState.spectator,\r\n\t\t\t// \t\t'MURLOC',\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\t// case CardIds.KingBagurgle_TB_BaconUps_100:\r\n\t\t\t// \taddStatsToBoard(\r\n\t\t\t// \t\tdeadEntity,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tmultiplier * 4,\r\n\t\t\t// \t\tmultiplier * 6,\r\n\t\t\t// \t\tgameState.allCards,\r\n\t\t\t// \t\tgameState.spectator,\r\n\t\t\t// \t\t'MURLOC',\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.FiendishServant_YOD_026:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.FiendishServant_TB_BaconUps_112:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ImpulsiveTrickster_BG21_006:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ImpulsiveTrickster_BG21_006_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Leapfrogger_BG21_000:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLeapFroggerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, false, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Leapfrogger_BG21_000_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLeapFroggerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, true, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t6,\r\n\t\t\t\t\t\t6,\r\n\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t12,\r\n\t\t\t\t\t\t12,\r\n\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ScarletSkull_BG25_022:\r\n\t\t\tcase CardIds.ScarletSkull_BG25_022_G:\r\n\t\t\t\tconst scarletMultiplier = deadEntityCardId === CardIds.ScarletSkull_BG25_022_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tscarletMultiplier * 1,\r\n\t\t\t\t\t\tscarletMultiplier * 2,\r\n\t\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.AnubarakNerubianKing_BG25_007:\r\n\t\t\tcase CardIds.AnubarakNerubianKing_BG25_007_G:\r\n\t\t\t\tconst anubarakMultiplier = deadEntityCardId === CardIds.AnubarakNerubianKing_BG25_007_G ? 2 : 1;\r\n\t\t\t\tconst attackBonus = anubarakMultiplier * 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.UndeadAttackBonus += attackBonus;\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tattackBonus,\r\n\t\t\t\t\t\t0,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.ElementiumSquirrelBombBattlegrounds_TB_BaconShop_HERO_17_Buddy:\r\n\t\t\t// \t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t// \t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t// \tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t// \t\tconst numberOfDeadMechsThisCombat = sharedState.deaths\r\n\t\t\t// \t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t// \t\t\t// eslint-disable-next-line prettier/prettier\r\n\t\t\t// \t\t\t.filter((entity) => isCorrectTribe(allCards.getCard(entity.cardId)?.races, Race.MECH)).length;\r\n\t\t\t// \t\tfor (let j = 0; j < numberOfDeadMechsThisCombat + 1; j++) {\r\n\t\t\t// \t\t\tdealDamageToRandomEnemy(\r\n\t\t\t// \t\t\t\totherBoard,\r\n\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t// \t\t\t\tdeadEntity,\r\n\t\t\t// \t\t\t\t3,\r\n\t\t\t// \t\t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\tallCards,\r\n\t\t\t// \t\t\t\tcardsData,\r\n\t\t\t// \t\t\t\tsharedState,\r\n\t\t\t// \t\t\t\tspectator,\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t}\r\n\t\t\t// \t}\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy:\r\n\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst squirrelDamage =\r\n\t\t\t\t\tdeadEntity.cardId === CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G ? 4 : 2;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst numberOfDeadMechsThisCombat = gameState.sharedState.deaths\r\n\t\t\t\t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t\t\t\t// eslint-disable-next-line prettier/prettier\r\n\t\t\t\t\t\t.filter((entity) =>\r\n\t\t\t\t\t\t\tisCorrectTribe(gameState.allCards.getCard(entity.cardId)?.races, Race.MECH),\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tfor (let j = 0; j < numberOfDeadMechsThisCombat + 1; j++) {\r\n\t\t\t\t\t\tdealDamageToRandomEnemy(\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tsquirrelDamage,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.KaboomBot_BG_BOT_606:\r\n\t\t\tcase CardIds.KaboomBot_TB_BaconUps_028:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst kaboomLoops = deadEntity.cardId === CardIds.KaboomBot_TB_BaconUps_028 ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < kaboomLoops; j++) {\r\n\t\t\t\t\t\tdealDamageToRandomEnemy(\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t4,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LighterFighter_BG28_968:\r\n\t\t\tcase CardIds.LighterFighter_BG28_968_G:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst lighterFighterDamage = deadEntity.cardId === CardIds.LighterFighter_BG28_968_G ? 8 : 4;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < 2; j++) {\r\n\t\t\t\t\t\tconst target = pickRandomLowestHealth(otherBoard);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tlighterFighterDamage,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.DrBoombox_BG25_165:\r\n\t\t\tcase CardIds.DrBoombox_BG25_165_G:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst boomboxDamage = deadEntity.cardId === CardIds.DrBoombox_BG25_165_G ? 14 : 7;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\t// The nearest enemies use the full board info\r\n\t\t\t\t\t// const boardIncludingDeadEntityAtCorrectIndex = boardWithDeadEntity.splice(\r\n\t\t\t\t\t// \tdeadEntityIndexFromRight,\r\n\t\t\t\t\t// \t0,\r\n\t\t\t\t\t// \tdeadEntity,\r\n\t\t\t\t\t// );\r\n\t\t\t\t\tconst targets = findNearestEnemies(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tdeadEntityIndexFromRight,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t2,\r\n\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t);\r\n\t\t\t\t\ttargets.forEach((target) => {\r\n\t\t\t\t\t\t// console.debug('dealing damage to', stringifySimpleCard(target));\r\n\t\t\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tboomboxDamage,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.UnstableGhoul_BG_FP1_024:\r\n\t\t\tcase CardIds.UnstableGhoul_TB_BaconUps_118:\r\n\t\t\t\tconst damage = deadEntityCardId === CardIds.UnstableGhoul_TB_BaconUps_118 ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tdealDamageToAllMinions(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdamage,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TunnelBlaster_BG_DAL_775:\r\n\t\t\tcase CardIds.TunnelBlaster_BG_DAL_775_G:\r\n\t\t\t\tconst loops = deadEntityCardId === CardIds.TunnelBlaster_BG_DAL_775_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < loops; j++) {\r\n\t\t\t\t\t\tdealDamageToAllMinions(\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t3,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LeeroyTheReckless_BG23_318:\r\n\t\t\tcase CardIds.LeeroyTheReckless_BG23_318_G:\r\n\t\t\t\tif (deadEntity.lastAffectedByEntity) {\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity.definitelyDead = true;\r\n\t\t\t\t}\r\n\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RadioStar_BG25_399:\r\n\t\t\tcase CardIds.RadioStar_BG25_399_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst radioQuantity = deadEntityCardId === CardIds.RadioStar_BG25_399_G ? 2 : 1;\r\n\t\t\t\t\tconst radioEntities = Array(radioQuantity).fill(deadEntity.lastAffectedByEntity);\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, radioEntities, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy:\r\n\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst numberToGild = deadEntityCardId === CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G ? 2 : 1;\r\n\t\t\t\t\tconst targetBoard = boardWithDeadEntity\r\n\t\t\t\t\t\t.filter((e) => !e.definitelyDead && e.health > 0)\r\n\t\t\t\t\t\t.filter((e) => !gameState.cardsData.isGolden(gameState.allCards.getCard(e.cardId)));\r\n\t\t\t\t\tfor (let i = 0; i < Math.min(numberToGild, boardWithDeadEntity.length); i++) {\r\n\t\t\t\t\t\tconst rightMostMinion = targetBoard[targetBoard.length - 1 - i];\r\n\t\t\t\t\t\tif (rightMostMinion) {\r\n\t\t\t\t\t\t\tmakeMinionGolden(\r\n\t\t\t\t\t\t\t\trightMostMinion,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Scourfin_BG26_360:\r\n\t\t\tcase CardIds.Scourfin_BG26_360_G:\r\n\t\t\t\t// When it's the opponent, the game state already contains all the buffs\r\n\t\t\t\tif (deadEntity?.friendly) {\r\n\t\t\t\t\tconst statsScourfin = deadEntityCardId === CardIds.Scourfin_BG26_360_G ? 10 : 5;\r\n\t\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.hand,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SanguineChampion_BG23_017:\r\n\t\t\tcase CardIds.SanguineChampion_BG23_017_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst sanguineChampionStats = deadEntityCardId === CardIds.SanguineChampion_BG23_017 ? 1 : 2;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += sanguineChampionStats;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += sanguineChampionStats;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PricklyPiper_BG26_160:\r\n\t\t\tcase CardIds.PricklyPiper_BG26_160_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst piperBuff = deadEntityCardId === CardIds.PricklyPiper_BG26_160 ? 1 : 2;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += piperBuff;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// Putricide-only\r\n\t\t\tcase CardIds.Banshee_BG_RLK_957:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t2,\r\n\t\t\t\t\t\t1,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LostSpirit_BG26_GIL_513:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 0, gameState, null);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TickingAbomination_BG_ICC_099:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (const entity of boardWithDeadEntity) {\r\n\t\t\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t5,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.WitheredSpearhide_BG27_006:\r\n\t\t\tcase CardIds.WitheredSpearhide_BG27_006_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst witheredSpearhideCardsToAdd = Array(\r\n\t\t\t\t\t\tdeadEntity.cardId === CardIds.WitheredSpearhide_BG27_006_G ? 2 : 1,\r\n\t\t\t\t\t).fill(CardIds.BloodGem);\r\n\t\t\t\t\taddCardsInHand(\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\twitheredSpearhideCardsToAdd,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RecurringNightmare_BG26_055:\r\n\t\t\tcase CardIds.RecurringNightmare_BG26_055_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyRecurringNightmareDeathrattleEffect(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntityCardId === CardIds.RecurringNightmare_BG26_055_G,\r\n\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\tgameState.spectator,\r\n\t\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MotleyPhalanx_BG27_080:\r\n\t\t\tcase CardIds.MotleyPhalanx_BG27_080_G:\r\n\t\t\t\tconst motleyBuff = deadEntity.cardId === CardIds.MotleyPhalanx_BG27_080_G ? 8 : 4;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tmotleyBuff,\r\n\t\t\t\t\t\tmotleyBuff,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304:\r\n\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304_G:\r\n\t\t\t\tconst moroesBuffAtk = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 2 : 1;\r\n\t\t\t\tconst moroesBuffHealth = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 10 : 5;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tmoroesBuffAtk,\r\n\t\t\t\t\t\tmoroesBuffHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SteadfastSpirit_BG28_306:\r\n\t\t\tcase CardIds.SteadfastSpirit_BG28_306_G:\r\n\t\t\t\tconst steadfastSpiritBuff = deadEntity.cardId === CardIds.SteadfastSpirit_BG28_306_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Mummifier_BG28_309:\r\n\t\t\tcase CardIds.Mummifier_BG28_309_G:\r\n\t\t\t\tconst mummifierBuff = deadEntity.cardId === CardIds.Mummifier_BG28_309_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < mummifierBuff; j++) {\r\n\t\t\t\t\t\tconst targets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\t\te.cardId !== CardIds.Mummifier_BG28_309 &&\r\n\t\t\t\t\t\t\t\t\te.cardId !== CardIds.Mummifier_BG28_309_G,\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t.filter((e) => !e.reborn)\r\n\t\t\t\t\t\t\t.filter((e) => hasCorrectTribe(e, Race.UNDEAD, gameState.allCards));\r\n\t\t\t\t\t\tconst target = pickRandom(targets);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\ttarget.reborn = true;\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ScrapScraper_BG26_148:\r\n\t\t\tcase CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst scraperToAddQuantity = deadEntity.cardId === CardIds.ScrapScraper_BG26_148_G ? 2 : 1;\r\n\t\t\t\t\tconst scraperCardsToAdd = [];\r\n\t\t\t\t\tfor (let i = 0; i < scraperToAddQuantity; i++) {\r\n\t\t\t\t\t\tscraperCardsToAdd.push(pickRandom(gameState.cardsData.scrapScraperSpawns));\r\n\t\t\t\t\t}\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, scraperCardsToAdd, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t// It's important to first copy the enchantments, otherwise you could end up\r\n\t// in an infinite loop - since new enchants are added after each step\r\n\tlet enchantments: { cardId: string; originEntityId?: number; repeats?: number }[] = [\r\n\t\t...(deadEntity.enchantments ?? []),\r\n\t\t...(deadEntity.rememberedDeathrattles ?? []),\r\n\t].sort((a, b) => a.timing - b.timing);\r\n\t// In some cases it's possible that there are way too many enchantments because of the frog\r\n\t// In that case, we make a trade-off and don't trigger the \"on stats change\" trigger as\r\n\t// often as we should, so that we can have the stats themselves correct\r\n\t// We don't want to lump everything together, as it skews the stats when there are a lot of buffs\r\n\t// Instead, we build groups\r\n\tconst maxNumberOfGroups = 12;\r\n\tconst enchantmentGroups = groupByFunction((enchantment: any) => enchantment.cardId)(enchantments);\r\n\tenchantments = Object.keys(enchantmentGroups).flatMap((cardId) => {\r\n\t\tlet repeatsToApply = enchantmentGroups[cardId].map((e) => e.repeats || 1).reduce((a, b) => a + b, 0);\r\n\r\n\t\t// Frogs include the multiplers here directly\r\n\t\tif (\r\n\t\t\t[\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t].includes(cardId as CardIds)\r\n\t\t) {\r\n\t\t\trepeatsToApply = repeatsToApply * multiplier;\r\n\t\t}\r\n\r\n\t\tconst results = [];\r\n\t\tconst repeatsPerBuff = Math.max(1, Math.floor(repeatsToApply / maxNumberOfGroups));\r\n\t\tlet repeatsDone = 0;\r\n\t\twhile (repeatsDone < repeatsToApply) {\r\n\t\t\tconst repeats = Math.min(repeatsPerBuff, repeatsToApply - repeatsDone);\r\n\t\t\tresults.push({\r\n\t\t\t\tcardId: cardId,\r\n\t\t\t\trepeats: repeats,\r\n\t\t\t\ttiming: Math.min(...enchantmentGroups[cardId].map((e) => e.timing)),\r\n\t\t\t});\r\n\t\t\trepeatsDone += repeatsPerBuff;\r\n\t\t}\r\n\t\treturn results;\r\n\t});\r\n\tfor (const enchantment of enchantments) {\r\n\t\tswitch (enchantment.cardId) {\r\n\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e:\r\n\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge:\r\n\t\t\t\tapplyLeapFroggerEffect(\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tenchantment.cardId === CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tenchantment.repeats || 1,\r\n\t\t\t\t);\r\n\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.EarthRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyEarthInvocationEnchantment(boardWithDeadEntity, deadEntity, deadEntity, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.FireRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyFireInvocationEnchantment(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.WaterRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyWaterInvocationEnchantment(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LightningRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLightningInvocationEnchantment(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t// const playerCopy = boardWithDeadEntity.map((e) => ({ ...e, lastAffectedByEntity: null }));\r\n\t// const oppCopy = otherBoard.map((e) => ({ ...e, lastAffectedByEntity: null }));\r\n\t// console.log('player board', boardWithDeadEntity.length, playerCopy.length, playerCopy.map((e) => JSON.stringify(e)).join('\\n'));\r\n\t// console.log('opp board', JSON.stringify(oppCopy));\r\n};\r\n\r\nexport const applyLightningInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\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\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\tdealDamageToEnemy(\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};\r\n\r\nexport const applyWaterInvocationEnchantment = (\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[boardWithDeadEntity.length - 1];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyHealth(target, 3, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\ttarget.taunt = true;\r\n\t\t\tafterStatsUpdate(target, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(sourceEntity, target, boardWithDeadEntity, null, null);\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[0];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyAttack(target, target.attack, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(target, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(sourceEntity, target, boardWithDeadEntity, null, null);\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\nconst applyLeapFroggerEffect = (\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\tmultiplier = multiplier || 1;\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 = buffed.enchantments ?? [];\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\t// Don't register power effect here, since it's already done in the random stats\r\n\t\t// spectator.registerPowerTarget(deadEntity, buffed, boardWithDeadEntity);\r\n\t\t// console.log('applyLeapFroggerEffect', stringifySimpleCard(deadEntity), stringifySimpleCard(buffed));\r\n\t}\r\n};\r\n\r\nconst applyRecurringNightmareDeathrattleEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tdeadEntity: BoardEntity,\r\n\tisPremium: boolean,\r\n\tallCards: AllCardsService,\r\n\tspectator: Spectator,\r\n\tsharedState: SharedState,\r\n\tmultiplier = 1,\r\n): void => {\r\n\tmultiplier = multiplier || 1;\r\n\tconst target = pickRandom(\r\n\t\tboardWithDeadEntity\r\n\t\t\t.filter((e) => hasCorrectTribe(e, Race.UNDEAD, allCards))\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\tif (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: sharedState.currentEntityId++,\r\n\t\t});\r\n\t\tspectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, null, null);\r\n\t}\r\n};\r\n\r\nexport const applyMinionDeathEffect = (\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 (isCorrectTribe(gameState.allCards.getCard(deadEntity.cardId).races, Race.BEAST)) {\r\n\t\tapplyScavengingHyenaEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (isCorrectTribe(gameState.allCards.getCard(deadEntity.cardId).races, Race.DEMON)) {\r\n\t\tapplySoulJugglerEffect(boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (isCorrectTribe(gameState.allCards.getCard(deadEntity.cardId).races, Race.MECH)) {\r\n\t\tapplyJunkbotEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, Race.MURLOC, gameState.allCards)) {\r\n\t\tremoveOldMurkEyeAttack(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tremoveOldMurkEyeAttack(otherBoard, otherBoardHero, gameState);\r\n\t}\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\tmodifyAttack(e, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(e, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t});\r\n\r\n\tapplyRotHideGnollEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\r\n\t// Overkill\r\n\tif (deadEntity.health < 0 && deadEntity.lastAffectedByEntity?.attacking) {\r\n\t\tif (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\tdealDamageToEnemy(\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\tdealDamageToEnemy(\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\telse if (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.allCards,\r\n\t\t\t\tgameState.cardsData,\r\n\t\t\t\tgameState.sharedState,\r\n\t\t\t\tgameState.spectator,\r\n\t\t\t\t!deadEntity.friendly,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.IronhideDirehorn_TB_BaconUps_051) {\r\n\t\t\tconst newEntities = spawnEntities(\r\n\t\t\t\tCardIds.IronhideDirehorn_IronhideRuntToken_TB_BaconUps_051t,\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.allCards,\r\n\t\t\t\tgameState.cardsData,\r\n\t\t\t\tgameState.sharedState,\r\n\t\t\t\tgameState.spectator,\r\n\t\t\t\t!deadEntity.friendly,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_BGS_080) {\r\n\t\t\tconst otherPirates = otherBoard\r\n\t\t\t\t.filter((entity) => isCorrectTribe(gameState.allCards.getCard(entity.cardId).races, Race.PIRATE))\r\n\t\t\t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\totherPirates.forEach((pirate) => {\r\n\t\t\t\tmodifyAttack(pirate, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tmodifyHealth(pirate, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(pirate, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\tpirate,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_TB_BaconUps_142) {\r\n\t\t\tconst otherPirates = otherBoard\r\n\t\t\t\t.filter((entity) => isCorrectTribe(gameState.allCards.getCard(entity.cardId).races, Race.PIRATE))\r\n\t\t\t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\totherPirates.forEach((pirate) => {\r\n\t\t\t\tmodifyAttack(pirate, 4, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tmodifyHealth(pirate, 4, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(pirate, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\tpirate,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\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\tdealDamageToEnemy(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\tdealDamageToEnemy(board2[i], board2, board2Hero, damageSource, damageDealt, board1, board1Hero, gameState);\r\n\t}\r\n};\r\n\r\nconst 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\tdealDamageToRandomEnemy(\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t3,\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\tdealDamageToRandomEnemy(\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t3,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tdealDamageToRandomEnemy(\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t3,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tgameState,\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\tmodifyAttack(board[i], 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tmodifyHealth(board[i], 1, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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\tmodifyAttack(board[i], 4, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tmodifyHealth(board[i], 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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\tmodifyAttack(board[i], multiplier * 1, board, hero, gameState);\r\n\t\t\tmodifyHealth(board[i], multiplier * 1, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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 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\tmodifyAttack(board[i], multiplier * 1, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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 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\tmodifyAttack(board[i], 2, board, hero, gameState);\r\n\t\t\tmodifyHealth(board[i], 2, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], board, hero, 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.Junkbot_TB_BaconUps_046) {\r\n\t\t\tmodifyAttack(board[i], 4, board, hero, gameState);\r\n\t\t\tmodifyHealth(board[i], 4, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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 applyQirajiHarbringerEffect = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst qiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_BGS_112);\r\n\tconst goldenQiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_TB_BaconUps_303);\r\n\tconst neighbours = getNeighbours(board, null, deadEntityIndexFromRight);\r\n\r\n\t// TODO: if reactivated, properly apply buffs one by one, instead of all together\r\n\tneighbours.forEach((entity) => {\r\n\t\tmodifyAttack(entity, 2 * qiraji.length + 4 * goldenQiraji.length, board, hero, gameState);\r\n\t\tmodifyHealth(entity, 2 * qiraji.length + 4 * goldenQiraji.length, board, hero, gameState);\r\n\t\tafterStatsUpdate(entity, board, hero, gameState);\r\n\t});\r\n};\r\n\r\nexport const applyMonstrosity = (\r\n\tmonstrosity: BoardEntity,\r\n\tdeadEntities: readonly BoardEntity[],\r\n\tboardWithDeadEntities: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (const deadEntity of deadEntities) {\r\n\t\tmodifyAttack(monstrosity, deadEntity.attack, boardWithDeadEntities, boardWithDeadEntityHero, gameState);\r\n\t\tif (monstrosity.cardId === CardIds.Monstrosity_BG20_HERO_282_Buddy_G) {\r\n\t\t\tmodifyAttack(monstrosity, deadEntity.attack, boardWithDeadEntities, boardWithDeadEntityHero, gameState);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const rememberDeathrattles = (\r\n\tfish: BoardEntity,\r\n\tdeadEntities: readonly BoardEntity[],\r\n\tcardsData: CardsData,\r\n\tallCards: AllCardsService,\r\n\tsharedState: SharedState,\r\n): void => {\r\n\tconst validDeathrattles = deadEntities\r\n\t\t.filter(\r\n\t\t\t(entity) =>\r\n\t\t\t\tcardsData.validDeathrattles.includes(entity.cardId) || isFish(entity) || isPilotedWhirlOTron(entity),\r\n\t\t)\r\n\t\t.map((entity) => ({ cardId: entity.cardId, repeats: 1, timing: sharedState.currentEntityId++ }));\r\n\tconst validEnchantments = deadEntities\r\n\t\t.filter((entity) => entity.enchantments?.length)\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) =>\r\n\t\t\t[\r\n\t\t\t\tCardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_BG_BOT_312e,\r\n\t\t\t\tCardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_TB_BaconUps_032e,\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\tCardIds.LivingSpores_LivingSporesEnchantment,\r\n\t\t\t\tCardIds.SneedsReplicator_ReplicateEnchantment,\r\n\t\t\t\tCardIds.EarthInvocation_ElementEarthEnchantment,\r\n\t\t\t\tCardIds.FireInvocation_ElementFireEnchantment,\r\n\t\t\t\tCardIds.WaterInvocation_ElementWaterEnchantment,\r\n\t\t\t\tCardIds.LightningInvocation,\r\n\t\t\t\tCardIds.SurfNSurf_CrabRidingEnchantment_BG27_004e,\r\n\t\t\t\tCardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge,\r\n\t\t\t].includes(enchantment.cardId as CardIds),\r\n\t\t);\r\n\t// Multiple fish\r\n\tconst deadEntityRememberedDeathrattles =\r\n\t\tdeadEntities.filter((e) => !!e.rememberedDeathrattles?.length).flatMap((e) => e.rememberedDeathrattles) ?? [];\r\n\tconst newDeathrattles = [...validDeathrattles, ...validEnchantments, ...deadEntityRememberedDeathrattles];\r\n\t// Order is important - the DR are triggered in the ordered the minions have died\r\n\t// console.log(\r\n\t// \t'remembering deathrattle',\r\n\t// \t'\\n',\r\n\t// \tstringifySimpleCard(fish, allCards),\r\n\t// \t'\\n',\r\n\t// \tstringifySimple(deadEntities, allCards),\r\n\t// \t'\\n',\r\n\t// \tfish.rememberedDeathrattles,\r\n\t// );\r\n\tif (isGolden(fish.cardId, allCards)) {\r\n\t\t// https://stackoverflow.com/questions/33305152/how-to-duplicate-elements-in-a-js-array\r\n\t\tconst doubleDr = newDeathrattles.reduce((res, current) => res.concat([current, current]), []);\r\n\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...doubleDr];\r\n\t} else {\r\n\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];\r\n\t}\r\n\t// console.log(\r\n\t// \t'remembering deathrattle after',\r\n\t// \tstringifySimple(deadEntities, allCards),\r\n\t// \t'\\n',\r\n\t// \tfish.rememberedDeathrattles,\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\tconst murkeyes = boardWithDeadEntity.filter(\r\n\t\t(entity) => entity.cardId === CardIds.OldMurkEyeLegacy || entity.cardId === CardIds.OldMurkEyeVanilla,\r\n\t);\r\n\tconst goldenMurkeyes = boardWithDeadEntity.filter((entity) => entity.cardId === CardIds.OldMurkEye);\r\n\tmurkeyes.forEach((entity) => {\r\n\t\tmodifyAttack(entity, -1, boardWithDeadEntity, hero, gameState);\r\n\t\tafterStatsUpdate(entity, boardWithDeadEntity, hero, gameState);\r\n\t});\r\n\tgoldenMurkeyes.forEach((entity) => {\r\n\t\tmodifyAttack(entity, -2, boardWithDeadEntity, hero, gameState);\r\n\t\tafterStatsUpdate(entity, 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, CardIds, 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 { groupByFunction, pickMultipleRandomDifferent, pickRandom, pickRandomLowestHealth } from '../services/utils';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgrantRandomAttack,\r\n\tgrantRandomDivineShield,\r\n\tgrantRandomHealth,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\tisCorrectTribe,\r\n\tisFish,\r\n\tisGolden,\r\n\tisPilotedWhirlOTron,\r\n\tmakeMinionGolden,\r\n\tupdateDivineShield,\r\n} from '../utils';\r\nimport { dealDamageToEnemy, dealDamageToRandomEnemy, findNearestEnemies, getNeighbours } from './attack';\r\nimport { triggerBattlecry } from './battlecries';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { DeathrattleTriggeredInput, onDeathrattleTriggered } from './deathrattle-on-trigger';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { SharedState } from './shared-state';\r\nimport { Spectator } from './spectator/spectator';\r\nimport { afterStatsUpdate, modifyAttack, modifyHealth } from './stats';\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 rivendare =\r\n\t\t!!board.find(\r\n\t\t\t(entity) =>\r\n\t\t\t\tentity.cardId === CardIds.BaronRivendare_BG_FP1_031 ||\r\n\t\t\t\tentity.cardId === CardIds.MoiraBronzebeard_BG27_518,\r\n\t\t) || boardHero.secrets?.some((e) => e.cardId === CardIds.TitusTribute_BG28_843);\r\n\tconst goldenRivendare = board.find(\r\n\t\t(entity) =>\r\n\t\t\tentity.cardId === CardIds.BaronRivendare_TB_BaconUps_055 ||\r\n\t\t\tentity.cardId === CardIds.MoiraBronzebeard_BG27_518_G,\r\n\t);\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 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 *\r\n\t\t((goldenRivendare ? 3 : rivendare ? 2 : 1) + titus + 2 * goldenTitus + tombs + echoesOfArgus);\r\n\treturn multiplier;\r\n};\r\n\r\n// export const handleDeathrattles = (\r\n// \tboardWithKilledMinion: BoardEntity[],\r\n// \tboardWithKilledMinionHero: BgsPlayerEntity,\r\n// \tdeadEntity: BoardEntity,\r\n// \tdeadMinionIndexFromRight2: number,\r\n// \topponentBoard: BoardEntity[],\r\n// \topponentBoardHero: BgsPlayerEntity,\r\n// \tentitiesDeadThisAttack: readonly BoardEntity[],\r\n// \tgameState: InternalGameState,\r\n// ) => {};\r\n\r\nexport const handleDeathrattleEffects = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst multiplier = computeDeathrattleMultiplier(\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tgameState.sharedState,\r\n\t);\r\n\tconst deathrattleTriggeredInput: DeathrattleTriggeredInput = {\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t};\r\n\r\n\t// We do it on a case by case basis so that we deal all the damage in one go for instance\r\n\t// and avoid proccing deathrattle spawns between the times the damage triggers\r\n\tconst cardIds = [deadEntity.cardId, ...(deadEntity.additionalCards ?? [])];\r\n\t// TODO put the muliplier look here, and handle onDeathrattleTriggered like is done for\r\n\t// deathrattle-spawns\r\n\tfor (const deadEntityCardId of cardIds) {\r\n\t\tswitch (deadEntityCardId) {\r\n\t\t\tcase CardIds.RylakMetalhead_BG26_801:\r\n\t\t\tcase CardIds.RylakMetalhead_BG26_801_G:\r\n\t\t\t\tconst rylakMutltiplier = deadEntityCardId === CardIds.RylakMetalhead_BG26_801_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst neighbours = getNeighbours(boardWithDeadEntity, deadEntity, deadEntityIndexFromRight);\r\n\t\t\t\t\tfor (const neighbour of neighbours) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tneighbour,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tfor (let j = 0; j < rylakMutltiplier; j++) {\r\n\t\t\t\t\t\t\ttriggerBattlecry(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tneighbour,\r\n\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SelflessHero_BG_OG_221:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomDivineShield(deadEntity, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SelflessHero_TB_BaconUps_014:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomDivineShield(deadEntity, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t\t\tgrantRandomDivineShield(deadEntity, boardWithDeadEntity, gameState.allCards, gameState.spectator);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.OperaticBelcher_BG26_888:\r\n\t\t\tcase CardIds.OperaticBelcher_BG26_888_G:\r\n\t\t\t\tconst belcherMultiplier = deadEntityCardId === CardIds.OperaticBelcher_BG26_888_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < belcherMultiplier; j++) {\r\n\t\t\t\t\t\tconst possibleBelcherTargets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t.filter((entity) => !entity.venomous)\r\n\t\t\t\t\t\t\t.filter((entity) => !entity.poisonous)\r\n\t\t\t\t\t\t\t.filter((entity) => entity.health > 0 && !entity.definitelyDead)\r\n\t\t\t\t\t\t\t.filter((entity) => hasCorrectTribe(entity, Race.MURLOC, gameState.allCards));\r\n\t\t\t\t\t\tif (possibleBelcherTargets.length > 0) {\r\n\t\t\t\t\t\t\tconst chosen = pickRandom(possibleBelcherTargets);\r\n\t\t\t\t\t\t\tchosen.venomous = true;\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tchosen,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy:\r\n\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G:\r\n\t\t\t\tconst iterations = deadEntityCardId === CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < iterations; j++) {\r\n\t\t\t\t\t\tlet validTargets = boardWithDeadEntity.filter((entity) => !entity.divineShield);\r\n\t\t\t\t\t\tif (!validTargets?.length) {\r\n\t\t\t\t\t\t\tvalidTargets = boardWithDeadEntity.filter((entity) => !entity.taunt);\r\n\t\t\t\t\t\t\tif (!validTargets?.length) {\r\n\t\t\t\t\t\t\t\tvalidTargets = boardWithDeadEntity.filter((entity) => !entity.windfury);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\tif (!target.divineShield) {\r\n\t\t\t\t\t\t\t\tupdateDivineShield(target, boardWithDeadEntity, true, gameState.allCards);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\ttarget.taunt = true;\r\n\t\t\t\t\t\t\ttarget.windfury = true;\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.NadinaTheRed_BGS_040:\r\n\t\t\tcase CardIds.NadinaTheRed_TB_BaconUps_154:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst nadinaMultiplier = deadEntityCardId === CardIds.NadinaTheRed_TB_BaconUps_154 ? 6 : 3;\r\n\t\t\t\t\tfor (let j = 0; j < nadinaMultiplier; j++) {\r\n\t\t\t\t\t\tconst validTargets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t.filter((e) => hasCorrectTribe(e, Race.DRAGON, gameState.allCards))\r\n\t\t\t\t\t\t\t.filter((entity) => !entity.divineShield);\r\n\t\t\t\t\t\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\tupdateDivineShield(target, boardWithDeadEntity, true, gameState.allCards);\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SpawnOfNzoth_BG_OG_256:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 1, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SpawnOfNzoth_TB_BaconUps_025:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 2, 2, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GoldrinnTheGreatWolf_BGS_018:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 3, 2, gameState, 'BEAST');\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffAtk += 3;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffHealth += 2;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 6, 4, gameState, 'BEAST');\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffAtk += 6;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffHealth += 4;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.KingBagurgle_BGS_030:\r\n\t\t\t// \taddStatsToBoard(\r\n\t\t\t// \t\tdeadEntity,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tmultiplier * 2,\r\n\t\t\t// \t\tmultiplier * 3,\r\n\t\t\t// \t\tgameState.allCards,\r\n\t\t\t// \t\tgameState.spectator,\r\n\t\t\t// \t\t'MURLOC',\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\t// case CardIds.KingBagurgle_TB_BaconUps_100:\r\n\t\t\t// \taddStatsToBoard(\r\n\t\t\t// \t\tdeadEntity,\r\n\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t// \t\tmultiplier * 4,\r\n\t\t\t// \t\tmultiplier * 6,\r\n\t\t\t// \t\tgameState.allCards,\r\n\t\t\t// \t\tgameState.spectator,\r\n\t\t\t// \t\t'MURLOC',\r\n\t\t\t// \t);\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.FiendishServant_YOD_026:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.FiendishServant_TB_BaconUps_112:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ImpulsiveTrickster_BG21_006:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ImpulsiveTrickster_BG21_006_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Leapfrogger_BG21_000:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLeapFroggerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, false, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Leapfrogger_BG21_000_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLeapFroggerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, true, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t6,\r\n\t\t\t\t\t\t6,\r\n\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t12,\r\n\t\t\t\t\t\t12,\r\n\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ScarletSkull_BG25_022:\r\n\t\t\tcase CardIds.ScarletSkull_BG25_022_G:\r\n\t\t\t\tconst scarletMultiplier = deadEntityCardId === CardIds.ScarletSkull_BG25_022_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tscarletMultiplier * 1,\r\n\t\t\t\t\t\tscarletMultiplier * 2,\r\n\t\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.AnubarakNerubianKing_BG25_007:\r\n\t\t\tcase CardIds.AnubarakNerubianKing_BG25_007_G:\r\n\t\t\t\tconst anubarakMultiplier = deadEntityCardId === CardIds.AnubarakNerubianKing_BG25_007_G ? 2 : 1;\r\n\t\t\t\tconst attackBonus = anubarakMultiplier * 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.UndeadAttackBonus += attackBonus;\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tattackBonus,\r\n\t\t\t\t\t\t0,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t// case CardIds.ElementiumSquirrelBombBattlegrounds_TB_BaconShop_HERO_17_Buddy:\r\n\t\t\t// \t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t// \t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t// \tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t// \t\tconst numberOfDeadMechsThisCombat = sharedState.deaths\r\n\t\t\t// \t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t// \t\t\t// eslint-disable-next-line prettier/prettier\r\n\t\t\t// \t\t\t.filter((entity) => isCorrectTribe(allCards.getCard(entity.cardId)?.races, Race.MECH)).length;\r\n\t\t\t// \t\tfor (let j = 0; j < numberOfDeadMechsThisCombat + 1; j++) {\r\n\t\t\t// \t\t\tdealDamageToRandomEnemy(\r\n\t\t\t// \t\t\t\totherBoard,\r\n\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t// \t\t\t\tdeadEntity,\r\n\t\t\t// \t\t\t\t3,\r\n\t\t\t// \t\t\t\tboardWithDeadEntity,\r\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t// \t\t\t\tallCards,\r\n\t\t\t// \t\t\t\tcardsData,\r\n\t\t\t// \t\t\t\tsharedState,\r\n\t\t\t// \t\t\t\tspectator,\r\n\t\t\t// \t\t\t);\r\n\t\t\t// \t\t}\r\n\t\t\t// \t}\r\n\t\t\t// \tbreak;\r\n\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy:\r\n\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst squirrelDamage =\r\n\t\t\t\t\tdeadEntity.cardId === CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G ? 4 : 2;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst numberOfDeadMechsThisCombat = gameState.sharedState.deaths\r\n\t\t\t\t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t\t\t\t// eslint-disable-next-line prettier/prettier\r\n\t\t\t\t\t\t.filter((entity) =>\r\n\t\t\t\t\t\t\tisCorrectTribe(gameState.allCards.getCard(entity.cardId)?.races, Race.MECH),\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tfor (let j = 0; j < numberOfDeadMechsThisCombat + 1; j++) {\r\n\t\t\t\t\t\tdealDamageToRandomEnemy(\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tsquirrelDamage,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.KaboomBot_BG_BOT_606:\r\n\t\t\tcase CardIds.KaboomBot_TB_BaconUps_028:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst kaboomLoops = deadEntity.cardId === CardIds.KaboomBot_TB_BaconUps_028 ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < kaboomLoops; j++) {\r\n\t\t\t\t\t\tdealDamageToRandomEnemy(\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t4,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LighterFighter_BG28_968:\r\n\t\t\tcase CardIds.LighterFighter_BG28_968_G:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst lighterFighterDamage = deadEntity.cardId === CardIds.LighterFighter_BG28_968_G ? 8 : 4;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < 2; j++) {\r\n\t\t\t\t\t\tconst target = pickRandomLowestHealth(otherBoard);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tlighterFighterDamage,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.DrBoombox_BG25_165:\r\n\t\t\tcase CardIds.DrBoombox_BG25_165_G:\r\n\t\t\t\t// FIXME: I don't think this way of doing things is really accurate (as some deathrattles\r\n\t\t\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\tconst boomboxDamage = deadEntity.cardId === CardIds.DrBoombox_BG25_165_G ? 14 : 7;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\t// The nearest enemies use the full board info\r\n\t\t\t\t\t// const boardIncludingDeadEntityAtCorrectIndex = boardWithDeadEntity.splice(\r\n\t\t\t\t\t// \tdeadEntityIndexFromRight,\r\n\t\t\t\t\t// \t0,\r\n\t\t\t\t\t// \tdeadEntity,\r\n\t\t\t\t\t// );\r\n\t\t\t\t\tconst targets = findNearestEnemies(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\tdeadEntityIndexFromRight,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t2,\r\n\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t);\r\n\t\t\t\t\ttargets.forEach((target) => {\r\n\t\t\t\t\t\t// console.debug('dealing damage to', stringifySimpleCard(target));\r\n\t\t\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tboomboxDamage,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.UnstableGhoul_BG_FP1_024:\r\n\t\t\tcase CardIds.UnstableGhoul_TB_BaconUps_118:\r\n\t\t\t\tconst damage = deadEntityCardId === CardIds.UnstableGhoul_TB_BaconUps_118 ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tdealDamageToAllMinions(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdamage,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TunnelBlaster_BG_DAL_775:\r\n\t\t\tcase CardIds.TunnelBlaster_BG_DAL_775_G:\r\n\t\t\t\tconst loops = deadEntityCardId === CardIds.TunnelBlaster_BG_DAL_775_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < loops; j++) {\r\n\t\t\t\t\t\tdealDamageToAllMinions(\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t3,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LeeroyTheReckless_BG23_318:\r\n\t\t\tcase CardIds.LeeroyTheReckless_BG23_318_G:\r\n\t\t\t\tif (deadEntity.lastAffectedByEntity) {\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity.definitelyDead = true;\r\n\t\t\t\t}\r\n\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RadioStar_BG25_399:\r\n\t\t\tcase CardIds.RadioStar_BG25_399_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst radioQuantity = deadEntityCardId === CardIds.RadioStar_BG25_399_G ? 2 : 1;\r\n\t\t\t\t\tconst radioEntities = Array(radioQuantity).fill(deadEntity.lastAffectedByEntity);\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, radioEntities, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MysticSporebat_BG28_900:\r\n\t\t\tcase CardIds.MysticSporebat_BG28_900_G:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy:\r\n\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst numberToGild = deadEntityCardId === CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G ? 2 : 1;\r\n\t\t\t\t\tconst targetBoard = boardWithDeadEntity\r\n\t\t\t\t\t\t.filter((e) => !e.definitelyDead && e.health > 0)\r\n\t\t\t\t\t\t.filter((e) => !gameState.cardsData.isGolden(gameState.allCards.getCard(e.cardId)));\r\n\t\t\t\t\tfor (let i = 0; i < Math.min(numberToGild, boardWithDeadEntity.length); i++) {\r\n\t\t\t\t\t\tconst rightMostMinion = targetBoard[targetBoard.length - 1 - i];\r\n\t\t\t\t\t\tif (rightMostMinion) {\r\n\t\t\t\t\t\t\tmakeMinionGolden(\r\n\t\t\t\t\t\t\t\trightMostMinion,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Scourfin_BG26_360:\r\n\t\t\tcase CardIds.Scourfin_BG26_360_G:\r\n\t\t\t\t// When it's the opponent, the game state already contains all the buffs\r\n\t\t\t\tif (deadEntity?.friendly) {\r\n\t\t\t\t\tconst statsScourfin = deadEntityCardId === CardIds.Scourfin_BG26_360_G ? 10 : 5;\r\n\t\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.hand,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SanguineChampion_BG23_017:\r\n\t\t\tcase CardIds.SanguineChampion_BG23_017_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst sanguineChampionStats = deadEntityCardId === CardIds.SanguineChampion_BG23_017 ? 1 : 2;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += sanguineChampionStats;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += sanguineChampionStats;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PricklyPiper_BG26_160:\r\n\t\t\tcase CardIds.PricklyPiper_BG26_160_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst piperBuff = deadEntityCardId === CardIds.PricklyPiper_BG26_160 ? 1 : 2;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += piperBuff;\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// Putricide-only\r\n\t\t\tcase CardIds.Banshee_BG_RLK_957:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t2,\r\n\t\t\t\t\t\t1,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LostSpirit_BG26_GIL_513:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 0, gameState, null);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TickingAbomination_BG_ICC_099:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (const entity of boardWithDeadEntity) {\r\n\t\t\t\t\t\tdealDamageToEnemy(\r\n\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t5,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.WitheredSpearhide_BG27_006:\r\n\t\t\tcase CardIds.WitheredSpearhide_BG27_006_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst witheredSpearhideCardsToAdd = Array(\r\n\t\t\t\t\t\tdeadEntity.cardId === CardIds.WitheredSpearhide_BG27_006_G ? 2 : 1,\r\n\t\t\t\t\t).fill(CardIds.BloodGem);\r\n\t\t\t\t\taddCardsInHand(\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\twitheredSpearhideCardsToAdd,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.RecurringNightmare_BG26_055:\r\n\t\t\tcase CardIds.RecurringNightmare_BG26_055_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyRecurringNightmareDeathrattleEffect(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntityCardId === CardIds.RecurringNightmare_BG26_055_G,\r\n\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\tgameState.spectator,\r\n\t\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MotleyPhalanx_BG27_080:\r\n\t\t\tcase CardIds.MotleyPhalanx_BG27_080_G:\r\n\t\t\t\tconst motleyBuff = deadEntity.cardId === CardIds.MotleyPhalanx_BG27_080_G ? 8 : 4;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tmotleyBuff,\r\n\t\t\t\t\t\tmotleyBuff,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304:\r\n\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304_G:\r\n\t\t\t\tconst moroesBuffAtk = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 2 : 1;\r\n\t\t\t\tconst moroesBuffHealth = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 10 : 5;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tmoroesBuffAtk,\r\n\t\t\t\t\t\tmoroesBuffHealth,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SteadfastSpirit_BG28_306:\r\n\t\t\tcase CardIds.SteadfastSpirit_BG28_306_G:\r\n\t\t\t\tconst steadfastSpiritBuff = deadEntity.cardId === CardIds.SteadfastSpirit_BG28_306_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Mummifier_BG28_309:\r\n\t\t\tcase CardIds.Mummifier_BG28_309_G:\r\n\t\t\t\tconst mummifierBuff = deadEntity.cardId === CardIds.Mummifier_BG28_309_G ? 2 : 1;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tfor (let j = 0; j < mummifierBuff; j++) {\r\n\t\t\t\t\t\tconst targets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\t\te.cardId !== CardIds.Mummifier_BG28_309 &&\r\n\t\t\t\t\t\t\t\t\te.cardId !== CardIds.Mummifier_BG28_309_G,\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t.filter((e) => !e.reborn)\r\n\t\t\t\t\t\t\t.filter((e) => hasCorrectTribe(e, Race.UNDEAD, gameState.allCards));\r\n\t\t\t\t\t\tconst target = pickRandom(targets);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\ttarget.reborn = true;\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ScrapScraper_BG26_148:\r\n\t\t\tcase CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst scraperToAddQuantity = deadEntity.cardId === CardIds.ScrapScraper_BG26_148_G ? 2 : 1;\r\n\t\t\t\t\tconst scraperCardsToAdd = [];\r\n\t\t\t\t\tfor (let i = 0; i < scraperToAddQuantity; i++) {\r\n\t\t\t\t\t\tscraperCardsToAdd.push(pickRandom(gameState.cardsData.scrapScraperSpawns));\r\n\t\t\t\t\t}\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, scraperCardsToAdd, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t// It's important to first copy the enchantments, otherwise you could end up\r\n\t// in an infinite loop - since new enchants are added after each step\r\n\tlet enchantments: { cardId: string; originEntityId?: number; repeats?: number }[] = [\r\n\t\t...(deadEntity.enchantments ?? []),\r\n\t\t...(deadEntity.rememberedDeathrattles ?? []),\r\n\t].sort((a, b) => a.timing - b.timing);\r\n\t// In some cases it's possible that there are way too many enchantments because of the frog\r\n\t// In that case, we make a trade-off and don't trigger the \"on stats change\" trigger as\r\n\t// often as we should, so that we can have the stats themselves correct\r\n\t// We don't want to lump everything together, as it skews the stats when there are a lot of buffs\r\n\t// Instead, we build groups\r\n\tconst maxNumberOfGroups = 12;\r\n\tconst enchantmentGroups = groupByFunction((enchantment: any) => enchantment.cardId)(enchantments);\r\n\tenchantments = Object.keys(enchantmentGroups).flatMap((cardId) => {\r\n\t\tlet repeatsToApply = enchantmentGroups[cardId].map((e) => e.repeats || 1).reduce((a, b) => a + b, 0);\r\n\r\n\t\t// Frogs include the multiplers here directly\r\n\t\tif (\r\n\t\t\t[\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t].includes(cardId as CardIds)\r\n\t\t) {\r\n\t\t\trepeatsToApply = repeatsToApply * multiplier;\r\n\t\t}\r\n\r\n\t\tconst results = [];\r\n\t\tconst repeatsPerBuff = Math.max(1, Math.floor(repeatsToApply / maxNumberOfGroups));\r\n\t\tlet repeatsDone = 0;\r\n\t\twhile (repeatsDone < repeatsToApply) {\r\n\t\t\tconst repeats = Math.min(repeatsPerBuff, repeatsToApply - repeatsDone);\r\n\t\t\tresults.push({\r\n\t\t\t\tcardId: cardId,\r\n\t\t\t\trepeats: repeats,\r\n\t\t\t\ttiming: Math.min(...enchantmentGroups[cardId].map((e) => e.timing)),\r\n\t\t\t});\r\n\t\t\trepeatsDone += repeatsPerBuff;\r\n\t\t}\r\n\t\treturn results;\r\n\t});\r\n\tfor (const enchantment of enchantments) {\r\n\t\tswitch (enchantment.cardId) {\r\n\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e:\r\n\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge:\r\n\t\t\t\tapplyLeapFroggerEffect(\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tenchantment.cardId === CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tenchantment.repeats || 1,\r\n\t\t\t\t);\r\n\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.EarthRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyEarthInvocationEnchantment(boardWithDeadEntity, deadEntity, deadEntity, gameState);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.FireRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyFireInvocationEnchantment(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.WaterRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyWaterInvocationEnchantment(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.LightningRecollectionEnchantment:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLightningInvocationEnchantment(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t// const playerCopy = boardWithDeadEntity.map((e) => ({ ...e, lastAffectedByEntity: null }));\r\n\t// const oppCopy = otherBoard.map((e) => ({ ...e, lastAffectedByEntity: null }));\r\n\t// console.log('player board', boardWithDeadEntity.length, playerCopy.length, playerCopy.map((e) => JSON.stringify(e)).join('\\n'));\r\n\t// console.log('opp board', JSON.stringify(oppCopy));\r\n};\r\n\r\nexport const applyLightningInvocationEnchantment = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\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\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\tdealDamageToEnemy(\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};\r\n\r\nexport const applyWaterInvocationEnchantment = (\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[boardWithDeadEntity.length - 1];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyHealth(target, 3, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\ttarget.taunt = true;\r\n\t\t\tafterStatsUpdate(target, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(sourceEntity, target, boardWithDeadEntity, null, null);\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[0];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyAttack(target, target.attack, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(target, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(sourceEntity, target, boardWithDeadEntity, null, null);\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\nconst applyLeapFroggerEffect = (\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\tmultiplier = multiplier || 1;\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 = buffed.enchantments ?? [];\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\t// Don't register power effect here, since it's already done in the random stats\r\n\t\t// spectator.registerPowerTarget(deadEntity, buffed, boardWithDeadEntity);\r\n\t\t// console.log('applyLeapFroggerEffect', stringifySimpleCard(deadEntity), stringifySimpleCard(buffed));\r\n\t}\r\n};\r\n\r\nconst applyRecurringNightmareDeathrattleEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tdeadEntity: BoardEntity,\r\n\tisPremium: boolean,\r\n\tallCards: AllCardsService,\r\n\tspectator: Spectator,\r\n\tsharedState: SharedState,\r\n\tmultiplier = 1,\r\n): void => {\r\n\tmultiplier = multiplier || 1;\r\n\tconst target = pickRandom(\r\n\t\tboardWithDeadEntity\r\n\t\t\t.filter((e) => hasCorrectTribe(e, Race.UNDEAD, allCards))\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\tif (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: sharedState.currentEntityId++,\r\n\t\t});\r\n\t\tspectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, null, null);\r\n\t}\r\n};\r\n\r\nexport const applyMinionDeathEffect = (\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 (isCorrectTribe(gameState.allCards.getCard(deadEntity.cardId).races, Race.BEAST)) {\r\n\t\tapplyScavengingHyenaEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (isCorrectTribe(gameState.allCards.getCard(deadEntity.cardId).races, Race.DEMON)) {\r\n\t\tapplySoulJugglerEffect(boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (isCorrectTribe(gameState.allCards.getCard(deadEntity.cardId).races, Race.MECH)) {\r\n\t\tapplyJunkbotEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, Race.MURLOC, gameState.allCards)) {\r\n\t\tremoveOldMurkEyeAttack(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tremoveOldMurkEyeAttack(otherBoard, otherBoardHero, gameState);\r\n\t}\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\tmodifyAttack(e, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(e, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t});\r\n\r\n\tapplyRotHideGnollEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\r\n\t// Overkill\r\n\tif (deadEntity.health < 0 && deadEntity.lastAffectedByEntity?.attacking) {\r\n\t\tif (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\tdealDamageToEnemy(\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\tdealDamageToEnemy(\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\telse if (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.allCards,\r\n\t\t\t\tgameState.cardsData,\r\n\t\t\t\tgameState.sharedState,\r\n\t\t\t\tgameState.spectator,\r\n\t\t\t\t!deadEntity.friendly,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.IronhideDirehorn_TB_BaconUps_051) {\r\n\t\t\tconst newEntities = spawnEntities(\r\n\t\t\t\tCardIds.IronhideDirehorn_IronhideRuntToken_TB_BaconUps_051t,\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.allCards,\r\n\t\t\t\tgameState.cardsData,\r\n\t\t\t\tgameState.sharedState,\r\n\t\t\t\tgameState.spectator,\r\n\t\t\t\t!deadEntity.friendly,\r\n\t\t\t\ttrue,\r\n\t\t\t);\r\n\t\t\totherBoard.splice(otherBoard.length - deadEntityIndexFromRight, 0, ...newEntities);\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_BGS_080) {\r\n\t\t\tconst otherPirates = otherBoard\r\n\t\t\t\t.filter((entity) => isCorrectTribe(gameState.allCards.getCard(entity.cardId).races, Race.PIRATE))\r\n\t\t\t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\totherPirates.forEach((pirate) => {\r\n\t\t\t\tmodifyAttack(pirate, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tmodifyHealth(pirate, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(pirate, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\tpirate,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.SeabreakerGoliath_TB_BaconUps_142) {\r\n\t\t\tconst otherPirates = otherBoard\r\n\t\t\t\t.filter((entity) => isCorrectTribe(gameState.allCards.getCard(entity.cardId).races, Race.PIRATE))\r\n\t\t\t\t.filter((entity) => entity.entityId !== deadEntity.lastAffectedByEntity.entityId);\r\n\t\t\totherPirates.forEach((pirate) => {\r\n\t\t\t\tmodifyAttack(pirate, 4, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tmodifyHealth(pirate, 4, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tafterStatsUpdate(pirate, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\tpirate,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\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\tdealDamageToEnemy(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\tdealDamageToEnemy(board2[i], board2, board2Hero, damageSource, damageDealt, board1, board1Hero, gameState);\r\n\t}\r\n};\r\n\r\nconst 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\tdealDamageToRandomEnemy(\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t3,\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\tdealDamageToRandomEnemy(\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t3,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tdealDamageToRandomEnemy(\r\n\t\t\tboardToAttack,\r\n\t\t\tboardToAttackHero,\r\n\t\t\tjuggler,\r\n\t\t\t3,\r\n\t\t\tboardWithJugglers,\r\n\t\t\tboardWithJugglersHero,\r\n\t\t\tgameState,\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\tmodifyAttack(board[i], 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tmodifyHealth(board[i], 1, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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\tmodifyAttack(board[i], 4, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tmodifyHealth(board[i], 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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\tmodifyAttack(board[i], multiplier * 1, board, hero, gameState);\r\n\t\t\tmodifyHealth(board[i], multiplier * 1, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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 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\tmodifyAttack(board[i], multiplier * 1, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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 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\tmodifyAttack(board[i], 2, board, hero, gameState);\r\n\t\t\tmodifyHealth(board[i], 2, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], board, hero, 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.Junkbot_TB_BaconUps_046) {\r\n\t\t\tmodifyAttack(board[i], 4, board, hero, gameState);\r\n\t\t\tmodifyHealth(board[i], 4, board, hero, gameState);\r\n\t\t\tafterStatsUpdate(board[i], 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 applyQirajiHarbringerEffect = (\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst qiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_BGS_112);\r\n\tconst goldenQiraji = board.filter((entity) => entity.cardId === CardIds.QirajiHarbinger_TB_BaconUps_303);\r\n\tconst neighbours = getNeighbours(board, null, deadEntityIndexFromRight);\r\n\r\n\t// TODO: if reactivated, properly apply buffs one by one, instead of all together\r\n\tneighbours.forEach((entity) => {\r\n\t\tmodifyAttack(entity, 2 * qiraji.length + 4 * goldenQiraji.length, board, hero, gameState);\r\n\t\tmodifyHealth(entity, 2 * qiraji.length + 4 * goldenQiraji.length, board, hero, gameState);\r\n\t\tafterStatsUpdate(entity, board, hero, gameState);\r\n\t});\r\n};\r\n\r\nexport const applyMonstrosity = (\r\n\tmonstrosity: BoardEntity,\r\n\tdeadEntities: readonly BoardEntity[],\r\n\tboardWithDeadEntities: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (const deadEntity of deadEntities) {\r\n\t\tmodifyAttack(monstrosity, deadEntity.attack, boardWithDeadEntities, boardWithDeadEntityHero, gameState);\r\n\t\tif (monstrosity.cardId === CardIds.Monstrosity_BG20_HERO_282_Buddy_G) {\r\n\t\t\tmodifyAttack(monstrosity, deadEntity.attack, boardWithDeadEntities, boardWithDeadEntityHero, gameState);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const rememberDeathrattles = (\r\n\tfish: BoardEntity,\r\n\tdeadEntities: readonly BoardEntity[],\r\n\tcardsData: CardsData,\r\n\tallCards: AllCardsService,\r\n\tsharedState: SharedState,\r\n): void => {\r\n\tconst validDeathrattles = deadEntities\r\n\t\t.filter(\r\n\t\t\t(entity) =>\r\n\t\t\t\tcardsData.validDeathrattles.includes(entity.cardId) || isFish(entity) || isPilotedWhirlOTron(entity),\r\n\t\t)\r\n\t\t.map((entity) => ({ cardId: entity.cardId, repeats: 1, timing: sharedState.currentEntityId++ }));\r\n\tconst validEnchantments = deadEntities\r\n\t\t.filter((entity) => entity.enchantments?.length)\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) =>\r\n\t\t\t[\r\n\t\t\t\tCardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_BG_BOT_312e,\r\n\t\t\t\tCardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_TB_BaconUps_032e,\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\tCardIds.LivingSpores_LivingSporesEnchantment,\r\n\t\t\t\tCardIds.SneedsReplicator_ReplicateEnchantment,\r\n\t\t\t\tCardIds.EarthInvocation_ElementEarthEnchantment,\r\n\t\t\t\tCardIds.FireInvocation_ElementFireEnchantment,\r\n\t\t\t\tCardIds.WaterInvocation_ElementWaterEnchantment,\r\n\t\t\t\tCardIds.LightningInvocation,\r\n\t\t\t\tCardIds.SurfNSurf_CrabRidingEnchantment_BG27_004e,\r\n\t\t\t\tCardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge,\r\n\t\t\t].includes(enchantment.cardId as CardIds),\r\n\t\t);\r\n\t// Multiple fish\r\n\tconst deadEntityRememberedDeathrattles =\r\n\t\tdeadEntities.filter((e) => !!e.rememberedDeathrattles?.length).flatMap((e) => e.rememberedDeathrattles) ?? [];\r\n\tconst newDeathrattles = [...validDeathrattles, ...validEnchantments, ...deadEntityRememberedDeathrattles];\r\n\t// Order is important - the DR are triggered in the ordered the minions have died\r\n\t// console.log(\r\n\t// \t'remembering deathrattle',\r\n\t// \t'\\n',\r\n\t// \tstringifySimpleCard(fish, allCards),\r\n\t// \t'\\n',\r\n\t// \tstringifySimple(deadEntities, allCards),\r\n\t// \t'\\n',\r\n\t// \tfish.rememberedDeathrattles,\r\n\t// );\r\n\tif (isGolden(fish.cardId, allCards)) {\r\n\t\t// https://stackoverflow.com/questions/33305152/how-to-duplicate-elements-in-a-js-array\r\n\t\tconst doubleDr = newDeathrattles.reduce((res, current) => res.concat([current, current]), []);\r\n\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...doubleDr];\r\n\t} else {\r\n\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];\r\n\t}\r\n\t// console.log(\r\n\t// \t'remembering deathrattle after',\r\n\t// \tstringifySimple(deadEntities, allCards),\r\n\t// \t'\\n',\r\n\t// \tfish.rememberedDeathrattles,\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\tconst murkeyes = boardWithDeadEntity.filter(\r\n\t\t(entity) => entity.cardId === CardIds.OldMurkEyeLegacy || entity.cardId === CardIds.OldMurkEyeVanilla,\r\n\t);\r\n\tconst goldenMurkeyes = boardWithDeadEntity.filter((entity) => entity.cardId === CardIds.OldMurkEye);\r\n\tmurkeyes.forEach((entity) => {\r\n\t\tmodifyAttack(entity, -1, boardWithDeadEntity, hero, gameState);\r\n\t\tafterStatsUpdate(entity, boardWithDeadEntity, hero, gameState);\r\n\t});\r\n\tgoldenMurkeyes.forEach((entity) => {\r\n\t\tmodifyAttack(entity, -2, boardWithDeadEntity, hero, gameState);\r\n\t\tafterStatsUpdate(entity, boardWithDeadEntity, hero, gameState);\r\n\t});\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summon-when-space.js","sourceRoot":"","sources":["../../src/simulation/summon-when-space.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { buildSingleBoardEntity } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\n\r\nexport const handleSummonWhenSpace = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (playerEntity.rapidReanimationMinion) {\r\n\t\thandleRapidReanimationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (opponentEntity.rapidReanimationMinion) {\r\n\t\thandleRapidReanimationForPlayer(opponentBoard, opponentEntity, playerBoard, playerEntity, gameState);\r\n\t}\r\n\tif (playerEntity.questRewards?.includes(CardIds.StableAmalgamation_BG28_Reward_518)) {\r\n\t\thandleStableAmalgamationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (opponentEntity.questRewards?.includes(CardIds.StableAmalgamation_BG28_Reward_518)) {\r\n\t\thandleStableAmalgamationForPlayer(opponentBoard, opponentEntity, playerBoard, playerEntity, gameState);\r\n\t}\r\n};\r\n\r\nconst handleStableAmalgamationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst rewardEntity = playerEntity.questRewardEntities.find(\r\n\t\t(entity) => entity.cardId === CardIds.StableAmalgamation_BG28_Reward_518,\r\n\t);\r\n\tif (rewardEntity && rewardEntity.scriptDataNum1 > 0) {\r\n\t\twhile (rewardEntity.scriptDataNum1 > 0) {\r\n\t\t\tconst hasSummoned = handleSummon(\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tCardIds.StableAmalgamation_TotallyNormalHorseToken_BG28_Reward_518t,\r\n\t\t\t\t0,\r\n\t\t\t);\r\n\t\t\tif (hasSummoned) {\r\n\t\t\t\trewardEntity.scriptDataNum1--;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleRapidReanimationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst hasSummoned = handleSummon(\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tplayerEntity.rapidReanimationMinion.cardId,\r\n\t\tMath.min(playerBoard.length, playerEntity.rapidReanimationIndexFromRight ?? 0),\r\n\t\tplayerEntity.rapidReanimationMinion,\r\n\t);\r\n\tif (hasSummoned) {\r\n\t\tplayerEntity.rapidReanimationMinion = null;\r\n\t}\r\n};\r\n\r\nconst handleSummon = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tcardId: string,\r\n\tindexFromRight: number,\r\n\tminion: BoardEntity = null,\r\n): boolean => {\r\n\tif (playerBoard.length >= 7) {\r\n\t\treturn false;\r\n\t}\r\n\tconst newMinion = buildSingleBoardEntity(\r\n\t\tcardId,\r\n\t\tplayerEntity,\r\n\t\tplayerBoard,\r\n\t\tgameState.allCards,\r\n\t\tplayerEntity.friendly,\r\n\t\tgameState.sharedState.currentEntityId++,\r\n\t\tfalse,\r\n\t\tgameState.cardsData,\r\n\t\tgameState.sharedState,\r\n\t\tminion,\r\n\t\tnull,\r\n\t);\r\n\t// Don't reapply auras in this particular case? See https://x.com/ZerotoHeroes_HS/status/1737422727118487808?s=20\r\n\tconst spawned = performEntitySpawns(\r\n\t\t[newMinion],\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\tplayerEntity,\r\n\t\tindexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tfalse,\r\n\t);\r\n\tgameState.spectator.registerPowerTarget(playerEntity, newMinion, playerBoard, null, null);\r\n\treturn spawned.length > 0;\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"summon-when-space.js","sourceRoot":"","sources":["../../src/simulation/summon-when-space.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { buildSingleBoardEntity } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\n\r\nexport const handleSummonWhenSpace = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (playerEntity.rapidReanimationMinion) {\r\n\t\thandleRapidReanimationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (opponentEntity.rapidReanimationMinion) {\r\n\t\thandleRapidReanimationForPlayer(opponentBoard, opponentEntity, playerBoard, playerEntity, gameState);\r\n\t}\r\n\tif (playerEntity.questRewards?.includes(CardIds.StableAmalgamation_BG28_Reward_518)) {\r\n\t\thandleStableAmalgamationForPlayer(playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);\r\n\t}\r\n\tif (opponentEntity.questRewards?.includes(CardIds.StableAmalgamation_BG28_Reward_518)) {\r\n\t\thandleStableAmalgamationForPlayer(opponentBoard, opponentEntity, playerBoard, playerEntity, gameState);\r\n\t}\r\n};\r\n\r\nconst handleStableAmalgamationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst rewardEntity = playerEntity.questRewardEntities.find(\r\n\t\t(entity) => entity.cardId === CardIds.StableAmalgamation_BG28_Reward_518,\r\n\t);\r\n\tif (rewardEntity && rewardEntity.scriptDataNum1 > 0) {\r\n\t\twhile (rewardEntity.scriptDataNum1 > 0) {\r\n\t\t\tconst hasSummoned = handleSummon(\r\n\t\t\t\tplayerBoard,\r\n\t\t\t\tplayerEntity,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentEntity,\r\n\t\t\t\tgameState,\r\n\t\t\t\tCardIds.StableAmalgamation_TotallyNormalHorseToken_BG28_Reward_518t,\r\n\t\t\t\t0,\r\n\t\t\t);\r\n\t\t\tif (hasSummoned) {\r\n\t\t\t\trewardEntity.scriptDataNum1--;\r\n\t\t\t} else {\r\n\t\t\t\t// No room to summon, we stop here\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleRapidReanimationForPlayer = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst hasSummoned = handleSummon(\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tplayerEntity.rapidReanimationMinion.cardId,\r\n\t\tMath.min(playerBoard.length, playerEntity.rapidReanimationIndexFromRight ?? 0),\r\n\t\tplayerEntity.rapidReanimationMinion,\r\n\t);\r\n\tif (hasSummoned) {\r\n\t\tplayerEntity.rapidReanimationMinion = null;\r\n\t}\r\n};\r\n\r\nconst handleSummon = (\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tcardId: string,\r\n\tindexFromRight: number,\r\n\tminion: BoardEntity = null,\r\n): boolean => {\r\n\tif (playerBoard.length >= 7) {\r\n\t\treturn false;\r\n\t}\r\n\tconst newMinion = buildSingleBoardEntity(\r\n\t\tcardId,\r\n\t\tplayerEntity,\r\n\t\tplayerBoard,\r\n\t\tgameState.allCards,\r\n\t\tplayerEntity.friendly,\r\n\t\tgameState.sharedState.currentEntityId++,\r\n\t\tfalse,\r\n\t\tgameState.cardsData,\r\n\t\tgameState.sharedState,\r\n\t\tminion,\r\n\t\tnull,\r\n\t);\r\n\t// Don't reapply auras in this particular case? See https://x.com/ZerotoHeroes_HS/status/1737422727118487808?s=20\r\n\tconst spawned = performEntitySpawns(\r\n\t\t[newMinion],\r\n\t\tplayerBoard,\r\n\t\tplayerEntity,\r\n\t\tplayerEntity,\r\n\t\tindexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentEntity,\r\n\t\tgameState,\r\n\t\tfalse,\r\n\t);\r\n\tgameState.spectator.registerPowerTarget(playerEntity, newMinion, playerBoard, null, null);\r\n\treturn spawned.length > 0;\r\n};\r\n"]}
|