@firestone-hs/simulate-bgs-battle 1.1.645 → 1.1.646

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.
@@ -1 +1 @@
1
- {"version":3,"file":"debug-state.js","sourceRoot":"","sources":["../src/debug-state.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAG;IACzB,MAAM,EAAE,KAAK;IACb,qBAAqB,EAAE,IAAqB;IAC5C,aAAa,EAAE,EAAwE;IACvF,iBAAiB,EAAE,EAAwE;IAC3F,eAAe,EAAE,CAAC,cAAmC,EAAE,YAAyB,EAAW,EAAE;QAC5F,IAAI,cAAc,CAAC,QAAQ,EAAE;YAC5B,OAAO,cAAc,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,CAAC;SACzD;QACD,OAAO,cAAc,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC;IACvG,CAAC;IACD,aAAa,EAAE,GAAG,EAAE;QACnB,kBAAU,CAAC,aAAa,GAAG,CAAC,GAAG,kBAAU,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from './board-entity';\r\n\r\nexport const debugState = {\r\n\tactive: false,\r\n\tforcedCurrentAttacker: null as number | null,\r\n\tforcedFaceOff: [] as { attacker: ForcedFaceOffEntity; defender: ForcedFaceOffEntity }[],\r\n\tforcedFaceOffBase: [] as { attacker: ForcedFaceOffEntity; defender: ForcedFaceOffEntity }[],\r\n\tisCorrectEntity: (proposedEntity: ForcedFaceOffEntity, actualEntity: BoardEntity): boolean => {\r\n\t\tif (proposedEntity.entityId) {\r\n\t\t\treturn proposedEntity.entityId === actualEntity.entityId;\r\n\t\t}\r\n\t\treturn proposedEntity.attack === actualEntity.attack && proposedEntity.health === actualEntity.health;\r\n\t},\r\n\tonBattleStart: () => {\r\n\t\tdebugState.forcedFaceOff = [...debugState.forcedFaceOffBase];\r\n\t},\r\n};\r\n\r\nexport interface ForcedFaceOffEntity {\r\n\tentityId?: number;\r\n\tattack?: number;\r\n\thealth?: number;\r\n}\r\n"]}
1
+ {"version":3,"file":"debug-state.js","sourceRoot":"","sources":["../src/debug-state.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAG;IACzB,MAAM,EAAE,KAAK;IACb,qBAAqB,EAAE,IAAqB;IAC5C,aAAa,EAAE,EAAwE;IACvF,iBAAiB,EAAE,EAAwE;IAG3F,eAAe,EAAE,CAAC,cAAmC,EAAE,YAAyB,EAAW,EAAE;QAC5F,IAAI,cAAc,CAAC,QAAQ,EAAE;YAC5B,OAAO,cAAc,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,CAAC;SACzD;QACD,OAAO,cAAc,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC;IACvG,CAAC;IACD,aAAa,EAAE,GAAG,EAAE;QACnB,kBAAU,CAAC,aAAa,GAAG,CAAC,GAAG,kBAAU,CAAC,iBAAiB,CAAC,CAAC;IAE9D,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from './board-entity';\r\n\r\nexport const debugState = {\r\n\tactive: false,\r\n\tforcedCurrentAttacker: null as number | null,\r\n\tforcedFaceOff: [] as { attacker: ForcedFaceOffEntity; defender: ForcedFaceOffEntity }[],\r\n\tforcedFaceOffBase: [] as { attacker: ForcedFaceOffEntity; defender: ForcedFaceOffEntity }[],\r\n\t// forcedRng: [] as { attacker: ForcedFaceOffEntity; defender: ForcedFaceOffEntity }[],\r\n\t// forcedRngBase: [] as { attacker: ForcedFaceOffEntity; defender: ForcedFaceOffEntity }[],\r\n\tisCorrectEntity: (proposedEntity: ForcedFaceOffEntity, actualEntity: BoardEntity): boolean => {\r\n\t\tif (proposedEntity.entityId) {\r\n\t\t\treturn proposedEntity.entityId === actualEntity.entityId;\r\n\t\t}\r\n\t\treturn proposedEntity.attack === actualEntity.attack && proposedEntity.health === actualEntity.health;\r\n\t},\r\n\tonBattleStart: () => {\r\n\t\tdebugState.forcedFaceOff = [...debugState.forcedFaceOffBase];\r\n\t\t// debugState.forcedRng = [...debugState.forcedRngBase];\r\n\t},\r\n};\r\n\r\nexport interface ForcedFaceOffEntity {\r\n\tentityId?: number;\r\n\tattack?: number;\r\n\thealth?: number;\r\n}\r\n"]}
@@ -187,8 +187,7 @@ const processDeathrattleForMinions = (deadEntities, playerDeadEntityIndexesFromR
187
187
  const deadEntity = deadEntities[j];
188
188
  const indexFromRight = playerDeadEntityIndexesFromRight[j];
189
189
  const drEntities = handleNaturalDeathrattle(deadEntity, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, input.gameState);
190
- const enchEntities = handleEnchantmentsDeathrattle(deadEntity, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, input.gameState);
191
- entitiesFromDeathrattles.push(...drEntities, ...enchEntities);
190
+ entitiesFromDeathrattles.push(...drEntities);
192
191
  }
193
192
  let avengeEntities = [];
