@firestone-hs/simulate-bgs-battle 1.1.495 → 1.1.496
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cards/cards-data.d.ts +0 -1
- package/dist/cards/cards-data.js +0 -4
- package/dist/cards/cards-data.js.map +1 -1
- package/dist/simulation/blood-gems.js +22 -20
- package/dist/simulation/blood-gems.js.map +1 -1
- package/dist/simulation/deathrattle-effects.js +2 -1
- package/dist/simulation/deathrattle-effects.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,6 @@ export declare const WHELP_CARD_IDS: CardIds[];
|
|
|
3
3
|
export declare class CardsData {
|
|
4
4
|
private readonly allCards;
|
|
5
5
|
ghastcoilerSpawns: readonly string[];
|
|
6
|
-
validDeathrattles: readonly string[];
|
|
7
6
|
impMamaSpawns: readonly string[];
|
|
8
7
|
demonSpawns: readonly string[];
|
|
9
8
|
gentleDjinniSpawns: readonly string[];
|
package/dist/cards/cards-data.js
CHANGED
|
@@ -41,10 +41,6 @@ class CardsData {
|
|
|
41
41
|
.filter((card) => (0, utils_2.hasMechanic)(card, 'DEATHRATTLE'))
|
|
42
42
|
.filter((card) => this.isValidTribe(validTribes, card.races))
|
|
43
43
|
.map((card) => card.id);
|
|
44
|
-
this.validDeathrattles = poolWithGolden
|
|
45
|
-
.filter((card) => (0, utils_2.hasMechanic)(card, 'DEATHRATTLE'))
|
|
46
|
-
.filter((card) => this.isValidTribe(validTribes, card.races))
|
|
47
|
-
.map((card) => card.id);
|
|
48
44
|
this.demonSpawns = this.pool.filter((card) => (0, utils_2.isCorrectTribe)(card.races, reference_data_1.Race.DEMON)).map((card) => card.id);
|
|
49
45
|
this.impMamaSpawns = this.demonSpawns.filter((cardId) => cardId !== "BGS_044");
|
|
50
46
|
this.gentleDjinniSpawns = this.pool
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cards-data.js","sourceRoot":"","sources":["../../src/cards/cards-data.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tAllCardsService,\r\n\tCardIds,\r\n\tCardType,\r\n\tGameTag,\r\n\tisBattlegroundsCard,\r\n\tNON_BUYABLE_MINION_IDS,\r\n\tRace,\r\n\tReferenceCard,\r\n} from '@firestone-hs/reference-data';\r\nimport { groupByFunction, pickRandom } from '../services/utils';\r\nimport { getRaceEnum, hasMechanic, isCorrectTribe } from '../utils';\r\n\r\nexport const WHELP_CARD_IDS = [\r\n\tCardIds.RedWhelp_BGS_019,\r\n\tCardIds.RedWhelp_TB_BaconUps_102,\r\n\tCardIds.Onyxia_OnyxianWhelpToken,\r\n];\r\n\r\nexport class CardsData {\r\n\tpublic ghastcoilerSpawns: readonly string[];\r\n\t// public shredderSpawns: readonly string[];\r\n\tpublic validDeathrattles: readonly string[];\r\n\tpublic impMamaSpawns: readonly string[];\r\n\tpublic demonSpawns: readonly string[];\r\n\tpublic gentleDjinniSpawns: readonly string[];\r\n\t// public festergutSpawns: readonly string[];\r\n\tpublic kilrekSpawns: readonly string[];\r\n\tpublic battlecryMinions: readonly string[];\r\n\tpublic deathrattleMinions: readonly string[];\r\n\t// public sneedsSpawns: readonly string[];\r\n\t// public treasureChestSpawns: readonly string[];\r\n\tpublic pirateSpawns: readonly string[];\r\n\tpublic beastSpawns: readonly string[];\r\n\tpublic scrapScraperSpawns: readonly string[];\r\n\r\n\tpublic putricidePool1: readonly string[];\r\n\tpublic putricidePool2: readonly string[];\r\n\tpublic putridicePool2ForEternalSummoner: readonly string[];\r\n\r\n\tprivate pool: readonly ReferenceCard[];\r\n\tprivate minionsForTier: { [key: string]: readonly ReferenceCard[] };\r\n\r\n\tconstructor(private readonly allCards: AllCardsService, init = true) {\r\n\t\tif (init) {\r\n\t\t\tthis.inititialize();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic inititialize(validTribes?: readonly Race[], anomalies?: readonly string[]): void {\r\n\t\tconst poolWithGolden = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => isBattlegroundsCard(card))\r\n\t\t\t.filter((card) => !NON_BUYABLE_MINION_IDS.includes(card.id as CardIds))\r\n\t\t\t.filter((card) => !!card.techLevel)\r\n\t\t\t.filter((card) => card.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((card) => !hasMechanic(card, GameTag[GameTag.BACON_BUDDY]))\r\n\t\t\t.filter((card) => card.set !== 'Vanilla')\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.BigLeague_BG27_Anomaly_100)\r\n\t\t\t\t\t? card.techLevel >= 3\r\n\t\t\t\t\t: anomalies?.includes(CardIds.LittleLeague_BG27_Anomaly_800)\r\n\t\t\t\t\t? card.techLevel <= 4\r\n\t\t\t\t\t: true,\r\n\t\t\t);\r\n\t\tthis.pool = poolWithGolden\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)\r\n\t\t\t\t\t? this.isGolden(card)\r\n\t\t\t\t\t: !this.isGolden(card),\r\n\t\t\t);\r\n\t\tthis.minionsForTier = groupByFunction((card: ReferenceCard) => card.techLevel)(this.pool);\r\n\t\tthis.ghastcoilerSpawns = this.pool\r\n\t\t\t.filter((card) => card.id !== 'BGS_008')\r\n\t\t\t.filter((card) => hasMechanic(card, 'DEATHRATTLE'))\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.validDeathrattles = poolWithGolden\r\n\t\t\t.filter((card) => hasMechanic(card, 'DEATHRATTLE'))\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.demonSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.DEMON)).map((card) => card.id);\r\n\t\tthis.impMamaSpawns = this.demonSpawns.filter((cardId) => cardId !== CardIds.ImpMama_BGS_044);\r\n\t\tthis.gentleDjinniSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.ELEMENTAL))\r\n\t\t\t.filter((card) => card.id !== CardIds.GentleDjinni_BGS_121)\r\n\t\t\t.map((card) => card.id);\r\n\t\t// FIXME: just spawn a random undead instead of an Undead Creation\r\n\t\t// this.festergutSpawns = pool\r\n\t\t// \t.filter((card) => !this.isGolden(card))\r\n\t\t// \t.filter((card) => isCorrectTribe(card.races, Race.UNDEAD))\r\n\t\t// \t.filter((card) => card.id !== CardIds.Festergut_BG25_HERO_100_Buddy)\r\n\t\t// \t// .filter((card) => REMOVED_CARD_IDS.indexOf(card.id) === -1)\r\n\t\t// \t.map((card) => card.id);\r\n\t\tthis.kilrekSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.DEMON))\r\n\t\t\t.filter((card) => card.id !== CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.battlecryMinions = this.pool.filter((card) => hasMechanic(card, 'BATTLECRY')).map((card) => card.id);\r\n\t\tthis.deathrattleMinions = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag[GameTag.DEATHRATTLE]))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.pirateSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.PIRATE)).map((card) => card.id);\r\n\t\tthis.beastSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.BEAST)).map((card) => card.id);\r\n\t\tthis.scrapScraperSpawns = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag[GameTag.MAGNETIC]))\r\n\t\t\t.map((card) => card.id);\r\n\r\n\t\tthis.putricidePool1 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool1)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putricidePool2 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putridicePool2ForEternalSummoner = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.filter((card) => !card.battlegroundsPutridiceSummonerExclusion)\r\n\t\t\t.map((card) => card.id);\r\n\t}\r\n\r\n\tpublic avengeValue(cardId: string): number {\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.BirdBuddy_BG21_002:\r\n\t\t\tcase CardIds.BirdBuddy_BG21_002_G:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\t// Not technically an avenge, but behaves as if\r\n\t\t\t// case CardIds.ShadowyConstruct_BG25_HERO_103_Buddy:\r\n\t\t\t// case CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G:\r\n\t\t\tcase CardIds.IceSickle:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.GhoulOfTheFeast_BG25_002:\r\n\t\t\tcase CardIds.GhoulOfTheFeast_BG25_002_G:\r\n\t\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\tcase CardIds.VanndarStormpike_LeadTheStormpikes:\r\n\t\t\tcase CardIds.Drekthar_LeadTheFrostwolves:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030:\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030_G:\r\n\t\t\t// case CardIds.FrostwolfLieutenant:\r\n\t\t\t// case CardIds.FrostwolfLieutenantBattlegrounds:\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014:\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038:\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038_G:\r\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\tcase CardIds.ChampionOfThePrimus_BG27_029:\r\n\t\t\tcase CardIds.ChampionOfThePrimus_BG27_029_G:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\tcase CardIds.GilneanThornedRose_BG30_MagicItem_864:\r\n\t\t\tcase CardIds.FridgeMagnet_BG30_MagicItem_545:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\tcase CardIds.Sisefin_BG21_009:\r\n\t\t\tcase CardIds.Sisefin_BG21_009_G:\r\n\t\t\tcase CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\tcase CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\r\n\t\t\tcase CardIds.QuilligraphySet_QuilligraphySetToken_BG30_MagicItem_410t2:\r\n\t\t\tcase CardIds.QuilligraphySet_BG30_MagicItem_410:\r\n\t\t\t\treturn 4;\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\r\n\t\t\tcase CardIds.KarmicChameleon_BG31_802:\r\n\t\t\tcase CardIds.KarmicChameleon_BG31_802_G:\r\n\t\t\t\treturn 5;\r\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\r\n\t\t\t\treturn 6;\r\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\t\treturn 7;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tpublic defaultScriptDataNum(cardId: string): number {\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\r\n\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\r\n\t\t\tcase CardIds.BoomController_BG30_MagicItem_440:\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\tcase CardIds.DeathlyPhylactery_BG30_MagicItem_700:\r\n\t\t\tcase CardIds.PromoPortrait_BG30_MagicItem_918:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.JarOGems_BG30_MagicItem_546:\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.MechagonAdapter_BG30_MagicItem_910:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.ReinforcedShield_BG30_MagicItem_886:\r\n\t\t\t\treturn 4;\r\n\t\t\tdefault:\r\n\t\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getTavernLevel(cardId: string): number {\r\n\t\treturn this.allCards.getCard(cardId).techLevel ?? 1;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTavernTier(tavernTier: number): string {\r\n\t\t// Tzvern tier can be undefined for hero-power specific tokens, like the Amalgam, or when\r\n\t\t// for some reason tokens end up in the shop. For now, defaulting to 1 for tavern\r\n\t\t// level seems to work in all cases\r\n\t\tconst minionsForTier = this.minionsForTier[tavernTier ?? 1];\r\n\t\tif (!minionsForTier?.length) {\r\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\r\n\t\t}\r\n\t\treturn pickRandom(this.minionsForTier[tavernTier ?? 1])?.id;\r\n\t}\r\n\r\n\tpublic getRandomMechToMagnetize(tavernLimitUpper: number): string {\r\n\t\tconst magneticMechs = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag[GameTag.MODULAR]));\r\n\t\tconst pool = magneticMechs.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTribe(tribe: Race, tavernLimitUpper: number): string {\r\n\t\tconst pool = this.pool\r\n\t\t\t.filter((m) => this.isValidTribe([tribe], m.races, false))\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic isGolden(card: ReferenceCard): boolean {\r\n\t\treturn card.premium || !!card.battlegroundsNormalDbfId;\r\n\t}\r\n\r\n\tprivate isValidTribe(validTribes: readonly Race[], cardRaces: readonly string[], allowEmptyRaces = true): boolean {\r\n\t\tif (!cardRaces?.length && allowEmptyRaces) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn (cardRaces ?? [])\r\n\t\t\t.map((race) => getRaceEnum(race))\r\n\t\t\t.some((raceEnum) => raceEnum === Race.ALL || !validTribes?.length || validTribes.includes(raceEnum));\r\n\t}\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"cards-data.js","sourceRoot":"","sources":["../../src/cards/cards-data.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tAllCardsService,\r\n\tCardIds,\r\n\tCardType,\r\n\tGameTag,\r\n\tisBattlegroundsCard,\r\n\tNON_BUYABLE_MINION_IDS,\r\n\tRace,\r\n\tReferenceCard,\r\n} from '@firestone-hs/reference-data';\r\nimport { groupByFunction, pickRandom } from '../services/utils';\r\nimport { getRaceEnum, hasMechanic, isCorrectTribe } from '../utils';\r\n\r\nexport const WHELP_CARD_IDS = [\r\n\tCardIds.RedWhelp_BGS_019,\r\n\tCardIds.RedWhelp_TB_BaconUps_102,\r\n\tCardIds.Onyxia_OnyxianWhelpToken,\r\n];\r\n\r\nexport class CardsData {\r\n\tpublic ghastcoilerSpawns: readonly string[];\r\n\tpublic impMamaSpawns: readonly string[];\r\n\tpublic demonSpawns: readonly string[];\r\n\tpublic gentleDjinniSpawns: readonly string[];\r\n\tpublic kilrekSpawns: readonly string[];\r\n\tpublic battlecryMinions: readonly string[];\r\n\tpublic deathrattleMinions: readonly string[];\r\n\tpublic pirateSpawns: readonly string[];\r\n\tpublic beastSpawns: readonly string[];\r\n\tpublic scrapScraperSpawns: readonly string[];\r\n\r\n\tpublic putricidePool1: readonly string[];\r\n\tpublic putricidePool2: readonly string[];\r\n\tpublic putridicePool2ForEternalSummoner: readonly string[];\r\n\r\n\tprivate pool: readonly ReferenceCard[];\r\n\tprivate minionsForTier: { [key: string]: readonly ReferenceCard[] };\r\n\r\n\tconstructor(private readonly allCards: AllCardsService, init = true) {\r\n\t\tif (init) {\r\n\t\t\tthis.inititialize();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic inititialize(validTribes?: readonly Race[], anomalies?: readonly string[]): void {\r\n\t\tconst poolWithGolden = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => isBattlegroundsCard(card))\r\n\t\t\t.filter((card) => !NON_BUYABLE_MINION_IDS.includes(card.id as CardIds))\r\n\t\t\t.filter((card) => !!card.techLevel)\r\n\t\t\t.filter((card) => card.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((card) => !hasMechanic(card, GameTag[GameTag.BACON_BUDDY]))\r\n\t\t\t.filter((card) => card.set !== 'Vanilla')\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.BigLeague_BG27_Anomaly_100)\r\n\t\t\t\t\t? card.techLevel >= 3\r\n\t\t\t\t\t: anomalies?.includes(CardIds.LittleLeague_BG27_Anomaly_800)\r\n\t\t\t\t\t? card.techLevel <= 4\r\n\t\t\t\t\t: true,\r\n\t\t\t);\r\n\t\tthis.pool = poolWithGolden\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.filter((card) =>\r\n\t\t\t\tanomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)\r\n\t\t\t\t\t? this.isGolden(card)\r\n\t\t\t\t\t: !this.isGolden(card),\r\n\t\t\t);\r\n\t\tthis.minionsForTier = groupByFunction((card: ReferenceCard) => card.techLevel)(this.pool);\r\n\t\tthis.ghastcoilerSpawns = this.pool\r\n\t\t\t.filter((card) => card.id !== 'BGS_008')\r\n\t\t\t.filter((card) => hasMechanic(card, 'DEATHRATTLE'))\r\n\t\t\t.filter((card) => this.isValidTribe(validTribes, card.races))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.demonSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.DEMON)).map((card) => card.id);\r\n\t\tthis.impMamaSpawns = this.demonSpawns.filter((cardId) => cardId !== CardIds.ImpMama_BGS_044);\r\n\t\tthis.gentleDjinniSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.ELEMENTAL))\r\n\t\t\t.filter((card) => card.id !== CardIds.GentleDjinni_BGS_121)\r\n\t\t\t.map((card) => card.id);\r\n\t\t// FIXME: just spawn a random undead instead of an Undead Creation\r\n\t\t// this.festergutSpawns = pool\r\n\t\t// \t.filter((card) => !this.isGolden(card))\r\n\t\t// \t.filter((card) => isCorrectTribe(card.races, Race.UNDEAD))\r\n\t\t// \t.filter((card) => card.id !== CardIds.Festergut_BG25_HERO_100_Buddy)\r\n\t\t// \t// .filter((card) => REMOVED_CARD_IDS.indexOf(card.id) === -1)\r\n\t\t// \t.map((card) => card.id);\r\n\t\tthis.kilrekSpawns = this.pool\r\n\t\t\t.filter((card) => isCorrectTribe(card.races, Race.DEMON))\r\n\t\t\t.filter((card) => card.id !== CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.battlecryMinions = this.pool.filter((card) => hasMechanic(card, 'BATTLECRY')).map((card) => card.id);\r\n\t\tthis.deathrattleMinions = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag[GameTag.DEATHRATTLE]))\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.pirateSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.PIRATE)).map((card) => card.id);\r\n\t\tthis.beastSpawns = this.pool.filter((card) => isCorrectTribe(card.races, Race.BEAST)).map((card) => card.id);\r\n\t\tthis.scrapScraperSpawns = this.pool\r\n\t\t\t.filter((card) => hasMechanic(card, GameTag[GameTag.MAGNETIC]))\r\n\t\t\t.map((card) => card.id);\r\n\r\n\t\tthis.putricidePool1 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool1)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putricidePool2 = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.map((card) => card.id);\r\n\t\tthis.putridicePool2ForEternalSummoner = this.allCards\r\n\t\t\t.getCards()\r\n\t\t\t.filter((card) => card.battlegroundsPutridicePool2)\r\n\t\t\t.filter((card) => !card.battlegroundsPutridiceSummonerExclusion)\r\n\t\t\t.map((card) => card.id);\r\n\t}\r\n\r\n\tpublic avengeValue(cardId: string): number {\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.BirdBuddy_BG21_002:\r\n\t\t\tcase CardIds.BirdBuddy_BG21_002_G:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\r\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\r\n\t\t\t// Not technically an avenge, but behaves as if\r\n\t\t\t// case CardIds.ShadowyConstruct_BG25_HERO_103_Buddy:\r\n\t\t\t// case CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G:\r\n\t\t\tcase CardIds.IceSickle:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.GhoulOfTheFeast_BG25_002:\r\n\t\t\tcase CardIds.GhoulOfTheFeast_BG25_002_G:\r\n\t\t\tcase CardIds.MechanoTank_BG21_023:\r\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\r\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\r\n\t\t\tcase CardIds.VanndarStormpike_LeadTheStormpikes:\r\n\t\t\tcase CardIds.Drekthar_LeadTheFrostwolves:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157:\r\n\t\t\tcase CardIds.Bristlebach_BG26_157_G:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030:\r\n\t\t\tcase CardIds.BuddingGreenthumb_BG21_030_G:\r\n\t\t\t// case CardIds.FrostwolfLieutenant:\r\n\t\t\t// case CardIds.FrostwolfLieutenantBattlegrounds:\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014:\r\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038:\r\n\t\t\tcase CardIds.WitchwingNestmatron_BG21_038_G:\r\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\r\n\t\t\tcase CardIds.ChampionOfThePrimus_BG27_029:\r\n\t\t\tcase CardIds.ChampionOfThePrimus_BG27_029_G:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\r\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\r\n\t\t\tcase CardIds.GilneanThornedRose_BG30_MagicItem_864:\r\n\t\t\tcase CardIds.FridgeMagnet_BG30_MagicItem_545:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.Onyxia_Broodmother:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\r\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\r\n\t\t\tcase CardIds.Sisefin_BG21_009:\r\n\t\t\tcase CardIds.Sisefin_BG21_009_G:\r\n\t\t\tcase CardIds.TonyTwoTusk_BG21_031:\r\n\t\t\tcase CardIds.TonyTwoTusk_BG21_031_G:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148:\r\n\t\t\t// case CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\r\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\r\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\r\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\r\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\r\n\t\t\tcase CardIds.QuilligraphySet_QuilligraphySetToken_BG30_MagicItem_410t2:\r\n\t\t\tcase CardIds.QuilligraphySet_BG30_MagicItem_410:\r\n\t\t\t\treturn 4;\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\r\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\r\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\r\n\t\t\tcase CardIds.KarmicChameleon_BG31_802:\r\n\t\t\tcase CardIds.KarmicChameleon_BG31_802_G:\r\n\t\t\t\treturn 5;\r\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\r\n\t\t\t\treturn 6;\r\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\r\n\t\t\t\treturn 7;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tpublic defaultScriptDataNum(cardId: string): number {\r\n\t\tswitch (cardId) {\r\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\r\n\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\r\n\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\r\n\t\t\tcase CardIds.BoomController_BG30_MagicItem_440:\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\tcase CardIds.DeathlyPhylactery_BG30_MagicItem_700:\r\n\t\t\tcase CardIds.PromoPortrait_BG30_MagicItem_918:\r\n\t\t\t\treturn 1;\r\n\t\t\tcase CardIds.JarOGems_BG30_MagicItem_546:\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\t\treturn 2;\r\n\t\t\tcase CardIds.MechagonAdapter_BG30_MagicItem_910:\r\n\t\t\t\treturn 3;\r\n\t\t\tcase CardIds.ReinforcedShield_BG30_MagicItem_886:\r\n\t\t\t\treturn 4;\r\n\t\t\tdefault:\r\n\t\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getTavernLevel(cardId: string): number {\r\n\t\treturn this.allCards.getCard(cardId).techLevel ?? 1;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTavernTier(tavernTier: number): string {\r\n\t\t// Tzvern tier can be undefined for hero-power specific tokens, like the Amalgam, or when\r\n\t\t// for some reason tokens end up in the shop. For now, defaulting to 1 for tavern\r\n\t\t// level seems to work in all cases\r\n\t\tconst minionsForTier = this.minionsForTier[tavernTier ?? 1];\r\n\t\tif (!minionsForTier?.length) {\r\n\t\t\tconsole.error('incorrect minions for tier', tavernTier);\r\n\t\t}\r\n\t\treturn pickRandom(this.minionsForTier[tavernTier ?? 1])?.id;\r\n\t}\r\n\r\n\tpublic getRandomMechToMagnetize(tavernLimitUpper: number): string {\r\n\t\tconst magneticMechs = this.pool\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => hasMechanic(m, GameTag[GameTag.MODULAR]));\r\n\t\tconst pool = magneticMechs.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic getRandomMinionForTribe(tribe: Race, tavernLimitUpper: number): string {\r\n\t\tconst pool = this.pool\r\n\t\t\t.filter((m) => this.isValidTribe([tribe], m.races, false))\r\n\t\t\t.filter((m) => m.type?.toUpperCase() === CardType[CardType.MINION])\r\n\t\t\t.filter((m) => m.techLevel <= tavernLimitUpper);\r\n\t\treturn pickRandom(pool)?.id;\r\n\t}\r\n\r\n\tpublic isGolden(card: ReferenceCard): boolean {\r\n\t\treturn card.premium || !!card.battlegroundsNormalDbfId;\r\n\t}\r\n\r\n\tprivate isValidTribe(validTribes: readonly Race[], cardRaces: readonly string[], allowEmptyRaces = true): boolean {\r\n\t\tif (!cardRaces?.length && allowEmptyRaces) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn (cardRaces ?? [])\r\n\t\t\t.map((race) => getRaceEnum(race))\r\n\t\t\t.some((raceEnum) => raceEnum === Race.ALL || !validTribes?.length || validTribes.includes(raceEnum));\r\n\t}\r\n}\r\n"]}
|
|
@@ -38,32 +38,34 @@ const playBloodGemsOn = (source, target, quantity, board, hero, gameState, regis
|
|
|
38
38
|
bloodGemEnchantment.tagScriptDataNum1 += bloodGemAttack;
|
|
39
39
|
bloodGemEnchantment.tagScriptDataNum2 += bloodGemHealth;
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
for (let i = 0; i < quantity; i++) {
|
|
42
|
+
switch (target.cardId) {
|
|
43
|
+
case "BG20_102":
|
|
44
|
+
case "BG20_102_G":
|
|
45
|
+
if (!target.divineShield) {
|
|
46
|
+
(0, divine_shield_1.updateDivineShield)(target, board, hero, null, true, gameState);
|
|
47
|
+
gameState.spectator.registerPowerTarget(target, target, board, null, null);
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
case "BG28_583":
|
|
51
|
+
case "BG28_583_G":
|
|
52
52
|
const roogugTargets = board.filter((e) => e.cardId !== "BG28_583" && e.cardId !== "BG28_583_G");
|
|
53
53
|
const roogugTarget = (0, utils_1.pickRandom)(roogugTargets);
|
|
54
54
|
if (roogugTarget) {
|
|
55
55
|
const roogugBuff = target.cardId === "BG28_583_G" ? 2 : 1;
|
|
56
56
|
(0, exports.playBloodGemsOn)(target, roogugTarget, roogugBuff, board, hero, gameState, false);
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
58
|
+
break;
|
|
59
|
+
case "BG20_302":
|
|
60
|
+
case "BG20_302_G":
|
|
61
|
+
const aggemGemsToPlay = target.cardId === "BG20_302_G" ? 2 : 1;
|
|
62
|
+
const candidates = (0, utils_2.getMinionsOfDifferentTypes)(board.filter((e) => e.cardId !== "BG20_302" &&
|
|
63
|
+
e.cardId !== "BG20_302_G"), hero, gameState);
|
|
64
|
+
for (const candidate of candidates) {
|
|
65
|
+
(0, exports.playBloodGemsOn)(target, candidate, aggemGemsToPlay, board, hero, gameState, false);
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
67
69
|
}
|
|
68
70
|
};
|
|
69
71
|
exports.playBloodGemsOn = playBloodGemsOn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blood-gems.js","sourceRoot":"","sources":["../../src/simulation/blood-gems.ts"],"names":[],"mappings":";;;AAGA,oDAAsD;AACtD,6CAA+C;AAC/C,oCAAsD;AAEtD,mCAAsC;AAE/B,MAAM,eAAe,GAAG,CAC9B,MAAkC,EAClC,MAAmB,EACnB,QAAgB,EAChB,KAAoB,EACpB,IAAqB,EACrB,SAAwB,EACxB,cAAc,GAAG,IAAI,EACpB,EAAE;;IACH,IAAI,cAAc,EAAE;QACnB,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAC3E;IAED,MAAM,cAAc,GACnB,CAAC;QACD,CAAC,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,mBAAmB,mCAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAgD,CAAC,CAAC,MAAM,GAAG,CAAC;QAChG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,0BAAuE,CAAC;aAC1G,MAAM;YACP,CAAC,CAAC;IACJ,MAAM,cAAc,GACnB,CAAC;QACD,CAAC,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,mBAAmB,mCAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,0BAAuE,CAAC;aAC1G,MAAM;YACP,CAAC,CAAC;IAEJ,IAAI,mBAAmB,GACtB,MAAA,MAAA,MAAM,CAAC,YAAY,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,gBAAyC,CAAC,mCACnF,MAAA,MAAM,CAAC,YAAY,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAA0C,CAAC,CAAC;IACtF,IAAI,CAAC,mBAAmB,EAAE;QACzB,mBAAmB,GAAG;YACrB,MAAM,aAAsC;YAC5C,cAAc,EAAE,MAAM,CAAC,QAAQ;YAC/B,MAAM,EAAE,CAAC;YACT,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;SACpB,CAAC;QACF,MAAM,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KAC9C;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;QAClC,IAAA,mBAAW,EAAC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5E,mBAAmB,CAAC,iBAAiB,IAAI,cAAc,CAAC;QACxD,mBAAmB,CAAC,iBAAiB,IAAI,cAAc,CAAC;KACxD;IAED,QAAQ,MAAM,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"blood-gems.js","sourceRoot":"","sources":["../../src/simulation/blood-gems.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { updateDivineShield } from '../divine-shield';\r\nimport { pickRandom } from '../services/utils';\r\nimport { getMinionsOfDifferentTypes } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const playBloodGemsOn = (\r\n\tsource: BoardEntity | BoardTrinket,\r\n\ttarget: BoardEntity,\r\n\tquantity: number,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tregisterTarget = true,\r\n) => {\r\n\tif (registerTarget) {\r\n\t\tgameState.spectator.registerPowerTarget(source, target, board, null, null);\r\n\t}\r\n\r\n\tconst bloodGemAttack =\r\n\t\t1 +\r\n\t\t(hero.globalInfo?.BloodGemAttackBonus ?? 0) +\r\n\t\thero.trinkets.filter((t) => t.cardId === CardIds.GreatBoarSticker_BG30_MagicItem_988).length * 3 +\r\n\t\thero.trinkets.filter((t) => t.cardId === CardIds.GreatBoarSticker_GreatBoarStickerToken_BG30_MagicItem_988t)\r\n\t\t\t.length *\r\n\t\t\t2;\r\n\tconst bloodGemHealth =\r\n\t\t1 +\r\n\t\t(hero.globalInfo?.BloodGemHealthBonus ?? 0) +\r\n\t\thero.trinkets.filter((t) => t.cardId === CardIds.GreatBoarSticker_GreatBoarStickerToken_BG30_MagicItem_988t)\r\n\t\t\t.length *\r\n\t\t\t2;\r\n\r\n\tlet bloodGemEnchantment =\r\n\t\ttarget.enchantments?.find((e) => e.cardId === CardIds.BloodGem_BloodGemEnchantment) ??\r\n\t\ttarget.enchantments?.find((e) => e.cardId === CardIds.BloodGem_BloodGemsEnchantment);\r\n\tif (!bloodGemEnchantment) {\r\n\t\tbloodGemEnchantment = {\r\n\t\t\tcardId: CardIds.BloodGem_BloodGemEnchantment,\r\n\t\t\toriginEntityId: source.entityId,\r\n\t\t\ttiming: 0,\r\n\t\t\ttagScriptDataNum1: 0,\r\n\t\t\ttagScriptDataNum2: 0,\r\n\t\t};\r\n\t\ttarget.enchantments = target.enchantments ?? [];\r\n\t\ttarget.enchantments.push(bloodGemEnchantment);\r\n\t}\r\n\r\n\tfor (let i = 0; i < quantity; i++) {\r\n\t\tmodifyStats(target, bloodGemAttack, bloodGemHealth, board, hero, gameState);\r\n\t\tbloodGemEnchantment.tagScriptDataNum1 += bloodGemAttack;\r\n\t\tbloodGemEnchantment.tagScriptDataNum2 += bloodGemHealth;\r\n\t}\r\n\r\n\tfor (let i = 0; i < quantity; i++) {\r\n\t\tswitch (target.cardId) {\r\n\t\t\tcase CardIds.ToughTusk_BG20_102:\r\n\t\t\tcase CardIds.ToughTusk_BG20_102_G:\r\n\t\t\t\tif (!target.divineShield) {\r\n\t\t\t\t\tupdateDivineShield(target, board, hero, null, true, gameState);\r\n\t\t\t\t\tgameState.spectator.registerPowerTarget(target, target, board, null, null);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.GeomagusRoogug_BG28_583:\r\n\t\t\tcase CardIds.GeomagusRoogug_BG28_583_G:\r\n\t\t\t\tconst roogugTargets = board.filter(\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\te.cardId !== CardIds.GeomagusRoogug_BG28_583 && e.cardId !== CardIds.GeomagusRoogug_BG28_583_G,\r\n\t\t\t\t);\r\n\t\t\t\tconst roogugTarget = pickRandom(roogugTargets);\r\n\t\t\t\tif (roogugTarget) {\r\n\t\t\t\t\tconst roogugBuff = target.cardId === CardIds.GeomagusRoogug_BG28_583_G ? 2 : 1;\r\n\t\t\t\t\tplayBloodGemsOn(target, roogugTarget, roogugBuff, board, hero, gameState, false);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.AggemThorncurse_BG20_302:\r\n\t\t\tcase CardIds.AggemThorncurse_BG20_302_G:\r\n\t\t\t\t// console.debug('playing blood gem on Aggem Thorncurse', target.cardId);\r\n\t\t\t\tconst aggemGemsToPlay = target.cardId === CardIds.AggemThorncurse_BG20_302_G ? 2 : 1;\r\n\t\t\t\tconst candidates = getMinionsOfDifferentTypes(\r\n\t\t\t\t\tboard.filter(\r\n\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\te.cardId !== CardIds.AggemThorncurse_BG20_302 &&\r\n\t\t\t\t\t\t\te.cardId !== CardIds.AggemThorncurse_BG20_302_G,\r\n\t\t\t\t\t),\r\n\t\t\t\t\thero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tfor (const candidate of candidates) {\r\n\t\t\t\t\tplayBloodGemsOn(target, candidate, aggemGemsToPlay, board, hero, gameState, false);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n};\r\n"]}
|
|
@@ -944,8 +944,9 @@ const rememberDeathrattles = (fish, deadEntities, cardsData, allCards, sharedSta
|
|
|
944
944
|
if (!(deadEntities === null || deadEntities === void 0 ? void 0 : deadEntities.length)) {
|
|
945
945
|
return;
|
|
946
946
|
}
|
|
947
|
+
const hasMechorse = deadEntities.some((entity) => entity.cardId === "BG27_008t");
|
|
947
948
|
const validDeathrattles = deadEntities
|
|
948
|
-
.filter((entity) =>
|
|
949
|
+
.filter((entity) => { var _a; return ((_a = allCards.getCard(entity.cardId).mechanics) === null || _a === void 0 ? void 0 : _a.includes(reference_data_1.GameTag[reference_data_1.GameTag.DEATHRATTLE])) || (0, utils_2.isFish)(entity); })
|
|
949
950
|
.map((entity) => ({ cardId: entity.cardId, repeats: 1, timing: sharedState.currentEntityId++ }));
|
|
950
951
|
const validEnchantments = deadEntities
|
|
951
952
|
.filter((entity) => { var _a; return (_a = entity.enchantments) === null || _a === void 0 ? void 0 : _a.length; })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deathrattle-effects.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-effects.ts"],"names":[],"mappings":";;;AACA,iEAAiG;AAIjG,oDAA+E;AAC/E,6CAM2B;AAC3B,gEAAwE;AACxE,oCAWkB;AAClB,qCAMkB;AAClB,+CAAiD;AACjD,6CAA+C;AAC/C,mDAAiD;AACjD,qEAA6F;AAC7F,6DAAqD;AAErD,qEAAwE;AAGxE,mCAAsC;AACtC,2CAAkD;AAE3C,MAAM,4BAA4B,GAAG,CAC3C,KAAoB,EACpB,SAA0B,EAC1B,UAAuB,EACvB,WAAwB,EACf,EAAE;;IACX,MAAM,SAAS,GACd,CAAC,CAAC,KAAK,CAAC,IAAI,CACX,CAAC,MAAM,EAAE,EAAE,CACV,MAAM,CAAC,MAAM,iBAAsC;QACnD,MAAM,CAAC,MAAM,eAAsC,CACpD,KAAI,MAAA,SAAS,CAAC,OAAO,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAkC,CAAC,CAAA,CAAC;IACjF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CACjC,CAAC,MAAM,EAAE,EAAE,CACV,MAAM,CAAC,MAAM,sBAA2C;QACxD,MAAM,CAAC,MAAM,iBAAwC,CACtD,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,eAAoC,CAAC,CAAC,MAAM,CAAC;IACjG,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,MAAM,CAAC;IACzG,MAAM,mBAAmB,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAiD,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,CACxF,CAAC,MAAM,CAAC;IACT,MAAM,KAAK,GACV,MAAA,MAAA,MAAA,SAAS,CAAC,mBAAmB,0CAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,sBAA2B,CAAC,0CAAE,MAAM,mCAAI,CAAC,CAAC;IAC1G,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,oBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,iBAAiB,GAAG,CAAA,MAAA,UAAU,CAAC,eAAe,0CAAE,QAAQ,WAAsB,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,MAAM,UAAU,GACf,iBAAiB;QACjB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,mBAAmB;YACnB,KAAK;YACL,CAAC,GAAG,WAAW;YACf,KAAK;YACL,aAAa,CAAC,CAAC;IACjB,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AApCW,QAAA,4BAA4B,gCAoCvC;AAaK,MAAM,wBAAwB,GAAG,CACvC,mBAAkC,EAClC,uBAAwC,EACxC,UAAuB,EACvB,wBAAgC,EAChC,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACjB,EAAE;;IACT,MAAM,UAAU,GAAG,IAAA,oCAA4B,EAC9C,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,SAAS,CAAC,WAAW,CACrB,CAAC;IACF,MAAM,yBAAyB,GAA8B;QAC5D,mBAAmB;QACnB,uBAAuB;QACvB,UAAU;QACV,UAAU;QACV,cAAc;QACd,SAAS;KACT,CAAC;IAIF,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,MAAA,UAAU,CAAC,eAAe,mCAAI,EAAE,CAAC,CAAC,CAAC;IAM3E,IAAI,YAAY,GAAoE;QACnF,GAAG,CAAC,MAAA,UAAU,CAAC,YAAY,mCAAI,EAAE,CAAC;KAGlC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAMtC,MAAM,iBAAiB,GAAG,EAAE,CAAC;IAC7B,MAAM,iBAAiB,GAAG,IAAA,uBAAe,EAAC,CAAC,WAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAClG,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;SAC3C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,oDAA8B,CAAC,QAAQ,CAAC,MAAiB,CAAC,CAAC;SAC9E,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACnB,IAAI,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAErG,IACC;;;SAGC,CAAC,QAAQ,CAAC,MAAiB,CAAC,EAC5B;YACD,cAAc,GAAG,cAAc,GAAG,UAAU,CAAC;SAC7C;QAED,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC;QACnF,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,OAAO,WAAW,GAAG,cAAc,EAAE;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;aACnE,CAAC,CAAC;YACH,WAAW,IAAI,cAAc,CAAC;SAC9B;QACD,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC,CAAC;IAOJ,KAAK,MAAM,gBAAgB,IAAI,OAAO,EAAE;QACvC,QAAQ,gBAAgB,EAAE;YACzB,gBAAqC;YACrC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,aAAa,GAAG,IAAA,sBAAa,EAClC,mBAAmB,EACnB,UAAU,EACV,wBAAwB,CACxB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,wBAAO,CAAC,wBAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC/F,MAAM,UAAU,GACf,gBAAgB,iBAAsC;wBACrD,CAAC,CAAC,aAAa;wBACf,CAAC,CAAC,CAAC,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAMnD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;wBAEnC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;wBAEF,IAAA,8BAAgB,EACf,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;qBAEF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uCAAuB,EACtB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uCAAuB,EACtB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,SAAS,CACT,CAAC;oBACF,IAAA,uCAAuB,EACtB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAsC;YACtC;gBACC,MAAM,iBAAiB,GAAG,gBAAgB,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC,EAAE,EAAE;wBAC3C,MAAM,sBAAsB,GAAG,mBAAmB;6BAChD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;6BACpC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;6BACrC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;6BAC/D,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,IAAA,uBAAe,EAAC,MAAM,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CACjF,CAAC;wBACH,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;4BACtC,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,sBAAsB,CAAC,CAAC;4BAClD,IAAA,sBAAc,EAAC,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;4BACtF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,kCAAoD;YACpD;gBACC,MAAM,UAAU,GAAG,gBAAgB,mCAAqD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;wBACpC,IAAI,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAChF,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,EAAE;4BAC1B,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACrE,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,EAAE;gCAC1B,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;6BACxE;yBACD;wBACD,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;wBACxC,IAAI,MAAM,EAAE;4BACX,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;gCACzB,IAAA,kCAAkB,EACjB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,IAAI,EACJ,SAAS,CACT,CAAC;6BACF;4BACD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;4BACpB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;4BACvB,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,eAAkC;YAClC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,gBAAgB,GAAG,gBAAgB,sBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;wBAC1C,MAAM,YAAY,GAAG,mBAAmB;6BACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;6BAC3F,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC3C,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;wBACxC,IAAI,MAAM,EAAE;4BACX,IAAA,kCAAkB,EACjB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,IAAI,EACJ,SAAS,CACT,CAAC;4BACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uBAAe,EAAC,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC3F,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uBAAe,EAAC,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC3F,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,eAA0C;YAC1C;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,YAAY,GAAG,gBAAgB,sBAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/F,IAAA,uBAAe,EACd,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,CACP,CAAC;oBACF,uBAAuB,CAAC,UAAU,CAAC,eAAe,IAAI,YAAY,CAAC;oBACnE,uBAAuB,CAAC,UAAU,CAAC,kBAAkB,IAAI,YAAY,CAAC;oBACtE,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAuC;YACvC;gBACC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uBAAe,EACd,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,SAAS,EACT,qBAAI,CAAC,qBAAI,CAAC,KAAK,CAAC,CAChB,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YAuBP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,yBAAiB,EAChB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,CAAC,MAAM,EACjB,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,yBAAiB,EAChB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,CAAC,MAAM,EACjB,SAAS,CACT,CAAC;oBACF,IAAA,yBAAiB,EAChB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,CAAC,MAAM,EACjB,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAyC;YACzC;gBACC,MAAM,mBAAmB,GAAG,gBAAgB,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;wBAC7C,MAAM,WAAW,GAAG,mBAAmB,CAAC;wBACxC,IAAA,yBAAiB,EAChB,UAAU,EACV,WAAW,EACX,uBAAuB,EACvB,UAAU,CAAC,SAAS,EACpB,SAAS,EACT,IAAI,CACJ,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAuC;YACvC;gBACC,MAAM,cAAc,GAAG,gBAAgB,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;wBACxC,MAAM,qBAAqB,GAAG,EAAE,CAAC;wBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC3B,MAAM,MAAM,GAAG,IAAA,uBAAe,EAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAC9E,CAAC;4BACF,IAAI,CAAC,CAAC,MAAM,EAAE;gCACb,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gCAC5C,IAAA,mBAAW,EACV,MAAM,EACN,UAAU,CAAC,MAAM,EACjB,CAAC,EACD,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;gCACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,IAAI,EACJ,IAAI,CACJ,CAAC;6BACF;yBACD;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBAEpC,sBAAsB,CACrB,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,KAAK,EACL,SAAS,EACT,UAAU,CAAC,kBAAkB,CAC7B,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,sBAAsB,CACrB,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,IAAI,EACJ,SAAS,EACT,UAAU,CAAC,kBAAkB,CAC7B,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,MAAM,GAAG,IAAA,wBAAgB,EAC9B,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,CAAC,EACD,CAAC,EACD,qBAAI,CAAC,KAAK,EACV,IAAI,EACJ,SAAS,CACT,CAAC;oBACF,IAAI,CAAC,CAAC,MAAM,EAAE;wBACb,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,MAAM,GAAG,IAAA,wBAAgB,EAC9B,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,EAAE,EACF,EAAE,EACF,qBAAI,CAAC,KAAK,EACV,IAAI,EACJ,SAAS,CACT,CAAC;oBACF,IAAI,CAAC,CAAC,MAAM,EAAE;wBACb,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAmC;YACnC;gBACC,MAAM,iBAAiB,GAAG,gBAAgB,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,MAAM,GAAG,IAAA,wBAAgB,EAC9B,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,GAAG,CAAC,EACrB,iBAAiB,GAAG,CAAC,EACrB,qBAAI,CAAC,MAAM,EACX,KAAK,EACL,SAAS,CACT,CAAC;oBACF,IAAI,CAAC,CAAC,MAAM,EAAE;wBACb,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAA2C;YAC3C;gBACC,MAAM,kBAAkB,GAAG,gBAAgB,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChG,MAAM,WAAW,GAAG,kBAAkB,GAAG,CAAC,CAAC;gBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB,IAAI,WAAW,CAAC;oBACpE,IAAA,uBAAe,EACd,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,CAAC,EACD,SAAS,EACT,qBAAI,CAAC,qBAAI,CAAC,MAAM,CAAC,CACjB,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YAyBP,kCAA+D;YAC/D;gBAGC,MAAM,cAAc,GACnB,UAAU,CAAC,MAAM,mCAAgE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,2BAA2B,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM;yBAC9D,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC;yBAE3D,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,IAAA,uBAAe,EAAC,MAAM,EAAE,uBAAuB,EAAE,qBAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAC/E,CAAC,MAAM,CAAC;oBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,2BAA2B,EAAE,CAAC,EAAE,EAAE;wBACrD,IAAA,gCAAuB,EACtB,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,kBAAkC;YAClC;gBAGC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,sBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpF,MAAM,UAAU,GACf,CAAC;oBACD,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAiD,CAChE,CAAC,MAAM;wBACP,CAAC,CAAC;gBACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;wBACrC,IAAA,gCAAuB,EACtB,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAiC;YACjC;gBACC,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,iBAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE;wBAEzC,MAAM,eAAe,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,mBAAmB,CAAC,CAAC;wBAChE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;4BACrC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC;4BAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC;4BAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,cAAc,CAAC;4BACnE,IAAA,2BAAkB,EACjB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,UAAU,EACV,CAAC,EACD,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAC7C,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,uBAAuB,EACrD,SAAS,CACT,CAAC;yBACF;qBACD;oBAMD,IAAA,2BAAkB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAqC;YACrC;gBAGC,MAAM,oBAAoB,GAAG,UAAU,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC3B,MAAM,MAAM,GAAG,IAAA,8BAAsB,EAAC,UAAU,CAAC,CAAC;wBAClD,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,UAAU,EACV,uBAAuB,EACvB,cAAc,CACd,CAAC;wBACF,IAAA,2BAAkB,EACjB,MAAM,EACN,UAAU,EACV,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAgC;YAChC;gBAGC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBAOpC,MAAM,OAAO,GAAG,IAAA,2BAAkB,EACjC,mBAAmB,EACnB,IAAI,EACJ,wBAAwB,EACxB,UAAU,EACV,CAAC,EACD,SAAS,CAAC,QAAQ,CAClB,CAAC;oBACF,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;wBAE1B,IAAA,2BAAkB,EACjB,MAAM,EACN,UAAU,EACV,cAAc,EACd,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,kBAAsC;YACtC;gBACC,MAAM,MAAM,GAAG,gBAAgB,sBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBAEpC,MAAM,eAAe,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,mBAAmB,CAAC,CAAC;oBAChE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;wBACrC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC;wBAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC;wBAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,cAAc,CAAC;wBACnE,IAAA,2BAAkB,EACjB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,UAAU,EACV,MAAM,EACN,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAC7C,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,uBAAuB,EACrD,SAAS,CACT,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,kBAAsC;YACtC;gBACC,MAAM,KAAK,GAAG,gBAAgB,mBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;wBAE/B,MAAM,eAAe,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,mBAAmB,CAAC,CAAC;wBAChE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;4BACrC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC;4BAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC;4BAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,cAAc,CAAC;4BACnE,IAAA,2BAAkB,EACjB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,UAAU,EACV,CAAC,EACD,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAC7C,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,uBAAuB,EACrD,SAAS,CACT,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAwC;YACxC;gBACC,IACC,UAAU,CAAC,oBAAoB,EAI9B;oBACD,UAAU,CAAC,oBAAoB,CAAC,cAAc,GAAG,IAAI,CAAC;iBACtD;gBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;gBAClD,MAAM;YACP,gBAAgC;YAChC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,aAAa,GAAG,gBAAgB,iBAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChF,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;oBACjF,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;oBACvF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAqC;YACrC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;iBAChF;gBACD,MAAM;YACP,gBAAuC;YACvC;gBAEC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,iBAAiB,GAAG,gBAAgB,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3F,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,IAAA,uBAAe,EAAC,CAAC,EAAE,uBAAuB,EAAE,qBAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAC9E,EAAE;wBACF,IAAA,4BAAe,EACd,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,kCAAoD;YACpD;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,YAAY,GAAG,gBAAgB,mCAAqD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnG,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAEzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC5E,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBAChE,IAAI,eAAe,EAAE;4BACpB,IAAA,yBAAgB,EACf,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,SAAS,CACT,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAA+B;YAC/B;gBACC,MAAM,aAAa,GAAG,gBAAgB,iBAAgC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,wBAAgB,EACf,UAAU,EACV,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,WACL,OAAA,CAAA,MAAA,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAA,EAAA,CACvF,EACD,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAuC;YACvC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,qBAAqB,GAAG,gBAAgB,eAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7F,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,qBAAqB,CAAC;oBAChF,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,qBAAqB,CAAC;oBAChF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAmC;YACnC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,SAAS,GAAG,gBAAgB,eAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7E,uBAAuB,CAAC,UAAU,CAAC,mBAAmB,IAAI,SAAS,CAAC;oBACpE,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YAGP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uBAAe,EACd,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,CAAC,EACD,CAAC,EACD,SAAS,EACT,qBAAI,CAAC,qBAAI,CAAC,MAAM,CAAC,CACjB,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uBAAe,EAAC,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBACjG,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE;wBACzC,IAAA,2BAAkB,EACjB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,CAAC,EACD,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;qBACF;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAwC;YACxC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,2BAA2B,GAAG,KAAK,CACxC,UAAU,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAClE,CAAC,IAAI,YAAkB,CAAC;oBACzB,IAAA,8BAAc,EACb,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAyC;YACzC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,wCAAwC,CACvC,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,gBAAgB,iBAA0C,EAC1D,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,WAAW,CACrB,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAoC;YACpC;gBACC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,qCAA6B,EAC5B,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,GAAG,CAAC,EACd,UAAU,GAAG,CAAC,EACd,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAA2C;YAC3C;gBACC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5F,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uBAAe,EACd,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,qBAAI,CAAC,qBAAI,CAAC,MAAM,CAAC,CACjB,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAsC;YACtC;gBACC,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uBAAe,EACd,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAgC;YAChC;gBACC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;wBACvC,MAAM,OAAO,GAAG,mBAAmB;6BACjC,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,eAA+B;4BACvC,CAAC,CAAC,MAAM,iBAAiC,CAC1C;6BACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;6BACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,IAAA,uBAAe,EAAC,CAAC,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAC5E,CAAC;wBACH,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC;wBACnC,IAAI,MAAM,EAAE;4BACX,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;4BACrB,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAmC;YACnC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,oBAAoB,GAAG,UAAU,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3F,MAAM,iBAAiB,GAAG,EAAE,CAAC;oBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,EAAE,EAAE;wBAC9C,iBAAiB,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;qBAC3E;oBACD,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;oBAC3F,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAsC;YACtC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,qBAAqB,GAAG,UAAU,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/F,MAAM,kBAAkB,GAAG,EAAE,CAAC;oBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC,EAAE,EAAE;wBAC/C,kBAAkB,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;qBAC1E;oBACD,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC;oBAC5F,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,2BAAkD;YAClD;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,4BAAmD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;wBAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;wBAClC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;wBACxC,MAAM,MAAM,GAAG,IAAA,kBAAU,EACxB,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,CACrE,CAAC;wBACF,IAAI,MAAM,EAAE;4BACX,IAAA,mBAAW,EACV,MAAM,EACN,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;4BACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,CACd,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAmC;YACnC;gBACC,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC,EAAE,EAAE;wBAC3C,MAAM,WAAW,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAC;wBAC7C,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;4BACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;4BACnF,MAAA,SAAS,CAAC,SAAS,0CAAE,mBAAmB,CACvC,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,IAAI,EACJ,IAAI,CACJ,CAAC;yBACF;wBACD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;4BAUjC,IAAA,2BAAkB,EACjB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,CAAC,EACD,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;yBACF;qBACD;oBACD,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP,gBAAuC;YACvC;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,uBAAuB,CAAC,UAAU,CAAC,iBAAiB;wBACnD,UAAU,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACpE;gBACD,MAAM;YAIP;gBACC,IAAI,IAAA,mBAAW,EAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,wBAAO,CAAC,wBAAO,CAAC,WAAW,CAAC,CAAC,EAAE;oBAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;wBACpC,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;qBAClD;iBACD;gBACD,MAAM;SACP;KACD;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;QACvC,QAAQ,WAAW,CAAC,MAAM,EAAE;YAC3B;gBACC,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;gBAChF,MAAM;YACP;gBACC,IAAA,8BAAc,EAAC,uBAAuB,EAAE,mBAAmB,EAAE,YAAkB,EAAE,SAAS,CAAC,CAAC;gBAC5F,MAAM;YACP,iBAA0D;YAC1D;gBAEC,sBAAsB,CACrB,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,WAAW,CAAC,MAAM,kBAA2D,EAC7E,SAAS,EACT,WAAW,CAAC,OAAO,IAAI,CAAC,CACxB,CAAC;gBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;gBAClD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uCAA+B,EAAC,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;oBACxF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,sCAA8B,EAC7B,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,uCAA+B,EAC9B,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;YACP;gBACC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oBACpC,IAAA,2CAAmC,EAClC,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;oBACF,IAAA,+CAAsB,EAAC,yBAAyB,CAAC,CAAC;iBAClD;gBACD,MAAM;SACP;KACD;AACF,CAAC,CAAC;AA3pCW,QAAA,wBAAwB,4BA2pCnC;AAEK,MAAM,mCAAmC,GAAG,CAClD,mBAAkC,EAClC,uBAAwC,EACxC,UAAuB,EACvB,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACjB,EAAE;IAET,MAAM,UAAU,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,6BAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,IAAA,mCAA2B,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,2BAAkB,EACjB,MAAM,EACN,UAAU,EACV,cAAc,EACd,UAAU,EACV,CAAC,EACD,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;SACF;KACD;AACF,CAAC,CAAC;AAzBW,QAAA,mCAAmC,uCAyB9C;AAEK,MAAM,+BAA+B,GAAG,CAC9C,mBAAkC,EAClC,uBAAwC,EACxC,UAAuB,EACvB,YAA2C,EAC3C,SAAwB,EACjB,EAAE;IACT,MAAM,UAAU,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,6BAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACxF,MAAM,MAAM,GAAgB,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,MAAM,EAAE;YACb,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;YACnF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/F;KACD;AACF,CAAC,CAAC;AAjBW,QAAA,+BAA+B,mCAiB1C;AAEK,MAAM,8BAA8B,GAAG,CAC7C,mBAAkC,EAClC,uBAAwC,EACxC,UAAuB,EACvB,YAA2C,EAC3C,SAAwB,EACjB,EAAE;IACT,MAAM,UAAU,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,6BAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,MAAM,GAAgB,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,CAAC,MAAM,EAAE;YACb,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;YAC/F,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/F;KACD;AACF,CAAC,CAAC;AAfW,QAAA,8BAA8B,kCAezC;AAEK,MAAM,+BAA+B,GAAG,CAC9C,mBAAkC,EAClC,UAAuB,EACvB,YAA2C,EAC3C,SAAwB,EACjB,EAAE;IACT,MAAM,UAAU,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,6BAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,yBAAyB,GAAkB,IAAA,mCAA2B,EAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACrG,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxB,MAAM,sBAAiD;gBACvD,cAAc,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ;gBACpC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aAC/C,CAAC,CAAC;YACH,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;KACH;AACF,CAAC,CAAC;AAlBW,QAAA,+BAA+B,mCAkB1C;AAEF,MAAM,sBAAsB,GAAG,CAC9B,mBAAkC,EAClC,uBAAwC,EACxC,UAAuB,EACvB,SAAkB,EAClB,SAAwB,EACxB,UAAkB,EACX,EAAE;;IACT,UAAU,GAAG,MAAA,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,IAAA,wBAAgB,EAC9B,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAChC,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAChC,qBAAI,CAAC,KAAK,EACV,KAAK,EACL,SAAS,CACT,CAAC;IACF,IAAI,MAAM,EAAE;QACX,MAAM,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;YACxB,MAAM,EAAE,SAAS;gBAChB,CAAC;gBACD,CAAC,YAAqD;YACvD,cAAc,EAAE,UAAU,CAAC,QAAQ;YACnC,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;SAC/C,CAAC,CAAC;KAWH;AACF,CAAC,CAAC;AAEF,MAAM,wCAAwC,GAAG,CAChD,mBAAkC,EAClC,uBAAwC,EACxC,UAAuB,EACvB,SAAkB,EAClB,QAAyB,EACzB,SAAoB,EACpB,WAAwB,EACxB,UAAU,GAAG,CAAC,EACP,EAAE;;IACT,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAA,kBAAU,EACxB,mBAAmB;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,CAAC,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SACjF,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,eAAwC;QAChD,CAAC,CAAC,MAAM,iBAA0C,CACnD,CACF,CAAC;IACF,IAAI,MAAM,EAAE;QACX,MAAM,CAAC,YAAY,GAAG,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;YACxB,MAAM,EAAE,SAAS;gBAChB,CAAC;gBACD,CAAC,YAAgE;YAClE,cAAc,EAAE,UAAU,CAAC,QAAQ;YACnC,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE;SACrC,CAAC,CAAC;QACH,SAAS,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACnF;AACF,CAAC,CAAC;AAEK,MAAM,4BAA4B,GAAG,CAC3C,UAAuB,EACvB,wBAAgC,EAChC,mBAAkC,EAClC,uBAAwC,EACxC,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACjB,EAAE;IACT,MAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,EAAE;QAC5C,IAAI,cAAc,CAAC,WAAW,qBAAiC,EAAE;YAChE,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;SACjE;QAOD,UAAU;aACR,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,0BAAkD;YAC1D,CAAC,CAAC,MAAM,4BAAoD,CAC7D;aACA,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACrB,IAAA,mBAAW,EACV,QAAQ,EACR,CAAC,EACD,QAAQ,CAAC,MAAM,4BAAoD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3E,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CACT,CAAC;QACH,CAAC,CAAC,CAAC;KACJ;AACF,CAAC,CAAC;AAzCW,QAAA,4BAA4B,gCAyCvC;AAEK,MAAM,6BAA6B,GAAG,CAC5C,UAAuB,EACvB,wBAAgC,EAChC,mBAAkC,EAClC,uBAAwC,EACxC,UAAyB,EACzB,cAA+B,EAC/B,SAAwB,EACjB,EAAE;;IAET,IAAI,IAAA,uBAAe,EAAC,UAAU,EAAE,uBAAuB,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;QACzF,0BAA0B,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;KACpF;IACD,IAAI,IAAA,uBAAe,EAAC,UAAU,EAAE,uBAAuB,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;QACzF,sBAAsB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;KAC5G;IACD,IAAI,IAAA,uBAAe,EAAC,UAAU,EAAE,uBAAuB,EAAE,qBAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;QACxF,kBAAkB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;KAC5E;IACD,IAAI,IAAA,uBAAe,EAAC,UAAU,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;QAC1F,sBAAsB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAChF,sBAAsB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;KAC9D;IACD,IAAI,IAAA,uBAAe,EAAC,UAAU,EAAE,uBAAuB,EAAE,qBAAI,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;QAC7F,2BAA2B,CAAC,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;KACjG;IAED,IAAI,UAAU,CAAC,KAAK,EAAE;QACrB,gCAAgC,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAC1F,2BAA2B,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,SAAS,CAAC,CAAC;KAC/G;IAED,IACC,UAAU,CAAC,MAAM,eAAmC;QACpD,UAAU,CAAC,MAAM,iBAAqC,EACrD;QACD,wBAAwB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;KAClF;IAGD,mBAAmB;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,eAAe,0CAAE,QAAQ,eAA4C,CAAA,EAAA,CAAC;SACtF,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACd,IAAA,mBAAW,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEJ,uBAAuB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;IAGjF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,KAAI,MAAA,UAAU,CAAC,oBAAoB,0CAAE,SAAS,CAAA,EAAE;QACxE,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,cAAkC,EAAE;YAC7E,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACpG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAA,2BAAkB,EACjB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,CAAC,oBAAoB,EAC/B,CAAC,EACD,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;aACF;SACD;aAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,sBAA0C,EAAE;YAC5F,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACpG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAA,2BAAkB,EACjB,MAAM,EACN,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,CAAC,oBAAoB,EAC/B,CAAC,EACD,UAAU,EACV,cAAc,EACd,SAAS,CACT,CAAC;aACF;SACD;aAgDI,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,cAAqC,EAAE;YACrF,MAAM,WAAW,GAAG,IAAA,kCAAa,cAEhC,CAAC,EACD,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,SAAS,EACnB,CAAC,UAAU,CAAC,QAAQ,EACpB,KAAK,CACL,CAAC;YACF,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC;SACnF;aAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,sBAA6C,EAAE;YAC/F,MAAM,WAAW,GAAG,IAAA,kCAAa,sBAEhC,CAAC,EACD,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,SAAS,EACnB,CAAC,UAAU,CAAC,QAAQ,EACpB,KAAK,CACL,CAAC;YACF,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC;SACnF;aAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,cAAsC,EAAE;YACxF,MAAM,YAAY,GAAG,UAAU;iBAC7B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,MAAM,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;iBACrG,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACnF,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC/B,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;gBACnF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,CAAC,oBAAoB,EAC/B,MAAM,EACN,UAAU,EACV,IAAI,EACJ,IAAI,CACJ,CAAC;YACH,CAAC,CAAC,CAAC;SACH;aAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,sBAA8C,EAAE;YAChG,MAAM,YAAY,GAAG,UAAU;iBAC7B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,MAAM,EAAE,uBAAuB,EAAE,qBAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;iBACrG,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACnF,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC/B,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;gBACnF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,UAAU,CAAC,oBAAoB,EAC/B,MAAM,EACN,UAAU,EACV,IAAI,EACJ,IAAI,CACJ,CAAC;YACH,CAAC,CAAC,CAAC;SACH;KACD;AACF,CAAC,CAAC;AA9LW,QAAA,6BAA6B,iCA8LxC;AAGK,MAAM,sBAAsB,GAAG,CACrC,MAAqB,EACrB,UAA2B,EAC3B,MAAqB,EACrB,UAA2B,EAC3B,YAAyB,EACzB,WAAmB,EACnB,SAAwB,EACjB,EAAE;IACT,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/C,OAAO;KACP;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAA,2BAAkB,EAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;KAC5G;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAA,2BAAkB,EAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;KAC5G;AACF,CAAC,CAAC;AAlBW,QAAA,sBAAsB,0BAkBjC;AAEF,MAAM,sBAAsB,GAAG,CAC9B,iBAAgC,EAChC,qBAAsC,EACtC,aAA4B,EAC5B,iBAAkC,EAClC,SAAwB,EACjB,EAAE;IACT,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;QACjE,OAAO;KAEP;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,cAAgC,CAAC,CAAC;IACrG,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC/B,IAAA,gCAAuB,EACtB,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,CAAC,EACD,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,CACT,CAAC;KACF;IACD,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,sBAAwC,CAAC,CAAC;IACnH,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE;QACrC,IAAA,gCAAuB,EACtB,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,CAAC,EACD,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,CACT,CAAC;QACF,IAAA,gCAAuB,EACtB,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,CAAC,EACD,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,CACT,CAAC;KACF;AAWF,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAClC,KAAoB,EACpB,uBAAwC,EACxC,SAAwB,EACjB,EAAE;IAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,iBAA6C,EAAE;YACjE,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;YACvE,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/E;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,sBAAkD,EAAE;YAC7E,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;YACvE,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/E;KACD;AACF,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,KAAoB,EAAE,IAAqB,EAAE,SAAwB,EAAQ,EAAE;IAChH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IACC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,eAAmC;YAClD,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,iBAAqC,EACnD;YACD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC9E,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/E;KACD;AACF,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAAoB,EAAE,IAAqB,EAAE,SAAwB,EAAQ,EAAE;IAC/G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,eAAkC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,iBAAoC,EAAE;YAC7G,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACjE,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/E;KACD;AACF,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CACxC,KAAoB,EACpB,iBAAkC,EAClC,SAAwB,EACjB,EAAE;IACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IACC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,eAA2C;YAC1D,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,iBAA6C,EAC3D;YACD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,YAAkB,CAAC;YAClG,IAAA,8BAAc,EAAC,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAChE,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC5F;KACD;AACF,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CACnC,UAAuB,EACvB,KAAoB,EACpB,IAAqB,EACrB,SAAwB,EACjB,EAAE;IACT,KAAK;SACH,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAsC,IAAI,CAAC,CAAC,MAAM,iBAAwC,CACzG;SACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC;SACtC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACnB,IAAA,mBAAW,EAAC,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACxF,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAoB,EAAE,IAAqB,EAAE,SAAwB,EAAQ,EAAE;IAC1G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,cAA4B,EAAE;YAChD,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACpD,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/E;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,sBAAoC,EAAE;YAC/D,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACpD,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/E;KACD;AACF,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CACnC,KAAoB,EACpB,IAAqB,EACrB,wBAAgC,EAChC,SAAwB,EACjB,EAAE;IACT,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,cAAoC,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,sBAA4C,CAAC,CAAC;IAGzG,IAAI,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5C,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,KAAK,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;QACzD,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;KACH;AACF,CAAC,CAAC;AAEK,MAAM,gBAAgB,GAAG,CAC/B,WAAwB,EACxB,YAAoC,EACpC,qBAAoC,EACpC,uBAAwC,EACxC,SAAwB,EACjB,EAAE;IACT,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE;QACtC,IAAA,mBAAW,EAAC,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAC1G,IAAI,WAAW,CAAC,MAAM,4BAA8C,EAAE;YACrE,IAAA,mBAAW,EAAC,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;SAC1G;KACD;AACF,CAAC,CAAC;AAbW,QAAA,gBAAgB,oBAa3B;AAEK,MAAM,oBAAoB,GAAG,CACnC,IAAiB,EACjB,YAAoC,EACpC,SAAoB,EACpB,QAAyB,EACzB,WAAwB,EACjB,EAAE;;IACT,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,EAAE;QAC1B,OAAO;KACP;IAED,MAAM,iBAAiB,GAAG,YAAY;SACpC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAA,cAAM,EAAC,MAAM,CAAC,CAAC;SACzF,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;IAClG,MAAM,iBAAiB,GAAG,YAAY;SACpC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,WAAC,OAAA,MAAA,MAAM,CAAC,YAAY,0CAAE,MAAM,CAAA,EAAA,CAAC;SAC/C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;;QAAC,OAAA,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,OAAO,EAAE,MAAA,WAAW,CAAC,OAAO,mCAAI,CAAC;YACjC,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE;SACrC,CAAC,CAAA;KAAA,CAAC;SACF,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,oDAA8B,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAiB,CAAC,CAAC,CAAC;IAElG,MAAM,gCAAgC,GACrC,MAAA,YAAY;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAC,CAAC,CAAA,MAAA,CAAC,CAAC,sBAAsB,0CAAE,MAAM,CAAA,CAAA,EAAA,CAAC;SAEjD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,kBAAkB,CAAC;SACrD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,mCAAI,EAAE,CAAC;IAClD,MAAM,eAAe,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,GAAG,gCAAgC,CAAC,CAAC;IAE1G,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;QAE/B,IAAI,IAAA,gBAAQ,EAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;YAEpC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;SACpF;aAAM;YACN,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC;SAC3F;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,UAAU,YAA8B,CAAA,EAAA,CAAC,EAAE;YAKpF,MAAM,uBAAuB,GAAG,IAAA,qDAA4B,EAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC1F,IAAI,CAAC,sBAAsB,GAAG;gBAC7B,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAC,CAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,UAAU,YAA8B,CAAA,CAAA,EAAA,CAAC;gBACjG,GAAG,uBAAuB;aAC1B,CAAC;SACF;KACD;AAYF,CAAC,CAAC;AAlEW,QAAA,oBAAoB,wBAkE/B;AAEF,MAAM,sBAAsB,GAAG,CAC9B,mBAAkC,EAClC,IAAqB,EACrB,SAAwB,EACvB,EAAE;IACH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAC1C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,cAA6B,IAAI,MAAM,CAAC,MAAM,kBAA8B,CACrG,CAAC;IACF,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,sBAAuB,CAAC,CAAC;IACpG,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC3B,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { AllCardsService, CardIds, CardType, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardsData } from '../cards/cards-data';\r\nimport { grantRandomDivineShield, updateDivineShield } from '../divine-shield';\r\nimport {\r\n\tgroupByFunction,\r\n\tpickMultipleRandomDifferent,\r\n\tpickRandom,\r\n\tpickRandomAlive,\r\n\tpickRandomLowestHealth,\r\n} from '../services/utils';\r\nimport { VALID_DEATHRATTLE_ENCHANTMENTS } from '../simulate-bgs-battle';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgrantRandomAttack,\r\n\tgrantRandomHealth,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\thasMechanic,\r\n\tisFish,\r\n\tisGolden,\r\n\tupdateVenomous,\r\n} from '../utils';\r\nimport {\r\n\tdealDamageToMinion,\r\n\tdealDamageToRandomEnemy,\r\n\tfindNearestEnemies,\r\n\tgetNeighbours,\r\n\tprocessMinionDeath,\r\n} from './attack';\r\nimport { triggerBattlecry } from './battlecries';\r\nimport { playBloodGemsOn } from './blood-gems';\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 { groupLeapfroggerDeathrattles } from './remembered-deathrattle';\r\nimport { SharedState } from './shared-state';\r\nimport { Spectator } from './spectator/spectator';\r\nimport { modifyStats } from './stats';\r\nimport { makeMinionGolden } from './utils/golden';\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 deathlyPhylacteries = boardHero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.DeathlyPhylactery_BG30_MagicItem_700 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n\tconst tombs =\r\n\t\tboardHero.questRewardEntities?.filter((entity) => entity.cardId === CardIds.TurbulentTombs)?.length ?? 0;\r\n\tconst echoesOfArgus = sharedState.anomalies.includes(CardIds.EchoesOfArgus_BG27_Anomaly_802) ? 1 : 0;\r\n\tconst scourgeMultiplier = deadEntity.additionalCards?.includes(CardIds.ScourgeTroll) ? 2 : 1;\r\n\r\n\tconst multiplier =\r\n\t\tscourgeMultiplier *\r\n\t\t((goldenRivendare ? 3 : rivendare ? 2 : 1) +\r\n\t\t\tdeathlyPhylacteries +\r\n\t\t\ttitus +\r\n\t\t\t2 * goldenTitus +\r\n\t\t\ttombs +\r\n\t\t\techoesOfArgus);\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\r\n\t// We compute the enchantments first, so that we don't include enchantments created by the just-processed\r\n\t// deathrattles\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// These seem to be first processed separately\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)\r\n\t\t.filter((cardId) => VALID_DEATHRATTLE_ENCHANTMENTS.includes(cardId as CardIds))\r\n\t\t.flatMap((cardId) => {\r\n\t\t\tlet repeatsToApply = enchantmentGroups[cardId].map((e) => e.repeats || 1).reduce((a, b) => a + b, 0);\r\n\t\t\t// Frogs include the multiplers here directly\r\n\t\t\tif (\r\n\t\t\t\t[\r\n\t\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\t].includes(cardId as CardIds)\r\n\t\t\t) {\r\n\t\t\t\trepeatsToApply = repeatsToApply * multiplier;\r\n\t\t\t}\r\n\r\n\t\t\tconst results = [];\r\n\t\t\tconst repeatsPerBuff = Math.max(1, Math.floor(repeatsToApply / maxNumberOfGroups));\r\n\t\t\tlet repeatsDone = 0;\r\n\t\t\twhile (repeatsDone < repeatsToApply) {\r\n\t\t\t\tconst repeats = Math.min(repeatsPerBuff, repeatsToApply - repeatsDone);\r\n\t\t\t\tresults.push({\r\n\t\t\t\t\tcardId: cardId,\r\n\t\t\t\t\trepeats: repeats,\r\n\t\t\t\t\ttiming: Math.min(...enchantmentGroups[cardId].map((e) => e.timing)),\r\n\t\t\t\t});\r\n\t\t\t\trepeatsDone += repeatsPerBuff;\r\n\t\t\t}\r\n\t\t\treturn results;\r\n\t\t});\r\n\r\n\t// FIXME; this is not correct, as fish can have leapfrogger card Id OR enchantment id as a\r\n\t// remembered deathrattle, and the remembered deathrattle is handled only via the card id\r\n\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\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst allNeighbours = getNeighbours(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntityIndexFromRight,\r\n\t\t\t\t\t).filter((e) => hasMechanic(gameState.allCards.getCard(e.cardId), GameTag[GameTag.BATTLECRY]));\r\n\t\t\t\t\tconst neighbours =\r\n\t\t\t\t\t\tdeadEntityCardId === CardIds.RylakMetalhead_BG26_801_G\r\n\t\t\t\t\t\t\t? allNeighbours\r\n\t\t\t\t\t\t\t: [pickRandom(allNeighbours)].filter((e) => !!e);\r\n\t\t\t\t\t// console.debug(\r\n\t\t\t\t\t// \t'triggering neighbours',\r\n\t\t\t\t\t// \tstringifySimple(neighbours, gameState.allCards),\r\n\t\t\t\t\t// \tstringifySimple(allNeighbours, gameState.allCards),\r\n\t\t\t\t\t// );\r\n\t\t\t\t\tfor (const neighbour of neighbours) {\r\n\t\t\t\t\t\t// console.debug('\\ttriggering neighbour', stringifySimpleCard(neighbour, gameState.allCards));\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\t// for (let j = 0; j < rylakMutltiplier; j++) {\r\n\t\t\t\t\t\ttriggerBattlecry(\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\tneighbour,\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\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(\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\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\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(\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\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgrantRandomDivineShield(\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\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\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) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(entity, boardWithDeadEntityHero, Race.MURLOC, gameState.allCards),\r\n\t\t\t\t\t\t\t);\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\tupdateVenomous(chosen, true, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\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(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t);\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, boardWithDeadEntityHero, 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(\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\ttrue,\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\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\tcase CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst goldrinnBuff = deadEntityCardId === CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085 ? 8 : 4;\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\tgoldrinnBuff,\r\n\t\t\t\t\t\tgoldrinnBuff,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t'BEAST',\r\n\t\t\t\t\t);\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffAtk += goldrinnBuff;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffHealth += goldrinnBuff;\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.SilithidBurrower_BG29_871:\r\n\t\t\tcase CardIds.SilithidBurrower_BG29_871_G:\r\n\t\t\t\tconst silithidStats = deadEntity.cardId === CardIds.SilithidBurrower_BG29_871_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\tsilithidStats,\r\n\t\t\t\t\t\tsilithidStats,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.BEAST],\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.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\tcase CardIds.ImpulsiveTrickster_BG21_006_G:\r\n\t\t\t\tconst tricksterMultiplier = deadEntityCardId === CardIds.ImpulsiveTrickster_BG21_006_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 < tricksterMultiplier; j++) {\r\n\t\t\t\t\t\tconst targetBoard = boardWithDeadEntity;\r\n\t\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttargetBoard,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\ttrue,\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.NightbaneIgnited_BG29_815:\r\n\t\t\tcase CardIds.NightbaneIgnited_BG29_815_G:\r\n\t\t\t\tconst nightbaneLoops = deadEntityCardId === CardIds.NightbaneIgnited_BG29_815_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 < nightbaneLoops; j++) {\r\n\t\t\t\t\t\tconst pickedTargetEntityIds = [];\r\n\t\t\t\t\t\tfor (let k = 0; k < 2; k++) {\r\n\t\t\t\t\t\t\tconst target = pickRandomAlive(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity.filter((e) => !pickedTargetEntityIds.includes(e.entityId)),\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\t\t\tpickedTargetEntityIds.push(target.entityId);\r\n\t\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t\t);\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.Leapfrogger_BG21_000:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\t// console.log('\\t', 'Leapfrogger from DR', deadEntity.entityId);\r\n\t\t\t\t\tapplyLeapFroggerEffect(\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\tfalse,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\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_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLeapFroggerEffect(\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\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\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:\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\thasCorrectTribe(entity, boardWithDeadEntityHero, Race.MECH, gameState.allCards),\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tfor (let j = 0; j < numberOfDeadMechsThisCombat; 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\tconst baseDamage =\r\n\t\t\t\t\t4 +\r\n\t\t\t\t\tboardWithDeadEntityHero.trinkets.filter(\r\n\t\t\t\t\t\t(t) => t.cardId === CardIds.KaboomBotPortrait_BG30_MagicItem_803,\r\n\t\t\t\t\t).length *\r\n\t\t\t\t\t\t8;\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\tbaseDamage,\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.FireDancer_BG29_843:\r\n\t\t\tcase CardIds.FireDancer_BG29_843_G:\r\n\t\t\t\tconst fireDancerLoops = deadEntity.cardId === CardIds.FireDancer_BG29_843_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 < fireDancerLoops; j++) {\r\n\t\t\t\t\t\t// In case there are spawns, don't target them\r\n\t\t\t\t\t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\thero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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\t// Most likely there is a death loop after each round of damage, see\r\n\t\t\t\t\t// http://replays.firestoneapp.com/?reviewId=4b6e4d8d-fc83-4795-b450-4cd0c3a518be&turn=17&action=2\r\n\t\t\t\t\t// Update 13/05/2024: the death process is probably between each deathrattle proc, but not each\r\n\t\t\t\t\t// individual tick. See\r\n\t\t\t\t\t// http://replays.firestoneapp.com/?reviewId=6d66b90d-5678-4a68-a45f-7ddb887f9450&turn=17&action=11\r\n\t\t\t\t\tprocessMinionDeath(\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\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.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\tdealDamageToMinion(\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\tdealDamageToMinion(\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\t// In case there are spawns, don't target them\r\n\t\t\t\t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\thero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tdamage,\r\n\t\t\t\t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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.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\t// In case there are spawns, don't target them\r\n\t\t\t\t\t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\thero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t3,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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.LeeroyTheReckless_BG23_318:\r\n\t\t\tcase CardIds.LeeroyTheReckless_BG23_318_G:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity\r\n\t\t\t\t\t// http://replays.firestoneapp.com/?reviewId=c6121cdd-5cb6-4321-807e-4ff644568a8c&turn=25&action=7\r\n\t\t\t\t\t// Update 02/05/2024: this is a bug, and friendly units should be killed\r\n\t\t\t\t\t// deadEntity.friendly !== deadEntity.lastAffectedByEntity.friendly\r\n\t\t\t\t) {\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\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ThreeLilQuilboar_BG26_867:\r\n\t\t\tcase CardIds.ThreeLilQuilboar_BG26_867_G:\r\n\t\t\t\t// console.log('Triggering blood gems', deadEntityCardId, deadEntity.entityId);\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst numberOfBloodGems = deadEntityCardId === CardIds.ThreeLilQuilboar_BG26_867_G ? 6 : 3;\r\n\t\t\t\t\tfor (const entity of boardWithDeadEntity.filter((e) =>\r\n\t\t\t\t\t\thasCorrectTribe(e, boardWithDeadEntityHero, Race.QUILBOAR, gameState.allCards),\r\n\t\t\t\t\t)) {\r\n\t\t\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\tnumberOfBloodGems,\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.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.filter((e) => !e.definitelyDead && e.health > 0);\r\n\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\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.Scourfin_BG26_360:\r\n\t\t\tcase CardIds.Scourfin_BG26_360_G:\r\n\t\t\t\tconst statsScourfin = deadEntityCardId === CardIds.Scourfin_BG26_360_G ? 10 : 5;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero.hand.filter(\r\n\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\tnull,\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\tonDeathrattleTriggered(deathrattleTriggeredInput);\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\tdealDamageToMinion(\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\tboardWithDeadEntityHero,\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 ? 2 : 1;\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 * 2,\r\n\t\t\t\t\t\tmotleyBuff * 1,\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 ? 4 : 2;\r\n\t\t\t\tconst moroesBuffHealth = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 8 : 4;\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) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(e, boardWithDeadEntityHero, Race.UNDEAD, gameState.allCards),\r\n\t\t\t\t\t\t\t);\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\tcase CardIds.BarrensConjurer_BG29_862:\r\n\t\t\tcase CardIds.BarrensConjurer_BG29_862_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst conjurerToAddQuantity = deadEntity.cardId === CardIds.BarrensConjurer_BG29_862_G ? 2 : 1;\r\n\t\t\t\t\tconst conjurerCardsToAdd = [];\r\n\t\t\t\t\tfor (let i = 0; i < conjurerToAddQuantity; i++) {\r\n\t\t\t\t\t\tconjurerCardsToAdd.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t\t}\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, conjurerCardsToAdd, 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.ShadowyConstruct_BG25_HERO_103_Buddy:\r\n\t\t\tcase CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst loops = deadEntity.cardId === CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G ? 2 : 1;\r\n\t\t\t\t\tfor (let j = 0; j < loops; j++) {\r\n\t\t\t\t\t\tconst atkBuff = deadEntity.attack;\r\n\t\t\t\t\t\tconst healthBuff = deadEntity.maxHealth;\r\n\t\t\t\t\t\tconst target = pickRandom(\r\n\t\t\t\t\t\t\tboardWithDeadEntity.filter((e) => e.entityId !== deadEntity.entityId),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tatkBuff,\r\n\t\t\t\t\t\t\t\thealthBuff,\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\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.SpikedSavior_BG29_808:\r\n\t\t\tcase CardIds.SpikedSavior_BG29_808_G:\r\n\t\t\t\tconst spikedSaviorLoops = deadEntity.cardId === CardIds.SpikedSavior_BG29_808_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 < spikedSaviorLoops; j++) {\r\n\t\t\t\t\t\tconst targetBoard = [...boardWithDeadEntity];\r\n\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\t\t\t\t\t\tmodifyStats(entity, 0, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\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\tentity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\t\t\t\t\t\t// Issue: because this can spawn a new minion, the entity indices can be incorrect\r\n\t\t\t\t\t\t\t// See sim.sample.1.txt\r\n\t\t\t\t\t\t\t// Ideally, I should probably move the minion spawn index to another paradigm: keep the dead minions\r\n\t\t\t\t\t\t\t// until there are new spawns, and delete them afterwards, so I can easily refer to their index\r\n\t\t\t\t\t\t\t// by just looking them up, and spawning to the right\r\n\t\t\t\t\t\t\t// However, since this doesn't work, maybe I can look for entity indices adjustments needed\r\n\t\t\t\t\t\t\t// by looking up the position changes of other minions?\r\n\t\t\t\t\t\t\t// Not sure how this could work without creating a giant mess, so for now it will probably\r\n\t\t\t\t\t\t\t// stay as a bug\r\n\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\tentity,\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\t1,\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.CruiseController_BG31_821:\r\n\t\t\tcase CardIds.CruiseController_BG31_821_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.PirateAttackBonus +=\r\n\t\t\t\t\t\tdeadEntity.cardId === CardIds.CruiseController_BG31_821_G ? 10 : 5;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t// Add all the deathrattles that don't have an effect on combat\r\n\t\t\t// case CardIds.FieryFelblood_BG29_877:\r\n\t\t\t// case CardIds.FieryFelblood_BG29_877_G:\r\n\t\t\tdefault:\r\n\t\t\t\tif (hasMechanic(gameState.allCards.getCard(deadEntity.cardId), GameTag[GameTag.DEATHRATTLE])) {\r\n\t\t\t\t\tfor (let i = 0; i < multiplier; i++) {\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}\r\n\t}\r\n\r\n\tfor (const enchantment of enchantments) {\r\n\t\tswitch (enchantment.cardId) {\r\n\t\t\tcase CardIds.RustyTrident_TridentsTreasureEnchantment_BG30_MagicItem_917e:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.HoggyBank_GemInTheBankEnchantment_BG30_MagicItem_411e:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [CardIds.BloodGem], gameState);\r\n\t\t\t\tbreak;\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\t// console.log('\\t', 'Leapfrogger enchantment', enchantment.repeats);\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};\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\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\t1,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\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 validBoard = boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\t\tconst target: BoardEntity = validBoard[validBoard.length - 1];\r\n\t\tif (!!target) {\r\n\t\t\ttarget.taunt = true;\r\n\t\t\tmodifyStats(target, 0, 3, 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.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyStats(target, target.attack, 0, 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: number,\r\n): void => {\r\n\tmultiplier = multiplier ?? deadEntity.deathrattleRepeats ?? 1;\r\n\t// console.debug('applying leapfrogger effect', deadEntity.entityId, multiplier);\r\n\tconst buffed = grantRandomStats(\r\n\t\tdeadEntity,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tRace.BEAST,\r\n\t\tfalse,\r\n\t\tgameState,\r\n\t);\r\n\tif (buffed) {\r\n\t\tbuffed.enchantments = 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// console.log(\r\n\t\t// \t'\\t\\t',\r\n\t\t// \t'entity enchantments',\r\n\t\t// \tbuffed.entityId,\r\n\t\t// \tmultiplier,\r\n\t\t// \tbuffed.enchantments\r\n\t\t// \t\t.filter((e) => e.cardId.startsWith('BG21'))\r\n\t\t// \t\t.map((e) => e.repeats)\r\n\t\t// \t\t.join(','),\r\n\t\t// );\r\n\t}\r\n};\r\n\r\nconst applyRecurringNightmareDeathrattleEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\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, boardWithDeadEntityHero, 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 handleAfterMinionKillsEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst killer = deadEntity.lastAffectedByEntity;\r\n\tif (!killer) {\r\n\t\treturn;\r\n\t}\r\n\t// Killed an enemy minion\r\n\tif (killer.friendly !== deadEntity.friendly) {\r\n\t\tif (otherBoardHero.heroPowerId === CardIds.Rokara_GloryOfCombat) {\r\n\t\t\tmodifyStats(killer, 1, 0, otherBoard, otherBoardHero, gameState);\r\n\t\t}\r\n\r\n\t\t// Icesnarl the Mighty\r\n\t\t// The timing here might be off, as the following replay suggests that the effect should trigger\r\n\t\t// before Sr. Tomb Diver's deathrattle is applied\r\n\t\t// http://replays.firestoneapp.com/?reviewId=ebb4e2d6-11b4-44f4-a052-3be2c63dd38f&turn=11&action=6\r\n\t\t// Update 2024-30-06: lived tgus ub ab \"after minion kills\" trigger, let's see how that works\r\n\t\totherBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((icesnarl) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ticesnarl,\r\n\t\t\t\t\t0,\r\n\t\t\t\t\ticesnarl.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_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});\r\n\t}\r\n};\r\n\r\nexport const applyWheneverMinionDiesEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// console.log('applying minion death effect', stringifySimpleCard(deadEntity, allCards));\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.BEAST, gameState.allCards)) {\r\n\t\tapplyScavengingHyenaEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.DEMON, gameState.allCards)) {\r\n\t\tapplySoulJugglerEffect(boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MECH, gameState.allCards)) {\r\n\t\tapplyJunkbotEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MURLOC, gameState.allCards)) {\r\n\t\tremoveOldMurkEyeAttack(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tremoveOldMurkEyeAttack(otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.ELEMENTAL, gameState.allCards)) {\r\n\t\tapplyMossOfTheSchlossEffect(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\tif (deadEntity.taunt) {\r\n\t\tapplyBristlemaneScrapsmithEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tapplyQirajiHarbringerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntityIndexFromRight, gameState);\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008_G\r\n\t) {\r\n\t\tapplyEternalKnightEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\t// Putricide-only\r\n\tboardWithDeadEntity\r\n\t\t.filter((e) => e.additionalCards?.includes(CardIds.FlesheatingGhoulLegacy_BG26_tt_004))\r\n\t\t.forEach((e) => {\r\n\t\t\tmodifyStats(e, 1, 0, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t});\r\n\r\n\tapplyRotHideGnollEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\r\n\t// Overkill\r\n\tif (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\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\t3,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.HeraldOfFlame_TB_BaconUps_103) {\r\n\t\t\tconst targets = boardWithDeadEntity.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\t\tif (targets.length > 0) {\r\n\t\t\t\tconst target = targets[0];\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\t6,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental && deadEntity.lastAffectedByEntity.attacking) {\r\n\t\t// \t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental) {\r\n\t\t// \t// console.log('applying WildfireElemental effect', stringifySimple(boardWithDeadEntity, allCards));\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \t// Prevent propagation of the effect\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \t// console.log('neighbours', stringifySimple(neighbours, allCards));\r\n\t\t// \tif (neighbours.length > 0) {\r\n\t\t// \t\tconst randomTarget = neighbours[Math.floor(Math.random() * neighbours.length)];\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\trandomTarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// } else if (\r\n\t\t// \tdeadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElementalBattlegrounds &&\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking\r\n\t\t// ) {\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \tneighbours.forEach((neighbour) =>\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\tneighbour,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// }\r\n\t\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\tfalse,\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\tfalse,\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) => hasCorrectTribe(entity, boardWithDeadEntityHero, Race.PIRATE, gameState.allCards))\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\tmodifyStats(pirate, 2, 2, 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) => hasCorrectTribe(entity, boardWithDeadEntityHero, Race.PIRATE, gameState.allCards))\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\tmodifyStats(pirate, 4, 4, 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\n/** @deprecated */\r\nexport const dealDamageToAllMinions = (\r\n\tboard1: BoardEntity[],\r\n\tboard1Hero: BgsPlayerEntity,\r\n\tboard2: BoardEntity[],\r\n\tboard2Hero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity,\r\n\tdamageDealt: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (board1.length === 0 && board2.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\tfor (let i = 0; i < board1.length; i++) {\r\n\t\tdealDamageToMinion(board1[i], board1, board1Hero, damageSource, damageDealt, board2, board2Hero, gameState);\r\n\t}\r\n\tfor (let i = 0; i < board2.length; i++) {\r\n\t\tdealDamageToMinion(board2[i], board2, board2Hero, damageSource, damageDealt, board1, board1Hero, gameState);\r\n\t}\r\n};\r\n\r\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\tmodifyStats(board[i], 2, 1, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t} else if (board[i].cardId === CardIds.ScavengingHyenaLegacy_TB_BaconUps_043) {\r\n\t\t\tmodifyStats(board[i], 4, 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyEternalKnightEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008_G\r\n\t\t) {\r\n\t\t\tconst multiplier = board[i].cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\r\n\t\t\tmodifyStats(board[i], multiplier * 1, multiplier * 1, 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\tmodifyStats(board[i], multiplier * 1, 0, board, hero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyBristlemaneScrapsmithEffect = (\r\n\tboard: BoardEntity[],\r\n\tboardPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707 ||\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707_G\r\n\t\t) {\r\n\t\t\tconst cardsToAdd = Array(CardIds.BristlemaneScrapsmith_BG24_707_G ? 2 : 1).fill(CardIds.BloodGem);\r\n\t\t\taddCardsInHand(boardPlayerEntity, board, cardsToAdd, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, boardPlayerEntity, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyMossOfTheSchlossEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tboard\r\n\t\t.filter(\r\n\t\t\t(e) => e.cardId === CardIds.MossOfTheSchloss_BG30_111 || e.cardId === CardIds.MossOfTheSchloss_BG30_111_G,\r\n\t\t)\r\n\t\t.filter((e) => e.abiityChargesLeft > 0)\r\n\t\t.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, deadEntity.maxAttack, deadEntity.maxHealth, board, hero, gameState);\r\n\t\t\tentity.abiityChargesLeft--;\r\n\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\r\n\t\t});\r\n};\r\n\r\nconst applyJunkbotEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.Junkbot_GVG_106) {\r\n\t\t\tmodifyStats(board[i], 2, 2, 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\tmodifyStats(board[i], 4, 4, 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\r\n\t// TODO: if reactivated, properly apply buffs one by one, instead of all together\r\n\tif (qiraji.length + goldenQiraji.length > 0) {\r\n\t\tconst neighbours = getNeighbours(board, null, deadEntityIndexFromRight);\r\n\t\tconst buff = 2 * qiraji.length + 4 * goldenQiraji.length;\r\n\t\tneighbours.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, buff, buff, board, hero, gameState);\r\n\t\t});\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\tmodifyStats(monstrosity, deadEntity.attack, 0, boardWithDeadEntities, boardWithDeadEntityHero, gameState);\r\n\t\tif (monstrosity.cardId === CardIds.Monstrosity_BG20_HERO_282_Buddy_G) {\r\n\t\t\tmodifyStats(monstrosity, deadEntity.attack, 0, 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\tif (!deadEntities?.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst validDeathrattles = deadEntities\r\n\t\t.filter((entity) => cardsData.validDeathrattles.includes(entity.cardId) || isFish(entity))\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) => VALID_DEATHRATTLE_ENCHANTMENTS.includes(enchantment.cardId as CardIds));\r\n\t// Multiple fish\r\n\tconst deadEntityRememberedDeathrattles =\r\n\t\tdeadEntities\r\n\t\t\t.filter((e) => !!e.rememberedDeathrattles?.length)\r\n\t\t\t// If the fish has reborn, it will inherit its own Deathrattles, and we don't want that\r\n\t\t\t.filter((e) => e.entityId !== fish.rebornFromEntityId)\r\n\t\t\t.flatMap((e) => e.rememberedDeathrattles) ?? [];\r\n\tconst newDeathrattles = [...validDeathrattles, ...validEnchantments, ...deadEntityRememberedDeathrattles];\r\n\r\n\tif (newDeathrattles.length > 0) {\r\n\t\t// Order is important - the DR are triggered in the order d the minions have died\r\n\t\tif (isGolden(fish.cardId, allCards)) {\r\n\t\t\t// https://stackoverflow.com/questions/33305152/how-to-duplicate-elements-in-a-js-array\r\n\t\t\tconst doubleDr = newDeathrattles.reduce((res, current) => res.concat([current, current]), []);\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...doubleDr];\r\n\t\t} else {\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];\r\n\t\t}\r\n\r\n\t\tif (newDeathrattles.some((d) => d.cardId?.startsWith(CardIds.Leapfrogger_BG21_000))) {\r\n\t\t\t// Not sure exactly why, but if a leapfrogger dies first, then a manasaber,\r\n\t\t\t// when the fish dies, the manasaber's effect (spawning tokens) is triggered first\r\n\t\t\t// https://replays.firestoneapp.com/?reviewId=521733fb-8ba1-4663-9a87-3da58e8a09c8&turn=21&action=3\r\n\t\t\t// HACK: So I will hardcode a rule for now to put leapfrogger effects last\r\n\t\t\tconst leapfroggerDeathrattles = groupLeapfroggerDeathrattles(fish.rememberedDeathrattles);\r\n\t\t\tfish.rememberedDeathrattles = [\r\n\t\t\t\t...fish.rememberedDeathrattles.filter((d) => !d.cardId?.startsWith(CardIds.Leapfrogger_BG21_000)),\r\n\t\t\t\t...leapfroggerDeathrattles,\r\n\t\t\t];\r\n\t\t}\r\n\t}\r\n\t// console.debug(\r\n\t// \t'remembered',\r\n\t// \tfish.cardId,\r\n\t// \tfish.entityId,\r\n\t// \tfish.rememberedDeathrattles.map((d) => ({\r\n\t// \t\tcardId: d.cardId,\r\n\t// \t\tname: allCards.getCard(d.cardId)?.name,\r\n\t// \t\t// repeats: d.repeats,\r\n\t// \t\t// timing: d.timing,\r\n\t// \t})),\r\n\t// );\r\n};\r\n\r\nconst removeOldMurkEyeAttack = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\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\tmodifyStats(entity, -1, 0, boardWithDeadEntity, hero, gameState);\r\n\t});\r\n\tgoldenMurkeyes.forEach((entity) => {\r\n\t\tmodifyStats(entity, -2, 0, boardWithDeadEntity, hero, gameState);\r\n\t});\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"deathrattle-effects.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-effects.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { AllCardsService, CardIds, CardType, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardsData } from '../cards/cards-data';\r\nimport { grantRandomDivineShield, updateDivineShield } from '../divine-shield';\r\nimport {\r\n\tgroupByFunction,\r\n\tpickMultipleRandomDifferent,\r\n\tpickRandom,\r\n\tpickRandomAlive,\r\n\tpickRandomLowestHealth,\r\n} from '../services/utils';\r\nimport { VALID_DEATHRATTLE_ENCHANTMENTS } from '../simulate-bgs-battle';\r\nimport {\r\n\taddStatsToBoard,\r\n\tgrantRandomAttack,\r\n\tgrantRandomHealth,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\thasMechanic,\r\n\tisFish,\r\n\tisGolden,\r\n\tupdateVenomous,\r\n} from '../utils';\r\nimport {\r\n\tdealDamageToMinion,\r\n\tdealDamageToRandomEnemy,\r\n\tfindNearestEnemies,\r\n\tgetNeighbours,\r\n\tprocessMinionDeath,\r\n} from './attack';\r\nimport { triggerBattlecry } from './battlecries';\r\nimport { playBloodGemsOn } from './blood-gems';\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 { groupLeapfroggerDeathrattles } from './remembered-deathrattle';\r\nimport { SharedState } from './shared-state';\r\nimport { Spectator } from './spectator/spectator';\r\nimport { modifyStats } from './stats';\r\nimport { makeMinionGolden } from './utils/golden';\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 deathlyPhylacteries = boardHero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.DeathlyPhylactery_BG30_MagicItem_700 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n\tconst tombs =\r\n\t\tboardHero.questRewardEntities?.filter((entity) => entity.cardId === CardIds.TurbulentTombs)?.length ?? 0;\r\n\tconst echoesOfArgus = sharedState.anomalies.includes(CardIds.EchoesOfArgus_BG27_Anomaly_802) ? 1 : 0;\r\n\tconst scourgeMultiplier = deadEntity.additionalCards?.includes(CardIds.ScourgeTroll) ? 2 : 1;\r\n\r\n\tconst multiplier =\r\n\t\tscourgeMultiplier *\r\n\t\t((goldenRivendare ? 3 : rivendare ? 2 : 1) +\r\n\t\t\tdeathlyPhylacteries +\r\n\t\t\ttitus +\r\n\t\t\t2 * goldenTitus +\r\n\t\t\ttombs +\r\n\t\t\techoesOfArgus);\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\r\n\t// We compute the enchantments first, so that we don't include enchantments created by the just-processed\r\n\t// deathrattles\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// These seem to be first processed separately\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)\r\n\t\t.filter((cardId) => VALID_DEATHRATTLE_ENCHANTMENTS.includes(cardId as CardIds))\r\n\t\t.flatMap((cardId) => {\r\n\t\t\tlet repeatsToApply = enchantmentGroups[cardId].map((e) => e.repeats || 1).reduce((a, b) => a + b, 0);\r\n\t\t\t// Frogs include the multiplers here directly\r\n\t\t\tif (\r\n\t\t\t\t[\r\n\t\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e,\r\n\t\t\t\t\tCardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\t].includes(cardId as CardIds)\r\n\t\t\t) {\r\n\t\t\t\trepeatsToApply = repeatsToApply * multiplier;\r\n\t\t\t}\r\n\r\n\t\t\tconst results = [];\r\n\t\t\tconst repeatsPerBuff = Math.max(1, Math.floor(repeatsToApply / maxNumberOfGroups));\r\n\t\t\tlet repeatsDone = 0;\r\n\t\t\twhile (repeatsDone < repeatsToApply) {\r\n\t\t\t\tconst repeats = Math.min(repeatsPerBuff, repeatsToApply - repeatsDone);\r\n\t\t\t\tresults.push({\r\n\t\t\t\t\tcardId: cardId,\r\n\t\t\t\t\trepeats: repeats,\r\n\t\t\t\t\ttiming: Math.min(...enchantmentGroups[cardId].map((e) => e.timing)),\r\n\t\t\t\t});\r\n\t\t\t\trepeatsDone += repeatsPerBuff;\r\n\t\t\t}\r\n\t\t\treturn results;\r\n\t\t});\r\n\r\n\t// FIXME; this is not correct, as fish can have leapfrogger card Id OR enchantment id as a\r\n\t// remembered deathrattle, and the remembered deathrattle is handled only via the card id\r\n\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\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst allNeighbours = getNeighbours(\r\n\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tdeadEntityIndexFromRight,\r\n\t\t\t\t\t).filter((e) => hasMechanic(gameState.allCards.getCard(e.cardId), GameTag[GameTag.BATTLECRY]));\r\n\t\t\t\t\tconst neighbours =\r\n\t\t\t\t\t\tdeadEntityCardId === CardIds.RylakMetalhead_BG26_801_G\r\n\t\t\t\t\t\t\t? allNeighbours\r\n\t\t\t\t\t\t\t: [pickRandom(allNeighbours)].filter((e) => !!e);\r\n\t\t\t\t\t// console.debug(\r\n\t\t\t\t\t// \t'triggering neighbours',\r\n\t\t\t\t\t// \tstringifySimple(neighbours, gameState.allCards),\r\n\t\t\t\t\t// \tstringifySimple(allNeighbours, gameState.allCards),\r\n\t\t\t\t\t// );\r\n\t\t\t\t\tfor (const neighbour of neighbours) {\r\n\t\t\t\t\t\t// console.debug('\\ttriggering neighbour', stringifySimpleCard(neighbour, gameState.allCards));\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\t// for (let j = 0; j < rylakMutltiplier; j++) {\r\n\t\t\t\t\t\ttriggerBattlecry(\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\tneighbour,\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\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(\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\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\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(\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\totherBoardHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tgrantRandomDivineShield(\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\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\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) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(entity, boardWithDeadEntityHero, Race.MURLOC, gameState.allCards),\r\n\t\t\t\t\t\t\t);\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\tupdateVenomous(chosen, true, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\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(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t);\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, boardWithDeadEntityHero, 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(\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\ttrue,\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\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\tcase CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst goldrinnBuff = deadEntityCardId === CardIds.GoldrinnTheGreatWolf_TB_BaconUps_085 ? 8 : 4;\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\tgoldrinnBuff,\r\n\t\t\t\t\t\tgoldrinnBuff,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t'BEAST',\r\n\t\t\t\t\t);\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffAtk += goldrinnBuff;\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.GoldrinnBuffHealth += goldrinnBuff;\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.SilithidBurrower_BG29_871:\r\n\t\t\tcase CardIds.SilithidBurrower_BG29_871_G:\r\n\t\t\t\tconst silithidStats = deadEntity.cardId === CardIds.SilithidBurrower_BG29_871_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\tsilithidStats,\r\n\t\t\t\t\t\tsilithidStats,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tRace[Race.BEAST],\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.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\tcase CardIds.ImpulsiveTrickster_BG21_006_G:\r\n\t\t\t\tconst tricksterMultiplier = deadEntityCardId === CardIds.ImpulsiveTrickster_BG21_006_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 < tricksterMultiplier; j++) {\r\n\t\t\t\t\t\tconst targetBoard = boardWithDeadEntity;\r\n\t\t\t\t\t\tgrantRandomHealth(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\ttargetBoard,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\ttrue,\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.NightbaneIgnited_BG29_815:\r\n\t\t\tcase CardIds.NightbaneIgnited_BG29_815_G:\r\n\t\t\t\tconst nightbaneLoops = deadEntityCardId === CardIds.NightbaneIgnited_BG29_815_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 < nightbaneLoops; j++) {\r\n\t\t\t\t\t\tconst pickedTargetEntityIds = [];\r\n\t\t\t\t\t\tfor (let k = 0; k < 2; k++) {\r\n\t\t\t\t\t\t\tconst target = pickRandomAlive(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity.filter((e) => !pickedTargetEntityIds.includes(e.entityId)),\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\t\t\tpickedTargetEntityIds.push(target.entityId);\r\n\t\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t\t);\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.Leapfrogger_BG21_000:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\t// console.log('\\t', 'Leapfrogger from DR', deadEntity.entityId);\r\n\t\t\t\t\tapplyLeapFroggerEffect(\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\tfalse,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\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_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tapplyLeapFroggerEffect(\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\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\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:\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\thasCorrectTribe(entity, boardWithDeadEntityHero, Race.MECH, gameState.allCards),\r\n\t\t\t\t\t\t).length;\r\n\t\t\t\t\tfor (let j = 0; j < numberOfDeadMechsThisCombat; 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\tconst baseDamage =\r\n\t\t\t\t\t4 +\r\n\t\t\t\t\tboardWithDeadEntityHero.trinkets.filter(\r\n\t\t\t\t\t\t(t) => t.cardId === CardIds.KaboomBotPortrait_BG30_MagicItem_803,\r\n\t\t\t\t\t).length *\r\n\t\t\t\t\t\t8;\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\tbaseDamage,\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.FireDancer_BG29_843:\r\n\t\t\tcase CardIds.FireDancer_BG29_843_G:\r\n\t\t\t\tconst fireDancerLoops = deadEntity.cardId === CardIds.FireDancer_BG29_843_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 < fireDancerLoops; j++) {\r\n\t\t\t\t\t\t// In case there are spawns, don't target them\r\n\t\t\t\t\t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\thero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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\t// Most likely there is a death loop after each round of damage, see\r\n\t\t\t\t\t// http://replays.firestoneapp.com/?reviewId=4b6e4d8d-fc83-4795-b450-4cd0c3a518be&turn=17&action=2\r\n\t\t\t\t\t// Update 13/05/2024: the death process is probably between each deathrattle proc, but not each\r\n\t\t\t\t\t// individual tick. See\r\n\t\t\t\t\t// http://replays.firestoneapp.com/?reviewId=6d66b90d-5678-4a68-a45f-7ddb887f9450&turn=17&action=11\r\n\t\t\t\t\tprocessMinionDeath(\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\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.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\tdealDamageToMinion(\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\tdealDamageToMinion(\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\t// In case there are spawns, don't target them\r\n\t\t\t\t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\thero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tdamage,\r\n\t\t\t\t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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.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\t// In case there are spawns, don't target them\r\n\t\t\t\t\t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\thero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t3,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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.LeeroyTheReckless_BG23_318:\r\n\t\t\tcase CardIds.LeeroyTheReckless_BG23_318_G:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity\r\n\t\t\t\t\t// http://replays.firestoneapp.com/?reviewId=c6121cdd-5cb6-4321-807e-4ff644568a8c&turn=25&action=7\r\n\t\t\t\t\t// Update 02/05/2024: this is a bug, and friendly units should be killed\r\n\t\t\t\t\t// deadEntity.friendly !== deadEntity.lastAffectedByEntity.friendly\r\n\t\t\t\t) {\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\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.ThreeLilQuilboar_BG26_867:\r\n\t\t\tcase CardIds.ThreeLilQuilboar_BG26_867_G:\r\n\t\t\t\t// console.log('Triggering blood gems', deadEntityCardId, deadEntity.entityId);\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst numberOfBloodGems = deadEntityCardId === CardIds.ThreeLilQuilboar_BG26_867_G ? 6 : 3;\r\n\t\t\t\t\tfor (const entity of boardWithDeadEntity.filter((e) =>\r\n\t\t\t\t\t\thasCorrectTribe(e, boardWithDeadEntityHero, Race.QUILBOAR, gameState.allCards),\r\n\t\t\t\t\t)) {\r\n\t\t\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\tnumberOfBloodGems,\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.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.filter((e) => !e.definitelyDead && e.health > 0);\r\n\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\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.Scourfin_BG26_360:\r\n\t\t\tcase CardIds.Scourfin_BG26_360_G:\r\n\t\t\t\tconst statsScourfin = deadEntityCardId === CardIds.Scourfin_BG26_360_G ? 10 : 5;\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\tboardWithDeadEntityHero.hand.filter(\r\n\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\tnull,\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\tonDeathrattleTriggered(deathrattleTriggeredInput);\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\tdealDamageToMinion(\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\tboardWithDeadEntityHero,\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 ? 2 : 1;\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 * 2,\r\n\t\t\t\t\t\tmotleyBuff * 1,\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 ? 4 : 2;\r\n\t\t\t\tconst moroesBuffHealth = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 8 : 4;\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) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(e, boardWithDeadEntityHero, Race.UNDEAD, gameState.allCards),\r\n\t\t\t\t\t\t\t);\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\tcase CardIds.BarrensConjurer_BG29_862:\r\n\t\t\tcase CardIds.BarrensConjurer_BG29_862_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst conjurerToAddQuantity = deadEntity.cardId === CardIds.BarrensConjurer_BG29_862_G ? 2 : 1;\r\n\t\t\t\t\tconst conjurerCardsToAdd = [];\r\n\t\t\t\t\tfor (let i = 0; i < conjurerToAddQuantity; i++) {\r\n\t\t\t\t\t\tconjurerCardsToAdd.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t\t}\r\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, conjurerCardsToAdd, 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.ShadowyConstruct_BG25_HERO_103_Buddy:\r\n\t\t\tcase CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tconst loops = deadEntity.cardId === CardIds.ShadowyConstruct_BG25_HERO_103_Buddy_G ? 2 : 1;\r\n\t\t\t\t\tfor (let j = 0; j < loops; j++) {\r\n\t\t\t\t\t\tconst atkBuff = deadEntity.attack;\r\n\t\t\t\t\t\tconst healthBuff = deadEntity.maxHealth;\r\n\t\t\t\t\t\tconst target = pickRandom(\r\n\t\t\t\t\t\t\tboardWithDeadEntity.filter((e) => e.entityId !== deadEntity.entityId),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tatkBuff,\r\n\t\t\t\t\t\t\t\thealthBuff,\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\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.SpikedSavior_BG29_808:\r\n\t\t\tcase CardIds.SpikedSavior_BG29_808_G:\r\n\t\t\t\tconst spikedSaviorLoops = deadEntity.cardId === CardIds.SpikedSavior_BG29_808_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 < spikedSaviorLoops; j++) {\r\n\t\t\t\t\t\tconst targetBoard = [...boardWithDeadEntity];\r\n\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\t\t\t\t\t\tmodifyStats(entity, 0, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\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\tentity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\t\t\t\t\t\t// Issue: because this can spawn a new minion, the entity indices can be incorrect\r\n\t\t\t\t\t\t\t// See sim.sample.1.txt\r\n\t\t\t\t\t\t\t// Ideally, I should probably move the minion spawn index to another paradigm: keep the dead minions\r\n\t\t\t\t\t\t\t// until there are new spawns, and delete them afterwards, so I can easily refer to their index\r\n\t\t\t\t\t\t\t// by just looking them up, and spawning to the right\r\n\t\t\t\t\t\t\t// However, since this doesn't work, maybe I can look for entity indices adjustments needed\r\n\t\t\t\t\t\t\t// by looking up the position changes of other minions?\r\n\t\t\t\t\t\t\t// Not sure how this could work without creating a giant mess, so for now it will probably\r\n\t\t\t\t\t\t\t// stay as a bug\r\n\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\tentity,\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\t1,\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.CruiseController_BG31_821:\r\n\t\t\tcase CardIds.CruiseController_BG31_821_G:\r\n\t\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\t\tboardWithDeadEntityHero.globalInfo.PirateAttackBonus +=\r\n\t\t\t\t\t\tdeadEntity.cardId === CardIds.CruiseController_BG31_821_G ? 10 : 5;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t// Add all the deathrattles that don't have an effect on combat\r\n\t\t\t// case CardIds.FieryFelblood_BG29_877:\r\n\t\t\t// case CardIds.FieryFelblood_BG29_877_G:\r\n\t\t\tdefault:\r\n\t\t\t\tif (hasMechanic(gameState.allCards.getCard(deadEntity.cardId), GameTag[GameTag.DEATHRATTLE])) {\r\n\t\t\t\t\tfor (let i = 0; i < multiplier; i++) {\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}\r\n\t}\r\n\r\n\tfor (const enchantment of enchantments) {\r\n\t\tswitch (enchantment.cardId) {\r\n\t\t\tcase CardIds.RustyTrident_TridentsTreasureEnchantment_BG30_MagicItem_917e:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.HoggyBank_GemInTheBankEnchantment_BG30_MagicItem_411e:\r\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [CardIds.BloodGem], gameState);\r\n\t\t\t\tbreak;\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\t// console.log('\\t', 'Leapfrogger enchantment', enchantment.repeats);\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};\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\tdealDamageToMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\t1,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\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 validBoard = boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead);\r\n\t\tconst target: BoardEntity = validBoard[validBoard.length - 1];\r\n\t\tif (!!target) {\r\n\t\t\ttarget.taunt = true;\r\n\t\t\tmodifyStats(target, 0, 3, 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.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!!target) {\r\n\t\t\tmodifyStats(target, target.attack, 0, 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: number,\r\n): void => {\r\n\tmultiplier = multiplier ?? deadEntity.deathrattleRepeats ?? 1;\r\n\t// console.debug('applying leapfrogger effect', deadEntity.entityId, multiplier);\r\n\tconst buffed = grantRandomStats(\r\n\t\tdeadEntity,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tmultiplier * (isPremium ? 2 : 1),\r\n\t\tRace.BEAST,\r\n\t\tfalse,\r\n\t\tgameState,\r\n\t);\r\n\tif (buffed) {\r\n\t\tbuffed.enchantments = 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// console.log(\r\n\t\t// \t'\\t\\t',\r\n\t\t// \t'entity enchantments',\r\n\t\t// \tbuffed.entityId,\r\n\t\t// \tmultiplier,\r\n\t\t// \tbuffed.enchantments\r\n\t\t// \t\t.filter((e) => e.cardId.startsWith('BG21'))\r\n\t\t// \t\t.map((e) => e.repeats)\r\n\t\t// \t\t.join(','),\r\n\t\t// );\r\n\t}\r\n};\r\n\r\nconst applyRecurringNightmareDeathrattleEffect = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\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, boardWithDeadEntityHero, 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 handleAfterMinionKillsEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst killer = deadEntity.lastAffectedByEntity;\r\n\tif (!killer) {\r\n\t\treturn;\r\n\t}\r\n\t// Killed an enemy minion\r\n\tif (killer.friendly !== deadEntity.friendly) {\r\n\t\tif (otherBoardHero.heroPowerId === CardIds.Rokara_GloryOfCombat) {\r\n\t\t\tmodifyStats(killer, 1, 0, otherBoard, otherBoardHero, gameState);\r\n\t\t}\r\n\r\n\t\t// Icesnarl the Mighty\r\n\t\t// The timing here might be off, as the following replay suggests that the effect should trigger\r\n\t\t// before Sr. Tomb Diver's deathrattle is applied\r\n\t\t// http://replays.firestoneapp.com/?reviewId=ebb4e2d6-11b4-44f4-a052-3be2c63dd38f&turn=11&action=6\r\n\t\t// Update 2024-30-06: lived tgus ub ab \"after minion kills\" trigger, let's see how that works\r\n\t\totherBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((icesnarl) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ticesnarl,\r\n\t\t\t\t\t0,\r\n\t\t\t\t\ticesnarl.cardId === CardIds.IcesnarlTheMighty_BG20_HERO_100_Buddy_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});\r\n\t}\r\n};\r\n\r\nexport const applyWheneverMinionDiesEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// console.log('applying minion death effect', stringifySimpleCard(deadEntity, allCards));\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.BEAST, gameState.allCards)) {\r\n\t\tapplyScavengingHyenaEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.DEMON, gameState.allCards)) {\r\n\t\tapplySoulJugglerEffect(boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MECH, gameState.allCards)) {\r\n\t\tapplyJunkbotEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.MURLOC, gameState.allCards)) {\r\n\t\tremoveOldMurkEyeAttack(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tremoveOldMurkEyeAttack(otherBoard, otherBoardHero, gameState);\r\n\t}\r\n\tif (hasCorrectTribe(deadEntity, boardWithDeadEntityHero, Race.ELEMENTAL, gameState.allCards)) {\r\n\t\tapplyMossOfTheSchlossEffect(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\tif (deadEntity.taunt) {\r\n\t\tapplyBristlemaneScrapsmithEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\tapplyQirajiHarbringerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntityIndexFromRight, gameState);\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\tdeadEntity.cardId === CardIds.EternalKnight_BG25_008_G\r\n\t) {\r\n\t\tapplyEternalKnightEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t}\r\n\r\n\t// Putricide-only\r\n\tboardWithDeadEntity\r\n\t\t.filter((e) => e.additionalCards?.includes(CardIds.FlesheatingGhoulLegacy_BG26_tt_004))\r\n\t\t.forEach((e) => {\r\n\t\t\tmodifyStats(e, 1, 0, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t});\r\n\r\n\tapplyRotHideGnollEffect(boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\r\n\t// Overkill\r\n\tif (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\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\t3,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} else if (deadEntity.lastAffectedByEntity.cardId === CardIds.HeraldOfFlame_TB_BaconUps_103) {\r\n\t\t\tconst targets = boardWithDeadEntity.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\t\tif (targets.length > 0) {\r\n\t\t\t\tconst target = targets[0];\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t\t\t\t6,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental && deadEntity.lastAffectedByEntity.attacking) {\r\n\t\t// \t// } else if (deadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElemental) {\r\n\t\t// \t// console.log('applying WildfireElemental effect', stringifySimple(boardWithDeadEntity, allCards));\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \t// Prevent propagation of the effect\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \t// console.log('neighbours', stringifySimple(neighbours, allCards));\r\n\t\t// \tif (neighbours.length > 0) {\r\n\t\t// \t\tconst randomTarget = neighbours[Math.floor(Math.random() * neighbours.length)];\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\trandomTarget,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// } else if (\r\n\t\t// \tdeadEntity.lastAffectedByEntity.cardId === CardIds.WildfireElementalBattlegrounds &&\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking\r\n\t\t// ) {\r\n\t\t// \tconst excessDamage = -deadEntity.health;\r\n\t\t// \tdeadEntity.lastAffectedByEntity.attacking = false;\r\n\t\t// \tconst neighbours = getNeighbours(boardWithDeadEntity, null, boardWithDeadEntity.length - deadEntityIndexFromRight);\r\n\t\t// \tneighbours.forEach((neighbour) =>\r\n\t\t// \t\tdealDamageToEnemy(\r\n\t\t// \t\t\tneighbour,\r\n\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t// \t\t\tdeadEntity.lastAffectedByEntity,\r\n\t\t// \t\t\texcessDamage,\r\n\t\t// \t\t\totherBoard,\r\n\t\t// \t\t\totherBoardHero,\r\n\t\t// \t\t\tallCards,\r\n\t\t// \t\t\tcardsData,\r\n\t\t// \t\t\tsharedState,\r\n\t\t// \t\t\tspectator,\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// }\r\n\t\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\tfalse,\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\tfalse,\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) => hasCorrectTribe(entity, boardWithDeadEntityHero, Race.PIRATE, gameState.allCards))\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\tmodifyStats(pirate, 2, 2, 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) => hasCorrectTribe(entity, boardWithDeadEntityHero, Race.PIRATE, gameState.allCards))\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\tmodifyStats(pirate, 4, 4, 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\n/** @deprecated */\r\nexport const dealDamageToAllMinions = (\r\n\tboard1: BoardEntity[],\r\n\tboard1Hero: BgsPlayerEntity,\r\n\tboard2: BoardEntity[],\r\n\tboard2Hero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity,\r\n\tdamageDealt: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (board1.length === 0 && board2.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\tfor (let i = 0; i < board1.length; i++) {\r\n\t\tdealDamageToMinion(board1[i], board1, board1Hero, damageSource, damageDealt, board2, board2Hero, gameState);\r\n\t}\r\n\tfor (let i = 0; i < board2.length; i++) {\r\n\t\tdealDamageToMinion(board2[i], board2, board2Hero, damageSource, damageDealt, board1, board1Hero, gameState);\r\n\t}\r\n};\r\n\r\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\tmodifyStats(board[i], 2, 1, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t} else if (board[i].cardId === CardIds.ScavengingHyenaLegacy_TB_BaconUps_043) {\r\n\t\t\tmodifyStats(board[i], 4, 2, board, boardWithDeadEntityHero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyEternalKnightEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008 ||\r\n\t\t\tboard[i].cardId === CardIds.EternalKnight_BG25_008_G\r\n\t\t) {\r\n\t\t\tconst multiplier = board[i].cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\r\n\t\t\tmodifyStats(board[i], multiplier * 1, multiplier * 1, 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\tmodifyStats(board[i], multiplier * 1, 0, board, hero, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, null, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyBristlemaneScrapsmithEffect = (\r\n\tboard: BoardEntity[],\r\n\tboardPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707 ||\r\n\t\t\tboard[i].cardId === CardIds.BristlemaneScrapsmith_BG24_707_G\r\n\t\t) {\r\n\t\t\tconst cardsToAdd = Array(CardIds.BristlemaneScrapsmith_BG24_707_G ? 2 : 1).fill(CardIds.BloodGem);\r\n\t\t\taddCardsInHand(boardPlayerEntity, board, cardsToAdd, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(board[i], board[i], board, boardPlayerEntity, null);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst applyMossOfTheSchlossEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tboard\r\n\t\t.filter(\r\n\t\t\t(e) => e.cardId === CardIds.MossOfTheSchloss_BG30_111 || e.cardId === CardIds.MossOfTheSchloss_BG30_111_G,\r\n\t\t)\r\n\t\t.filter((e) => e.abiityChargesLeft > 0)\r\n\t\t.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, deadEntity.maxAttack, deadEntity.maxHealth, board, hero, gameState);\r\n\t\t\tentity.abiityChargesLeft--;\r\n\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\r\n\t\t});\r\n};\r\n\r\nconst applyJunkbotEffect = (board: BoardEntity[], hero: BgsPlayerEntity, gameState: FullGameState): void => {\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].cardId === CardIds.Junkbot_GVG_106) {\r\n\t\t\tmodifyStats(board[i], 2, 2, 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\tmodifyStats(board[i], 4, 4, 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\r\n\t// TODO: if reactivated, properly apply buffs one by one, instead of all together\r\n\tif (qiraji.length + goldenQiraji.length > 0) {\r\n\t\tconst neighbours = getNeighbours(board, null, deadEntityIndexFromRight);\r\n\t\tconst buff = 2 * qiraji.length + 4 * goldenQiraji.length;\r\n\t\tneighbours.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, buff, buff, board, hero, gameState);\r\n\t\t});\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\tmodifyStats(monstrosity, deadEntity.attack, 0, boardWithDeadEntities, boardWithDeadEntityHero, gameState);\r\n\t\tif (monstrosity.cardId === CardIds.Monstrosity_BG20_HERO_282_Buddy_G) {\r\n\t\t\tmodifyStats(monstrosity, deadEntity.attack, 0, 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\tif (!deadEntities?.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst hasMechorse = deadEntities.some(\r\n\t\t(entity) => entity.cardId === CardIds.MechanizedGiftHorse_MechorseToken_BG27_008t,\r\n\t);\r\n\tconst validDeathrattles = deadEntities\r\n\t\t.filter(\r\n\t\t\t(entity) =>\r\n\t\t\t\tallCards.getCard(entity.cardId).mechanics?.includes(GameTag[GameTag.DEATHRATTLE]) || isFish(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) => VALID_DEATHRATTLE_ENCHANTMENTS.includes(enchantment.cardId as CardIds));\r\n\t// Multiple fish\r\n\tconst deadEntityRememberedDeathrattles =\r\n\t\tdeadEntities\r\n\t\t\t.filter((e) => !!e.rememberedDeathrattles?.length)\r\n\t\t\t// If the fish has reborn, it will inherit its own Deathrattles, and we don't want that\r\n\t\t\t.filter((e) => e.entityId !== fish.rebornFromEntityId)\r\n\t\t\t.flatMap((e) => e.rememberedDeathrattles) ?? [];\r\n\tconst newDeathrattles = [...validDeathrattles, ...validEnchantments, ...deadEntityRememberedDeathrattles];\r\n\r\n\tif (newDeathrattles.length > 0) {\r\n\t\t// Order is important - the DR are triggered in the order d the minions have died\r\n\t\tif (isGolden(fish.cardId, allCards)) {\r\n\t\t\t// https://stackoverflow.com/questions/33305152/how-to-duplicate-elements-in-a-js-array\r\n\t\t\tconst doubleDr = newDeathrattles.reduce((res, current) => res.concat([current, current]), []);\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...doubleDr];\r\n\t\t} else {\r\n\t\t\tfish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];\r\n\t\t}\r\n\r\n\t\tif (newDeathrattles.some((d) => d.cardId?.startsWith(CardIds.Leapfrogger_BG21_000))) {\r\n\t\t\t// Not sure exactly why, but if a leapfrogger dies first, then a manasaber,\r\n\t\t\t// when the fish dies, the manasaber's effect (spawning tokens) is triggered first\r\n\t\t\t// https://replays.firestoneapp.com/?reviewId=521733fb-8ba1-4663-9a87-3da58e8a09c8&turn=21&action=3\r\n\t\t\t// HACK: So I will hardcode a rule for now to put leapfrogger effects last\r\n\t\t\tconst leapfroggerDeathrattles = groupLeapfroggerDeathrattles(fish.rememberedDeathrattles);\r\n\t\t\tfish.rememberedDeathrattles = [\r\n\t\t\t\t...fish.rememberedDeathrattles.filter((d) => !d.cardId?.startsWith(CardIds.Leapfrogger_BG21_000)),\r\n\t\t\t\t...leapfroggerDeathrattles,\r\n\t\t\t];\r\n\t\t}\r\n\t}\r\n\t// console.debug(\r\n\t// \t'remembered',\r\n\t// \tfish.cardId,\r\n\t// \tfish.entityId,\r\n\t// \tfish.rememberedDeathrattles.map((d) => ({\r\n\t// \t\tcardId: d.cardId,\r\n\t// \t\tname: allCards.getCard(d.cardId)?.name,\r\n\t// \t\t// repeats: d.repeats,\r\n\t// \t\t// timing: d.timing,\r\n\t// \t})),\r\n\t// );\r\n};\r\n\r\nconst removeOldMurkEyeAttack = (\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\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\tmodifyStats(entity, -1, 0, boardWithDeadEntity, hero, gameState);\r\n\t});\r\n\tgoldenMurkeyes.forEach((entity) => {\r\n\t\tmodifyStats(entity, -2, 0, boardWithDeadEntity, hero, gameState);\r\n\t});\r\n};\r\n"]}
|