194
193
  if (processAvenge) {
@@ -209,14 +208,13 @@ const processDeathrattleForMinions = (deadEntities, playerDeadEntityIndexesFromR
209
208
  };
210
209
  const processDeathrattleForMinion = (deadEntity, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, gameState, processAvenge = true) => {
211
210
  const drEntities = handleNaturalDeathrattle(deadEntity, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, gameState);
212
- const enchEntities = handleEnchantmentsDeathrattle(deadEntity, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, gameState);
213
211
  let avengeEntities = [];
214
212
  let afterDeathEntities = [];
215
213
  if (processAvenge) {
216
- avengeEntities = (0, avenge_1.applyAvengeEffects)(deadEntity, indexFromRight, deadEntityPlayerState.board, deadEntityPlayerState.player, otherPlayerState.board, otherPlayerState.player, gameState, [...drEntities, ...enchEntities]);
214
+ avengeEntities = (0, avenge_1.applyAvengeEffects)(deadEntity, indexFromRight, deadEntityPlayerState.board, deadEntityPlayerState.player, otherPlayerState.board, otherPlayerState.player, gameState, [...drEntities]);
217
215
  afterDeathEntities = (0, death_effects_1.applyAfterDeathEffects)(deadEntity, indexFromRight, deadEntityPlayerState.board, deadEntityPlayerState.player, otherPlayerState.board, otherPlayerState.player, gameState);
218
216
  }
219
- return [...drEntities, ...enchEntities, ...avengeEntities, ...afterDeathEntities];
217
+ return [...drEntities, ...avengeEntities, ...afterDeathEntities];
220
218
  };
221
219
  exports.processDeathrattleForMinion = processDeathrattleForMinion;
222
220
  const handleNaturalDeathrattle = (deadEntity, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, gameState) => {
@@ -244,36 +242,6 @@ const handleNaturalDeathrattle = (deadEntity, indexFromRight, deadEntities, dead
244
242
  const entitiesFromNativeDeathrattle = (0, deathrattle_spawns_1.spawnEntitiesFromDeathrattle)(deadEntity, modifiedIndexFromRight, deadEntityPlayerState.board, deadEntityPlayerState.player, otherPlayerState.board, otherPlayerState.player, deadEntities, gameState);
245
243
  return entitiesFromNativeDeathrattle;
246
244
  };
247
- const handleEnchantmentsDeathrattle = (deadEntity, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, gameState, skipSpawns = false) => {
248
- var _a, _b;
249
- const modifiedIndexFromRight = Math.min(deadEntityPlayerState.board.length, indexFromRight);
250
- const result = [];
251
- for (const dr of (_a = deadEntity.rememberedDeathrattles) !== null && _a !== void 0 ? _a : []) {
252
- const entityToProcess = {
253
- ...deadEntity,
254
- rememberedDeathrattles: undefined,
255
- cardId: dr.cardId,
256
- tavernTier: gameState.cardsData.getTavernLevel(deadEntity.cardId),
257
- enchantments: [
258
- {
259
- cardId: dr.cardId,
260
- originEntityId: deadEntity.entityId,
261
- repeats: (_b = dr.repeats) !== null && _b !== void 0 ? _b : 1,
262
- timing: dr.timing,
263
- },
264
- ],
265
- pendingAttackBuffs: [],
266
- };
267
- const spawns = handleEnchantmentsDeathrattle(entityToProcess, indexFromRight, deadEntities, deadEntityPlayerState, otherPlayerState, gameState, true);
268
- result.push(...spawns);
269
- }
270
- const entitiesFromEnchantments = (0, deathrattle_spawns_1.spawnEntitiesFromEnchantments)(deadEntity, deadEntityPlayerState.board, deadEntityPlayerState.player, otherPlayerState.board, otherPlayerState.player, gameState);
271
- result.push(...entitiesFromEnchantments);
272
- if (!skipSpawns) {
273
- (0, spawns_1.performEntitySpawns)(result, deadEntityPlayerState.board, deadEntityPlayerState.player, deadEntity, modifiedIndexFromRight, otherPlayerState.board, otherPlayerState.player, gameState);
274
- }
275
- return result;
276
- };
277
245
  const processReborns = (deathrattleInput) => {
278
246
  const processPlayerFirst = Math.random() > 0.5;
279
247
  const playerStates = processPlayerFirst
@@ -1 +1 @@
1
- {"version":3,"file":"deathrattle-orchestration.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-orchestration.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { applyAvengeEffects } from './avenge';\r\nimport { applyAfterDeathEffects } from './death-effects';\r\nimport {\r\n\tapplyAfterMinionDiesEffect,\r\n\tapplyWheneverMinionDiesEffect,\r\n\thandleAfterMinionKillsEffect,\r\n} from './deathrattle-effects';\r\nimport { spawnEntities, spawnEntitiesFromDeathrattle, spawnEntitiesFromEnchantments } from './deathrattle-spawns';\r\nimport { FullGameState, PlayerState } from './internal-game-state';\r\nimport { handleRebornForEntity } from './reborn';\r\nimport { performEntitySpawns } from './spawns';\r\n\r\n// FIXME:\r\n// From Mitchell on Discord:\r\n// - Minions die left to right\r\n// - When a minion dies, it procs natural deathrattle, added deathrattles, and then all avenges progress\r\n// by 1 (and trigger as necessary)\r\n// - Then next minion\r\n// - After ALL deathrattles and avenges are done, Reborn triggers\r\n// - (Ideally after all of that I would want Feathermane to trigger, but that is not what it does right now.\r\n// Right now it triggers at deathrattle speed rather than after Reborn speed)\r\nexport const orchestrateMinionDeathEffects = (\r\n\tdeathrattleInput: DeathrattleInput,\r\n\tprocessAvenge = true,\r\n\tprocessReborn = true,\r\n) => {\r\n\t// Icesnarl / Rokara here?\r\n\thandleAfterMinionsKillEffects(deathrattleInput);\r\n\r\n\t// Not sure about this\r\n\thandleWheneverMinionsDieEffects(deathrattleInput);\r\n\r\n\tconst playerBoardBefore = [...deathrattleInput.gameState.gameState.player.board];\r\n\tconst opponentBoardBefore = [...deathrattleInput.gameState.gameState.opponent.board];\r\n\r\n\tconst entitiesFromDeathrattles = processDeathrattles(deathrattleInput, processAvenge);\r\n\r\n\t// When a Silent Enforcer dies, it deals damage to other minions, then Soul Juggler damages the minions\r\n\t// **before** they completely die and spawn their own deathrattles\r\n\thandleAfterMinionsDieEffects(deathrattleInput);\r\n\r\n\t// Hack to try and fix how reborn indices are handled when there are spawns during the deathrattle phase\r\n\t// Ideally, this should probably be rewritten completely to keep the dead entities in the board itself\r\n\t// so we can use that as a source for the spawn index. However this is a big rewrite with lots of\r\n\t// potential side-effects\r\n\tconst playerBoardAfter = [...deathrattleInput.gameState.gameState.player.board];\r\n\tconst opponentBoardAfter = [...deathrattleInput.gameState.gameState.opponent.board];\r\n\tconst opponentIndexOfSpawnedEntities = opponentBoardAfter\r\n\t\t.filter((entity) => !opponentBoardBefore.includes(entity))\r\n\t\t.map((entity) => opponentBoardAfter.length - opponentBoardAfter.indexOf(entity) - 1);\r\n\tconst playerIndexOfSpawnedEntities = playerBoardAfter\r\n\t\t.filter((entity) => !playerBoardBefore.includes(entity))\r\n\t\t.map((entity) => playerBoardAfter.length - playerBoardAfter.indexOf(entity) - 1);\r\n\tdeathrattleInput.opponentDeadEntityIndexesFromRight = deathrattleInput.opponentDeadEntityIndexesFromRight.map(\r\n\t\t(previousIndex) => {\r\n\t\t\topponentIndexOfSpawnedEntities.forEach((index) => {\r\n\t\t\t\tif (index < previousIndex) {\r\n\t\t\t\t\tpreviousIndex++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn previousIndex;\r\n\t\t},\r\n\t);\r\n\tdeathrattleInput.playerDeadEntityIndexesFromRight = deathrattleInput.playerDeadEntityIndexesFromRight.map(\r\n\t\t(previousIndex) => {\r\n\t\t\tplayerIndexOfSpawnedEntities.forEach((index) => {\r\n\t\t\t\tif (index < previousIndex) {\r\n\t\t\t\t\tpreviousIndex++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn previousIndex;\r\n\t\t},\r\n\t);\r\n\r\n\tif (processReborn) {\r\n\t\tprocessReborns(deathrattleInput);\r\n\t}\r\n\r\n\tconst entitiesFromFeathermanes = processFeathermaneEffects(deathrattleInput);\r\n\thandlePostDeathrattleEffects(deathrattleInput, [...entitiesFromDeathrattles, ...entitiesFromFeathermanes]);\r\n};\r\n\r\nconst handleAfterMinionsKillEffects = (deathrattleInput: DeathrattleInput) => {\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\thandleAfterMinionKillsEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tplayerDeadEntityIndexesFromRight[i][j],\r\n\t\t\t\t\tplayerStates[i].board,\r\n\t\t\t\t\tplayerStates[i].player,\r\n\t\t\t\t\tplayerStates[1 - i].board,\r\n\t\t\t\t\tplayerStates[1 - i].player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleWheneverMinionsDieEffects = (deathrattleInput: DeathrattleInput) => {\r\n\t// Wildfire Element is applied first, before the DR spawns\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tapplyWheneverMinionDiesEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tplayerDeadEntityIndexesFromRight[i][j],\r\n\t\t\t\t\tplayerStates[i].board,\r\n\t\t\t\t\tplayerStates[i].player,\r\n\t\t\t\t\tplayerStates[1 - i].board,\r\n\t\t\t\t\tplayerStates[1 - i].player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleAfterMinionsDieEffects = (deathrattleInput: DeathrattleInput) => {\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tapplyAfterMinionDiesEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tplayerDeadEntityIndexesFromRight[i][j],\r\n\t\t\t\t\tplayerStates[i].board,\r\n\t\t\t\t\tplayerStates[i].player,\r\n\t\t\t\t\tplayerStates[1 - i].board,\r\n\t\t\t\t\tplayerStates[1 - i].player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst processDeathrattles = (deathrattleInput: DeathrattleInput, processAvenge = true): BoardEntity[] => {\r\n\tconst entitiesFromDeathrattles: BoardEntity[] = [];\r\n\t// Deathrattles are handled left to right\r\n\t// Then for each minion, natural deathrattles are processed first, then enchantments\r\n\t// http://replays.firestoneapp.com/?reviewId=ec5428bf-a599-4f4c-bea9-8acad5075cb8&turn=11&action=1\r\n\t// http://replays.firestoneapp.com/?reviewId=f32e734a-d5a2-4fa4-ad10-94019969cdd7&turn=6&action=22\r\n\t// http://replays.firestoneapp.com/?reviewId=ea9503c9-2795-49f0-866b-9ea856cec7df&turn=11&action=3\r\n\t// http://replays.firestoneapp.com/?reviewId=1ff37e17-704c-4a73-8c78-377c52b6cb42&turn=13&action=1 is a trap: the enchantment is on the first\r\n\t// minion, but the DR is on the second one.\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\t// Issue: we should process all deathrattles first, then all avenge. If multiple minions die at the same time,\r\n\t\t// the current implementation processes the first minion completely (DR + avenge), then the second one\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\t// Entities are processed left to right\r\n\t\t\t// TODO: in fact, the processing order is summoning order, so maybe we can just use the entityId\r\n\t\t\t// to determine the order? https://x.com/LoewenMitchell/status/1750792974383173676?s=20\r\n\t\t\t// \"It should be summoned order (which is most cases would be left to right but mid-combat that could change).\"\r\n\t\t\t// This doesn't actually work: http://replays.firestoneapp.com/?reviewId=ec5428bf-a599-4f4c-bea9-8acad5075cb8&turn=11&action=6\r\n\t\t\t// deadEntities.sort((a, b) => a.entityId - b.entityId);\r\n\t\t\t// So we would need to find another proxy for the order\r\n\t\t\tconst spawns = processDeathrattleForMinions(\r\n\t\t\t\tdeadEntities,\r\n\t\t\t\tplayerDeadEntityIndexesFromRight[i],\r\n\t\t\t\tplayerStates[i],\r\n\t\t\t\tplayerStates[1 - i],\r\n\t\t\t\tdeathrattleInput,\r\n\t\t\t\tprocessAvenge,\r\n\t\t\t);\r\n\t\t\tentitiesFromDeathrattles.push(...spawns);\r\n\t\t\t// for (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t// \tconst deadEntity = deadEntities[j];\r\n\t\t\t// \tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t// \tconst deadEntityPlayerState = playerStates[i];\r\n\t\t\t// \tconst otherPlayerState = playerStates[1 - i];\r\n\t\t\t// \tconst spawns = processDeathrattleForMinion(\r\n\t\t\t// \t\tdeadEntity,\r\n\t\t\t// \t\tindexFromRight,\r\n\t\t\t// \t\tdeadEntities,\r\n\t\t\t// \t\tdeadEntityPlayerState,\r\n\t\t\t// \t\totherPlayerState,\r\n\t\t\t// \t\tdeathrattleInput.gameState,\r\n\t\t\t// \t\tprocessAvenge,\r\n\t\t\t// \t);\r\n\t\t\t// \tentitiesFromDeathrattles.push(...spawns);\r\n\t\t\t// }\r\n\t\t}\r\n\t}\r\n\treturn entitiesFromDeathrattles;\r\n};\r\n\r\nconst processFeathermaneEffects = (deathrattleInput: DeathrattleInput, processAvenge = true): BoardEntity[] => {\r\n\tconst entitiesFromDeathrattles: BoardEntity[] = [];\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\t// Entities are processed left to right\r\n\t\t\t// TODO: in fact, the processing order is summoning order, so maybe we can just use the entityId\r\n\t\t\t// to determine the order? https://x.com/LoewenMitchell/status/1750792974383173676?s=20\r\n\t\t\t// \"It should be summoned order (which is most cases would be left to right but mid-combat that could change).\"\r\n\t\t\t// This doesn't actually work: http://replays.firestoneapp.com/?reviewId=ec5428bf-a599-4f4c-bea9-8acad5075cb8&turn=11&action=6\r\n\t\t\t// deadEntities.sort((a, b) => a.entityId - b.entityId);\r\n\t\t\t// So we would need to find another proxy for the order\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t\tconst modifiedIndexFromRight = Math.min(playerStates[i].board.length, indexFromRight);\r\n\t\t\t\tconst deadEntityPlayerState = playerStates[i];\r\n\t\t\t\tconst otherPlayerState = playerStates[1 - i];\r\n\t\t\t\tconst spawns = processFeathermaneForMinion(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\tdeadEntities,\r\n\t\t\t\t\tdeadEntityPlayerState,\r\n\t\t\t\t\totherPlayerState,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t\tprocessAvenge,\r\n\t\t\t\t);\r\n\t\t\t\tentitiesFromDeathrattles.push(...spawns);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn entitiesFromDeathrattles;\r\n};\r\n\r\nconst processFeathermaneForMinion = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n\tprocessAvenge = true,\r\n) => {\r\n\tconst maxSpawns = 7 - deadEntityPlayerState.board.length;\r\n\tconst allSpawns = [];\r\n\r\n\t// Feathermane\r\n\tif (\r\n\t\thasCorrectTribe(deadEntity, deadEntityPlayerState.player, Race.BEAST, gameState.anomalies, gameState.allCards)\r\n\t) {\r\n\t\tconst feathermanes =\r\n\t\t\tdeadEntityPlayerState.player.hand\r\n\t\t\t\t?.filter((e) => !e.locked)\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\te.cardId === CardIds.FreeFlyingFeathermane_BG27_014 ||\r\n\t\t\t\t\t\te.cardId === CardIds.FreeFlyingFeathermane_BG27_014_G,\r\n\t\t\t\t) ?? [];\r\n\t\tfor (const feathermaneSpawn of feathermanes) {\r\n\t\t\tif (allSpawns.length >= maxSpawns) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tfeathermaneSpawn.locked = true;\r\n\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\tfeathermaneSpawn.cardId,\r\n\t\t\t\t1,\r\n\t\t\t\tdeadEntityPlayerState.board,\r\n\t\t\t\tdeadEntityPlayerState.player,\r\n\t\t\t\totherPlayerState.board,\r\n\t\t\t\totherPlayerState.player,\r\n\t\t\t\tgameState,\r\n\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\tfalse,\r\n\t\t\t\tfalse,\r\n\t\t\t\ttrue,\r\n\t\t\t\t{ ...feathermaneSpawn } as BoardEntity,\r\n\t\t\t);\r\n\r\n\t\t\t// So that it can be flagged as \"unspawned\" if it is not spawned in the end\r\n\t\t\tfor (const spawn of spawns) {\r\n\t\t\t\tspawn.onCanceledSummon = () => (feathermaneSpawn.locked = false);\r\n\t\t\t\t// spawn.backRef = feathermaneSpawn;\r\n\t\t\t}\r\n\t\t\tallSpawns.push(...spawns);\r\n\t\t}\r\n\t}\r\n\r\n\tperformEntitySpawns(\r\n\t\tallSpawns,\r\n\t\tdeadEntityPlayerState.board,\r\n\t\tdeadEntityPlayerState.player,\r\n\t\tdeadEntity,\r\n\t\tindexFromRight,\r\n\t\totherPlayerState.board,\r\n\t\totherPlayerState.player,\r\n\t\tgameState,\r\n\t);\r\n\treturn allSpawns;\r\n};\r\n\r\nconst processDeathrattleForMinions = (\r\n\tdeadEntities: BoardEntity[],\r\n\tplayerDeadEntityIndexesFromRight: number[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tinput: DeathrattleInput,\r\n\tprocessAvenge = true,\r\n) => {\r\n\tconst entitiesFromDeathrattles: BoardEntity[] = [];\r\n\r\n\t// Natural deathrattles & enchantments\r\n\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\tconst deadEntity = deadEntities[j];\r\n\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[j];\r\n\t\tconst drEntities = handleNaturalDeathrattle(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntities,\r\n\t\t\tdeadEntityPlayerState,\r\n\t\t\totherPlayerState,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tconst enchEntities = handleEnchantmentsDeathrattle(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntities,\r\n\t\t\tdeadEntityPlayerState,\r\n\t\t\totherPlayerState,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\r\n\t\tentitiesFromDeathrattles.push(...drEntities, ...enchEntities);\r\n\t}\r\n\r\n\t// Avenge\r\n\tlet avengeEntities = [];\r\n\tif (processAvenge) {\r\n\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[j];\r\n\t\t\tavengeEntities = applyAvengeEffects(\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\tdeadEntityPlayerState.board,\r\n\t\t\t\tdeadEntityPlayerState.player,\r\n\t\t\t\totherPlayerState.board,\r\n\t\t\t\totherPlayerState.player,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t\tentitiesFromDeathrattles,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tconst allAfterDeathEntities = [];\r\n\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\tconst deadEntity = deadEntities[j];\r\n\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[j];\r\n\t\tconst afterDeathEntities = applyAfterDeathEffects(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntityPlayerState.board,\r\n\t\t\tdeadEntityPlayerState.player,\r\n\t\t\totherPlayerState.board,\r\n\t\t\totherPlayerState.player,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tallAfterDeathEntities.push(...afterDeathEntities);\r\n\t}\r\n\r\n\treturn [...entitiesFromDeathrattles, ...avengeEntities, ...allAfterDeathEntities];\r\n};\r\n\r\nexport const processDeathrattleForMinion = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n\tprocessAvenge = true,\r\n) => {\r\n\tconst drEntities = handleNaturalDeathrattle(\r\n\t\tdeadEntity,\r\n\t\tindexFromRight,\r\n\t\tdeadEntities,\r\n\t\tdeadEntityPlayerState,\r\n\t\totherPlayerState,\r\n\t\tgameState,\r\n\t);\r\n\tconst enchEntities = handleEnchantmentsDeathrattle(\r\n\t\tdeadEntity,\r\n\t\tindexFromRight,\r\n\t\tdeadEntities,\r\n\t\tdeadEntityPlayerState,\r\n\t\totherPlayerState,\r\n\t\tgameState,\r\n\t);\r\n\t// Avenge trigger before reborn\r\n\t// http://replays.firestoneapp.com/?reviewId=5bb20eb8-e0ca-47ab-adc7-13134716d568&turn=7&action=6\r\n\tlet avengeEntities = [];\r\n\tlet afterDeathEntities = [];\r\n\tif (processAvenge) {\r\n\t\tavengeEntities = applyAvengeEffects(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntityPlayerState.board,\r\n\t\t\tdeadEntityPlayerState.player,\r\n\t\t\totherPlayerState.board,\r\n\t\t\totherPlayerState.player,\r\n\t\t\tgameState,\r\n\t\t\t[...drEntities, ...enchEntities],\r\n\t\t);\r\n\r\n\t\t// TODO: Feathermane should be applied after the Reborn effects have all been processed\r\n\t\t// Secrets should be processed here (\"at Avenge speed\")\r\n\t\tafterDeathEntities = applyAfterDeathEffects(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntityPlayerState.board,\r\n\t\t\tdeadEntityPlayerState.player,\r\n\t\t\totherPlayerState.board,\r\n\t\t\totherPlayerState.player,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\treturn [...drEntities, ...enchEntities, ...avengeEntities, ...afterDeathEntities];\r\n};\r\n\r\nconst handleNaturalDeathrattle = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst modifiedIndexFromRight = Math.min(deadEntityPlayerState.board.length, indexFromRight);\r\n\t// const allSpawns = [];\r\n\t// const spawnsToSpawn = [];\r\n\tfor (const dr of deadEntity.rememberedDeathrattles ?? []) {\r\n\t\tconst entityToProcess: BoardEntity = {\r\n\t\t\t...deadEntity,\r\n\t\t\toriginalCardId: deadEntity.cardId,\r\n\t\t\trememberedDeathrattles: undefined,\r\n\t\t\tdeathrattleRepeats: dr.repeats ?? 1,\r\n\t\t\tscriptDataNum1: dr.scriptDataNum1,\r\n\t\t\tscriptDataNum2: dr.scriptDataNum2,\r\n\t\t\tcardId: dr.cardId,\r\n\t\t\tpendingAttackBuffs: [],\r\n\t\t\t// For Corrupted Bristler\r\n\t\t\tenchantments: deadEntity.enchantments.filter((e) => e.cardId?.startsWith(CardIds.BloodGem)),\r\n\t\t\tmemory:\r\n\t\t\t\tdr.memory == null\r\n\t\t\t\t\t? null\r\n\t\t\t\t\t: Array.isArray(dr.memory)\r\n\t\t\t\t\t? dr.memory.map((mem) => ({ ...mem }))\r\n\t\t\t\t\t: { ...dr.memory },\r\n\t\t};\r\n\t\tconst spawns = handleNaturalDeathrattle(\r\n\t\t\tentityToProcess,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntities,\r\n\t\t\tdeadEntityPlayerState,\r\n\t\t\totherPlayerState,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\t// The spawns have already been processed in the \"handleNaturalDeathrattle\" method\r\n\t\t// spawnsToSpawn.push(...spawns);\r\n\t\t// allSpawns.push(...spawns);\r\n\t}\r\n\r\n\tconst entitiesFromNativeDeathrattle: readonly BoardEntity[] = spawnEntitiesFromDeathrattle(\r\n\t\tdeadEntity,\r\n\t\tmodifiedIndexFromRight,\r\n\t\tdeadEntityPlayerState.board,\r\n\t\tdeadEntityPlayerState.player,\r\n\t\totherPlayerState.board,\r\n\t\totherPlayerState.player,\r\n\t\tdeadEntities,\r\n\t\tgameState,\r\n\t);\r\n\t// allSpawns.push(...entitiesFromNativeDeathrattle);\r\n\t// spawnsToSpawn.push(...entitiesFromNativeDeathrattle);\r\n\t// Some candidate entities are not spawned, and so are ignored in further processing\r\n\t// const actualSpawns = performEntitySpawns(\r\n\t// \tspawnsToSpawn,\r\n\t// \tdeadEntityPlayerState.board,\r\n\t// \tdeadEntityPlayerState.player,\r\n\t// \tdeadEntity,\r\n\t// \tmodifiedIndexFromRight,\r\n\t// \totherPlayerState.board,\r\n\t// \totherPlayerState.player,\r\n\t// \tgameState,\r\n\t// );\r\n\t// In case of leapfrogger, we want to first spawn the minions, then apply the frog effect\r\n\t// TODO: revisit this once Leapfroggers are in the game again\r\n\t// handleDeathrattleEffects(\r\n\t// \tdeadEntityPlayerState.board,\r\n\t// \tdeadEntityPlayerState.player,\r\n\t// \tdeadEntity,\r\n\t// \tmodifiedIndexFromRight,\r\n\t// \totherPlayerState.board,\r\n\t// \totherPlayerState.player,\r\n\t// \tgameState,\r\n\t// );\r\n\r\n\treturn entitiesFromNativeDeathrattle;\r\n};\r\n\r\nconst handleEnchantmentsDeathrattle = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n\tskipSpawns = false,\r\n) => {\r\n\tconst modifiedIndexFromRight = Math.min(deadEntityPlayerState.board.length, indexFromRight);\r\n\tconst result = [];\r\n\tfor (const dr of deadEntity.rememberedDeathrattles ?? []) {\r\n\t\tconst entityToProcess: BoardEntity = {\r\n\t\t\t...deadEntity,\r\n\t\t\trememberedDeathrattles: undefined,\r\n\t\t\tcardId: dr.cardId,\r\n\t\t\t// So that cards that rely on the tavern tier use the base entity, and not the enchantment / remembered card\r\n\t\t\ttavernTier: gameState.cardsData.getTavernLevel(deadEntity.cardId),\r\n\t\t\tenchantments: [\r\n\t\t\t\t{\r\n\t\t\t\t\tcardId: dr.cardId,\r\n\t\t\t\t\toriginEntityId: deadEntity.entityId,\r\n\t\t\t\t\trepeats: dr.repeats ?? 1,\r\n\t\t\t\t\ttiming: dr.timing,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t\tpendingAttackBuffs: [],\r\n\t\t};\r\n\t\tconst spawns = handleEnchantmentsDeathrattle(\r\n\t\t\tentityToProcess,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntities,\r\n\t\t\tdeadEntityPlayerState,\r\n\t\t\totherPlayerState,\r\n\t\t\tgameState,\r\n\t\t\t// We skip spawns, otherwise it will be added twice\r\n\t\t\ttrue,\r\n\t\t);\r\n\t\tresult.push(...spawns);\r\n\t}\r\n\tconst entitiesFromEnchantments: readonly BoardEntity[] = spawnEntitiesFromEnchantments(\r\n\t\tdeadEntity,\r\n\t\tdeadEntityPlayerState.board,\r\n\t\tdeadEntityPlayerState.player,\r\n\t\totherPlayerState.board,\r\n\t\totherPlayerState.player,\r\n\t\tgameState,\r\n\t);\r\n\tresult.push(...entitiesFromEnchantments);\r\n\tif (!skipSpawns) {\r\n\t\tperformEntitySpawns(\r\n\t\t\tresult,\r\n\t\t\tdeadEntityPlayerState.board,\r\n\t\t\tdeadEntityPlayerState.player,\r\n\t\t\tdeadEntity,\r\n\t\t\tmodifiedIndexFromRight,\r\n\t\t\totherPlayerState.board,\r\n\t\t\totherPlayerState.player,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\treturn result;\r\n};\r\n\r\nconst processReborns = (deathrattleInput: DeathrattleInput) => {\r\n\t// const entitiesFromReborn: BoardEntity[] = [];\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t\tconst modifiedIndexFromRight = Math.min(playerStates[i].board.length, indexFromRight);\r\n\t\t\t\tconst deadEntityPlayerState = playerStates[i];\r\n\t\t\t\tconst otherPlayerState = playerStates[1 - i];\r\n\t\t\t\thandleRebornForEntity(\r\n\t\t\t\t\tdeadEntityPlayerState.board,\r\n\t\t\t\t\tdeadEntityPlayerState.player,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\totherPlayerState.board,\r\n\t\t\t\t\totherPlayerState.player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handlePostDeathrattleEffects = (deathrattleInput: DeathrattleInput, entitiesFromDeathrattles: BoardEntity[]) => {\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tconst deadEntityPlayerState = playerStates[i];\r\n\t\tconst otherPlayerState = playerStates[1 - i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\t// Process from right to left, so that we can set the hasAttacked attribute properly\r\n\t\t\t// If two minions die at the same time, both of which having attacked, but the third in line having not,\r\n\t\t\t// processing them from left to right means the first (leftmost) one will check its right neighbor, which\r\n\t\t\t// is the minion that hasn't attacked\r\n\t\t\tfor (let j = deadEntities.length - 1; j >= 0; j--) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t\tconst modifiedIndexFromRight = Math.min(playerStates[i].board.length, indexFromRight);\r\n\t\t\t\thandlePostDeathrattleEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\tdeadEntities,\r\n\t\t\t\t\tdeadEntityPlayerState,\r\n\t\t\t\t\totherPlayerState,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t\tentitiesFromDeathrattles,\r\n\t\t\t\t\tdeadEntityPlayerState.player.friendly,\r\n\t\t\t\t\tdeathrattleInput,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const handleDeathrattles = (deathrattleInput: DeathrattleInput) => {\r\n\torchestrateMinionDeathEffects(deathrattleInput, false, false);\r\n};\r\n\r\nconst handlePostDeathrattleEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n\tspawnedEntities: BoardEntity[],\r\n\tisPlayer: boolean,\r\n\tdeathrattleInput: DeathrattleInput,\r\n) => {\r\n\t// This doesn't work if the entity that was to the right died.\r\n\tconst entityRightToSpawns =\r\n\t\tindexFromRight === 0 ? null : deadEntityPlayerState.board[deadEntityPlayerState.board.length - indexFromRight];\r\n\t// To handle minions attack tokens\r\n\t// See http://replays.firestoneapp.com/?reviewId=0583d6a4-6ed0-4b20-894e-4ceb560894fe&turn=6&action=11\r\n\t// When a minion dies, the spawn are either elligible to attack next turn or not\r\n\t// If the minion right to the spawned minion has already attacked, then the spawned\r\n\t// minion cannot attack\r\n\tspawnedEntities.forEach((entity) => {\r\n\t\tentity.hasAttacked = deadEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\tif (deadEntityPlayerState.player.questRewards?.includes(CardIds.RitualDagger_BG24_Reward_113)) {\r\n\t\tconst ogDeadEntity = gameState.sharedState.deaths.find((entity) => entity.entityId === deadEntity.entityId);\r\n\t\tif (ogDeadEntity) {\r\n\t\t\togDeadEntity.attack += 4;\r\n\t\t\togDeadEntity.health += 4;\r\n\t\t}\r\n\t}\r\n\r\n\t// ISSUE: when we do this, we change the minion's stats before processing deathrattle effects, which can mess\r\n\t// up the simulation in some cases (like Nightbane, Ignited)\r\n\t// FIX: we do it in postDeathrattleEfects, not when removing minions from the board\r\n\tif (deadEntityPlayerState.player.globalInfo.HauntedCarapaceAttackBonus > 0) {\r\n\t\tdeadEntity.attack = Math.max(\r\n\t\t\t0,\r\n\t\t\tdeadEntity.attack - deadEntityPlayerState.player.globalInfo.HauntedCarapaceAttackBonus,\r\n\t\t);\r\n\t}\r\n\tif (deadEntityPlayerState.player.globalInfo.HauntedCarapaceHealthBonus > 0) {\r\n\t\tdeadEntity.health = Math.max(\r\n\t\t\t1,\r\n\t\t\tdeadEntity.health - deadEntityPlayerState.player.globalInfo.HauntedCarapaceHealthBonus,\r\n\t\t);\r\n\t}\r\n\tif (\r\n\t\thasCorrectTribe(deadEntity, deadEntityPlayerState.player, Race.UNDEAD, gameState.anomalies, gameState.allCards)\r\n\t) {\r\n\t\tif (deadEntityPlayerState.player.globalInfo.UndeadAttackBonus > 0) {\r\n\t\t\tdeadEntity.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tdeadEntity.attack - deadEntityPlayerState.player.globalInfo.UndeadAttackBonus,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\tif (\r\n\t\thasCorrectTribe(deadEntity, deadEntityPlayerState.player, Race.BEAST, gameState.anomalies, gameState.allCards)\r\n\t) {\r\n\t\tif (deadEntityPlayerState.player.globalInfo.GoldrinnBuffAtk > 0) {\r\n\t\t\tdeadEntity.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tdeadEntity.attack - deadEntityPlayerState.player.globalInfo.GoldrinnBuffAtk,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n\r\ninterface DeathrattleInput {\r\n\tgameState: FullGameState;\r\n\tplayerDeadEntities: BoardEntity[];\r\n\tplayerDeadEntityIndexesFromRight: number[];\r\n\topponentDeadEntities: BoardEntity[];\r\n\topponentDeadEntityIndexesFromRight: number[];\r\n}\r\n"]}
1
+ {"version":3,"file":"deathrattle-orchestration.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-orchestration.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { applyAvengeEffects } from './avenge';\r\nimport { applyAfterDeathEffects } from './death-effects';\r\nimport {\r\n\tapplyAfterMinionDiesEffect,\r\n\tapplyWheneverMinionDiesEffect,\r\n\thandleAfterMinionKillsEffect,\r\n} from './deathrattle-effects';\r\nimport { spawnEntities, spawnEntitiesFromDeathrattle } from './deathrattle-spawns';\r\nimport { FullGameState, PlayerState } from './internal-game-state';\r\nimport { handleRebornForEntity } from './reborn';\r\nimport { performEntitySpawns } from './spawns';\r\n\r\n// FIXME:\r\n// From Mitchell on Discord:\r\n// - Minions die left to right\r\n// - When a minion dies, it procs natural deathrattle, added deathrattles, and then all avenges progress\r\n// by 1 (and trigger as necessary)\r\n// - Then next minion\r\n// - After ALL deathrattles and avenges are done, Reborn triggers\r\n// - (Ideally after all of that I would want Feathermane to trigger, but that is not what it does right now.\r\n// Right now it triggers at deathrattle speed rather than after Reborn speed)\r\nexport const orchestrateMinionDeathEffects = (\r\n\tdeathrattleInput: DeathrattleInput,\r\n\tprocessAvenge = true,\r\n\tprocessReborn = true,\r\n) => {\r\n\t// Icesnarl / Rokara here?\r\n\thandleAfterMinionsKillEffects(deathrattleInput);\r\n\r\n\t// Not sure about this\r\n\thandleWheneverMinionsDieEffects(deathrattleInput);\r\n\r\n\tconst playerBoardBefore = [...deathrattleInput.gameState.gameState.player.board];\r\n\tconst opponentBoardBefore = [...deathrattleInput.gameState.gameState.opponent.board];\r\n\r\n\tconst entitiesFromDeathrattles = processDeathrattles(deathrattleInput, processAvenge);\r\n\r\n\t// When a Silent Enforcer dies, it deals damage to other minions, then Soul Juggler damages the minions\r\n\t// **before** they completely die and spawn their own deathrattles\r\n\thandleAfterMinionsDieEffects(deathrattleInput);\r\n\r\n\t// Hack to try and fix how reborn indices are handled when there are spawns during the deathrattle phase\r\n\t// Ideally, this should probably be rewritten completely to keep the dead entities in the board itself\r\n\t// so we can use that as a source for the spawn index. However this is a big rewrite with lots of\r\n\t// potential side-effects\r\n\tconst playerBoardAfter = [...deathrattleInput.gameState.gameState.player.board];\r\n\tconst opponentBoardAfter = [...deathrattleInput.gameState.gameState.opponent.board];\r\n\tconst opponentIndexOfSpawnedEntities = opponentBoardAfter\r\n\t\t.filter((entity) => !opponentBoardBefore.includes(entity))\r\n\t\t.map((entity) => opponentBoardAfter.length - opponentBoardAfter.indexOf(entity) - 1);\r\n\tconst playerIndexOfSpawnedEntities = playerBoardAfter\r\n\t\t.filter((entity) => !playerBoardBefore.includes(entity))\r\n\t\t.map((entity) => playerBoardAfter.length - playerBoardAfter.indexOf(entity) - 1);\r\n\tdeathrattleInput.opponentDeadEntityIndexesFromRight = deathrattleInput.opponentDeadEntityIndexesFromRight.map(\r\n\t\t(previousIndex) => {\r\n\t\t\topponentIndexOfSpawnedEntities.forEach((index) => {\r\n\t\t\t\tif (index < previousIndex) {\r\n\t\t\t\t\tpreviousIndex++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn previousIndex;\r\n\t\t},\r\n\t);\r\n\tdeathrattleInput.playerDeadEntityIndexesFromRight = deathrattleInput.playerDeadEntityIndexesFromRight.map(\r\n\t\t(previousIndex) => {\r\n\t\t\tplayerIndexOfSpawnedEntities.forEach((index) => {\r\n\t\t\t\tif (index < previousIndex) {\r\n\t\t\t\t\tpreviousIndex++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn previousIndex;\r\n\t\t},\r\n\t);\r\n\r\n\tif (processReborn) {\r\n\t\tprocessReborns(deathrattleInput);\r\n\t}\r\n\r\n\tconst entitiesFromFeathermanes = processFeathermaneEffects(deathrattleInput);\r\n\thandlePostDeathrattleEffects(deathrattleInput, [...entitiesFromDeathrattles, ...entitiesFromFeathermanes]);\r\n};\r\n\r\nconst handleAfterMinionsKillEffects = (deathrattleInput: DeathrattleInput) => {\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\thandleAfterMinionKillsEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tplayerDeadEntityIndexesFromRight[i][j],\r\n\t\t\t\t\tplayerStates[i].board,\r\n\t\t\t\t\tplayerStates[i].player,\r\n\t\t\t\t\tplayerStates[1 - i].board,\r\n\t\t\t\t\tplayerStates[1 - i].player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleWheneverMinionsDieEffects = (deathrattleInput: DeathrattleInput) => {\r\n\t// Wildfire Element is applied first, before the DR spawns\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tapplyWheneverMinionDiesEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tplayerDeadEntityIndexesFromRight[i][j],\r\n\t\t\t\t\tplayerStates[i].board,\r\n\t\t\t\t\tplayerStates[i].player,\r\n\t\t\t\t\tplayerStates[1 - i].board,\r\n\t\t\t\t\tplayerStates[1 - i].player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handleAfterMinionsDieEffects = (deathrattleInput: DeathrattleInput) => {\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tapplyAfterMinionDiesEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tplayerDeadEntityIndexesFromRight[i][j],\r\n\t\t\t\t\tplayerStates[i].board,\r\n\t\t\t\t\tplayerStates[i].player,\r\n\t\t\t\t\tplayerStates[1 - i].board,\r\n\t\t\t\t\tplayerStates[1 - i].player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst processDeathrattles = (deathrattleInput: DeathrattleInput, processAvenge = true): BoardEntity[] => {\r\n\tconst entitiesFromDeathrattles: BoardEntity[] = [];\r\n\t// Deathrattles are handled left to right\r\n\t// Then for each minion, natural deathrattles are processed first, then enchantments\r\n\t// http://replays.firestoneapp.com/?reviewId=ec5428bf-a599-4f4c-bea9-8acad5075cb8&turn=11&action=1\r\n\t// http://replays.firestoneapp.com/?reviewId=f32e734a-d5a2-4fa4-ad10-94019969cdd7&turn=6&action=22\r\n\t// http://replays.firestoneapp.com/?reviewId=ea9503c9-2795-49f0-866b-9ea856cec7df&turn=11&action=3\r\n\t// http://replays.firestoneapp.com/?reviewId=1ff37e17-704c-4a73-8c78-377c52b6cb42&turn=13&action=1 is a trap: the enchantment is on the first\r\n\t// minion, but the DR is on the second one.\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\t// Issue: we should process all deathrattles first, then all avenge. If multiple minions die at the same time,\r\n\t\t// the current implementation processes the first minion completely (DR + avenge), then the second one\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\t// Entities are processed left to right\r\n\t\t\t// TODO: in fact, the processing order is summoning order, so maybe we can just use the entityId\r\n\t\t\t// to determine the order? https://x.com/LoewenMitchell/status/1750792974383173676?s=20\r\n\t\t\t// \"It should be summoned order (which is most cases would be left to right but mid-combat that could change).\"\r\n\t\t\t// This doesn't actually work: http://replays.firestoneapp.com/?reviewId=ec5428bf-a599-4f4c-bea9-8acad5075cb8&turn=11&action=6\r\n\t\t\t// deadEntities.sort((a, b) => a.entityId - b.entityId);\r\n\t\t\t// So we would need to find another proxy for the order\r\n\t\t\tconst spawns = processDeathrattleForMinions(\r\n\t\t\t\tdeadEntities,\r\n\t\t\t\tplayerDeadEntityIndexesFromRight[i],\r\n\t\t\t\tplayerStates[i],\r\n\t\t\t\tplayerStates[1 - i],\r\n\t\t\t\tdeathrattleInput,\r\n\t\t\t\tprocessAvenge,\r\n\t\t\t);\r\n\t\t\tentitiesFromDeathrattles.push(...spawns);\r\n\t\t\t// for (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t// \tconst deadEntity = deadEntities[j];\r\n\t\t\t// \tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t// \tconst deadEntityPlayerState = playerStates[i];\r\n\t\t\t// \tconst otherPlayerState = playerStates[1 - i];\r\n\t\t\t// \tconst spawns = processDeathrattleForMinion(\r\n\t\t\t// \t\tdeadEntity,\r\n\t\t\t// \t\tindexFromRight,\r\n\t\t\t// \t\tdeadEntities,\r\n\t\t\t// \t\tdeadEntityPlayerState,\r\n\t\t\t// \t\totherPlayerState,\r\n\t\t\t// \t\tdeathrattleInput.gameState,\r\n\t\t\t// \t\tprocessAvenge,\r\n\t\t\t// \t);\r\n\t\t\t// \tentitiesFromDeathrattles.push(...spawns);\r\n\t\t\t// }\r\n\t\t}\r\n\t}\r\n\treturn entitiesFromDeathrattles;\r\n};\r\n\r\nconst processFeathermaneEffects = (deathrattleInput: DeathrattleInput, processAvenge = true): BoardEntity[] => {\r\n\tconst entitiesFromDeathrattles: BoardEntity[] = [];\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\t// Entities are processed left to right\r\n\t\t\t// TODO: in fact, the processing order is summoning order, so maybe we can just use the entityId\r\n\t\t\t// to determine the order? https://x.com/LoewenMitchell/status/1750792974383173676?s=20\r\n\t\t\t// \"It should be summoned order (which is most cases would be left to right but mid-combat that could change).\"\r\n\t\t\t// This doesn't actually work: http://replays.firestoneapp.com/?reviewId=ec5428bf-a599-4f4c-bea9-8acad5075cb8&turn=11&action=6\r\n\t\t\t// deadEntities.sort((a, b) => a.entityId - b.entityId);\r\n\t\t\t// So we would need to find another proxy for the order\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t\tconst modifiedIndexFromRight = Math.min(playerStates[i].board.length, indexFromRight);\r\n\t\t\t\tconst deadEntityPlayerState = playerStates[i];\r\n\t\t\t\tconst otherPlayerState = playerStates[1 - i];\r\n\t\t\t\tconst spawns = processFeathermaneForMinion(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\tdeadEntities,\r\n\t\t\t\t\tdeadEntityPlayerState,\r\n\t\t\t\t\totherPlayerState,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t\tprocessAvenge,\r\n\t\t\t\t);\r\n\t\t\t\tentitiesFromDeathrattles.push(...spawns);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn entitiesFromDeathrattles;\r\n};\r\n\r\nconst processFeathermaneForMinion = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n\tprocessAvenge = true,\r\n) => {\r\n\tconst maxSpawns = 7 - deadEntityPlayerState.board.length;\r\n\tconst allSpawns = [];\r\n\r\n\t// Feathermane\r\n\tif (\r\n\t\thasCorrectTribe(deadEntity, deadEntityPlayerState.player, Race.BEAST, gameState.anomalies, gameState.allCards)\r\n\t) {\r\n\t\tconst feathermanes =\r\n\t\t\tdeadEntityPlayerState.player.hand\r\n\t\t\t\t?.filter((e) => !e.locked)\r\n\t\t\t\t.filter(\r\n\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\te.cardId === CardIds.FreeFlyingFeathermane_BG27_014 ||\r\n\t\t\t\t\t\te.cardId === CardIds.FreeFlyingFeathermane_BG27_014_G,\r\n\t\t\t\t) ?? [];\r\n\t\tfor (const feathermaneSpawn of feathermanes) {\r\n\t\t\tif (allSpawns.length >= maxSpawns) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tfeathermaneSpawn.locked = true;\r\n\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\tfeathermaneSpawn.cardId,\r\n\t\t\t\t1,\r\n\t\t\t\tdeadEntityPlayerState.board,\r\n\t\t\t\tdeadEntityPlayerState.player,\r\n\t\t\t\totherPlayerState.board,\r\n\t\t\t\totherPlayerState.player,\r\n\t\t\t\tgameState,\r\n\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\tfalse,\r\n\t\t\t\tfalse,\r\n\t\t\t\ttrue,\r\n\t\t\t\t{ ...feathermaneSpawn } as BoardEntity,\r\n\t\t\t);\r\n\r\n\t\t\t// So that it can be flagged as \"unspawned\" if it is not spawned in the end\r\n\t\t\tfor (const spawn of spawns) {\r\n\t\t\t\tspawn.onCanceledSummon = () => (feathermaneSpawn.locked = false);\r\n\t\t\t\t// spawn.backRef = feathermaneSpawn;\r\n\t\t\t}\r\n\t\t\tallSpawns.push(...spawns);\r\n\t\t}\r\n\t}\r\n\r\n\tperformEntitySpawns(\r\n\t\tallSpawns,\r\n\t\tdeadEntityPlayerState.board,\r\n\t\tdeadEntityPlayerState.player,\r\n\t\tdeadEntity,\r\n\t\tindexFromRight,\r\n\t\totherPlayerState.board,\r\n\t\totherPlayerState.player,\r\n\t\tgameState,\r\n\t);\r\n\treturn allSpawns;\r\n};\r\n\r\nconst processDeathrattleForMinions = (\r\n\tdeadEntities: BoardEntity[],\r\n\tplayerDeadEntityIndexesFromRight: number[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tinput: DeathrattleInput,\r\n\tprocessAvenge = true,\r\n) => {\r\n\tconst entitiesFromDeathrattles: BoardEntity[] = [];\r\n\r\n\t// Natural deathrattles & enchantments\r\n\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\tconst deadEntity = deadEntities[j];\r\n\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[j];\r\n\t\tconst drEntities = handleNaturalDeathrattle(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntities,\r\n\t\t\tdeadEntityPlayerState,\r\n\t\t\totherPlayerState,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\r\n\t\tentitiesFromDeathrattles.push(...drEntities);\r\n\t}\r\n\r\n\t// Avenge\r\n\tlet avengeEntities = [];\r\n\tif (processAvenge) {\r\n\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[j];\r\n\t\t\tavengeEntities = applyAvengeEffects(\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\tdeadEntityPlayerState.board,\r\n\t\t\t\tdeadEntityPlayerState.player,\r\n\t\t\t\totherPlayerState.board,\r\n\t\t\t\totherPlayerState.player,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t\tentitiesFromDeathrattles,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tconst allAfterDeathEntities = [];\r\n\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\tconst deadEntity = deadEntities[j];\r\n\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[j];\r\n\t\tconst afterDeathEntities = applyAfterDeathEffects(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntityPlayerState.board,\r\n\t\t\tdeadEntityPlayerState.player,\r\n\t\t\totherPlayerState.board,\r\n\t\t\totherPlayerState.player,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\tallAfterDeathEntities.push(...afterDeathEntities);\r\n\t}\r\n\r\n\treturn [...entitiesFromDeathrattles, ...avengeEntities, ...allAfterDeathEntities];\r\n};\r\n\r\nexport const processDeathrattleForMinion = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n\tprocessAvenge = true,\r\n) => {\r\n\tconst drEntities = handleNaturalDeathrattle(\r\n\t\tdeadEntity,\r\n\t\tindexFromRight,\r\n\t\tdeadEntities,\r\n\t\tdeadEntityPlayerState,\r\n\t\totherPlayerState,\r\n\t\tgameState,\r\n\t);\r\n\t// Avenge trigger before reborn\r\n\t// http://replays.firestoneapp.com/?reviewId=5bb20eb8-e0ca-47ab-adc7-13134716d568&turn=7&action=6\r\n\tlet avengeEntities = [];\r\n\tlet afterDeathEntities = [];\r\n\tif (processAvenge) {\r\n\t\tavengeEntities = applyAvengeEffects(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntityPlayerState.board,\r\n\t\t\tdeadEntityPlayerState.player,\r\n\t\t\totherPlayerState.board,\r\n\t\t\totherPlayerState.player,\r\n\t\t\tgameState,\r\n\t\t\t[...drEntities],\r\n\t\t);\r\n\r\n\t\t// TODO: Feathermane should be applied after the Reborn effects have all been processed\r\n\t\t// Secrets should be processed here (\"at Avenge speed\")\r\n\t\tafterDeathEntities = applyAfterDeathEffects(\r\n\t\t\tdeadEntity,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntityPlayerState.board,\r\n\t\t\tdeadEntityPlayerState.player,\r\n\t\t\totherPlayerState.board,\r\n\t\t\totherPlayerState.player,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t}\r\n\treturn [...drEntities, ...avengeEntities, ...afterDeathEntities];\r\n};\r\n\r\nconst handleNaturalDeathrattle = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst modifiedIndexFromRight = Math.min(deadEntityPlayerState.board.length, indexFromRight);\r\n\t// const allSpawns = [];\r\n\t// const spawnsToSpawn = [];\r\n\tfor (const dr of deadEntity.rememberedDeathrattles ?? []) {\r\n\t\tconst entityToProcess: BoardEntity = {\r\n\t\t\t...deadEntity,\r\n\t\t\toriginalCardId: deadEntity.cardId,\r\n\t\t\trememberedDeathrattles: undefined,\r\n\t\t\tdeathrattleRepeats: dr.repeats ?? 1,\r\n\t\t\tscriptDataNum1: dr.scriptDataNum1,\r\n\t\t\tscriptDataNum2: dr.scriptDataNum2,\r\n\t\t\tcardId: dr.cardId,\r\n\t\t\tpendingAttackBuffs: [],\r\n\t\t\t// For Corrupted Bristler\r\n\t\t\tenchantments: deadEntity.enchantments.filter((e) => e.cardId?.startsWith(CardIds.BloodGem)),\r\n\t\t\tmemory:\r\n\t\t\t\tdr.memory == null\r\n\t\t\t\t\t? null\r\n\t\t\t\t\t: Array.isArray(dr.memory)\r\n\t\t\t\t\t? dr.memory.map((mem) => ({ ...mem }))\r\n\t\t\t\t\t: { ...dr.memory },\r\n\t\t};\r\n\t\tconst spawns = handleNaturalDeathrattle(\r\n\t\t\tentityToProcess,\r\n\t\t\tindexFromRight,\r\n\t\t\tdeadEntities,\r\n\t\t\tdeadEntityPlayerState,\r\n\t\t\totherPlayerState,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\t// The spawns have already been processed in the \"handleNaturalDeathrattle\" method\r\n\t\t// spawnsToSpawn.push(...spawns);\r\n\t\t// allSpawns.push(...spawns);\r\n\t}\r\n\r\n\tconst entitiesFromNativeDeathrattle: readonly BoardEntity[] = spawnEntitiesFromDeathrattle(\r\n\t\tdeadEntity,\r\n\t\tmodifiedIndexFromRight,\r\n\t\tdeadEntityPlayerState.board,\r\n\t\tdeadEntityPlayerState.player,\r\n\t\totherPlayerState.board,\r\n\t\totherPlayerState.player,\r\n\t\tdeadEntities,\r\n\t\tgameState,\r\n\t);\r\n\r\n\treturn entitiesFromNativeDeathrattle;\r\n};\r\n\r\nconst processReborns = (deathrattleInput: DeathrattleInput) => {\r\n\t// const entitiesFromReborn: BoardEntity[] = [];\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\tfor (let j = 0; j < deadEntities.length; j++) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t\tconst modifiedIndexFromRight = Math.min(playerStates[i].board.length, indexFromRight);\r\n\t\t\t\tconst deadEntityPlayerState = playerStates[i];\r\n\t\t\t\tconst otherPlayerState = playerStates[1 - i];\r\n\t\t\t\thandleRebornForEntity(\r\n\t\t\t\t\tdeadEntityPlayerState.board,\r\n\t\t\t\t\tdeadEntityPlayerState.player,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\totherPlayerState.board,\r\n\t\t\t\t\totherPlayerState.player,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst handlePostDeathrattleEffects = (deathrattleInput: DeathrattleInput, entitiesFromDeathrattles: BoardEntity[]) => {\r\n\tconst processPlayerFirst = Math.random() > 0.5;\r\n\tconst playerStates = processPlayerFirst\r\n\t\t? [deathrattleInput.gameState.gameState.player, deathrattleInput.gameState.gameState.opponent]\r\n\t\t: [deathrattleInput.gameState.gameState.opponent, deathrattleInput.gameState.gameState.player];\r\n\tconst playerDeadEntities = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntities, deathrattleInput.opponentDeadEntities]\r\n\t\t: [deathrattleInput.opponentDeadEntities, deathrattleInput.playerDeadEntities];\r\n\tconst playerDeadEntityIndexesFromRight = processPlayerFirst\r\n\t\t? [deathrattleInput.playerDeadEntityIndexesFromRight, deathrattleInput.opponentDeadEntityIndexesFromRight]\r\n\t\t: [deathrattleInput.opponentDeadEntityIndexesFromRight, deathrattleInput.playerDeadEntityIndexesFromRight];\r\n\t// Process one player first, then the other\r\n\tfor (let i = 0; i < 2; i++) {\r\n\t\tconst deadEntities = playerDeadEntities[i];\r\n\t\tconst deadEntityPlayerState = playerStates[i];\r\n\t\tconst otherPlayerState = playerStates[1 - i];\r\n\t\tif (deadEntities.length >= 0) {\r\n\t\t\t// Process from right to left, so that we can set the hasAttacked attribute properly\r\n\t\t\t// If two minions die at the same time, both of which having attacked, but the third in line having not,\r\n\t\t\t// processing them from left to right means the first (leftmost) one will check its right neighbor, which\r\n\t\t\t// is the minion that hasn't attacked\r\n\t\t\tfor (let j = deadEntities.length - 1; j >= 0; j--) {\r\n\t\t\t\tconst deadEntity = deadEntities[j];\r\n\t\t\t\tconst indexFromRight = playerDeadEntityIndexesFromRight[i][j];\r\n\t\t\t\tconst modifiedIndexFromRight = Math.min(playerStates[i].board.length, indexFromRight);\r\n\t\t\t\thandlePostDeathrattleEffect(\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\tdeadEntities,\r\n\t\t\t\t\tdeadEntityPlayerState,\r\n\t\t\t\t\totherPlayerState,\r\n\t\t\t\t\tdeathrattleInput.gameState,\r\n\t\t\t\t\tentitiesFromDeathrattles,\r\n\t\t\t\t\tdeadEntityPlayerState.player.friendly,\r\n\t\t\t\t\tdeathrattleInput,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const handleDeathrattles = (deathrattleInput: DeathrattleInput) => {\r\n\torchestrateMinionDeathEffects(deathrattleInput, false, false);\r\n};\r\n\r\nconst handlePostDeathrattleEffect = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tdeadEntities: BoardEntity[],\r\n\tdeadEntityPlayerState: PlayerState,\r\n\totherPlayerState: PlayerState,\r\n\tgameState: FullGameState,\r\n\tspawnedEntities: BoardEntity[],\r\n\tisPlayer: boolean,\r\n\tdeathrattleInput: DeathrattleInput,\r\n) => {\r\n\t// This doesn't work if the entity that was to the right died.\r\n\tconst entityRightToSpawns =\r\n\t\tindexFromRight === 0 ? null : deadEntityPlayerState.board[deadEntityPlayerState.board.length - indexFromRight];\r\n\t// To handle minions attack tokens\r\n\t// See http://replays.firestoneapp.com/?reviewId=0583d6a4-6ed0-4b20-894e-4ceb560894fe&turn=6&action=11\r\n\t// When a minion dies, the spawn are either elligible to attack next turn or not\r\n\t// If the minion right to the spawned minion has already attacked, then the spawned\r\n\t// minion cannot attack\r\n\tspawnedEntities.forEach((entity) => {\r\n\t\tentity.hasAttacked = deadEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\tif (deadEntityPlayerState.player.questRewards?.includes(CardIds.RitualDagger_BG24_Reward_113)) {\r\n\t\tconst ogDeadEntity = gameState.sharedState.deaths.find((entity) => entity.entityId === deadEntity.entityId);\r\n\t\tif (ogDeadEntity) {\r\n\t\t\togDeadEntity.attack += 4;\r\n\t\t\togDeadEntity.health += 4;\r\n\t\t}\r\n\t}\r\n\r\n\t// ISSUE: when we do this, we change the minion's stats before processing deathrattle effects, which can mess\r\n\t// up the simulation in some cases (like Nightbane, Ignited)\r\n\t// FIX: we do it in postDeathrattleEfects, not when removing minions from the board\r\n\tif (deadEntityPlayerState.player.globalInfo.HauntedCarapaceAttackBonus > 0) {\r\n\t\tdeadEntity.attack = Math.max(\r\n\t\t\t0,\r\n\t\t\tdeadEntity.attack - deadEntityPlayerState.player.globalInfo.HauntedCarapaceAttackBonus,\r\n\t\t);\r\n\t}\r\n\tif (deadEntityPlayerState.player.globalInfo.HauntedCarapaceHealthBonus > 0) {\r\n\t\tdeadEntity.health = Math.max(\r\n\t\t\t1,\r\n\t\t\tdeadEntity.health - deadEntityPlayerState.player.globalInfo.HauntedCarapaceHealthBonus,\r\n\t\t);\r\n\t}\r\n\tif (\r\n\t\thasCorrectTribe(deadEntity, deadEntityPlayerState.player, Race.UNDEAD, gameState.anomalies, gameState.allCards)\r\n\t) {\r\n\t\tif (deadEntityPlayerState.player.globalInfo.UndeadAttackBonus > 0) {\r\n\t\t\tdeadEntity.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tdeadEntity.attack - deadEntityPlayerState.player.globalInfo.UndeadAttackBonus,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\tif (\r\n\t\thasCorrectTribe(deadEntity, deadEntityPlayerState.player, Race.BEAST, gameState.anomalies, gameState.allCards)\r\n\t) {\r\n\t\tif (deadEntityPlayerState.player.globalInfo.GoldrinnBuffAtk > 0) {\r\n\t\t\tdeadEntity.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tdeadEntity.attack - deadEntityPlayerState.player.globalInfo.GoldrinnBuffAtk,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n\r\ninterface DeathrattleInput {\r\n\tgameState: FullGameState;\r\n\tplayerDeadEntities: BoardEntity[];\r\n\tplayerDeadEntityIndexesFromRight: number[];\r\n\topponentDeadEntities: BoardEntity[];\r\n\topponentDeadEntityIndexesFromRight: number[];\r\n}\r\n"]}
@@ -6,4 +6,3 @@ export declare const simplifiedSpawnEntities: (cardId: string, quantity: number,
6
6
  export declare const simplifiedSpawnEntitiesWithAddToBoard: (cardId: string, quantity: number, input: DeathrattleTriggeredInput, source: BoardEntity, indexFromRight: number, boardEntityToSpawn?: BoardEntity) => void;
7
7
  export declare const spawnEntities: (cardId: string, quantity: number, boardToSpawnInto: BoardEntity[], boardToSpawnIntoHero: BgsPlayerEntity, otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState, friendly: boolean, limitSpawns: boolean, spawnReborn?: boolean, useKhadgar?: boolean, boardEntityToSpawn?: BoardEntity, originalEntity?: BoardEntity) => readonly BoardEntity[];
8
8
  export declare const spawnEntitiesFromDeathrattle: (deadEntity: BoardEntity, deadEntityIndexFromRight: number, boardWithDeadEntity: BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity, otherBoard: BoardEntity[], otherBoardHero: BgsPlayerEntity, entitiesDeadThisAttack: readonly BoardEntity[], gameState: FullGameState) => readonly BoardEntity[];
9
- export declare const spawnEntitiesFromEnchantments: (deadEntity: BoardEntity, boardWithDeadEntity: BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity, otherBoard: BoardEntity[], otherBoardHero: BgsPlayerEntity, gameState: FullGameState) => readonly BoardEntity[];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.spawnEntitiesFromEnchantments = exports.spawnEntitiesFromDeathrattle = exports.spawnEntities = exports.simplifiedSpawnEntitiesWithAddToBoard = exports.simplifiedSpawnEntities = void 0;
3
+ exports.spawnEntitiesFromDeathrattle = exports.spawnEntities = exports.simplifiedSpawnEntitiesWithAddToBoard = exports.simplifiedSpawnEntities = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const card_interface_1 = require("../cards/card.interface");
6
6
  const _card_mappings_1 = require("../cards/impl/_card-mappings");
@@ -57,7 +57,7 @@ const spawnEntities = (cardId, quantity, boardToSpawnInto, boardToSpawnIntoHero,
57
57
  };
58
58
  exports.spawnEntities = spawnEntities;
59
59
  const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, entitiesDeadThisAttack, gameState) => {
60
- var _a, _b, _c, _d, _e, _f;
60
+ var _a, _b, _c, _d, _e, _f, _g;
61
61
  const finalSpawns = [];
62
62
  const multiplier = (0, deathrattle_effects_1.computeDeathrattleMultiplier)([...boardWithDeadEntity], boardWithDeadEntityHero, deadEntity, gameState.sharedState);
63
63
  const deathrattleTriggeredInput = {
@@ -72,11 +72,12 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
72
72
  const enchantments = [
73
73
  ...deadEntity.enchantments,
74
74
  ].sort((a, b) => a.timing - b.timing);
75
- const cardIds = [deadEntity.cardId, ...((_a = deadEntity.additionalCards) !== null && _a !== void 0 ? _a : []), ...enchantments.map((e) => e.cardId)];
76
- for (const deadEntityCardId of cardIds) {
77
- for (let i = 0; i < multiplier; i++) {
78
- const spawnedEntities = [];
79
- let hasTriggered = true;
75
+ const cardIds = [deadEntity.cardId, ...((_a = deadEntity.additionalCards) !== null && _a !== void 0 ? _a : [])];
76
+ for (let i = 0; i < multiplier; i++) {
77
+ const spawnedEntities = [];
78
+ let hasTriggered = false;
79
+ for (const deadEntityCardId of cardIds) {
80
+ let hasTriggeredThisLoop = true;
80
81
  const spawnEntityImpl = _card_mappings_1.cardMappings[deadEntityCardId];
81
82
  if ((0, card_interface_1.hasDeathrattleSpawn)(spawnEntityImpl)) {
82
83
  const spawned = spawnEntityImpl.deathrattleSpawn(deadEntity, deathrattleTriggeredInput);
@@ -600,101 +601,75 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
600
601
  default:
601
602
  if ((_f = deadEntity.additionalCards) === null || _f === void 0 ? void 0 : _f.includes(deadEntityCardId)) {
602
603
  if (!(0, utils_2.hasMechanic)(gameState.allCards.getCard(deadEntityCardId), reference_data_1.GameTag.DEATHRATTLE)) {
603
- hasTriggered = false;
604
+ hasTriggeredThisLoop = false;
604
605
  }
605
606
  }
606
607
  else {
607
608
  const source = [deadEntity, ...enchantments].find((e) => e.cardId === deadEntityCardId);
608
609
  if (!(0, utils_2.hasEntityMechanic)(source, reference_data_1.GameTag.DEATHRATTLE, gameState.allCards)) {
609
- hasTriggered = false;
610
+ hasTriggeredThisLoop = false;
610
611
  }
611
612
  }
612
613
  break;
613
614
  }
614
615
  }
615
- if ((spawnedEntities === null || spawnedEntities === void 0 ? void 0 : spawnedEntities.length) > 0) {
616
- const actualSpawns = (0, spawns_1.performEntitySpawns)(spawnedEntities, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, deadEntityIndexFromRight, otherBoard, otherBoardHero, gameState);
617
- finalSpawns.push(...actualSpawns);
618
- }
619
- if (hasTriggered) {
620
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
621
- }
616
+ hasTriggered = hasTriggered || hasTriggeredThisLoop;
622
617
  }
623
- }
624
- return finalSpawns;
625
- };
626
- exports.spawnEntitiesFromDeathrattle = spawnEntitiesFromDeathrattle;
627
- const spawnEntitiesFromEnchantments = (deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState) => {
628
- var _a;
629
- const multiplier = (0, deathrattle_effects_1.computeDeathrattleMultiplier)(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, gameState.sharedState);
630
- const deathrattleTriggeredInput = {
631
- boardWithDeadEntity,
632
- boardWithDeadEntityHero,
633
- deadEntity,
634
- otherBoard,
635
- otherBoardHero,
636
- gameState,
637
- };
638
- const spawnedEntities = [];
639
- for (const enchantment of deadEntity.enchantments) {
640
- const deathrattleImpl = _card_mappings_1.cardMappings[enchantment.cardId];
641
- if ((0, card_interface_1.hasDeathrattleSpawnEnchantment)(deathrattleImpl)) {
642
- for (let i = 0; i < multiplier; i++) {
618
+ for (const enchantment of deadEntity.enchantments) {
619
+ let hasTriggeredThisLoop = true;
620
+ const deathrattleImpl = _card_mappings_1.cardMappings[enchantment.cardId];
621
+ if ((0, card_interface_1.hasDeathrattleSpawnEnchantment)(deathrattleImpl)) {
643
622
  const spawns = deathrattleImpl.deathrattleSpawnEnchantmentEffect(enchantment, deadEntity, deathrattleTriggeredInput);
644
623
  if (!!(spawns === null || spawns === void 0 ? void 0 : spawns.length)) {
645
624
  spawnedEntities.push(...spawns);
646
625
  }
647
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
648
- }
649
- }
650
- for (let i = 0; i < multiplier; i++) {
651
- let deathrattleTriggered = true;
652
- switch (enchantment.cardId) {
653
- case "BG_BOT_312e":
654
- spawnedEntities.push(...(0, exports.spawnEntities)("BG_BOT_312t", 3, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
655
- break;
656
- case "TB_BaconUps_032e":
657
- spawnedEntities.push(...(0, exports.spawnEntities)("TB_BaconUps_032t", 3, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
658
- break;
659
- case "UNG_999t2e":
660
- spawnedEntities.push(...(0, exports.spawnEntities)("UNG_999t2t1", 2, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
661
- break;
662
- case "BG22_HERO_001p_t1e":
663
- spawnedEntities.push(...(0, exports.spawnEntities)("BG22_HERO_001p_t1et", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
664
- break;
665
- case "BG28_603e":
666
- spawnedEntities.push(...(0, exports.spawnEntities)("BG28_603t", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
667
- break;
668
- case "BG29_875e":
669
- spawnedEntities.push(...(0, exports.spawnEntities)("BG29_875t", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
670
- break;
671
- case "BG29_875_Ge":
672
- spawnedEntities.push(...(0, exports.spawnEntities)("BG29_875_Gt", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
673
- break;
674
- case "BG21_HERO_030pe":
675
- const tavernTier = (_a = deadEntity.tavernTier) !== null && _a !== void 0 ? _a : gameState.cardsData.getTavernLevel(deadEntity.cardId);
676
- spawnedEntities.push(...(0, exports.spawnEntities)(gameState.cardsData.getRandomMinionForTavernTier(Math.max(1, tavernTier - 1)), 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
677
- break;
678
- case "BG30_MagicItem_952e":
679
- spawnedEntities.push(...(0, exports.spawnEntities)("BG26_537", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
680
- break;
681
- default:
682
- deathrattleTriggered = false;
683
- break;
684
626
  }
685
- if (deathrattleTriggered) {
686
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)({
687
- boardWithDeadEntity: boardWithDeadEntity,
688
- boardWithDeadEntityHero: boardWithDeadEntityHero,
689
- deadEntity: deadEntity,
690
- otherBoard: otherBoard,
691
- otherBoardHero: otherBoardHero,
692
- gameState: gameState,
693
- });
627
+ else {
628
+ switch (enchantment.cardId) {
629
+ case "BG_BOT_312e":
630
+ spawnedEntities.push(...(0, exports.spawnEntities)("BG_BOT_312t", 3, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
631
+ break;
632
+ case "TB_BaconUps_032e":
633
+ spawnedEntities.push(...(0, exports.spawnEntities)("TB_BaconUps_032t", 3, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
634
+ break;
635
+ case "UNG_999t2e":
636
+ spawnedEntities.push(...(0, exports.spawnEntities)("UNG_999t2t1", 2, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
637
+ break;
638
+ case "BG22_HERO_001p_t1e":
639
+ spawnedEntities.push(...(0, exports.spawnEntities)("BG22_HERO_001p_t1et", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
640
+ break;
641
+ case "BG28_603e":
642
+ spawnedEntities.push(...(0, exports.spawnEntities)("BG28_603t", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
643
+ break;
644
+ case "BG29_875e":
645
+ spawnedEntities.push(...(0, exports.spawnEntities)("BG29_875t", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
646
+ break;
647
+ case "BG29_875_Ge":
648
+ spawnedEntities.push(...(0, exports.spawnEntities)("BG29_875_Gt", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
649
+ break;
650
+ case "BG21_HERO_030pe":
651
+ const tavernTier = (_g = deadEntity.tavernTier) !== null && _g !== void 0 ? _g : gameState.cardsData.getTavernLevel(deadEntity.cardId);
652
+ spawnedEntities.push(...(0, exports.spawnEntities)(gameState.cardsData.getRandomMinionForTavernTier(Math.max(1, tavernTier - 1)), 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
653
+ break;
654
+ case "BG30_MagicItem_952e":
655
+ spawnedEntities.push(...(0, exports.spawnEntities)("BG26_537", 1, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState, deadEntity.friendly, false));
656
+ break;
657
+ default:
658
+ hasTriggeredThisLoop = false;
659
+ break;
660
+ }
694
661
  }
662
+ hasTriggered = hasTriggered || hasTriggeredThisLoop;
663
+ }
664
+ if ((spawnedEntities === null || spawnedEntities === void 0 ? void 0 : spawnedEntities.length) > 0) {
665
+ const actualSpawns = (0, spawns_1.performEntitySpawns)(spawnedEntities, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, deadEntityIndexFromRight, otherBoard, otherBoardHero, gameState);
666
+ finalSpawns.push(...actualSpawns);
667
+ }
668
+ if (hasTriggered) {
669
+ (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
695
670
  }
696
671
  }
697
- return spawnedEntities;
672
+ return finalSpawns;
698
673
  };
699
- exports.spawnEntitiesFromEnchantments = spawnEntitiesFromEnchantments;
674
+ exports.spawnEntitiesFromDeathrattle = spawnEntitiesFromDeathrattle;
700
675
  //# sourceMappingURL=deathrattle-spawns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deathrattle-spawns.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-spawns.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardType, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\r\nimport { hasDeathrattleSpawn, hasDeathrattleSpawnEnchantment } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { updateWindfury } from '../keywords/windfury';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive, pickRandomLowestHealth } from '../services/utils';\r\nimport {\r\n\taddStatsToBoard,\r\n\tbuildRandomUndeadCreation,\r\n\tbuildSingleBoardEntity,\r\n\tgetTeammateInitialState,\r\n\tgrantRandomAttack,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\thasEntityMechanic,\r\n\thasMechanic,\r\n\tstringifySimple,\r\n} from '../utils';\r\nimport { dealDamageToMinion, dealDamageToRandomEnemy, findNearestEnemies } from './attack';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport {\r\n\tapplyEarthInvocationEnchantment,\r\n\tapplyFireInvocationEnchantment,\r\n\tapplyLeapFroggerEffect,\r\n\tapplyLightningInvocationEnchantment,\r\n\tapplyWaterInvocationEnchantment,\r\n\tcomputeDeathrattleMultiplier,\r\n} from './deathrattle-effects';\r\nimport { DeathrattleTriggeredInput, onDeathrattleTriggered } from './deathrattle-on-trigger';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\nimport { makeMinionGolden } from './utils/golden';\r\n\r\nexport const simplifiedSpawnEntities = (\r\n\tcardId: string,\r\n\tquantity: number,\r\n\tinput: DeathrattleTriggeredInput,\r\n\tboardEntityToSpawn: BoardEntity = null,\r\n): readonly BoardEntity[] => {\r\n\treturn spawnEntities(\r\n\t\tcardId,\r\n\t\tquantity,\r\n\t\tinput.boardWithDeadEntity,\r\n\t\tinput.boardWithDeadEntityHero,\r\n\t\tinput.otherBoard,\r\n\t\tinput.otherBoardHero,\r\n\t\tinput.gameState,\r\n\t\tinput.deadEntity.friendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tboardEntityToSpawn,\r\n\t);\r\n};\r\n\r\nexport const simplifiedSpawnEntitiesWithAddToBoard = (\r\n\tcardId: string,\r\n\tquantity: number,\r\n\tinput: DeathrattleTriggeredInput,\r\n\tsource: BoardEntity,\r\n\tindexFromRight: number,\r\n\tboardEntityToSpawn: BoardEntity = null,\r\n): void => {\r\n\tconst spawns = spawnEntities(\r\n\t\tcardId,\r\n\t\tquantity,\r\n\t\tinput.boardWithDeadEntity,\r\n\t\tinput.boardWithDeadEntityHero,\r\n\t\tinput.otherBoard,\r\n\t\tinput.otherBoardHero,\r\n\t\tinput.gameState,\r\n\t\tinput.deadEntity.friendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tboardEntityToSpawn,\r\n\t);\r\n\tperformEntitySpawns(\r\n\t\tspawns,\r\n\t\tinput.boardWithDeadEntity,\r\n\t\tinput.boardWithDeadEntityHero,\r\n\t\tsource,\r\n\t\tindexFromRight,\r\n\t\tinput.otherBoard,\r\n\t\tinput.otherBoardHero,\r\n\t\tinput.gameState,\r\n\t);\r\n};\r\n\r\nexport const spawnEntities = (\r\n\tcardId: string,\r\n\tquantity: number,\r\n\tboardToSpawnInto: BoardEntity[],\r\n\tboardToSpawnIntoHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tfriendly: boolean,\r\n\t// In most cases the business of knowing the number of minions to handle is left to the caller\r\n\t// Bascially, use limitSpawns = true only if the source does not trigger if there is not enough room,\r\n\t// e.g. Toxic Tumbleweed. Otherwise, it will prevent the \"spawn failed\" event.\r\n\tlimitSpawns: boolean,\r\n\tspawnReborn = false,\r\n\tuseKhadgar = true,\r\n\tboardEntityToSpawn: BoardEntity = null,\r\n\toriginalEntity: BoardEntity = null,\r\n): readonly BoardEntity[] => {\r\n\tif (!cardId) {\r\n\t\tconsole.error(\r\n\t\t\t'Cannot spawn a minion without any cardId defined',\r\n\t\t\tstringifySimple(boardToSpawnInto, gameState.allCards),\r\n\t\t\tnew Error().stack,\r\n\t\t);\r\n\t}\r\n\tif (gameState.anomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)) {\r\n\t\tif (!gameState.allCards.getCard(cardId).premium) {\r\n\t\t\tconst premiumDbfId = gameState.allCards.getCard(cardId).battlegroundsPremiumDbfId;\r\n\t\t\tcardId = gameState.allCards.getCard(premiumDbfId).id;\r\n\t\t}\r\n\t}\r\n\tconst spawnMultiplier = useKhadgar\r\n\t\t? 2 * boardToSpawnInto.filter((entity) => entity.cardId === CardIds.Khadgar_BG_DAL_575).length || 1\r\n\t\t: 1;\r\n\tconst spawnMultiplierGolden = useKhadgar\r\n\t\t? 3 * boardToSpawnInto.filter((entity) => entity.cardId === CardIds.Khadgar_TB_BaconUps_034).length || 1\r\n\t\t: 1;\r\n\tconst minionsToSpawn = limitSpawns\r\n\t\t? Math.min(quantity * spawnMultiplier * spawnMultiplierGolden, 7 - boardToSpawnInto.length)\r\n\t\t: quantity * spawnMultiplier * spawnMultiplierGolden;\r\n\tconst result: BoardEntity[] = [];\r\n\tfor (let i = 0; i < minionsToSpawn; i++) {\r\n\t\tconst newMinion = buildSingleBoardEntity(\r\n\t\t\tcardId,\r\n\t\t\tboardToSpawnIntoHero,\r\n\t\t\tboardToSpawnInto,\r\n\t\t\tgameState.allCards,\r\n\t\t\tfriendly,\r\n\t\t\tgameState.sharedState.currentEntityId++,\r\n\t\t\tspawnReborn,\r\n\t\t\tgameState.cardsData,\r\n\t\t\tgameState.sharedState,\r\n\t\t\tboardEntityToSpawn,\r\n\t\t\toriginalEntity,\r\n\t\t);\r\n\t\tif (!newMinion.cardId) {\r\n\t\t\tconsole.warn('Invalid spawn', newMinion, cardId);\r\n\t\t}\r\n\t\tresult.push(newMinion);\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n\r\nexport const spawnEntitiesFromDeathrattle = (\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\tentitiesDeadThisAttack: readonly BoardEntity[],\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst finalSpawns: BoardEntity[] = [];\r\n\t// Because if the baron dies because of a cleave, it still applies its effect to the other entities that died this turn\r\n\t// TOOD: I need a replay for this\r\n\t// If the Titus dies, its effect doesn't apply to the other deathrattle effects that die at the same time\r\n\t// e.g. Tunnel Blaster + Omega Buster + Titus, if the titus dies, then the omega buster DR isn't applied multiple\r\n\t// times\r\n\t// http://replays.firestoneapp.com/?reviewId=fb739cc8-bf3b-4003-ab99-031ee1aa0ea1&turn=25&action=1\r\n\tconst multiplier = computeDeathrattleMultiplier(\r\n\t\t// [...boardWithDeadEntity, ...entitiesDeadThisAttack],\r\n\t\t[...boardWithDeadEntity],\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tgameState.sharedState,\r\n\t);\r\n\r\n\tconst deathrattleTriggeredInput: DeathrattleTriggeredInput = {\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight: deadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t};\r\n\r\n\t// const otherBoardSpawnedEntities: BoardEntity[] = [];\r\n\t// console.debug(\r\n\t// \t'spawn triggers',\r\n\t// \tgameState.allCards.getCard(deadEntity.cardId).name,\r\n\t// \tcardIds.map((c) => gameState.allCards.getCard(c).name),\r\n\t// \tcardIds,\r\n\t// );\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\tconst enchantments: BoardEnchantment[] = [\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\r\n\tconst cardIds = [deadEntity.cardId, ...(deadEntity.additionalCards ?? []), ...enchantments.map((e) => e.cardId)];\r\n\r\n\tfor (const deadEntityCardId of cardIds) {\r\n\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\tconst spawnedEntities: BoardEntity[] = [];\r\n\t\t\tlet hasTriggered = true;\r\n\t\t\tconst spawnEntityImpl = cardMappings[deadEntityCardId];\r\n\t\t\tif (hasDeathrattleSpawn(spawnEntityImpl)) {\r\n\t\t\t\tconst spawned = spawnEntityImpl.deathrattleSpawn(deadEntity, deathrattleTriggeredInput);\r\n\t\t\t\tif (spawned?.length) {\r\n\t\t\t\t\tspawnedEntities.push(...spawned);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tswitch (deadEntityCardId) {\r\n\t\t\t\t\tcase CardIds.Mecharoo_BOT_445:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.Mecharoo_JoEBotToken_BOT_445t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Mecharoo_TB_BaconUps_002:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.Mecharoo_JoEBotToken_TB_BaconUps_002t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.CordPuller_BG29_611:\r\n\t\t\t\t\tcase CardIds.CordPuller_BG29_611_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.CordPuller_BG29_611\r\n\t\t\t\t\t\t\t\t\t? CardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t\r\n\t\t\t\t\t\t\t\t\t: CardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.PiggybackImp_BG_AV_309:\r\n\t\t\t\t\tcase CardIds.PiggybackImp_BG_AV_309_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.PiggybackImp_BackpiggyImpToken_AV_309t,\r\n\t\t\t\t\t\t\t\tdeadEntityCardId === CardIds.PiggybackImp_BG_AV_309_G ? 2 : 1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.EternalSummoner_BG25_009:\r\n\t\t\t\t\tcase CardIds.EternalSummoner_BG25_009_G:\r\n\t\t\t\t\t\t// TODO\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tdeadEntityCardId === CardIds.EternalSummoner_BG25_009_G\r\n\t\t\t\t\t\t\t\t\t? CardIds.EternalKnight_BG25_008_G\r\n\t\t\t\t\t\t\t\t\t: CardIds.EternalKnight_BG25_008,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.IckyImp_BG21_029:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_BRM_006t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.IckyImp_BG21_029_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_BRM_006t,\r\n\t\t\t\t\t\t\t\t4,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.HarvestGolemLegacy_BG_EX1_556:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.DamagedGolemLegacy,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.HarvestGolemLegacy_TB_BaconUps_006:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.HarvestGolem_DamagedGolemLegacyToken_TB_BaconUps_006t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SewerRat_BG19_010:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SewerRat_HalfShellToken_BG19_010t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SewerRat_BG19_010_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SewerRat_HalfShellToken_BG19_010_Gt,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MawswornSoulkeeper_TB_BaconShop_HERO_702_Buddy:\r\n\t\t\t\t\tcase CardIds.MawswornSoulkeeper_TB_BaconShop_HERO_702_Buddy_G:\r\n\t\t\t\t\t\tconst minionsToSpawnMawsworn =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.MawswornSoulkeeper_TB_BaconShop_HERO_702_Buddy_G ? 4 : 2;\r\n\t\t\t\t\t\tfor (let i = 0; i < minionsToSpawnMawsworn; i++) {\r\n\t\t\t\t\t\t\tconst minionCardId = gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero.tavernTier,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tminionCardId,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.Festergut_BG25_HERO_100_Buddy:\r\n\t\t\t\t\tcase CardIds.Festergut_BG25_HERO_100_Buddy_G:\r\n\t\t\t\t\t\tconst minionsToSpawnFestergut =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.Festergut_BG25_HERO_100_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < minionsToSpawnFestergut; i++) {\r\n\t\t\t\t\t\t\tconst randomUndeadCreation = buildRandomUndeadCreation(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\trandomUndeadCreation.cardId,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\trandomUndeadCreation,\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\taddCardsInHand(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t[randomUndeadCreation],\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\tbreak;\r\n\t\t\t\t\tcase CardIds.KindlyGrandmother_BG_KAR_005:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.KindlyGrandmother_BigBadWolf_BG_KAR_005a,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.KindlyGrandmother_TB_BaconUps_004:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.KindlyGrandmother_BigBadWolfToken,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RatPack_BG_CFM_316:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RatPack_RatToken_BG_CFM_316t,\r\n\t\t\t\t\t\t\t\tMath.min(7, deadEntity.attack),\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RatPack_TB_BaconUps_027:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RatPack_RatToken_TB_BaconUps_027t,\r\n\t\t\t\t\t\t\t\tMath.min(7, deadEntity.attack),\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Imprisoner_BGS_014:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_BRM_006t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Imprisoner_TB_BaconUps_113:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_TB_BaconUps_030t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.InfestedWolf_OG_216:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.InfestedWolf_Spider,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.InfestedWolf_TB_BaconUps_026:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\tCardIds.InfestedWolf_SpiderToken,\r\n\t\t\t\t\t// \t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t\t// \t\t),\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.ReplicatingMenace_BG_BOT_312:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.ReplicatingMenace_TB_BaconUps_032:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MechanoEgg_BOT_537:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.MechanoEgg_RobosaurToken_BOT_537t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MechanoEgg_TB_BaconUps_039:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.MechanoEgg_RobosaurToken_TB_BaconUps_039t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SavannahHighmaneLegacy_BG_EX1_534:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SavannahHighmane_HyenaLegacyToken_BG_EX1_534t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SavannahHighmaneLegacy_TB_BaconUps_049:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SavannahHighmane_HyenaLegacyToken_TB_BaconUps_049t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RingMatron_BG_DMF_533:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RingMatron_FieryImpToken_BG_DMF_533t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RingMatron_TB_BaconUps_309:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RingMatron_FieryImpToken_TB_BaconUps_309t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SatedThreshadon_UNG_010:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.PrimalfinTotem_PrimalfinToken,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.SatedThreshadon_TB_BaconUps_052:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\tCardIds.SatedThreshadon_PrimalfinToken,\r\n\t\t\t\t\t// \t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t\t// \t\t),\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.Ghastcoiler_BGS_008:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...[\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tgameState.cardsData.ghastcoilerSpawns[\r\n\t\t\t\t\t\t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.ghastcoilerSpawns.length)\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tgameState.cardsData.ghastcoilerSpawns[\r\n\t\t\t\t\t\t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.ghastcoilerSpawns.length)\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\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\tbreak;\r\n\r\n\t\t\t\t\tcase CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy:\r\n\t\t\t\t\tcase CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy_G:\r\n\t\t\t\t\t\tconst kilrekCardsToAddQuantity =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tconst kilrekCardsToAdd = [];\r\n\t\t\t\t\t\tfor (let i = 0; i < kilrekCardsToAddQuantity; i++) {\r\n\t\t\t\t\t\t\tkilrekCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, kilrekCardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy:\r\n\t\t\t\t\tcase CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy_G:\r\n\t\t\t\t\t\tconst brannSpawns = [];\r\n\t\t\t\t\t\tconst brannToSpawnQuandtity =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < brannToSpawnQuandtity; i++) {\r\n\t\t\t\t\t\t\tbrannSpawns.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (const brannSpawn of brannSpawns) {\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tbrannSpawn,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\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\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, brannSpawns, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CardIds.Ghastcoiler_TRLA_149:\r\n\t\t\t\t\tcase CardIds.Ghastcoiler_TB_BaconUps_057:\r\n\t\t\t\t\t\tconst ghastcoilerLoop = deadEntity.cardId === CardIds.Ghastcoiler_TB_BaconUps_057 ? 4 : 2;\r\n\t\t\t\t\t\tfor (let i = 0; i < ghastcoilerLoop; i++) {\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...[\r\n\t\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\t\tgameState.cardsData.ghastcoilerSpawns[\r\n\t\t\t\t\t\t\t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.ghastcoilerSpawns.length)\r\n\t\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\t),\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\tbreak;\r\n\t\t\t\t\tcase CardIds.Voidlord_BG_LOOT_368:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.VoidwalkerLegacy_BG_CS2_065,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Voidlord_TB_BaconUps_059:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.Voidlord_VoidwalkerLegacyToken,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.AnnoyOTroupe_BG26_ETC_321:\r\n\t\t\t\t\tcase CardIds.AnnoyOTroupe_BG26_ETC_321_G:\r\n\t\t\t\t\t\tconst annoyOTroupeSpawns =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.AnnoyOTroupe_BG26_ETC_321_G\r\n\t\t\t\t\t\t\t\t? CardIds.AnnoyOTron_BG_GVG_085_G\r\n\t\t\t\t\t\t\t\t: CardIds.AnnoyOTron_BG_GVG_085;\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tannoyOTroupeSpawns,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.OmegaBuster_BG21_025:\r\n\t\t\t\t\tcase CardIds.OmegaBuster_BG21_025_G:\r\n\t\t\t\t\t\t// Here we have to truncate the spawned entities instead of letting the caller handle it,\r\n\t\t\t\t\t\t// because we need to know how many minions couldn't spawn so that we can apply the buff.\r\n\t\t\t\t\t\t// HOWEVER, this can cause an issue, if for instance a Scallywag token spawns, attacks right away,\r\n\t\t\t\t\t\t// and then Omega Buster spawns. In this case, it will not have yet processed the token's attack,\r\n\t\t\t\t\t\t// and will limit the spawns\r\n\t\t\t\t\t\tconst cardParam = 6;\r\n\t\t\t\t\t\tconst entitiesToSpawn = Math.max(\r\n\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\tMath.min(cardParam, 7 - boardWithDeadEntity.length - spawnedEntities.length),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tconst buffAmount =\r\n\t\t\t\t\t\t\t(deadEntityCardId === CardIds.OmegaBuster_BG21_025_G ? 2 : 1) *\r\n\t\t\t\t\t\t\t(cardParam - entitiesToSpawn);\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tdeadEntityCardId === CardIds.OmegaBuster_BG21_025_G\r\n\t\t\t\t\t\t\t\t\t? CardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t\r\n\t\t\t\t\t\t\t\t\t: CardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\r\n\t\t\t\t\t\t\t\tentitiesToSpawn,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tbuffAmount,\r\n\t\t\t\t\t\t\tbuffAmount,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.MECH],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\t// when the buster triggers multiple times because of Baron for instance\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tspawnedEntities,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tbuffAmount,\r\n\t\t\t\t\t\t\tbuffAmount,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.MECH],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.TheTideRazor_BGS_079:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...[\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\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// \tbreak;\r\n\t\t\t\t\t// case CardIds.TheTideRazor_TB_BaconUps_137:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...[\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\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// \tbreak;\r\n\t\t\t\t\tcase CardIds.OctosariWrapGod_BG26_804:\r\n\t\t\t\t\tcase CardIds.OctosariWrapGod_BG26_804_G:\r\n\t\t\t\t\t\t// For remembered deathrattles\r\n\t\t\t\t\t\tconst stats =\r\n\t\t\t\t\t\t\tdeadEntity.scriptDataNum1 ||\r\n\t\t\t\t\t\t\tgameState.sharedState.deaths.find(\r\n\t\t\t\t\t\t\t\t(e) => e.friendly === deadEntity.friendly && e.cardId === deadEntity.cardId,\r\n\t\t\t\t\t\t\t)?.scriptDataNum1 ||\r\n\t\t\t\t\t\t\t0;\r\n\t\t\t\t\t\tconst octosariSpawn =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.OctosariWrapGod_BG26_804_G\r\n\t\t\t\t\t\t\t\t? CardIds.TentacleOfOctosariToken_BG26_803_Gt\r\n\t\t\t\t\t\t\t\t: CardIds.TentacleOfOctosariToken_BG26_803t;\r\n\t\t\t\t\t\tconst octoSpawns = spawnEntities(\r\n\t\t\t\t\t\t\toctosariSpawn,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\toctoSpawns.forEach((b) => {\r\n\t\t\t\t\t\t\tb.attack = stats;\r\n\t\t\t\t\t\t\tb.health = stats;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tspawnedEntities.push(...octoSpawns);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Bassgill_BG26_350:\r\n\t\t\t\t\tcase CardIds.Bassgill_BG26_350_G:\r\n\t\t\t\t\t\tconst bassgillIterations = deadEntity.cardId === CardIds.Bassgill_BG26_350_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < bassgillIterations; i++) {\r\n\t\t\t\t\t\t\tconst hand =\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero.hand\r\n\t\t\t\t\t\t\t\t\t?.filter((e) =>\r\n\t\t\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\t\tRace.MURLOC,\r\n\t\t\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t.filter((e) => !!e?.cardId)\r\n\t\t\t\t\t\t\t\t\t.filter((e) => !e.locked) ?? [];\r\n\t\t\t\t\t\t\tconst highestHealth = Math.max(...hand.filter((c) => c.health).map((c) => c.health));\r\n\t\t\t\t\t\t\tconst highestHealthMinions = highestHealth\r\n\t\t\t\t\t\t\t\t? hand.filter((c) => c.health === highestHealth)\r\n\t\t\t\t\t\t\t\t: null;\r\n\t\t\t\t\t\t\tconst spawn = !!highestHealthMinions?.length\r\n\t\t\t\t\t\t\t\t? pickRandom(highestHealthMinions)\r\n\t\t\t\t\t\t\t\t: hand.filter((c) => c.cardId).length\r\n\t\t\t\t\t\t\t\t? pickRandom(hand.filter((c) => c.cardId))\r\n\t\t\t\t\t\t\t\t: null;\r\n\t\t\t\t\t\t\tif (spawn) {\r\n\t\t\t\t\t\t\t\tspawn.locked = true;\r\n\t\t\t\t\t\t\t\t// Technically it should not be removed from hand, but rather flagged\r\n\t\t\t\t\t\t\t\t// Probably very low impact doing it like this\r\n\t\t\t\t\t\t\t\t// spawn.locked = true;\r\n\t\t\t\t\t\t\t\t// removeCardFromHand(boardWithDeadEntityHero, spawn);\r\n\t\t\t\t\t\t\t\tconst bassgillSpawns = spawnEntities(\r\n\t\t\t\t\t\t\t\t\tspawn.cardId,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\t{ ...spawn } as BoardEntity,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tfor (const s of bassgillSpawns) {\r\n\t\t\t\t\t\t\t\t\ts.onCanceledSummon = () => (spawn.locked = false);\r\n\t\t\t\t\t\t\t\t\t// s.backRef = spawn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tspawnedEntities.push(...bassgillSpawns);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.CultistSthara_BG27_081:\r\n\t\t\t\t\tcase CardIds.CultistSthara_BG27_081_G:\r\n\t\t\t\t\t\tconst cultistStharaSpawnNumber = deadEntity.cardId === CardIds.CultistSthara_BG27_081_G ? 2 : 1;\r\n\t\t\t\t\t\tconst cultistStharaSpawnCandidates = gameState.sharedState.deaths\r\n\t\t\t\t\t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t\t\t\t\t.filter((entity) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\tRace.DEMON,\r\n\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\tgameState.allCards,\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\t.slice(0, cultistStharaSpawnNumber);\r\n\t\t\t\t\t\tcultistStharaSpawnCandidates.forEach((candidate) => {\r\n\t\t\t\t\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\t\t\t\t\tcandidate.cardId,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawns.forEach((spawn) => {\r\n\t\t\t\t\t\t\t\tspawn.attack = candidate.maxAttack ?? candidate.attack;\r\n\t\t\t\t\t\t\t\tspawn.health = candidate.maxHealth ?? candidate.health;\r\n\t\t\t\t\t\t\t\tspawn.maxHealth = spawn.health;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tspawnedEntities.push(...spawns);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Magnanimoose_BGDUO_105:\r\n\t\t\t\t\tcase CardIds.Magnanimoose_BGDUO_105_G:\r\n\t\t\t\t\t\tconst magnanimooseCopies = deadEntity.cardId === CardIds.Magnanimoose_BGDUO_105_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < magnanimooseCopies; i++) {\r\n\t\t\t\t\t\t\tconst teammateState = getTeammateInitialState(gameState.gameState, boardWithDeadEntityHero);\r\n\t\t\t\t\t\t\tconst teammateBoard = teammateState?.board ?? [];\r\n\t\t\t\t\t\t\tconst copied: number[] = [];\r\n\t\t\t\t\t\t\tconst minionToCopy = pickRandom(teammateBoard.filter((e) => !copied.includes(e.entityId)));\r\n\t\t\t\t\t\t\tif (minionToCopy) {\r\n\t\t\t\t\t\t\t\tconst copy: BoardEntity = {\r\n\t\t\t\t\t\t\t\t\t...minionToCopy,\r\n\t\t\t\t\t\t\t\t\thealth: 1,\r\n\t\t\t\t\t\t\t\t\tmaxHealth: 1,\r\n\t\t\t\t\t\t\t\t\tenchantments: [...minionToCopy.enchantments],\r\n\t\t\t\t\t\t\t\t\tpendingAttackBuffs: [],\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\t\tcopy.cardId,\r\n\t\t\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\t\tcopy,\r\n\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tcopied.push(copy.entityId);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t// Putricide-only\r\n\t\t\t\t\tcase CardIds.FoulEgg_BG26_RLK_833:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.FoulEgg_FoulFowlToken,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy:\r\n\t\t\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G:\r\n\t\t\t\t\t\tconst iterations =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let j = 0; j < iterations; j++) {\r\n\t\t\t\t\t\t\tlet validTargets = boardWithDeadEntity.filter((entity) => !entity.divineShield);\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.taunt);\r\n\t\t\t\t\t\t\t\tif (!validTargets?.length) {\r\n\t\t\t\t\t\t\t\t\tvalidTargets = boardWithDeadEntity.filter((entity) => !entity.windfury);\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\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\t\tif (!target.divineShield) {\r\n\t\t\t\t\t\t\t\t\tupdateDivineShield(\r\n\t\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tupdateTaunt(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\ttrue,\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\tgameState,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tupdateWindfury(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\ttrue,\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\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\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.NadinaTheRed_BGS_040:\r\n\t\t\t\t\tcase CardIds.NadinaTheRed_TB_BaconUps_154:\r\n\t\t\t\t\t\tconst nadinaMultiplier = deadEntityCardId === CardIds.NadinaTheRed_TB_BaconUps_154 ? 6 : 3;\r\n\t\t\t\t\t\tfor (let j = 0; j < nadinaMultiplier; j++) {\r\n\t\t\t\t\t\t\tconst validTargets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t\t.filter((e) =>\r\n\t\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\tRace.DRAGON,\r\n\t\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t.filter((entity) => !entity.divineShield);\r\n\t\t\t\t\t\t\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\t\tif (target) {\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\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\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.SpawnOfNzoth_BG_OG_256:\r\n\t\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 1, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SpawnOfNzoth_TB_BaconUps_025:\r\n\t\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 2, 2, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.FiendishServant_YOD_026:\r\n\t\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\t\tdeadEntity,\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.attack,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.FiendishServant_TB_BaconUps_112:\r\n\t\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\t\tdeadEntity,\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.attack,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\t\tdeadEntity,\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.attack,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.NightbaneIgnited_BG29_815:\r\n\t\t\t\t\tcase CardIds.NightbaneIgnited_BG29_815_G:\r\n\t\t\t\t\t\tconst nightbaneLoops = deadEntityCardId === CardIds.NightbaneIgnited_BG29_815_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let j = 0; j < nightbaneLoops; j++) {\r\n\t\t\t\t\t\t\tconst pickedTargetEntityIds = [];\r\n\t\t\t\t\t\t\tfor (let k = 0; k < 2; k++) {\r\n\t\t\t\t\t\t\t\tconst target = pickRandomAlive(\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity\r\n\t\t\t\t\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCardIds.NightbaneIgnited_BG29_815,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCardIds.NightbaneIgnited_BG29_815_G,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(e.cardId as CardIds),\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t.filter((e) => !pickedTargetEntityIds.includes(e.entityId)),\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\t\t\t\tpickedTargetEntityIds.push(target.entityId);\r\n\t\t\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t);\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\tbreak;\r\n\t\t\t\t\tcase CardIds.Leapfrogger_BG21_000:\r\n\t\t\t\t\t\t// console.log('\\t', 'Leapfrogger from DR', deadEntity.entityId);\r\n\t\t\t\t\t\tapplyLeapFroggerEffect(\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\tfalse,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Leapfrogger_BG21_000_G:\r\n\t\t\t\t\t\tapplyLeapFroggerEffect(\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\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t6,\r\n\t\t\t\t\t\t\t6,\r\n\t\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (!!target) {\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\tbreak;\r\n\t\t\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\t\t\t\tconst crocTarget = grantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t12,\r\n\t\t\t\t\t\t\t12,\r\n\t\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (!!crocTarget) {\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\tcrocTarget,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.ScarletSkull_BG25_022:\r\n\t\t\t\t\tcase CardIds.ScarletSkull_BG25_022_G:\r\n\t\t\t\t\t\tconst scarletMultiplier = deadEntityCardId === CardIds.ScarletSkull_BG25_022_G ? 2 : 1;\r\n\t\t\t\t\t\tconst scarletTarget = grantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tscarletMultiplier * 1,\r\n\t\t\t\t\t\t\tscarletMultiplier * 2,\r\n\t\t\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (!!scarletTarget) {\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\tscarletTarget,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy:\r\n\t\t\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst squirrelDamage =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G ? 4 : 2;\r\n\t\t\t\t\t\tconst numberOfDeadMechsThisCombat = gameState.sharedState.deaths\r\n\t\t\t\t\t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t\t\t\t\t// eslint-disable-next-line prettier/prettier\r\n\t\t\t\t\t\t\t.filter((entity) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\tRace.MECH,\r\n\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t).length;\r\n\t\t\t\t\t\tfor (let j = 0; j < numberOfDeadMechsThisCombat; j++) {\r\n\t\t\t\t\t\t\tdealDamageToRandomEnemy(\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\tsquirrelDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.KaboomBot_BG_BOT_606:\r\n\t\t\t\t\tcase CardIds.KaboomBot_TB_BaconUps_028:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst kaboomLoops = deadEntity.cardId === CardIds.KaboomBot_TB_BaconUps_028 ? 2 : 1;\r\n\t\t\t\t\t\tconst baseDamage =\r\n\t\t\t\t\t\t\t4 +\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.trinkets.filter(\r\n\t\t\t\t\t\t\t\t(t) => t.cardId === CardIds.KaboomBotPortrait_BG30_MagicItem_803,\r\n\t\t\t\t\t\t\t).length *\r\n\t\t\t\t\t\t\t\t10;\r\n\t\t\t\t\t\tfor (let j = 0; j < kaboomLoops; j++) {\r\n\t\t\t\t\t\t\tdealDamageToRandomEnemy(\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\tbaseDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.FireDancer_BG29_843:\r\n\t\t\t\t\t// case CardIds.FireDancer_BG29_843_G:\r\n\t\t\t\t\t// \tconst fireDancerLoops = deadEntity.cardId === CardIds.FireDancer_BG29_843_G ? 2 : 1;\r\n\t\t\t\t\t// \tfor (let j = 0; j < fireDancerLoops; j++) {\r\n\t\t\t\t\t// \t\t// In case there are spawns, don't target them\r\n\t\t\t\t\t// \t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\t// \t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t// \t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t// \t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t// \t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t// \t\t\tdealDamageToMinion(\r\n\t\t\t\t\t// \t\t\t\ttarget,\r\n\t\t\t\t\t// \t\t\t\tboard,\r\n\t\t\t\t\t// \t\t\t\thero,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity,\r\n\t\t\t\t\t// \t\t\t\t1,\r\n\t\t\t\t\t// \t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t// \t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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}\r\n\t\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// \t// http://replays.firestoneapp.com/?reviewId=4b6e4d8d-fc83-4795-b450-4cd0c3a518be&turn=17&action=2\r\n\t\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// \t// individual tick. See\r\n\t\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\t// \tprocessMinionDeath(\r\n\t\t\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t// \t\totherBoard,\r\n\t\t\t\t\t// \t\totherBoardHero,\r\n\t\t\t\t\t// \t\tgameState,\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.LighterFighter_BG28_968:\r\n\t\t\t\t\tcase CardIds.LighterFighter_BG28_968_G:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst lighterFighterDamage = deadEntity.cardId === CardIds.LighterFighter_BG28_968_G ? 8 : 4;\r\n\t\t\t\t\t\tfor (let j = 0; j < 2; j++) {\r\n\t\t\t\t\t\t\tconst target = pickRandomLowestHealth(otherBoard);\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\totherBoard,\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\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\ttarget,\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\tlighterFighterDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.DrBoombox_BG25_165:\r\n\t\t\t\t\tcase CardIds.DrBoombox_BG25_165_G:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst boomboxDamage = deadEntity.cardId === CardIds.DrBoombox_BG25_165_G ? 14 : 7;\r\n\t\t\t\t\t\t// The nearest enemies use the full board info\r\n\t\t\t\t\t\t// const boardIncludingDeadEntityAtCorrectIndex = boardWithDeadEntity.splice(\r\n\t\t\t\t\t\t// \tdeadEntityIndexFromRight,\r\n\t\t\t\t\t\t// \t0,\r\n\t\t\t\t\t\t// \tdeadEntity,\r\n\t\t\t\t\t\t// );\r\n\t\t\t\t\t\tconst targets = findNearestEnemies(\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\tdeadEntityIndexFromRight,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t2,\r\n\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\ttargets.forEach((target) => {\r\n\t\t\t\t\t\t\t// console.debug('dealing damage to', stringifySimpleCard(target));\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\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tboomboxDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.UnstableGhoul_BG_FP1_024:\r\n\t\t\t\t\t\t// case CardIds.UnstableGhoul_TB_BaconUps_118:\r\n\t\t\t\t\t\tconst damage = 1; //deadEntityCardId === CardIds.UnstableGhoul_TB_BaconUps_118 ? 2 : 1;\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\tdamage,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.RadioStar_BG25_399:\r\n\t\t\t\t\tcase CardIds.RadioStar_BG25_399_G:\r\n\t\t\t\t\t\tconst radioQuantity = deadEntityCardId === CardIds.RadioStar_BG25_399_G ? 2 : 1;\r\n\t\t\t\t\t\tconst radioEntities = Array(radioQuantity).fill(deadEntity.lastAffectedByEntity);\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, radioEntities, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MysticSporebat_BG28_900:\r\n\t\t\t\t\tcase CardIds.MysticSporebat_BG28_900_G:\r\n\t\t\t\t\t\tconst loops = deadEntityCardId === CardIds.MysticSporebat_BG28_900_G ? 2 : 1;\r\n\t\t\t\t\t\tconst cardsToAdd = Array(loops).fill(null);\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, cardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy:\r\n\t\t\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G:\r\n\t\t\t\t\t\tconst numberToGild =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tconst targetBoard = boardWithDeadEntity.filter((e) => !e.definitelyDead && e.health > 0);\r\n\t\t\t\t\t\t// .filter((e) => !gameState.cardsData.isGolden(gameState.allCards.getCard(e.cardId)));\r\n\t\t\t\t\t\tfor (let i = 0; i < Math.min(numberToGild, boardWithDeadEntity.length); i++) {\r\n\t\t\t\t\t\t\tconst rightMostMinion = targetBoard[targetBoard.length - 1 - i];\r\n\t\t\t\t\t\t\tif (rightMostMinion) {\r\n\t\t\t\t\t\t\t\tmakeMinionGolden(\r\n\t\t\t\t\t\t\t\t\trightMostMinion,\r\n\t\t\t\t\t\t\t\t\tdeadEntity,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Scourfin_BG26_360:\r\n\t\t\t\t\tcase CardIds.Scourfin_BG26_360_G:\r\n\t\t\t\t\t\tconst statsScourfin = deadEntityCardId === CardIds.Scourfin_BG26_360_G ? 10 : 5;\r\n\t\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.hand.filter(\r\n\t\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() ===\r\n\t\t\t\t\t\t\t\t\tCardType[CardType.MINION],\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SanguineChampion_BG23_017:\r\n\t\t\t\t\tcase CardIds.SanguineChampion_BG23_017_G:\r\n\t\t\t\t\t\tconst sanguineChampionStats = deadEntityCardId === CardIds.SanguineChampion_BG23_017 ? 1 : 2;\r\n\t\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += sanguineChampionStats;\r\n\t\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += sanguineChampionStats;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.PricklyPiper_BG26_160:\r\n\t\t\t\t\tcase CardIds.PricklyPiper_BG26_160_G:\r\n\t\t\t\t\t\tconst piperBuff = deadEntityCardId === CardIds.PricklyPiper_BG26_160 ? 1 : 2;\r\n\t\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += piperBuff;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t// Putricide-only\r\n\t\t\t\t\tcase CardIds.Banshee_BG_RLK_957:\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t2,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.LostSpirit_BG26_GIL_513:\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t1,\r\n\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.TickingAbomination_BG_ICC_099:\r\n\t\t\t\t\t\tfor (const entity of boardWithDeadEntity) {\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\t5,\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\tbreak;\r\n\t\t\t\t\t// case CardIds.WitheredSpearhide_BG27_006:\r\n\t\t\t\t\t// case CardIds.WitheredSpearhide_BG27_006_G:\r\n\t\t\t\t\t// \tconst witheredSpearhideCardsToAdd = Array(\r\n\t\t\t\t\t// \t\tdeadEntity.cardId === CardIds.WitheredSpearhide_BG27_006_G ? 2 : 1,\r\n\t\t\t\t\t// \t).fill(CardIds.BloodGem);\r\n\t\t\t\t\t// \taddCardsInHand(\r\n\t\t\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t\t\t// \t\twitheredSpearhideCardsToAdd,\r\n\t\t\t\t\t// \t\tgameState,\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\t// case CardIds.RecurringNightmare_BG26_055:\r\n\t\t\t\t\t// case CardIds.RecurringNightmare_BG26_055_G:\r\n\t\t\t\t\t// \tapplyRecurringNightmareDeathrattleEffect(\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\tdeadEntityCardId === CardIds.RecurringNightmare_BG26_055_G,\r\n\t\t\t\t\t// \t\tgameState,\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.MotleyPhalanx_BG27_080:\r\n\t\t\t\t\tcase CardIds.MotleyPhalanx_BG27_080_G:\r\n\t\t\t\t\t\tconst motleyBuff = deadEntity.cardId === CardIds.MotleyPhalanx_BG27_080_G ? 2 : 1;\r\n\t\t\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tmotleyBuff * 1,\r\n\t\t\t\t\t\t\tmotleyBuff * 1,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304:\r\n\t\t\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304_G:\r\n\t\t\t\t\t\tconst moroesBuffAtk = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 8 : 4;\r\n\t\t\t\t\t\tconst moroesBuffHealth = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 12 : 6;\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tmoroesBuffAtk,\r\n\t\t\t\t\t\t\tmoroesBuffHealth,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SteadfastSpirit_BG28_306:\r\n\t\t\t\t\tcase CardIds.SteadfastSpirit_BG28_306_G:\r\n\t\t\t\t\t\tconst steadfastSpiritBuff = deadEntity.cardId === CardIds.SteadfastSpirit_BG28_306_G ? 2 : 1;\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\t\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.ScrapScraper_BG26_148:\r\n\t\t\t\t\tcase CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\t\t\t\tconst scraperToAddQuantity = deadEntity.cardId === CardIds.ScrapScraper_BG26_148_G ? 2 : 1;\r\n\t\t\t\t\t\tconst scraperCardsToAdd = [];\r\n\t\t\t\t\t\tfor (let i = 0; i < scraperToAddQuantity; i++) {\r\n\t\t\t\t\t\t\tscraperCardsToAdd.push(pickRandom(gameState.cardsData.scrapScraperSpawns));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, scraperCardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.BarrensConjurer_BG29_862:\r\n\t\t\t\t\tcase CardIds.BarrensConjurer_BG29_862_G:\r\n\t\t\t\t\t\tconst conjurerToAddQuantity = deadEntity.cardId === CardIds.BarrensConjurer_BG29_862_G ? 2 : 1;\r\n\t\t\t\t\t\tconst conjurerCardsToAdd = [];\r\n\t\t\t\t\t\tfor (let i = 0; i < conjurerToAddQuantity; i++) {\r\n\t\t\t\t\t\t\tconjurerCardsToAdd.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, conjurerCardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SpikedSavior_BG29_808:\r\n\t\t\t\t\tcase CardIds.SpikedSavior_BG29_808_G:\r\n\t\t\t\t\t\tconst spikedSaviorLoops = deadEntity.cardId === CardIds.SpikedSavior_BG29_808_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let j = 0; j < spikedSaviorLoops; j++) {\r\n\t\t\t\t\t\t\tconst targetBoard = [...boardWithDeadEntity];\r\n\t\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\t1,\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}\r\n\t\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\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\t// See sim.sample.1.txt\r\n\t\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\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\t// by just looking them up, and spawning to the right\r\n\t\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\t// by looking up the position changes of other minions?\r\n\t\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\t// stay as a bug\r\n\t\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\t\tentity,\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// Add all the deathrattles that don't have an effect on combat\r\n\t\t\t\t\t// case CardIds.FieryFelblood_BG29_877:\r\n\t\t\t\t\t// case CardIds.FieryFelblood_BG29_877_G:\r\n\t\t\t\t\t// Enchantments\r\n\t\t\t\t\tcase CardIds.RustyTrident_TridentsTreasureEnchantment_BG30_MagicItem_917e:\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.HoggyBank_GemInTheBankEnchantment_BG30_MagicItem_411e:\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [CardIds.BloodGem], gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e:\r\n\t\t\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge:\r\n\t\t\t\t\t\t// console.log('\\t', 'Leapfrogger enchantment', enchantment.repeats);\r\n\t\t\t\t\t\tapplyLeapFroggerEffect(\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\tdeadEntityCardId === CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t1, //enchantment.repeats || 1,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.EarthRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyEarthInvocationEnchantment(boardWithDeadEntity, deadEntity, deadEntity, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.FireRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyFireInvocationEnchantment(\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\tdeadEntity,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.WaterRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyWaterInvocationEnchantment(\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\tdeadEntity,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.LightningRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyLightningInvocationEnchantment(\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\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\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif (deadEntity.additionalCards?.includes(deadEntityCardId)) {\r\n\t\t\t\t\t\t\tif (!hasMechanic(gameState.allCards.getCard(deadEntityCardId), GameTag.DEATHRATTLE)) {\r\n\t\t\t\t\t\t\t\thasTriggered = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconst source = [deadEntity, ...enchantments].find((e) => e.cardId === deadEntityCardId);\r\n\t\t\t\t\t\t\tif (!hasEntityMechanic(source, GameTag.DEATHRATTLE, gameState.allCards)) {\r\n\t\t\t\t\t\t\t\thasTriggered = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// It seems that spawns are done before the \"whenever a deathrattle triggers\" effects proc\r\n\t\t\t// https://replays.firestoneapp.com/?reviewId=0e41ba87-02a8-44a7-b8d3-27c6ab36c678&turn=11&action=22\r\n\t\t\tif (spawnedEntities?.length > 0) {\r\n\t\t\t\tconst actualSpawns = performEntitySpawns(\r\n\t\t\t\t\tspawnedEntities,\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\tdeadEntityIndexFromRight,\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\tfinalSpawns.push(...actualSpawns);\r\n\t\t\t}\r\n\r\n\t\t\tif (hasTriggered) {\r\n\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nexport const spawnEntitiesFromEnchantments = (\r\n\tdeadEntity: BoardEntity,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\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\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\tconst spawnedEntities: BoardEntity[] = [];\r\n\tfor (const enchantment of deadEntity.enchantments) {\r\n\t\tconst deathrattleImpl = cardMappings[enchantment.cardId];\r\n\t\tif (hasDeathrattleSpawnEnchantment(deathrattleImpl)) {\r\n\t\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\t\tconst spawns = deathrattleImpl.deathrattleSpawnEnchantmentEffect(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tdeathrattleTriggeredInput,\r\n\t\t\t\t);\r\n\t\t\t\tif (!!spawns?.length) {\r\n\t\t\t\t\tspawnedEntities.push(...spawns);\r\n\t\t\t\t}\r\n\t\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < multiplier; i++) {\r\n\t\t\tlet deathrattleTriggered = true;\r\n\t\t\tswitch (enchantment.cardId) {\r\n\t\t\t\t// case CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055e:\r\n\t\t\t\t// case CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055_Ge:\r\n\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t// \t\t\tenchantment.cardId === CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055e\r\n\t\t\t\t// \t\t\t\t? CardIds.RecurringNightmare_BG26_055\r\n\t\t\t\t// \t\t\t\t: CardIds.RecurringNightmare_BG26_055_G,\r\n\t\t\t\t// \t\t\t1,\r\n\t\t\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t// \t\t\totherBoard,\r\n\t\t\t\t// \t\t\totherBoardHero,\r\n\t\t\t\t// \t\t\tgameState,\r\n\t\t\t\t// \t\t\tdeadEntity.friendly,\r\n\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t// \t\t),\r\n\t\t\t\t// \t);\r\n\t\t\t\t// \tbreak;\r\n\t\t\t\t// Replicating Menace\r\n\t\t\t\tcase CardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_BG_BOT_312e:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_TB_BaconUps_032e:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardIds.LivingSpores_LivingSporesEnchantment:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.LivingSpores_PlantToken,\r\n\t\t\t\t\t\t\t2,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardIds.EarthInvocation_ElementEarthEnchantment:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.ElementEarth_StoneElementalToken,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardIds.BoonOfBeetles_BeetleSwarmEnchantment_BG28_603e:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.BoonOfBeetles_BeetleToken_BG28_603t,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardIds.TheUninvitedGuest_UninvitedEnchantment_BG29_875e:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875t,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardIds.TheUninvitedGuest_UninvitedEnchantment_BG29_875_Ge:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875_Gt,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase CardIds.SneedsReplicator_ReplicateEnchantment:\r\n\t\t\t\t\tconst tavernTier = deadEntity.tavernTier ?? gameState.cardsData.getTavernLevel(deadEntity.cardId);\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tgameState.cardsData.getRandomMinionForTavernTier(Math.max(1, tavernTier - 1)),\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// case CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004e:\r\n\t\t\t\t// case CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge:\r\n\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t// \t\t\tenchantment.cardId === CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge\r\n\t\t\t\t// \t\t\t\t? CardIds.SurfNSurf_CrabToken_BG27_004_Gt2\r\n\t\t\t\t// \t\t\t\t: CardIds.SurfNSurf_CrabToken_BG27_004t2,\r\n\t\t\t\t// \t\t\t1,\r\n\t\t\t\t// \t\t\tboardWithDeadEntity,\r\n\t\t\t\t// \t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t// \t\t\totherBoard,\r\n\t\t\t\t// \t\t\totherBoardHero,\r\n\t\t\t\t// \t\t\tgameState,\r\n\t\t\t\t// \t\t\tdeadEntity.friendly,\r\n\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t// \t\t),\r\n\t\t\t\t// \t);\r\n\t\t\t\t// \tbreak;\r\n\t\t\t\tcase CardIds.JarredFrostling_FrostyGlobeEnchantment_BG30_MagicItem_952e:\r\n\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.FlourishingFrostling_BG26_537,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tdeathrattleTriggered = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (deathrattleTriggered) {\r\n\t\t\t\tonDeathrattleTriggered({\r\n\t\t\t\t\tboardWithDeadEntity: boardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero: boardWithDeadEntityHero,\r\n\t\t\t\t\tdeadEntity: deadEntity,\r\n\t\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\t\totherBoardHero: otherBoardHero,\r\n\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn spawnedEntities;\r\n};\r\n"]}
1
+ {"version":3,"file":"deathrattle-spawns.js","sourceRoot":"","sources":["../../src/simulation/deathrattle-spawns.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardType, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../board-entity';\r\nimport { hasDeathrattleSpawn, hasDeathrattleSpawnEnchantment } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { updateTaunt } from '../keywords/taunt';\r\nimport { updateWindfury } from '../keywords/windfury';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive, pickRandomLowestHealth } from '../services/utils';\r\nimport {\r\n\taddStatsToBoard,\r\n\tbuildRandomUndeadCreation,\r\n\tbuildSingleBoardEntity,\r\n\tgetTeammateInitialState,\r\n\tgrantRandomAttack,\r\n\tgrantRandomStats,\r\n\tgrantStatsToMinionsOfEachType,\r\n\thasCorrectTribe,\r\n\thasEntityMechanic,\r\n\thasMechanic,\r\n\tstringifySimple,\r\n} from '../utils';\r\nimport { dealDamageToMinion, dealDamageToRandomEnemy, findNearestEnemies } from './attack';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport {\r\n\tapplyEarthInvocationEnchantment,\r\n\tapplyFireInvocationEnchantment,\r\n\tapplyLeapFroggerEffect,\r\n\tapplyLightningInvocationEnchantment,\r\n\tapplyWaterInvocationEnchantment,\r\n\tcomputeDeathrattleMultiplier,\r\n} from './deathrattle-effects';\r\nimport { DeathrattleTriggeredInput, onDeathrattleTriggered } from './deathrattle-on-trigger';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\nimport { makeMinionGolden } from './utils/golden';\r\n\r\nexport const simplifiedSpawnEntities = (\r\n\tcardId: string,\r\n\tquantity: number,\r\n\tinput: DeathrattleTriggeredInput,\r\n\tboardEntityToSpawn: BoardEntity = null,\r\n): readonly BoardEntity[] => {\r\n\treturn spawnEntities(\r\n\t\tcardId,\r\n\t\tquantity,\r\n\t\tinput.boardWithDeadEntity,\r\n\t\tinput.boardWithDeadEntityHero,\r\n\t\tinput.otherBoard,\r\n\t\tinput.otherBoardHero,\r\n\t\tinput.gameState,\r\n\t\tinput.deadEntity.friendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tboardEntityToSpawn,\r\n\t);\r\n};\r\n\r\nexport const simplifiedSpawnEntitiesWithAddToBoard = (\r\n\tcardId: string,\r\n\tquantity: number,\r\n\tinput: DeathrattleTriggeredInput,\r\n\tsource: BoardEntity,\r\n\tindexFromRight: number,\r\n\tboardEntityToSpawn: BoardEntity = null,\r\n): void => {\r\n\tconst spawns = spawnEntities(\r\n\t\tcardId,\r\n\t\tquantity,\r\n\t\tinput.boardWithDeadEntity,\r\n\t\tinput.boardWithDeadEntityHero,\r\n\t\tinput.otherBoard,\r\n\t\tinput.otherBoardHero,\r\n\t\tinput.gameState,\r\n\t\tinput.deadEntity.friendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\tboardEntityToSpawn,\r\n\t);\r\n\tperformEntitySpawns(\r\n\t\tspawns,\r\n\t\tinput.boardWithDeadEntity,\r\n\t\tinput.boardWithDeadEntityHero,\r\n\t\tsource,\r\n\t\tindexFromRight,\r\n\t\tinput.otherBoard,\r\n\t\tinput.otherBoardHero,\r\n\t\tinput.gameState,\r\n\t);\r\n};\r\n\r\nexport const spawnEntities = (\r\n\tcardId: string,\r\n\tquantity: number,\r\n\tboardToSpawnInto: BoardEntity[],\r\n\tboardToSpawnIntoHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tfriendly: boolean,\r\n\t// In most cases the business of knowing the number of minions to handle is left to the caller\r\n\t// Bascially, use limitSpawns = true only if the source does not trigger if there is not enough room,\r\n\t// e.g. Toxic Tumbleweed. Otherwise, it will prevent the \"spawn failed\" event.\r\n\tlimitSpawns: boolean,\r\n\tspawnReborn = false,\r\n\tuseKhadgar = true,\r\n\tboardEntityToSpawn: BoardEntity = null,\r\n\toriginalEntity: BoardEntity = null,\r\n): readonly BoardEntity[] => {\r\n\tif (!cardId) {\r\n\t\tconsole.error(\r\n\t\t\t'Cannot spawn a minion without any cardId defined',\r\n\t\t\tstringifySimple(boardToSpawnInto, gameState.allCards),\r\n\t\t\tnew Error().stack,\r\n\t\t);\r\n\t}\r\n\tif (gameState.anomalies?.includes(CardIds.TheGoldenArena_BG27_Anomaly_801)) {\r\n\t\tif (!gameState.allCards.getCard(cardId).premium) {\r\n\t\t\tconst premiumDbfId = gameState.allCards.getCard(cardId).battlegroundsPremiumDbfId;\r\n\t\t\tcardId = gameState.allCards.getCard(premiumDbfId).id;\r\n\t\t}\r\n\t}\r\n\tconst spawnMultiplier = useKhadgar\r\n\t\t? 2 * boardToSpawnInto.filter((entity) => entity.cardId === CardIds.Khadgar_BG_DAL_575).length || 1\r\n\t\t: 1;\r\n\tconst spawnMultiplierGolden = useKhadgar\r\n\t\t? 3 * boardToSpawnInto.filter((entity) => entity.cardId === CardIds.Khadgar_TB_BaconUps_034).length || 1\r\n\t\t: 1;\r\n\tconst minionsToSpawn = limitSpawns\r\n\t\t? Math.min(quantity * spawnMultiplier * spawnMultiplierGolden, 7 - boardToSpawnInto.length)\r\n\t\t: quantity * spawnMultiplier * spawnMultiplierGolden;\r\n\tconst result: BoardEntity[] = [];\r\n\tfor (let i = 0; i < minionsToSpawn; i++) {\r\n\t\tconst newMinion = buildSingleBoardEntity(\r\n\t\t\tcardId,\r\n\t\t\tboardToSpawnIntoHero,\r\n\t\t\tboardToSpawnInto,\r\n\t\t\tgameState.allCards,\r\n\t\t\tfriendly,\r\n\t\t\tgameState.sharedState.currentEntityId++,\r\n\t\t\tspawnReborn,\r\n\t\t\tgameState.cardsData,\r\n\t\t\tgameState.sharedState,\r\n\t\t\tboardEntityToSpawn,\r\n\t\t\toriginalEntity,\r\n\t\t);\r\n\t\tif (!newMinion.cardId) {\r\n\t\t\tconsole.warn('Invalid spawn', newMinion, cardId);\r\n\t\t}\r\n\t\tresult.push(newMinion);\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n\r\nexport const spawnEntitiesFromDeathrattle = (\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\tentitiesDeadThisAttack: readonly BoardEntity[],\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst finalSpawns: BoardEntity[] = [];\r\n\t// Because if the baron dies because of a cleave, it still applies its effect to the other entities that died this turn\r\n\t// TOOD: I need a replay for this\r\n\t// If the Titus dies, its effect doesn't apply to the other deathrattle effects that die at the same time\r\n\t// e.g. Tunnel Blaster + Omega Buster + Titus, if the titus dies, then the omega buster DR isn't applied multiple\r\n\t// times\r\n\t// http://replays.firestoneapp.com/?reviewId=fb739cc8-bf3b-4003-ab99-031ee1aa0ea1&turn=25&action=1\r\n\tconst multiplier = computeDeathrattleMultiplier(\r\n\t\t// [...boardWithDeadEntity, ...entitiesDeadThisAttack],\r\n\t\t[...boardWithDeadEntity],\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tgameState.sharedState,\r\n\t);\r\n\r\n\tconst deathrattleTriggeredInput: DeathrattleTriggeredInput = {\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight: deadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t};\r\n\r\n\t// const otherBoardSpawnedEntities: BoardEntity[] = [];\r\n\t// console.debug(\r\n\t// \t'spawn triggers',\r\n\t// \tgameState.allCards.getCard(deadEntity.cardId).name,\r\n\t// \tcardIds.map((c) => gameState.allCards.getCard(c).name),\r\n\t// \tcardIds,\r\n\t// );\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\tconst enchantments: BoardEnchantment[] = [\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\r\n\tconst cardIds = [deadEntity.cardId, ...(deadEntity.additionalCards ?? [])];\r\n\r\n\tfor (let i = 0; i < multiplier; i++) {\r\n\t\tconst spawnedEntities: BoardEntity[] = [];\r\n\t\tlet hasTriggered = false;\r\n\t\tfor (const deadEntityCardId of cardIds) {\r\n\t\t\tlet hasTriggeredThisLoop = true;\r\n\t\t\tconst spawnEntityImpl = cardMappings[deadEntityCardId];\r\n\t\t\tif (hasDeathrattleSpawn(spawnEntityImpl)) {\r\n\t\t\t\tconst spawned = spawnEntityImpl.deathrattleSpawn(deadEntity, deathrattleTriggeredInput);\r\n\t\t\t\tif (spawned?.length) {\r\n\t\t\t\t\tspawnedEntities.push(...spawned);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tswitch (deadEntityCardId) {\r\n\t\t\t\t\tcase CardIds.Mecharoo_BOT_445:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.Mecharoo_JoEBotToken_BOT_445t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Mecharoo_TB_BaconUps_002:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.Mecharoo_JoEBotToken_TB_BaconUps_002t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.CordPuller_BG29_611:\r\n\t\t\t\t\tcase CardIds.CordPuller_BG29_611_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.CordPuller_BG29_611\r\n\t\t\t\t\t\t\t\t\t? CardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t\r\n\t\t\t\t\t\t\t\t\t: CardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.PiggybackImp_BG_AV_309:\r\n\t\t\t\t\tcase CardIds.PiggybackImp_BG_AV_309_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.PiggybackImp_BackpiggyImpToken_AV_309t,\r\n\t\t\t\t\t\t\t\tdeadEntityCardId === CardIds.PiggybackImp_BG_AV_309_G ? 2 : 1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.EternalSummoner_BG25_009:\r\n\t\t\t\t\tcase CardIds.EternalSummoner_BG25_009_G:\r\n\t\t\t\t\t\t// TODO\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tdeadEntityCardId === CardIds.EternalSummoner_BG25_009_G\r\n\t\t\t\t\t\t\t\t\t? CardIds.EternalKnight_BG25_008_G\r\n\t\t\t\t\t\t\t\t\t: CardIds.EternalKnight_BG25_008,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.IckyImp_BG21_029:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_BRM_006t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.IckyImp_BG21_029_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_BRM_006t,\r\n\t\t\t\t\t\t\t\t4,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.HarvestGolemLegacy_BG_EX1_556:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.DamagedGolemLegacy,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.HarvestGolemLegacy_TB_BaconUps_006:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.HarvestGolem_DamagedGolemLegacyToken_TB_BaconUps_006t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SewerRat_BG19_010:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SewerRat_HalfShellToken_BG19_010t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SewerRat_BG19_010_G:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SewerRat_HalfShellToken_BG19_010_Gt,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MawswornSoulkeeper_TB_BaconShop_HERO_702_Buddy:\r\n\t\t\t\t\tcase CardIds.MawswornSoulkeeper_TB_BaconShop_HERO_702_Buddy_G:\r\n\t\t\t\t\t\tconst minionsToSpawnMawsworn =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.MawswornSoulkeeper_TB_BaconShop_HERO_702_Buddy_G ? 4 : 2;\r\n\t\t\t\t\t\tfor (let i = 0; i < minionsToSpawnMawsworn; i++) {\r\n\t\t\t\t\t\t\tconst minionCardId = gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero.tavernTier,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tminionCardId,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.Festergut_BG25_HERO_100_Buddy:\r\n\t\t\t\t\tcase CardIds.Festergut_BG25_HERO_100_Buddy_G:\r\n\t\t\t\t\t\tconst minionsToSpawnFestergut =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.Festergut_BG25_HERO_100_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < minionsToSpawnFestergut; i++) {\r\n\t\t\t\t\t\t\tconst randomUndeadCreation = buildRandomUndeadCreation(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\trandomUndeadCreation.cardId,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\trandomUndeadCreation,\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\taddCardsInHand(\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t[randomUndeadCreation],\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\tbreak;\r\n\t\t\t\t\tcase CardIds.KindlyGrandmother_BG_KAR_005:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.KindlyGrandmother_BigBadWolf_BG_KAR_005a,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.KindlyGrandmother_TB_BaconUps_004:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.KindlyGrandmother_BigBadWolfToken,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RatPack_BG_CFM_316:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RatPack_RatToken_BG_CFM_316t,\r\n\t\t\t\t\t\t\t\tMath.min(7, deadEntity.attack),\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RatPack_TB_BaconUps_027:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RatPack_RatToken_TB_BaconUps_027t,\r\n\t\t\t\t\t\t\t\tMath.min(7, deadEntity.attack),\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Imprisoner_BGS_014:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_BRM_006t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Imprisoner_TB_BaconUps_113:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ImpGangBoss_ImpToken_TB_BaconUps_030t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.InfestedWolf_OG_216:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.InfestedWolf_Spider,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.InfestedWolf_TB_BaconUps_026:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\tCardIds.InfestedWolf_SpiderToken,\r\n\t\t\t\t\t// \t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t\t// \t\t),\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.ReplicatingMenace_BG_BOT_312:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.ReplicatingMenace_TB_BaconUps_032:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MechanoEgg_BOT_537:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.MechanoEgg_RobosaurToken_BOT_537t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MechanoEgg_TB_BaconUps_039:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.MechanoEgg_RobosaurToken_TB_BaconUps_039t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SavannahHighmaneLegacy_BG_EX1_534:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SavannahHighmane_HyenaLegacyToken_BG_EX1_534t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SavannahHighmaneLegacy_TB_BaconUps_049:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.SavannahHighmane_HyenaLegacyToken_TB_BaconUps_049t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RingMatron_BG_DMF_533:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RingMatron_FieryImpToken_BG_DMF_533t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.RingMatron_TB_BaconUps_309:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.RingMatron_FieryImpToken_TB_BaconUps_309t,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SatedThreshadon_UNG_010:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.PrimalfinTotem_PrimalfinToken,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.SatedThreshadon_TB_BaconUps_052:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\tCardIds.SatedThreshadon_PrimalfinToken,\r\n\t\t\t\t\t// \t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t\t// \t\t),\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.Ghastcoiler_BGS_008:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...[\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tgameState.cardsData.ghastcoilerSpawns[\r\n\t\t\t\t\t\t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.ghastcoilerSpawns.length)\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tgameState.cardsData.ghastcoilerSpawns[\r\n\t\t\t\t\t\t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.ghastcoilerSpawns.length)\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\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\tbreak;\r\n\r\n\t\t\t\t\tcase CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy:\r\n\t\t\t\t\tcase CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy_G:\r\n\t\t\t\t\t\tconst kilrekCardsToAddQuantity =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.Kilrek_TB_BaconShop_HERO_37_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tconst kilrekCardsToAdd = [];\r\n\t\t\t\t\t\tfor (let i = 0; i < kilrekCardsToAddQuantity; i++) {\r\n\t\t\t\t\t\t\tkilrekCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, kilrekCardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy:\r\n\t\t\t\t\tcase CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy_G:\r\n\t\t\t\t\t\tconst brannSpawns = [];\r\n\t\t\t\t\t\tconst brannToSpawnQuandtity =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.BrannsEpicEgg_TB_BaconShop_HERO_43_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < brannToSpawnQuandtity; i++) {\r\n\t\t\t\t\t\t\tbrannSpawns.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (const brannSpawn of brannSpawns) {\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\tbrannSpawn,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\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\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, brannSpawns, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase CardIds.Ghastcoiler_TRLA_149:\r\n\t\t\t\t\tcase CardIds.Ghastcoiler_TB_BaconUps_057:\r\n\t\t\t\t\t\tconst ghastcoilerLoop = deadEntity.cardId === CardIds.Ghastcoiler_TB_BaconUps_057 ? 4 : 2;\r\n\t\t\t\t\t\tfor (let i = 0; i < ghastcoilerLoop; i++) {\r\n\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t...[\r\n\t\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\t\tgameState.cardsData.ghastcoilerSpawns[\r\n\t\t\t\t\t\t\t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.ghastcoilerSpawns.length)\r\n\t\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\t),\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\tbreak;\r\n\t\t\t\t\tcase CardIds.Voidlord_BG_LOOT_368:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.VoidwalkerLegacy_BG_CS2_065,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Voidlord_TB_BaconUps_059:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.Voidlord_VoidwalkerLegacyToken,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.AnnoyOTroupe_BG26_ETC_321:\r\n\t\t\t\t\tcase CardIds.AnnoyOTroupe_BG26_ETC_321_G:\r\n\t\t\t\t\t\tconst annoyOTroupeSpawns =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.AnnoyOTroupe_BG26_ETC_321_G\r\n\t\t\t\t\t\t\t\t? CardIds.AnnoyOTron_BG_GVG_085_G\r\n\t\t\t\t\t\t\t\t: CardIds.AnnoyOTron_BG_GVG_085;\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tannoyOTroupeSpawns,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.OmegaBuster_BG21_025:\r\n\t\t\t\t\tcase CardIds.OmegaBuster_BG21_025_G:\r\n\t\t\t\t\t\t// Here we have to truncate the spawned entities instead of letting the caller handle it,\r\n\t\t\t\t\t\t// because we need to know how many minions couldn't spawn so that we can apply the buff.\r\n\t\t\t\t\t\t// HOWEVER, this can cause an issue, if for instance a Scallywag token spawns, attacks right away,\r\n\t\t\t\t\t\t// and then Omega Buster spawns. In this case, it will not have yet processed the token's attack,\r\n\t\t\t\t\t\t// and will limit the spawns\r\n\t\t\t\t\t\tconst cardParam = 6;\r\n\t\t\t\t\t\tconst entitiesToSpawn = Math.max(\r\n\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\tMath.min(cardParam, 7 - boardWithDeadEntity.length - spawnedEntities.length),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tconst buffAmount =\r\n\t\t\t\t\t\t\t(deadEntityCardId === CardIds.OmegaBuster_BG21_025_G ? 2 : 1) *\r\n\t\t\t\t\t\t\t(cardParam - entitiesToSpawn);\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tdeadEntityCardId === CardIds.OmegaBuster_BG21_025_G\r\n\t\t\t\t\t\t\t\t\t? CardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t\r\n\t\t\t\t\t\t\t\t\t: CardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\r\n\t\t\t\t\t\t\t\tentitiesToSpawn,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tbuffAmount,\r\n\t\t\t\t\t\t\tbuffAmount,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.MECH],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\t// when the buster triggers multiple times because of Baron for instance\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tspawnedEntities,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tbuffAmount,\r\n\t\t\t\t\t\t\tbuffAmount,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.MECH],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.TheTideRazor_BGS_079:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...[\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\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// \tbreak;\r\n\t\t\t\t\t// case CardIds.TheTideRazor_TB_BaconUps_137:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...[\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\r\n\t\t\t\t\t// \t\t\t),\r\n\t\t\t\t\t// \t\t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\t\tgameState.cardsData.pirateSpawns[\r\n\t\t\t\t\t// \t\t\t\t\tMath.floor(Math.random() * gameState.cardsData.pirateSpawns.length)\r\n\t\t\t\t\t// \t\t\t\t],\r\n\t\t\t\t\t// \t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t// \t\t\t\totherBoardHero,\r\n\t\t\t\t\t// \t\t\t\tgameState,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\t\tfalse,\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// \tbreak;\r\n\t\t\t\t\tcase CardIds.OctosariWrapGod_BG26_804:\r\n\t\t\t\t\tcase CardIds.OctosariWrapGod_BG26_804_G:\r\n\t\t\t\t\t\t// For remembered deathrattles\r\n\t\t\t\t\t\tconst stats =\r\n\t\t\t\t\t\t\tdeadEntity.scriptDataNum1 ||\r\n\t\t\t\t\t\t\tgameState.sharedState.deaths.find(\r\n\t\t\t\t\t\t\t\t(e) => e.friendly === deadEntity.friendly && e.cardId === deadEntity.cardId,\r\n\t\t\t\t\t\t\t)?.scriptDataNum1 ||\r\n\t\t\t\t\t\t\t0;\r\n\t\t\t\t\t\tconst octosariSpawn =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.OctosariWrapGod_BG26_804_G\r\n\t\t\t\t\t\t\t\t? CardIds.TentacleOfOctosariToken_BG26_803_Gt\r\n\t\t\t\t\t\t\t\t: CardIds.TentacleOfOctosariToken_BG26_803t;\r\n\t\t\t\t\t\tconst octoSpawns = spawnEntities(\r\n\t\t\t\t\t\t\toctosariSpawn,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\toctoSpawns.forEach((b) => {\r\n\t\t\t\t\t\t\tb.attack = stats;\r\n\t\t\t\t\t\t\tb.health = stats;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tspawnedEntities.push(...octoSpawns);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Bassgill_BG26_350:\r\n\t\t\t\t\tcase CardIds.Bassgill_BG26_350_G:\r\n\t\t\t\t\t\tconst bassgillIterations = deadEntity.cardId === CardIds.Bassgill_BG26_350_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < bassgillIterations; i++) {\r\n\t\t\t\t\t\t\tconst hand =\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero.hand\r\n\t\t\t\t\t\t\t\t\t?.filter((e) =>\r\n\t\t\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\t\tRace.MURLOC,\r\n\t\t\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t.filter((e) => !!e?.cardId)\r\n\t\t\t\t\t\t\t\t\t.filter((e) => !e.locked) ?? [];\r\n\t\t\t\t\t\t\tconst highestHealth = Math.max(...hand.filter((c) => c.health).map((c) => c.health));\r\n\t\t\t\t\t\t\tconst highestHealthMinions = highestHealth\r\n\t\t\t\t\t\t\t\t? hand.filter((c) => c.health === highestHealth)\r\n\t\t\t\t\t\t\t\t: null;\r\n\t\t\t\t\t\t\tconst spawn = !!highestHealthMinions?.length\r\n\t\t\t\t\t\t\t\t? pickRandom(highestHealthMinions)\r\n\t\t\t\t\t\t\t\t: hand.filter((c) => c.cardId).length\r\n\t\t\t\t\t\t\t\t? pickRandom(hand.filter((c) => c.cardId))\r\n\t\t\t\t\t\t\t\t: null;\r\n\t\t\t\t\t\t\tif (spawn) {\r\n\t\t\t\t\t\t\t\tspawn.locked = true;\r\n\t\t\t\t\t\t\t\t// Technically it should not be removed from hand, but rather flagged\r\n\t\t\t\t\t\t\t\t// Probably very low impact doing it like this\r\n\t\t\t\t\t\t\t\t// spawn.locked = true;\r\n\t\t\t\t\t\t\t\t// removeCardFromHand(boardWithDeadEntityHero, spawn);\r\n\t\t\t\t\t\t\t\tconst bassgillSpawns = spawnEntities(\r\n\t\t\t\t\t\t\t\t\tspawn.cardId,\r\n\t\t\t\t\t\t\t\t\t1,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\t{ ...spawn } as BoardEntity,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tfor (const s of bassgillSpawns) {\r\n\t\t\t\t\t\t\t\t\ts.onCanceledSummon = () => (spawn.locked = false);\r\n\t\t\t\t\t\t\t\t\t// s.backRef = spawn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tspawnedEntities.push(...bassgillSpawns);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.CultistSthara_BG27_081:\r\n\t\t\t\t\tcase CardIds.CultistSthara_BG27_081_G:\r\n\t\t\t\t\t\tconst cultistStharaSpawnNumber = deadEntity.cardId === CardIds.CultistSthara_BG27_081_G ? 2 : 1;\r\n\t\t\t\t\t\tconst cultistStharaSpawnCandidates = gameState.sharedState.deaths\r\n\t\t\t\t\t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t\t\t\t\t.filter((entity) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\tRace.DEMON,\r\n\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\tgameState.allCards,\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\t.slice(0, cultistStharaSpawnNumber);\r\n\t\t\t\t\t\tcultistStharaSpawnCandidates.forEach((candidate) => {\r\n\t\t\t\t\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\t\t\t\t\tcandidate.cardId,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tspawns.forEach((spawn) => {\r\n\t\t\t\t\t\t\t\tspawn.attack = candidate.maxAttack ?? candidate.attack;\r\n\t\t\t\t\t\t\t\tspawn.health = candidate.maxHealth ?? candidate.health;\r\n\t\t\t\t\t\t\t\tspawn.maxHealth = spawn.health;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tspawnedEntities.push(...spawns);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Magnanimoose_BGDUO_105:\r\n\t\t\t\t\tcase CardIds.Magnanimoose_BGDUO_105_G:\r\n\t\t\t\t\t\tconst magnanimooseCopies = deadEntity.cardId === CardIds.Magnanimoose_BGDUO_105_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let i = 0; i < magnanimooseCopies; i++) {\r\n\t\t\t\t\t\t\tconst teammateState = getTeammateInitialState(gameState.gameState, boardWithDeadEntityHero);\r\n\t\t\t\t\t\t\tconst teammateBoard = teammateState?.board ?? [];\r\n\t\t\t\t\t\t\tconst copied: number[] = [];\r\n\t\t\t\t\t\t\tconst minionToCopy = pickRandom(teammateBoard.filter((e) => !copied.includes(e.entityId)));\r\n\t\t\t\t\t\t\tif (minionToCopy) {\r\n\t\t\t\t\t\t\t\tconst copy: BoardEntity = {\r\n\t\t\t\t\t\t\t\t\t...minionToCopy,\r\n\t\t\t\t\t\t\t\t\thealth: 1,\r\n\t\t\t\t\t\t\t\t\tmaxHealth: 1,\r\n\t\t\t\t\t\t\t\t\tenchantments: [...minionToCopy.enchantments],\r\n\t\t\t\t\t\t\t\t\tpendingAttackBuffs: [],\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\t\t\tcopy.cardId,\r\n\t\t\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\t\tcopy,\r\n\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tcopied.push(copy.entityId);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t// Putricide-only\r\n\t\t\t\t\tcase CardIds.FoulEgg_BG26_RLK_833:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.FoulEgg_FoulFowlToken,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy:\r\n\t\t\t\t\tcase CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G:\r\n\t\t\t\t\t\tconst iterations =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.SpiritOfAir_TB_BaconShop_HERO_76_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let j = 0; j < iterations; j++) {\r\n\t\t\t\t\t\t\tlet validTargets = boardWithDeadEntity.filter((entity) => !entity.divineShield);\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.taunt);\r\n\t\t\t\t\t\t\t\tif (!validTargets?.length) {\r\n\t\t\t\t\t\t\t\t\tvalidTargets = boardWithDeadEntity.filter((entity) => !entity.windfury);\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\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\t\tif (!target.divineShield) {\r\n\t\t\t\t\t\t\t\t\tupdateDivineShield(\r\n\t\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tupdateTaunt(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\ttrue,\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\tgameState,\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tupdateWindfury(\r\n\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\ttrue,\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\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\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.NadinaTheRed_BGS_040:\r\n\t\t\t\t\tcase CardIds.NadinaTheRed_TB_BaconUps_154:\r\n\t\t\t\t\t\tconst nadinaMultiplier = deadEntityCardId === CardIds.NadinaTheRed_TB_BaconUps_154 ? 6 : 3;\r\n\t\t\t\t\t\tfor (let j = 0; j < nadinaMultiplier; j++) {\r\n\t\t\t\t\t\t\tconst validTargets = boardWithDeadEntity\r\n\t\t\t\t\t\t\t\t.filter((e) =>\r\n\t\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\t\te,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\tRace.DRAGON,\r\n\t\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t.filter((entity) => !entity.divineShield);\r\n\t\t\t\t\t\t\tconst target = pickRandom(validTargets);\r\n\t\t\t\t\t\t\tif (target) {\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\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\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.SpawnOfNzoth_BG_OG_256:\r\n\t\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 1, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SpawnOfNzoth_TB_BaconUps_025:\r\n\t\t\t\t\t\taddStatsToBoard(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 2, 2, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.FiendishServant_YOD_026:\r\n\t\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\t\tdeadEntity,\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.attack,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.FiendishServant_TB_BaconUps_112:\r\n\t\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\t\tdeadEntity,\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.attack,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tgrantRandomAttack(\r\n\t\t\t\t\t\t\tdeadEntity,\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.attack,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.NightbaneIgnited_BG29_815:\r\n\t\t\t\t\tcase CardIds.NightbaneIgnited_BG29_815_G:\r\n\t\t\t\t\t\tconst nightbaneLoops = deadEntityCardId === CardIds.NightbaneIgnited_BG29_815_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let j = 0; j < nightbaneLoops; j++) {\r\n\t\t\t\t\t\t\tconst pickedTargetEntityIds = [];\r\n\t\t\t\t\t\t\tfor (let k = 0; k < 2; k++) {\r\n\t\t\t\t\t\t\t\tconst target = pickRandomAlive(\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntity\r\n\t\t\t\t\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\t\t\t\t\t![\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCardIds.NightbaneIgnited_BG29_815,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCardIds.NightbaneIgnited_BG29_815_G,\r\n\t\t\t\t\t\t\t\t\t\t\t\t].includes(e.cardId as CardIds),\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t.filter((e) => !pickedTargetEntityIds.includes(e.entityId)),\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\t\t\t\tpickedTargetEntityIds.push(target.entityId);\r\n\t\t\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tdeadEntity.attack,\r\n\t\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t\t\t);\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\tbreak;\r\n\t\t\t\t\tcase CardIds.Leapfrogger_BG21_000:\r\n\t\t\t\t\t\t// console.log('\\t', 'Leapfrogger from DR', deadEntity.entityId);\r\n\t\t\t\t\t\tapplyLeapFroggerEffect(\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\tfalse,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Leapfrogger_BG21_000_G:\r\n\t\t\t\t\t\tapplyLeapFroggerEffect(\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\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tdeadEntity.deathrattleRepeats,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\r\n\t\t\t\t\t\tconst target = grantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t6,\r\n\t\t\t\t\t\t\t6,\r\n\t\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (!!target) {\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\tbreak;\r\n\t\t\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\r\n\t\t\t\t\t\tconst crocTarget = grantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t12,\r\n\t\t\t\t\t\t\t12,\r\n\t\t\t\t\t\t\tRace.BEAST,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (!!crocTarget) {\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\tcrocTarget,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.ScarletSkull_BG25_022:\r\n\t\t\t\t\tcase CardIds.ScarletSkull_BG25_022_G:\r\n\t\t\t\t\t\tconst scarletMultiplier = deadEntityCardId === CardIds.ScarletSkull_BG25_022_G ? 2 : 1;\r\n\t\t\t\t\t\tconst scarletTarget = grantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tscarletMultiplier * 1,\r\n\t\t\t\t\t\t\tscarletMultiplier * 2,\r\n\t\t\t\t\t\t\tRace.UNDEAD,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (!!scarletTarget) {\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\tscarletTarget,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy:\r\n\t\t\t\t\tcase CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst squirrelDamage =\r\n\t\t\t\t\t\t\tdeadEntity.cardId === CardIds.ElementiumSquirrelBomb_TB_BaconShop_HERO_17_Buddy_G ? 4 : 2;\r\n\t\t\t\t\t\tconst numberOfDeadMechsThisCombat = gameState.sharedState.deaths\r\n\t\t\t\t\t\t\t.filter((entity) => entity.friendly === deadEntity.friendly)\r\n\t\t\t\t\t\t\t// eslint-disable-next-line prettier/prettier\r\n\t\t\t\t\t\t\t.filter((entity) =>\r\n\t\t\t\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\t\tRace.MECH,\r\n\t\t\t\t\t\t\t\t\tgameState.anomalies,\r\n\t\t\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t).length;\r\n\t\t\t\t\t\tfor (let j = 0; j < numberOfDeadMechsThisCombat; j++) {\r\n\t\t\t\t\t\t\tdealDamageToRandomEnemy(\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\tsquirrelDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.KaboomBot_BG_BOT_606:\r\n\t\t\t\t\tcase CardIds.KaboomBot_TB_BaconUps_028:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst kaboomLoops = deadEntity.cardId === CardIds.KaboomBot_TB_BaconUps_028 ? 2 : 1;\r\n\t\t\t\t\t\tconst baseDamage =\r\n\t\t\t\t\t\t\t4 +\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.trinkets.filter(\r\n\t\t\t\t\t\t\t\t(t) => t.cardId === CardIds.KaboomBotPortrait_BG30_MagicItem_803,\r\n\t\t\t\t\t\t\t).length *\r\n\t\t\t\t\t\t\t\t10;\r\n\t\t\t\t\t\tfor (let j = 0; j < kaboomLoops; j++) {\r\n\t\t\t\t\t\t\tdealDamageToRandomEnemy(\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\tbaseDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.FireDancer_BG29_843:\r\n\t\t\t\t\t// case CardIds.FireDancer_BG29_843_G:\r\n\t\t\t\t\t// \tconst fireDancerLoops = deadEntity.cardId === CardIds.FireDancer_BG29_843_G ? 2 : 1;\r\n\t\t\t\t\t// \tfor (let j = 0; j < fireDancerLoops; j++) {\r\n\t\t\t\t\t// \t\t// In case there are spawns, don't target them\r\n\t\t\t\t\t// \t\tconst minionsToDamage = [...otherBoard, ...boardWithDeadEntity];\r\n\t\t\t\t\t// \t\tfor (const target of minionsToDamage) {\r\n\t\t\t\t\t// \t\t\tconst isSameSide = target.friendly === deadEntity.friendly;\r\n\t\t\t\t\t// \t\t\tconst board = isSameSide ? boardWithDeadEntity : otherBoard;\r\n\t\t\t\t\t// \t\t\tconst hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;\r\n\t\t\t\t\t// \t\t\tdealDamageToMinion(\r\n\t\t\t\t\t// \t\t\t\ttarget,\r\n\t\t\t\t\t// \t\t\t\tboard,\r\n\t\t\t\t\t// \t\t\t\thero,\r\n\t\t\t\t\t// \t\t\t\tdeadEntity,\r\n\t\t\t\t\t// \t\t\t\t1,\r\n\t\t\t\t\t// \t\t\t\tisSameSide ? otherBoard : boardWithDeadEntity,\r\n\t\t\t\t\t// \t\t\t\tisSameSide ? otherBoardHero : boardWithDeadEntityHero,\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}\r\n\t\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// \t// http://replays.firestoneapp.com/?reviewId=4b6e4d8d-fc83-4795-b450-4cd0c3a518be&turn=17&action=2\r\n\t\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// \t// individual tick. See\r\n\t\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\t// \tprocessMinionDeath(\r\n\t\t\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t// \t\totherBoard,\r\n\t\t\t\t\t// \t\totherBoardHero,\r\n\t\t\t\t\t// \t\tgameState,\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.LighterFighter_BG28_968:\r\n\t\t\t\t\tcase CardIds.LighterFighter_BG28_968_G:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst lighterFighterDamage = deadEntity.cardId === CardIds.LighterFighter_BG28_968_G ? 8 : 4;\r\n\t\t\t\t\t\tfor (let j = 0; j < 2; j++) {\r\n\t\t\t\t\t\t\tconst target = pickRandomLowestHealth(otherBoard);\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\totherBoard,\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\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\ttarget,\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\tlighterFighterDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.DrBoombox_BG25_165:\r\n\t\t\t\t\tcase CardIds.DrBoombox_BG25_165_G:\r\n\t\t\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\t\t// could be spawned between the shots firing), but let's say it's good enough for now\r\n\t\t\t\t\t\tconst boomboxDamage = deadEntity.cardId === CardIds.DrBoombox_BG25_165_G ? 14 : 7;\r\n\t\t\t\t\t\t// The nearest enemies use the full board info\r\n\t\t\t\t\t\t// const boardIncludingDeadEntityAtCorrectIndex = boardWithDeadEntity.splice(\r\n\t\t\t\t\t\t// \tdeadEntityIndexFromRight,\r\n\t\t\t\t\t\t// \t0,\r\n\t\t\t\t\t\t// \tdeadEntity,\r\n\t\t\t\t\t\t// );\r\n\t\t\t\t\t\tconst targets = findNearestEnemies(\r\n\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\tdeadEntityIndexFromRight,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t2,\r\n\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\ttargets.forEach((target) => {\r\n\t\t\t\t\t\t\t// console.debug('dealing damage to', stringifySimpleCard(target));\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\totherBoard,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\tboomboxDamage,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.UnstableGhoul_BG_FP1_024:\r\n\t\t\t\t\t\t// case CardIds.UnstableGhoul_TB_BaconUps_118:\r\n\t\t\t\t\t\tconst damage = 1; //deadEntityCardId === CardIds.UnstableGhoul_TB_BaconUps_118 ? 2 : 1;\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\tdamage,\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\tbreak;\r\n\t\t\t\t\tcase CardIds.RadioStar_BG25_399:\r\n\t\t\t\t\tcase CardIds.RadioStar_BG25_399_G:\r\n\t\t\t\t\t\tconst radioQuantity = deadEntityCardId === CardIds.RadioStar_BG25_399_G ? 2 : 1;\r\n\t\t\t\t\t\tconst radioEntities = Array(radioQuantity).fill(deadEntity.lastAffectedByEntity);\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, radioEntities, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MysticSporebat_BG28_900:\r\n\t\t\t\t\tcase CardIds.MysticSporebat_BG28_900_G:\r\n\t\t\t\t\t\tconst loops = deadEntityCardId === CardIds.MysticSporebat_BG28_900_G ? 2 : 1;\r\n\t\t\t\t\t\tconst cardsToAdd = Array(loops).fill(null);\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, cardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy:\r\n\t\t\t\t\tcase CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G:\r\n\t\t\t\t\t\tconst numberToGild =\r\n\t\t\t\t\t\t\tdeadEntityCardId === CardIds.SrTombDiver_TB_BaconShop_HERO_41_Buddy_G ? 2 : 1;\r\n\t\t\t\t\t\tconst targetBoard = boardWithDeadEntity.filter((e) => !e.definitelyDead && e.health > 0);\r\n\t\t\t\t\t\t// .filter((e) => !gameState.cardsData.isGolden(gameState.allCards.getCard(e.cardId)));\r\n\t\t\t\t\t\tfor (let i = 0; i < Math.min(numberToGild, boardWithDeadEntity.length); i++) {\r\n\t\t\t\t\t\t\tconst rightMostMinion = targetBoard[targetBoard.length - 1 - i];\r\n\t\t\t\t\t\t\tif (rightMostMinion) {\r\n\t\t\t\t\t\t\t\tmakeMinionGolden(\r\n\t\t\t\t\t\t\t\t\trightMostMinion,\r\n\t\t\t\t\t\t\t\t\tdeadEntity,\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\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Scourfin_BG26_360:\r\n\t\t\t\t\tcase CardIds.Scourfin_BG26_360_G:\r\n\t\t\t\t\t\tconst statsScourfin = deadEntityCardId === CardIds.Scourfin_BG26_360_G ? 10 : 5;\r\n\t\t\t\t\t\tgrantRandomStats(\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero.hand.filter(\r\n\t\t\t\t\t\t\t\t(e) =>\r\n\t\t\t\t\t\t\t\t\tgameState.allCards.getCard(e.cardId).type?.toUpperCase() ===\r\n\t\t\t\t\t\t\t\t\tCardType[CardType.MINION],\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tstatsScourfin,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SanguineChampion_BG23_017:\r\n\t\t\t\t\tcase CardIds.SanguineChampion_BG23_017_G:\r\n\t\t\t\t\t\tconst sanguineChampionStats = deadEntityCardId === CardIds.SanguineChampion_BG23_017 ? 1 : 2;\r\n\t\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += sanguineChampionStats;\r\n\t\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += sanguineChampionStats;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.PricklyPiper_BG26_160:\r\n\t\t\t\t\tcase CardIds.PricklyPiper_BG26_160_G:\r\n\t\t\t\t\t\tconst piperBuff = deadEntityCardId === CardIds.PricklyPiper_BG26_160 ? 1 : 2;\r\n\t\t\t\t\t\tboardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += piperBuff;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t// Putricide-only\r\n\t\t\t\t\tcase CardIds.Banshee_BG_RLK_957:\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t2,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.LostSpirit_BG26_GIL_513:\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\t1,\r\n\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tnull,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.TickingAbomination_BG_ICC_099:\r\n\t\t\t\t\t\tfor (const entity of boardWithDeadEntity) {\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\t5,\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\tbreak;\r\n\t\t\t\t\t// case CardIds.WitheredSpearhide_BG27_006:\r\n\t\t\t\t\t// case CardIds.WitheredSpearhide_BG27_006_G:\r\n\t\t\t\t\t// \tconst witheredSpearhideCardsToAdd = Array(\r\n\t\t\t\t\t// \t\tdeadEntity.cardId === CardIds.WitheredSpearhide_BG27_006_G ? 2 : 1,\r\n\t\t\t\t\t// \t).fill(CardIds.BloodGem);\r\n\t\t\t\t\t// \taddCardsInHand(\r\n\t\t\t\t\t// \t\tboardWithDeadEntityHero,\r\n\t\t\t\t\t// \t\tboardWithDeadEntity,\r\n\t\t\t\t\t// \t\twitheredSpearhideCardsToAdd,\r\n\t\t\t\t\t// \t\tgameState,\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\t// case CardIds.RecurringNightmare_BG26_055:\r\n\t\t\t\t\t// case CardIds.RecurringNightmare_BG26_055_G:\r\n\t\t\t\t\t// \tapplyRecurringNightmareDeathrattleEffect(\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\tdeadEntityCardId === CardIds.RecurringNightmare_BG26_055_G,\r\n\t\t\t\t\t// \t\tgameState,\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.MotleyPhalanx_BG27_080:\r\n\t\t\t\t\tcase CardIds.MotleyPhalanx_BG27_080_G:\r\n\t\t\t\t\t\tconst motleyBuff = deadEntity.cardId === CardIds.MotleyPhalanx_BG27_080_G ? 2 : 1;\r\n\t\t\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tmotleyBuff * 1,\r\n\t\t\t\t\t\t\tmotleyBuff * 1,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304:\r\n\t\t\t\t\tcase CardIds.MoroesStewardOfDeath_BG28_304_G:\r\n\t\t\t\t\t\tconst moroesBuffAtk = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 8 : 4;\r\n\t\t\t\t\t\tconst moroesBuffHealth = deadEntity.cardId === CardIds.MoroesStewardOfDeath_BG28_304_G ? 12 : 6;\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tmoroesBuffAtk,\r\n\t\t\t\t\t\t\tmoroesBuffHealth,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\tRace[Race.UNDEAD],\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SteadfastSpirit_BG28_306:\r\n\t\t\t\t\tcase CardIds.SteadfastSpirit_BG28_306_G:\r\n\t\t\t\t\t\tconst steadfastSpiritBuff = deadEntity.cardId === CardIds.SteadfastSpirit_BG28_306_G ? 2 : 1;\r\n\t\t\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\t\t\tdeadEntity,\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\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\t\tsteadfastSpiritBuff,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.ScrapScraper_BG26_148:\r\n\t\t\t\t\tcase CardIds.ScrapScraper_BG26_148_G:\r\n\t\t\t\t\t\tconst scraperToAddQuantity = deadEntity.cardId === CardIds.ScrapScraper_BG26_148_G ? 2 : 1;\r\n\t\t\t\t\t\tconst scraperCardsToAdd = [];\r\n\t\t\t\t\t\tfor (let i = 0; i < scraperToAddQuantity; i++) {\r\n\t\t\t\t\t\t\tscraperCardsToAdd.push(pickRandom(gameState.cardsData.scrapScraperSpawns));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, scraperCardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.BarrensConjurer_BG29_862:\r\n\t\t\t\t\tcase CardIds.BarrensConjurer_BG29_862_G:\r\n\t\t\t\t\t\tconst conjurerToAddQuantity = deadEntity.cardId === CardIds.BarrensConjurer_BG29_862_G ? 2 : 1;\r\n\t\t\t\t\t\tconst conjurerCardsToAdd = [];\r\n\t\t\t\t\t\tfor (let i = 0; i < conjurerToAddQuantity; i++) {\r\n\t\t\t\t\t\t\tconjurerCardsToAdd.push(pickRandom(gameState.cardsData.battlecryMinions));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, conjurerCardsToAdd, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SpikedSavior_BG29_808:\r\n\t\t\t\t\tcase CardIds.SpikedSavior_BG29_808_G:\r\n\t\t\t\t\t\tconst spikedSaviorLoops = deadEntity.cardId === CardIds.SpikedSavior_BG29_808_G ? 2 : 1;\r\n\t\t\t\t\t\tfor (let j = 0; j < spikedSaviorLoops; j++) {\r\n\t\t\t\t\t\t\tconst targetBoard = [...boardWithDeadEntity];\r\n\t\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\t0,\r\n\t\t\t\t\t\t\t\t\t1,\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}\r\n\t\t\t\t\t\t\tfor (const entity of targetBoard) {\r\n\t\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\t// See sim.sample.1.txt\r\n\t\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\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\t// by just looking them up, and spawning to the right\r\n\t\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\t// by looking up the position changes of other minions?\r\n\t\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\t// stay as a bug\r\n\t\t\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\t\t\tentity,\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\tdeadEntity,\r\n\t\t\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\t\t\totherBoardHero,\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}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// Add all the deathrattles that don't have an effect on combat\r\n\t\t\t\t\t// case CardIds.FieryFelblood_BG29_877:\r\n\t\t\t\t\t// case CardIds.FieryFelblood_BG29_877_G:\r\n\t\t\t\t\t// Enchantments\r\n\t\t\t\t\tcase CardIds.RustyTrident_TridentsTreasureEnchantment_BG30_MagicItem_917e:\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.HoggyBank_GemInTheBankEnchantment_BG30_MagicItem_411e:\r\n\t\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [CardIds.BloodGem], gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000e:\r\n\t\t\t\t\tcase CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge:\r\n\t\t\t\t\t\t// console.log('\\t', 'Leapfrogger enchantment', enchantment.repeats);\r\n\t\t\t\t\t\tapplyLeapFroggerEffect(\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\tdeadEntityCardId === CardIds.Leapfrogger_LeapfrogginEnchantment_BG21_000_Ge,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t1, //enchantment.repeats || 1,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.EarthRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyEarthInvocationEnchantment(boardWithDeadEntity, deadEntity, deadEntity, gameState);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.FireRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyFireInvocationEnchantment(\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\tdeadEntity,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.WaterRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyWaterInvocationEnchantment(\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\tdeadEntity,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.LightningRecollectionEnchantment:\r\n\t\t\t\t\t\tapplyLightningInvocationEnchantment(\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\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\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif (deadEntity.additionalCards?.includes(deadEntityCardId)) {\r\n\t\t\t\t\t\t\tif (!hasMechanic(gameState.allCards.getCard(deadEntityCardId), GameTag.DEATHRATTLE)) {\r\n\t\t\t\t\t\t\t\thasTriggeredThisLoop = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconst source = [deadEntity, ...enchantments].find((e) => e.cardId === deadEntityCardId);\r\n\t\t\t\t\t\t\tif (!hasEntityMechanic(source, GameTag.DEATHRATTLE, gameState.allCards)) {\r\n\t\t\t\t\t\t\t\thasTriggeredThisLoop = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\thasTriggered = hasTriggered || hasTriggeredThisLoop;\r\n\t\t}\r\n\t\t// Do it here, because enchantments are processed before the spawns from the deathrattles\r\n\t\t// 33.6.2 https://replays.firestoneapp.com/?reviewId=3b025701-01f5-4527-9d53-d8d67f78c5c8&turn=7&action=4\r\n\t\tfor (const enchantment of deadEntity.enchantments) {\r\n\t\t\tlet hasTriggeredThisLoop = true;\r\n\t\t\tconst deathrattleImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasDeathrattleSpawnEnchantment(deathrattleImpl)) {\r\n\t\t\t\tconst spawns = deathrattleImpl.deathrattleSpawnEnchantmentEffect(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\tdeathrattleTriggeredInput,\r\n\t\t\t\t);\r\n\t\t\t\tif (!!spawns?.length) {\r\n\t\t\t\t\tspawnedEntities.push(...spawns);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tswitch (enchantment.cardId) {\r\n\t\t\t\t\t// case CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055e:\r\n\t\t\t\t\t// case CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055_Ge:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\tenchantment.cardId === CardIds.RecurringNightmare_NightmareInsideEnchantment_BG26_055e\r\n\t\t\t\t\t// \t\t\t\t? CardIds.RecurringNightmare_BG26_055\r\n\t\t\t\t\t// \t\t\t\t: CardIds.RecurringNightmare_BG26_055_G,\r\n\t\t\t\t\t// \t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t\t// \t\t),\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\t// Replicating Menace\r\n\t\t\t\t\tcase CardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_BG_BOT_312e:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_BG_BOT_312t,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.ReplicatingMenace_ReplicatingMenaceEnchantment_TB_BaconUps_032e:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ReplicatingMenace_MicrobotToken_TB_BaconUps_032t,\r\n\t\t\t\t\t\t\t\t3,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.LivingSpores_LivingSporesEnchantment:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.LivingSpores_PlantToken,\r\n\t\t\t\t\t\t\t\t2,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.EarthInvocation_ElementEarthEnchantment:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.ElementEarth_StoneElementalToken,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.BoonOfBeetles_BeetleSwarmEnchantment_BG28_603e:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.BoonOfBeetles_BeetleToken_BG28_603t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.TheUninvitedGuest_UninvitedEnchantment_BG29_875e:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875t,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.TheUninvitedGuest_UninvitedEnchantment_BG29_875_Ge:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.TheUninvitedGuest_ShadowToken_BG29_875_Gt,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase CardIds.SneedsReplicator_ReplicateEnchantment:\r\n\t\t\t\t\t\tconst tavernTier =\r\n\t\t\t\t\t\t\tdeadEntity.tavernTier ?? gameState.cardsData.getTavernLevel(deadEntity.cardId);\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tgameState.cardsData.getRandomMinionForTavernTier(Math.max(1, tavernTier - 1)),\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t// case CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004e:\r\n\t\t\t\t\t// case CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge:\r\n\t\t\t\t\t// \tspawnedEntities.push(\r\n\t\t\t\t\t// \t\t...spawnEntities(\r\n\t\t\t\t\t// \t\t\tenchantment.cardId === CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge\r\n\t\t\t\t\t// \t\t\t\t? CardIds.SurfNSurf_CrabToken_BG27_004_Gt2\r\n\t\t\t\t\t// \t\t\t\t: CardIds.SurfNSurf_CrabToken_BG27_004t2,\r\n\t\t\t\t\t// \t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t// \t\t\tfalse,\r\n\t\t\t\t\t// \t\t),\r\n\t\t\t\t\t// \t);\r\n\t\t\t\t\t// \tbreak;\r\n\t\t\t\t\tcase CardIds.JarredFrostling_FrostyGlobeEnchantment_BG30_MagicItem_952e:\r\n\t\t\t\t\t\tspawnedEntities.push(\r\n\t\t\t\t\t\t\t...spawnEntities(\r\n\t\t\t\t\t\t\t\tCardIds.FlourishingFrostling_BG26_537,\r\n\t\t\t\t\t\t\t\t1,\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\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\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\thasTriggeredThisLoop = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\thasTriggered = hasTriggered || hasTriggeredThisLoop;\r\n\t\t}\r\n\r\n\t\t// It seems that spawns are done before the \"whenever a deathrattle triggers\" effects proc\r\n\t\t// https://replays.firestoneapp.com/?reviewId=0e41ba87-02a8-44a7-b8d3-27c6ab36c678&turn=11&action=22\r\n\t\t// However 33.6.2 This doesn't work - deathrattles from a single minion seem to be processed at once, meaning no spawn before\r\n\t\t// the enchantment is processed\r\n\t\t// 33.6.2 https://replays.firestoneapp.com/?reviewId=3b025701-01f5-4527-9d53-d8d67f78c5c8&turn=7&action=4\r\n\t\tif (spawnedEntities?.length > 0) {\r\n\t\t\tconst actualSpawns = performEntitySpawns(\r\n\t\t\t\tspawnedEntities,\r\n\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\tdeadEntityIndexFromRight,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t);\r\n\t\t\tfinalSpawns.push(...actualSpawns);\r\n\t\t}\r\n\r\n\t\tif (hasTriggered) {\r\n\t\t\tonDeathrattleTriggered(deathrattleTriggeredInput);\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firestone-hs/simulate-bgs-battle",
3
- "version": "1.1.645",
3
+ "version": "1.1.646",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "lint": "eslint --color --fix --ext .ts .",