@firestone-hs/simulate-bgs-battle 1.1.701 → 1.1.702

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cards/card.interface.d.ts +2 -6
  2. package/dist/cards/card.interface.js.map +1 -1
  3. package/dist/cards/impl/_card-mappings.js +6 -0
  4. package/dist/cards/impl/_card-mappings.js.map +1 -1
  5. package/dist/cards/impl/minion/auto-assembler-enchantment.js +6 -1
  6. package/dist/cards/impl/minion/auto-assembler-enchantment.js.map +1 -1
  7. package/dist/cards/impl/minion/banana-slamma.js +1 -1
  8. package/dist/cards/impl/minion/banana-slamma.js.map +1 -1
  9. package/dist/cards/impl/minion/battlecruiser.js +9 -11
  10. package/dist/cards/impl/minion/battlecruiser.js.map +1 -1
  11. package/dist/cards/impl/minion/pufferquil.d.ts +2 -2
  12. package/dist/cards/impl/minion/pufferquil.js +3 -0
  13. package/dist/cards/impl/minion/pufferquil.js.map +1 -1
  14. package/dist/cards/impl/minion/scallywag.js.map +1 -1
  15. package/dist/cards/impl/minion/scarlet-survivor.js +10 -1
  16. package/dist/cards/impl/minion/scarlet-survivor.js.map +1 -1
  17. package/dist/cards/impl/minion/skulking-bristlemane.js +1 -1
  18. package/dist/cards/impl/minion/skulking-bristlemane.js.map +1 -1
  19. package/dist/cards/impl/minion/timecapn-hooktail.d.ts +2 -0
  20. package/dist/cards/impl/minion/timecapn-hooktail.js +14 -0
  21. package/dist/cards/impl/minion/timecapn-hooktail.js.map +1 -0
  22. package/dist/cards/impl/minion/timewarped-magnanimoose.js +1 -1
  23. package/dist/cards/impl/minion/timewarped-magnanimoose.js.map +1 -1
  24. package/dist/cards/impl/trinket/automaton-portrait.d.ts +4 -0
  25. package/dist/cards/impl/trinket/automaton-portrait.js +12 -6
  26. package/dist/cards/impl/trinket/automaton-portrait.js.map +1 -1
  27. package/dist/cards/impl/trinket/fang-anklet.js +2 -17
  28. package/dist/cards/impl/trinket/fang-anklet.js.map +1 -1
  29. package/dist/cards/impl/trinket/jar-o-gems.js +1 -1
  30. package/dist/cards/impl/trinket/jar-o-gems.js.map +1 -1
  31. package/dist/cards/impl/trinket/mama-bear-sticker.d.ts +2 -0
  32. package/dist/cards/impl/trinket/mama-bear-sticker.js +18 -0
  33. package/dist/cards/impl/trinket/mama-bear-sticker.js.map +1 -0
  34. package/dist/cards/impl/trinket/powder-keg-enchantment.js +5 -5
  35. package/dist/cards/impl/trinket/powder-keg-enchantment.js.map +1 -1
  36. package/dist/cards/impl/trinket/powder-keg.js +3 -1
  37. package/dist/cards/impl/trinket/powder-keg.js.map +1 -1
  38. package/dist/cards/impl/trinket/slamma-sticker.js +1 -1
  39. package/dist/cards/impl/trinket/slamma-sticker.js.map +1 -1
  40. package/dist/mechanics/cast-tavern-spell.js +8 -8
  41. package/dist/mechanics/cast-tavern-spell.js.map +1 -1
  42. package/dist/simulation/add-minion-to-board.js +15 -1
  43. package/dist/simulation/add-minion-to-board.js.map +1 -1
  44. package/dist/simulation/start-of-combat/soc-action-processor.js +0 -3
  45. package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
  46. package/dist/simulation/summon-when-space.js +7 -1
  47. package/dist/simulation/summon-when-space.js.map +1 -1
  48. package/package.json +1 -1
@@ -12,15 +12,15 @@ const castTavernSpell = (spellCardId, input) => {
12
12
  if ((0, card_interface_1.hasCastTavernSpell)(spellImpl)) {
13
13
  spellImpl.castTavernSpell(spellCardId, input);
14
14
  }
15
+ if (input.source === input.hero) {
16
+ input.hero.globalInfo.CardsPlayedThisTurn = ((_a = input.hero.globalInfo.CardsPlayedThisTurn) !== null && _a !== void 0 ? _a : 0) + 1;
17
+ input.hero.globalInfo.TavernSpellsCastThisTurn = ((_b = input.hero.globalInfo.TavernSpellsCastThisTurn) !== null && _b !== void 0 ? _b : 0) + 1;
18
+ input.hero.globalInfo.TavernSpellsCastThisGame = ((_c = input.hero.globalInfo.TavernSpellsCastThisGame) !== null && _c !== void 0 ? _c : 0) + 1;
19
+ input.hero.globalInfo.LastTavernSpellCardId = spellCardId;
20
+ input.hero.globalInfo.SpellsCastThisGame++;
21
+ }
22
+ (0, exports.onTavernSpellCast)(spellCardId, input);
15
23
  }
16
- if (input.source === input.hero) {
17
- input.hero.globalInfo.CardsPlayedThisTurn = ((_a = input.hero.globalInfo.CardsPlayedThisTurn) !== null && _a !== void 0 ? _a : 0) + 1;
18
- input.hero.globalInfo.TavernSpellsCastThisTurn = ((_b = input.hero.globalInfo.TavernSpellsCastThisTurn) !== null && _b !== void 0 ? _b : 0) + 1;
19
- input.hero.globalInfo.TavernSpellsCastThisGame = ((_c = input.hero.globalInfo.TavernSpellsCastThisGame) !== null && _c !== void 0 ? _c : 0) + 1;
20
- input.hero.globalInfo.LastTavernSpellCardId = spellCardId;
21
- }
22
- input.hero.globalInfo.SpellsCastThisGame++;
23
- (0, exports.onTavernSpellCast)(spellCardId, input);
24
24
  };
25
25
  exports.castTavernSpell = castTavernSpell;
26
26
  const onTavernSpellCast = (spellCardId, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"cast-tavern-spell.js","sourceRoot":"","sources":["../../src/mechanics/cast-tavern-spell.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tCastSpellInput,\r\n\thasAfterTavernSpellCast,\r\n\thasCastTavernSpell,\r\n\thasOnTavernSpellCast,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { getTavernSpellEffectRepeatCount } from './tavern-spell-repeat';\r\n\r\nexport const castTavernSpell = (spellCardId: string, input: CastSpellInput) => {\r\n\tconst spellImpl = cardMappings[spellCardId];\r\n\tconst repeatCount = getTavernSpellEffectRepeatCount(input);\r\n\tfor (let i = 0; i < repeatCount; i++) {\r\n\t\tif (hasCastTavernSpell(spellImpl)) {\r\n\t\t\tspellImpl.castTavernSpell(spellCardId, input);\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.source === input.hero) {\r\n\t\tinput.hero.globalInfo.CardsPlayedThisTurn = (input.hero.globalInfo.CardsPlayedThisTurn ?? 0) + 1;\r\n\t\tinput.hero.globalInfo.TavernSpellsCastThisTurn = (input.hero.globalInfo.TavernSpellsCastThisTurn ?? 0) + 1;\r\n\t\tinput.hero.globalInfo.TavernSpellsCastThisGame = (input.hero.globalInfo.TavernSpellsCastThisGame ?? 0) + 1;\r\n\t\tinput.hero.globalInfo.LastTavernSpellCardId = spellCardId;\r\n\t}\r\n\tinput.hero.globalInfo.SpellsCastThisGame++;\r\n\r\n\tonTavernSpellCast(spellCardId, input);\r\n};\r\n\r\nexport const onTavernSpellCast = (spellCardId: string, input: CastSpellInput) => {\r\n\t// Added in case other minions react to spells being cast\r\n\t// I thought Charging Czarina would be in that case, but it specifically says \"whenever *you* cast\"\r\n\t// 2025-11-25: cards that simply says \"cast\" means \"you cast\". Otherwise, it will say \"this casts\".\r\n\tif (input.source === input.hero) {\r\n\t\tfor (const boardEntity of input.board) {\r\n\t\t\tconst onSpellCastImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnTavernSpellCast(onSpellCastImpl)) {\r\n\t\t\t\tonSpellCastImpl.onTavernSpellCast(boardEntity, input);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const trinket of input.hero.trinkets ?? []) {\r\n\t\t\tconst onSpellCastImpl = cardMappings[trinket.cardId];\r\n\t\t\tif (hasOnTavernSpellCast(onSpellCastImpl)) {\r\n\t\t\t\tonSpellCastImpl.onTavernSpellCast(trinket, input);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Not sure about the timing of \"after spell cast\", but at least make sure they trigger after the \"whenever you cast\" effects\r\n\tif (input.source === input.hero) {\r\n\t\tfor (const boardEntity of input.board) {\r\n\t\t\tconst afterSpellCastImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasAfterTavernSpellCast(afterSpellCastImpl)) {\r\n\t\t\t\tafterSpellCastImpl.afterTavernSpellCast(boardEntity, input);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const trinket of input.hero.trinkets ?? []) {\r\n\t\t\tconst afterSpellCastImpl = cardMappings[trinket.cardId];\r\n\t\t\tif (hasAfterTavernSpellCast(afterSpellCastImpl)) {\r\n\t\t\t\tafterSpellCastImpl.afterTavernSpellCast(trinket, input);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"cast-tavern-spell.js","sourceRoot":"","sources":["../../src/mechanics/cast-tavern-spell.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n\tCastSpellInput,\r\n\thasAfterTavernSpellCast,\r\n\thasCastTavernSpell,\r\n\thasOnTavernSpellCast,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { getTavernSpellEffectRepeatCount } from './tavern-spell-repeat';\r\n\r\nexport const castTavernSpell = (spellCardId: string, input: CastSpellInput) => {\r\n\tconst spellImpl = cardMappings[spellCardId];\r\n\tconst repeatCount = getTavernSpellEffectRepeatCount(input);\r\n\tfor (let i = 0; i < repeatCount; i++) {\r\n\t\tif (hasCastTavernSpell(spellImpl)) {\r\n\t\t\tspellImpl.castTavernSpell(spellCardId, input);\r\n\t\t}\r\n\r\n\t\tif (input.source === input.hero) {\r\n\t\t\tinput.hero.globalInfo.CardsPlayedThisTurn = (input.hero.globalInfo.CardsPlayedThisTurn ?? 0) + 1;\r\n\t\t\tinput.hero.globalInfo.TavernSpellsCastThisTurn = (input.hero.globalInfo.TavernSpellsCastThisTurn ?? 0) + 1;\r\n\t\t\tinput.hero.globalInfo.TavernSpellsCastThisGame = (input.hero.globalInfo.TavernSpellsCastThisGame ?? 0) + 1;\r\n\t\t\tinput.hero.globalInfo.LastTavernSpellCardId = spellCardId;\r\n\t\t\tinput.hero.globalInfo.SpellsCastThisGame++;\r\n\t\t}\r\n\r\n\t\tonTavernSpellCast(spellCardId, input);\r\n\t}\r\n};\r\n\r\nexport const onTavernSpellCast = (spellCardId: string, input: CastSpellInput) => {\r\n\t// Added in case other minions react to spells being cast\r\n\t// I thought Charging Czarina would be in that case, but it specifically says \"whenever *you* cast\"\r\n\t// 2025-11-25: cards that simply says \"cast\" means \"you cast\". Otherwise, it will say \"this casts\".\r\n\tif (input.source === input.hero) {\r\n\t\tfor (const boardEntity of input.board) {\r\n\t\t\tconst onSpellCastImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnTavernSpellCast(onSpellCastImpl)) {\r\n\t\t\t\tonSpellCastImpl.onTavernSpellCast(boardEntity, input);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const trinket of input.hero.trinkets ?? []) {\r\n\t\t\tconst onSpellCastImpl = cardMappings[trinket.cardId];\r\n\t\t\tif (hasOnTavernSpellCast(onSpellCastImpl)) {\r\n\t\t\t\tonSpellCastImpl.onTavernSpellCast(trinket, input);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Not sure about the timing of \"after spell cast\", but at least make sure they trigger after the \"whenever you cast\" effects\r\n\tif (input.source === input.hero) {\r\n\t\tfor (const boardEntity of input.board) {\r\n\t\t\tconst afterSpellCastImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasAfterTavernSpellCast(afterSpellCastImpl)) {\r\n\t\t\t\tafterSpellCastImpl.afterTavernSpellCast(boardEntity, input);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const trinket of input.hero.trinkets ?? []) {\r\n\t\t\tconst afterSpellCastImpl = cardMappings[trinket.cardId];\r\n\t\t\tif (hasAfterTavernSpellCast(afterSpellCastImpl)) {\r\n\t\t\t\tafterSpellCastImpl.afterTavernSpellCast(trinket, input);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n"]}
@@ -20,7 +20,7 @@ const addMinionToBoard = (board, boardHero, otherBoard, otherHero, index, minion
20
20
  };
21
21
  exports.addMinionToBoard = addMinionToBoard;
22
22
  const handleSpawnEffect = (board, boardHero, otherBoard, otherHero, spawned, gameState, applySelfAuras = true) => {
23
- var _a;
23
+ var _a, _b;
24
24
  const cardIds = [spawned.cardId, ...((_a = spawned.additionalCards) !== null && _a !== void 0 ? _a : [])];
25
25
  if (cardIds.some((cardId) => (0, cards_data_1.isWhelp)(cardId, gameState.allCards))) {
26
26
  const manyWhelps = board.filter((entity) => entity.cardId === "BG22_HERO_305_Buddy");
@@ -76,6 +76,20 @@ const handleSpawnEffect = (board, boardHero, otherBoard, otherHero, spawned, gam
76
76
  break;
77
77
  }
78
78
  }
79
+ for (const trinket of (_b = boardHero.trinkets) !== null && _b !== void 0 ? _b : []) {
80
+ const onOtherSpawnedImpl = _card_mappings_1.cardMappings[trinket.cardId];
81
+ if ((0, card_interface_1.hasOnOtherSpawned)(onOtherSpawnedImpl)) {
82
+ onOtherSpawnedImpl.onOtherSpawned(trinket, {
83
+ spawned: spawned,
84
+ hero: boardHero,
85
+ board: board,
86
+ otherBoard: otherBoard,
87
+ otherHero: otherHero,
88
+ applySelfAuras,
89
+ gameState,
90
+ });
91
+ }
92
+ }
79
93
  };
80
94
  const handleAddedMinionAuraEffect = (board, boardHero, otherBoard, otherHero, spawned, gameState, applySelfAuras = true, isActuallySpawned = true) => {
81
95
  var _a, _b, _c, _d, _e;
@@ -1 +1 @@
1
- {"version":3,"file":"add-minion-to-board.js","sourceRoot":"","sources":["../../src/simulation/add-minion-to-board.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\nimport { BoardEntity } from '../board-entity';\nimport {\n\thasAfterOtherSpawned,\n\thasOnDespawned,\n\thasOnFriendlyMinionSummonedTrinket,\n\thasOnOtherSpawned,\n\thasOnOtherAuraSpawned as hasOnOtherSpawnedAura,\n\thasOnSpawned,\n} from '../cards/card.interface';\nimport { isWhelp } from '../cards/cards-data';\nimport { cardMappings } from '../cards/impl/_card-mappings';\nimport { eternalKnightAttack, eternalKnightHealth } from '../cards/impl/trinket/eternal-portrait';\nimport { updateDivineShield } from '../keywords/divine-shield';\nimport { updateTaunt } from '../keywords/taunt';\nimport { CardIds } from '../services/card-ids';\nimport { pickRandom } from '../services/utils';\nimport { alreadyHasVolumizerBuff, copyEntity, hasCorrectTribe, isVolumizer } from '../utils';\nimport { FullGameState } from './internal-game-state';\nimport { onQuestProgressUpdated } from './quest';\nimport { modifyStats } from './stats';\n\n// export const addMinionsToBoard = (\n// \tboard: BoardEntity[],\n// \tboardHero: BgsPlayerEntity,\n// \totherBoard: BoardEntity[],\n// \totherHero: BgsPlayerEntity,\n// \tindex: number,\n// \tminionsToAdd: readonly BoardEntity[],\n// \tgameState: FullGameState,\n// ): void => {\n// \t// board.splice(index, 0, ...minionsToAdd);\n// \tfor (const minionToAdd of [...minionsToAdd].reverse()) {\n// \t\taddMinionToBoard(board, boardHero, otherBoard, otherHero, index, minionToAdd, gameState, false);\n// \t}\n// \thandleAfterSpawnEffects(board, boardHero, otherBoard, otherHero, minionsToAdd, gameState);\n// };\n\nexport const addMinionToBoard = (\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tindex: number,\n\tminionToAdd: BoardEntity,\n\tgameState: FullGameState,\n\tapplySelfAuras = true,\n): void => {\n\tboard.splice(index, 0, minionToAdd);\n\t// Minion has already been removed from the board in the previous step\n\t// Update the global \"SummonedThisGame/Combat\" info here\n\thandleAddedMinionAuraEffect(board, boardHero, otherBoard, otherHero, minionToAdd, gameState, applySelfAuras);\n\t// Important to do this here, so that \"attack immediately\" minions can be taken into account by the quests\n\tonMinionSummoned(boardHero, board, gameState);\n\thandleSpawnEffect(board, boardHero, otherBoard, otherHero, minionToAdd, gameState, applySelfAuras);\n};\n\nconst handleSpawnEffect = (\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tspawned: BoardEntity,\n\tgameState: FullGameState,\n\tapplySelfAuras = true,\n): void => {\n\tconst cardIds = [spawned.cardId, ...(spawned.additionalCards ?? [])];\n\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\n\tif (cardIds.some((cardId) => isWhelp(cardId, gameState.allCards))) {\n\t\tconst manyWhelps = board.filter((entity) => entity.cardId === CardIds.ManyWhelps_BG22_HERO_305_Buddy);\n\t\tconst goldenManyWhelps = board.filter((entity) => entity.cardId === CardIds.ManyWhelps_BG22_HERO_305_Buddy_G);\n\t\tmanyWhelps.forEach((entity) => {\n\t\t\tmodifyStats(entity, entity, 2, 2, board, boardHero, gameState);\n\t\t});\n\t\tgoldenManyWhelps.forEach((entity) => {\n\t\t\tmodifyStats(entity, entity, 4, 4, board, boardHero, gameState);\n\t\t});\n\t}\n\n\tfor (const entity of board) {\n\t\t// The case for Reborns, and these shouldn't proc on themselves\n\t\tif (entity.entityId === spawned.entityId) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst onOtherSpawnedImpl = cardMappings[entity.cardId];\n\t\tif (hasOnOtherSpawned(onOtherSpawnedImpl)) {\n\t\t\tonOtherSpawnedImpl.onOtherSpawned(entity, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: boardHero,\n\t\t\t\tboard: board,\n\t\t\t\totherBoard: otherBoard,\n\t\t\t\totherHero: otherHero,\n\t\t\t\tapplySelfAuras,\n\t\t\t\tgameState,\n\t\t\t});\n\t\t}\n\n\t\tswitch (entity.cardId) {\n\t\t\tcase CardIds.CobaltGuardian:\n\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.MECH, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\tif (!entity.divineShield) {\n\t\t\t\t\t\tupdateDivineShield(entity, board, boardHero, otherHero, true, gameState);\n\t\t\t\t\t}\n\t\t\t\t\tmodifyStats(entity, entity, 2, 0, board, boardHero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Bigfernal_BGS_204:\n\t\t\t// case CardIds.Bigfernal_TB_BaconUps_304:\n\t\t\t// \tif (hasCorrectTribe(spawned, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards)) {\n\t\t\t// \t\tconst statsBonus = entity.cardId === CardIds.Bigfernal_TB_BaconUps_304 ? 2 : 1;\n\t\t\t// \t\tmodifyStats(entity, entity, statsBonus, statsBonus, board, boardHero, gameState);\n\t\t\t// \t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.MamaBear_BGS_021:\n\t\t\tcase CardIds.MamaBear_TB_BaconUps_090:\n\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\tconst statsBonus = entity.cardId === CardIds.MamaBear_TB_BaconUps_090 ? 12 : 6;\n\t\t\t\t\tmodifyStats(spawned, entity, statsBonus, statsBonus, board, boardHero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.PapaBear_BG27_509:\n\t\t\t// case CardIds.PapaBear_BG27_509_G:\n\t\t\t// \tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\t// \t\tconst statsBonus = entity.cardId === CardIds.PapaBear_BG27_509_G ? 16 : 8;\n\t\t\t// \t\tmodifyStats(spawned, entity, statsBonus, statsBonus, board, boardHero, gameState);\n\t\t\t// \t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.PackLeader_BGS_017:\n\t\t\tcase CardIds.PackLeader_TB_BaconUps_086:\n\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\tconst statsBonus = entity.cardId === CardIds.PackLeader_TB_BaconUps_086 ? 4 : 2;\n\t\t\t\t\tmodifyStats(spawned, entity, statsBonus, 0, board, boardHero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\nexport const handleAddedMinionAuraEffect = (\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tspawned: BoardEntity,\n\tgameState: FullGameState,\n\tapplySelfAuras = true,\n\tisActuallySpawned = true,\n): void => {\n\tfor (const heroPower of boardHero.heroPowers) {\n\t\tswitch (heroPower.cardId) {\n\t\t\tcase CardIds.SproutItOut:\n\t\t\t\tif (isActuallySpawned) {\n\t\t\t\t\tupdateTaunt(spawned, true, board, boardHero, otherHero, gameState);\n\t\t\t\t\tmodifyStats(spawned, boardHero, 1, 2, board, boardHero, gameState);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (boardHero.questRewards?.includes(CardIds.TumblingDisaster_BG28_Reward_505)) {\n\t\tconst tumblingDisasterBonus =\n\t\t\tboardHero.questRewardEntities?.find((e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505)\n\t\t\t\t?.scriptDataNum1 || 1;\n\t\tmodifyStats(spawned, boardHero, tumblingDisasterBonus, tumblingDisasterBonus, board, boardHero, gameState);\n\t}\n\n\tif (isActuallySpawned) {\n\t\tfor (const trinket of boardHero.trinkets ?? []) {\n\t\t\tconst summonedImpl = cardMappings[trinket.cardId];\n\t\t\tif (hasOnFriendlyMinionSummonedTrinket(summonedImpl)) {\n\t\t\t\tsummonedImpl.onFriendlyMinionSummoned(trinket, {\n\t\t\t\t\tspawned,\n\t\t\t\t\tboard,\n\t\t\t\t\thero: boardHero,\n\t\t\t\t\totherBoard,\n\t\t\t\t\totherHero,\n\t\t\t\t\tgameState,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tswitch (trinket.cardId) {\n\t\t\t\tcase CardIds.BlingtronsSunglasses_BG30_MagicItem_978:\n\t\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.MECH, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\t\tconst target = pickRandom(board.filter((e) => !e.divineShield));\n\t\t\t\t\t\tif (!!target) {\n\t\t\t\t\t\t\tupdateDivineShield(target, board, boardHero, otherHero, true, gameState);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\n\t\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\n\t\t\t\t\tif (!trinket.rememberedMinion) {\n\t\t\t\t\t\ttrinket.rememberedMinion = copyEntity(spawned);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Apply auras to board\n\tconst cardIds = [spawned.cardId, ...(spawned.additionalCards ?? [])];\n\tfor (const spawnedCardId of cardIds) {\n\t\thandleMinionAddedAuraEffect(spawnedCardId, spawned, board, boardHero, gameState, isActuallySpawned);\n\t}\n\n\t// When we want to summon an \"exact copy\", we need to make sure we don't apply the aura twice\n\tif (applySelfAuras) {\n\t\t// The board here already contains the new minion\n\t\t// TODO: what if the additional part is a potential target for the aura effect?\n\t\t// 2024-08-27: changing the order to first handleMinionAddedAuraEffect so that the automatons get boosted,\n\t\t// then apply the aura\n\t\tapplyAurasToSelf(spawned, board, boardHero, gameState);\n\t}\n\n\tif (isActuallySpawned) {\n\t\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\tboardHero.globalInfo.BeastsSummonedThisCombat++;\n\t\t\tboardHero.globalInfo.BeastsSummonedThisGame++;\n\t\t}\n\t\tif (hasCorrectTribe(spawned, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards)) {\n\t\t\tboardHero.globalInfo.PiratesSummonedThisGame++;\n\t\t}\n\t}\n};\n\nexport const applyAurasToSelf = (\n\tspawned: BoardEntity,\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n): void => {\n\tspawned.attack += boardHero.globalInfo.AdditionalAttack;\n\n\tif (!!boardHero.questRewards?.length) {\n\t\tfor (const quest of boardHero.questRewards) {\n\t\t\tswitch (quest) {\n\t\t\t\tcase CardIds.VolatileVenom:\n\t\t\t\t\tspawned.attack += 7;\n\t\t\t\t\tspawned.health += 7;\n\t\t\t\t\tspawned.enchantments.push({\n\t\t\t\t\t\tcardId: CardIds.VolatileVenom_VolatileEnchantment,\n\t\t\t\t\t\toriginEntityId: undefined,\n\t\t\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.TheSmokingGun:\n\t\t\t\t\tspawned.attack += 4;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!!boardHero.trinkets?.length) {\n\t\tfor (const trinket of boardHero.trinkets) {\n\t\t\tswitch (trinket.cardId) {\n\t\t\t\tcase CardIds.FeralTalisman_BG30_MagicItem_880:\n\t\t\t\t\tspawned.attack += 2;\n\t\t\t\t\tspawned.health += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FeralTalisman_FeralTalismanToken_BG30_MagicItem_880t:\n\t\t\t\t\tspawned.attack += 8;\n\t\t\t\t\tspawned.health += 5;\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.DazzlingDagger_BG32_MagicItem_934:\n\t\t\t\t\tspawned.attack += trinket.scriptDataNum1 || 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.HordeKeychainToken_BG30_MagicItem_843t:\n\t\t\t\t\tif (gameState.cardsData.getTavernLevel(spawned.cardId) <= 3) {\n\t\t\t\t\t\tspawned.attack += 7;\n\t\t\t\t\t\tspawned.health += 5;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FlagbearerPortrait_BG30_MagicItem_921:\n\t\t\t\t\tif (\n\t\t\t\t\t\tspawned.cardId === CardIds.Scallywag_SkyPirateToken_BGS_061t ||\n\t\t\t\t\t\tspawned.cardId === CardIds.Scallywag_SkyPirateToken_TB_BaconUps_141t\n\t\t\t\t\t) {\n\t\t\t\t\t\tspawned.attack += 6;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (boardHero.globalInfo.HauntedCarapaceAttackBonus > 0) {\n\t\tmodifyStats(\n\t\t\tspawned,\n\t\t\tspawned,\n\t\t\tboardHero.globalInfo.HauntedCarapaceAttackBonus,\n\t\t\t0,\n\t\t\tboard,\n\t\t\tboardHero,\n\t\t\tgameState,\n\t\t\tfalse,\n\t\t);\n\t}\n\tif (boardHero.globalInfo.HauntedCarapaceHealthBonus > 0) {\n\t\tmodifyStats(\n\t\t\tspawned,\n\t\t\tspawned,\n\t\t\t0,\n\t\t\tboardHero.globalInfo.HauntedCarapaceHealthBonus,\n\t\t\tboard,\n\t\t\tboardHero,\n\t\t\tgameState,\n\t\t\tfalse,\n\t\t);\n\t}\n\tif (hasCorrectTribe(spawned, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.UndeadAttackBonus > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.UndeadAttackBonus,\n\t\t\t\t0,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t}\n\tif (hasCorrectTribe(spawned, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.PirateAttackBonus > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.PirateAttackBonus,\n\t\t\t\t0,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t}\n\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.GoldrinnBuffAtk > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.GoldrinnBuffAtk,\n\t\t\t\tboardHero.globalInfo.GoldrinnBuffHealth,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tgameState.spectator.registerPowerTarget(boardHero, spawned, board, null, null);\n\t\t}\n\t}\n\tif (isWhelp(spawned.cardId, gameState.allCards)) {\n\t\tmodifyStats(\n\t\t\tspawned,\n\t\t\tspawned,\n\t\t\tboardHero.globalInfo.WhelpAttackBuff ?? 0,\n\t\t\tboardHero.globalInfo.WhelpHealthBuff ?? 0,\n\t\t\tboard,\n\t\t\tboardHero,\n\t\t\tgameState,\n\t\t\tfalse,\n\t\t);\n\t\tgameState.spectator.registerPowerTarget(boardHero, spawned, board, null, null);\n\t}\n\tif (\n\t\tisVolumizer(spawned.cardId, boardHero, gameState.anomalies, gameState.allCards) &&\n\t\t// https://replays.firestoneapp.com/?reviewId=75e82ef1-3442-4307-a3c8-4a3b72fcf6af&turn=11&action=2\n\t\t!alreadyHasVolumizerBuff(spawned, boardHero, gameState)\n\t) {\n\t\tif (boardHero.globalInfo.VolumizerAttackBuff > 0 || boardHero.globalInfo.VolumizerHealthBuff > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.VolumizerAttackBuff ?? 0,\n\t\t\t\tboardHero.globalInfo.VolumizerHealthBuff ?? 0,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tgameState.spectator.registerPowerTarget(boardHero, spawned, board, null, null);\n\t\t}\n\t}\n\n\t// In case Putricide spawns a stictched minion whose stitched part creates an aura effect\n\t// const potentialAuraSources: { cardId: string; entityId: number }[] = [\n\t// \t{ cardId: spawned.cardId, entityId: spawned.entityId },\n\t// \t...(spawned.additionalCards ?? []).map((cardId) => ({ cardId, entityId: spawned.entityId })),\n\t// ];\n\n\tif (gameState.cardsData.getTavernLevel(spawned.cardId) % 2 === 1) {\n\t\tconst atkBuff = boardHero.globalInfo.MutatedLasherAttackBuff ?? 0;\n\t\tconst healthBuff = boardHero.globalInfo.MutatedLasherHealthBuff ?? 0;\n\t\tmodifyStats(spawned, spawned, atkBuff, healthBuff, board, boardHero, gameState, false);\n\t}\n\tfor (const entity of board) {\n\t\tconst onOtherSpawnedImpl = cardMappings[entity.cardId];\n\t\tif (hasOnOtherSpawnedAura(onOtherSpawnedImpl)) {\n\t\t\tonOtherSpawnedImpl.onOtherSpawnedAura(entity, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: boardHero,\n\t\t\t\tboard: board,\n\t\t\t\tgameState,\n\t\t\t});\n\t\t}\n\t\tswitch (entity.cardId) {\n\t\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\n\t\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tspawned.attack += entity.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\n\t\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tspawned.attack += entity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t\tspawned.health += entity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Kathranatir_BG21_039:\n\t\t\t// case CardIds.Kathranatir_BG21_039_G:\n\t\t\t// \tif (\n\t\t\t// \t\thasCorrectTribe(spawned, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards) &&\n\t\t\t// \t\tentity.entityId !== spawned.entityId\n\t\t\t// \t) {\n\t\t\t// \t\tspawned.attack += entity.cardId === CardIds.Kathranatir_BG21_039_G ? 2 : 1;\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.CyborgDrake_BG25_043:\n\t\t\tcase CardIds.CyborgDrake_BG25_043_G:\n\t\t\t\tif (spawned.divineShield) {\n\t\t\t\t\tspawned.attack += entity.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SoreLoser_BG27_030:\n\t\t\tcase CardIds.SoreLoser_BG27_030_G:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tspawned.attack += (entity.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst onSpawnedImpl = cardMappings[spawned.cardId];\n\tif (hasOnSpawned(onSpawnedImpl)) {\n\t\tonSpawnedImpl.onSpawned(spawned, {\n\t\t\thero: boardHero,\n\t\t\tboard: board,\n\t\t\tgameState: gameState,\n\t\t});\n\t}\n\tswitch (spawned.cardId) {\n\t\tcase CardIds.EternalKnight_BG25_008:\n\t\tcase CardIds.EternalKnight_BG25_008_G:\n\t\t\tconst multiplierKnight = spawned.cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\n\t\t\tconst statsBonusKnight = multiplierKnight * boardHero.globalInfo.EternalKnightsDeadThisGame;\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tnull,\n\t\t\t\teternalKnightAttack * statsBonusKnight,\n\t\t\t\teternalKnightHealth * statsBonusKnight,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase CardIds.EnsorcelledFungus_BG28_555:\n\t\tcase CardIds.EnsorcelledFungus_BG28_555_G:\n\t\t\tconst multiplierFungus = spawned.cardId === CardIds.EnsorcelledFungus_BG28_555_G ? 2 : 1;\n\t\t\tconst statsBonusFungus = multiplierFungus * boardHero.globalInfo.TavernSpellsCastThisGame;\n\t\t\tmodifyStats(spawned, null, statsBonusFungus, 2 * statsBonusFungus, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t\tcase CardIds.FlourishingFrostling_BG26_537:\n\t\tcase CardIds.FlourishingFrostling_BG26_537_G:\n\t\t\tconst multiplierFrostling = spawned.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\n\t\t\tconst statsBonusFrostling = multiplierFrostling * boardHero.globalInfo.FrostlingBonus;\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tnull,\n\t\t\t\t2 * statsBonusFrostling,\n\t\t\t\tstatsBonusFrostling,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase CardIds.SaltyLooter_BGS_081:\n\t\tcase CardIds.SaltyLooter_TB_BaconUps_143:\n\t\t\tconst multiplierLooter = spawned.cardId === CardIds.SaltyLooter_TB_BaconUps_143 ? 2 : 1;\n\t\t\tconst statsBonusLooter = multiplierLooter * boardHero.globalInfo.PiratesSummonedThisGame;\n\t\t\tmodifyStats(spawned, null, 2 * statsBonusLooter, 2 * multiplierLooter, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\n\t\t\tconst multiplierAstral = spawned.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\n\t\t\t// Don't count the yourself\n\t\t\tconst statsBonusAstral = multiplierAstral * (boardHero.globalInfo.AstralAutomatonsSummonedThisGame - 1);\n\t\t\tmodifyStats(spawned, null, 3 * statsBonusAstral, 2 * statsBonusAstral, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t\tcase CardIds.RotHideGnoll_BG25_013:\n\t\tcase CardIds.RotHideGnoll_BG25_013_G:\n\t\t\tconst multiplierGnoll = spawned.cardId === CardIds.RotHideGnoll_BG25_013_G ? 2 : 1;\n\t\t\tconst statsBonusGnoll =\n\t\t\t\tmultiplierGnoll * gameState.sharedState.deaths.filter((e) => e.friendly === spawned.friendly).length;\n\t\t\tmodifyStats(spawned, null, statsBonusGnoll, 0, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t}\n};\n\n// Introduced for Rapid Reanimation: since we will \"addMinionToBoard\" the minion afterwards, the auras will\n// be re-applied then, so we need to remove them first\nexport const removeAurasFromSelf = (\n\tentity: BoardEntity,\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n): void => {\n\tentity.attack -= Math.max(0, boardHero.globalInfo.AdditionalAttack);\n\n\tconst onDespawnedImpl = cardMappings[entity.cardId];\n\tif (hasOnDespawned(onDespawnedImpl)) {\n\t\tonDespawnedImpl.onDespawned(entity, {\n\t\t\thero: boardHero,\n\t\t\tboard: board,\n\t\t\tgameState,\n\t\t});\n\t}\n\n\tif (!!boardHero.questRewards?.length) {\n\t\tfor (const quest of boardHero.questRewards) {\n\t\t\tswitch (quest) {\n\t\t\t\tcase CardIds.VolatileVenom:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 7);\n\t\t\t\t\tentity.health = Math.max(1, entity.health - 7);\n\t\t\t\t\tentity.enchantments = entity.enchantments.filter(\n\t\t\t\t\t\t(e) => e.cardId !== CardIds.VolatileVenom_VolatileEnchantment,\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.TheSmokingGun:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 7);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FlagbearerPortrait_BG30_MagicItem_921:\n\t\t\t\t\tif (\n\t\t\t\t\t\tentity.cardId === CardIds.SkyPirateFlagbearer_BG30_119 ||\n\t\t\t\t\t\tentity.cardId === CardIds.SkyPirateFlagbearer_BG30_119_G\n\t\t\t\t\t) {\n\t\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 8);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!!boardHero.trinkets?.length) {\n\t\tfor (const trinket of boardHero.trinkets) {\n\t\t\tswitch (trinket.cardId) {\n\t\t\t\tcase CardIds.FeralTalisman_BG30_MagicItem_880:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 2);\n\t\t\t\t\tentity.health = Math.max(1, entity.health - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FeralTalisman_FeralTalismanToken_BG30_MagicItem_880t:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 8);\n\t\t\t\t\tentity.health = Math.max(1, entity.health - 5);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.DazzlingDagger_BG32_MagicItem_934:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - (trinket.scriptDataNum1 || 1));\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.HordeKeychainToken_BG30_MagicItem_843t:\n\t\t\t\t\tif (gameState.cardsData.getTavernLevel(entity.cardId) <= 3) {\n\t\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 7);\n\t\t\t\t\t\tentity.health = Math.max(1, entity.health - 5);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (boardHero.globalInfo.HauntedCarapaceAttackBonus > 0) {\n\t\tentity.attack = Math.max(0, entity.attack - boardHero.globalInfo.HauntedCarapaceAttackBonus);\n\t}\n\tif (boardHero.globalInfo.HauntedCarapaceHealthBonus > 0) {\n\t\tentity.health = Math.max(1, entity.health - boardHero.globalInfo.HauntedCarapaceHealthBonus);\n\t}\n\tif (hasCorrectTribe(entity, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.UndeadAttackBonus > 0) {\n\t\t\tentity.attack = Math.max(0, entity.attack - boardHero.globalInfo.UndeadAttackBonus);\n\t\t}\n\t}\n\tif (hasCorrectTribe(entity, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.GoldrinnBuffAtk > 0) {\n\t\t\tentity.attack = Math.max(0, entity.attack - boardHero.globalInfo.GoldrinnBuffAtk);\n\t\t\tentity.health = Math.max(1, entity.health - boardHero.globalInfo.GoldrinnBuffHealth);\n\t\t}\n\t}\n\n\tfor (const boardEntity of board) {\n\t\tswitch (boardEntity.cardId) {\n\t\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\n\t\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(entity, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== boardEntity.entityId\n\t\t\t\t) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack - (boardEntity.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\n\t\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(entity, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== boardEntity.entityId\n\t\t\t\t) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack - (boardEntity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1),\n\t\t\t\t\t);\n\t\t\t\t\tentity.health = Math.max(\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tentity.health - (boardEntity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Kathranatir_BG21_039:\n\t\t\t// case CardIds.Kathranatir_BG21_039_G:\n\t\t\t// \tif (\n\t\t\t// \t\thasCorrectTribe(entity, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards) &&\n\t\t\t// \t\tentity.entityId !== boardEntity.entityId\n\t\t\t// \t) {\n\t\t\t// \t\tentity.attack = Math.max(\n\t\t\t// \t\t\t0,\n\t\t\t// \t\t\tentity.attack - (boardEntity.cardId === CardIds.Kathranatir_BG21_039_G ? 2 : 1),\n\t\t\t// \t\t);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.CyborgDrake_BG25_043:\n\t\t\tcase CardIds.CyborgDrake_BG25_043_G:\n\t\t\t\tif (entity.divineShield) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack - (boardEntity.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SoreLoser_BG27_030:\n\t\t\tcase CardIds.SoreLoser_BG27_030_G:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(entity, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== boardEntity.entityId\n\t\t\t\t) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack -\n\t\t\t\t\t\t\t(boardEntity.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tswitch (entity.cardId) {\n\t\tcase CardIds.EternalKnight_BG25_008:\n\t\tcase CardIds.EternalKnight_BG25_008_G:\n\t\t\tconst multiplierKnight = entity.cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\n\t\t\tconst statsBonusKnight = multiplierKnight * boardHero.globalInfo.EternalKnightsDeadThisGame;\n\t\t\tentity.attack = Math.max(0, entity.attack - eternalKnightAttack * statsBonusKnight);\n\t\t\tentity.health = Math.max(1, entity.health - eternalKnightHealth * statsBonusKnight);\n\t\t\tbreak;\n\t\tcase CardIds.EnsorcelledFungus_BG28_555:\n\t\tcase CardIds.EnsorcelledFungus_BG28_555_G:\n\t\t\tconst multiplierFungus = entity.cardId === CardIds.EnsorcelledFungus_BG28_555_G ? 2 : 1;\n\t\t\tconst statsBonusFungus = multiplierFungus * boardHero.globalInfo.TavernSpellsCastThisGame;\n\t\t\tentity.attack = Math.max(0, entity.attack - statsBonusFungus);\n\t\t\tentity.health = Math.max(1, entity.health - 2 * statsBonusFungus);\n\t\t\tbreak;\n\t\tcase CardIds.FlourishingFrostling_BG26_537:\n\t\tcase CardIds.FlourishingFrostling_BG26_537_G:\n\t\t\tconst multiplierFrostling = entity.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\n\t\t\tconst statsBonusFrostling = multiplierFrostling * boardHero.globalInfo.FrostlingBonus;\n\t\t\tentity.attack = Math.max(0, entity.attack - statsBonusFrostling);\n\t\t\tentity.health = Math.max(1, entity.health - statsBonusFrostling);\n\t\t\tbreak;\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\n\t\t\tconst multiplierAstral = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\n\t\t\t// We remove 1 because the AstralAutomatonsSummonedThisGame also includes the current one\n\t\t\t// and ancestral automaton only counts \"other\" automatons\n\t\t\tconst statsBonusAstral = multiplierAstral * (boardHero.globalInfo.AstralAutomatonsSummonedThisGame - 1);\n\t\t\tentity.attack = Math.max(0, entity.attack - 3 * statsBonusAstral);\n\t\t\tentity.health = Math.max(1, entity.health - 2 * statsBonusAstral);\n\t\t\tbreak;\n\t\tcase CardIds.RotHideGnoll_BG25_013:\n\t\tcase CardIds.RotHideGnoll_BG25_013_G:\n\t\t\tconst multiplierGnoll = entity.cardId === CardIds.RotHideGnoll_BG25_013_G ? 2 : 1;\n\t\t\tconst statsBonusGnoll =\n\t\t\t\tmultiplierGnoll * gameState.sharedState.deaths.filter((e) => e.friendly === entity.friendly).length;\n\t\t\tentity.attack = Math.max(0, entity.attack - statsBonusGnoll);\n\t\t\tbreak;\n\t}\n\n\tfor (const enchantment of entity.enchantments) {\n\t\tswitch (enchantment?.cardId) {\n\t\t\tcase CardIds.TavernLighting_TavernLightsEnchantment:\n\t\t\t\tentity.attack = Math.max(0, entity.attack - enchantment.tagScriptDataNum1);\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nconst handleMinionAddedAuraEffect = (\n\tspawnedCardId: string,\n\tspawned: BoardEntity,\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n\tisActuallySpawned = true,\n): void => {\n\tswitch (spawnedCardId) {\n\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\n\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\n\t\t\tboard\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\n\t\t\t\t// Other\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += spawned.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t\te.health += spawned.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t});\n\t\t\tbreak;\n\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\n\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\n\t\t\tboard\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards))\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += spawned.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\n\t\t\t\t});\n\t\t\tbreak;\n\t\t// case CardIds.Kathranatir_BG21_039:\n\t\t// case CardIds.Kathranatir_BG21_039_G:\n\t\t// \tboard\n\t\t// \t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards))\n\t\t// \t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t// \t\t.forEach((e) => {\n\t\t// \t\t\te.attack += spawned.cardId === CardIds.Kathranatir_BG21_039_G ? 4 : 2;\n\t\t// \t\t});\n\t\t// \tbreak;\n\t\tcase CardIds.CyborgDrake_BG25_043:\n\t\tcase CardIds.CyborgDrake_BG25_043_G:\n\t\t\tboard\n\t\t\t\t.filter((e) => e.divineShield)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += spawned.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\n\t\t\t\t});\n\t\t\tbreak;\n\n\t\tcase CardIds.SoreLoser_BG27_030:\n\t\tcase CardIds.SoreLoser_BG27_030_G:\n\t\t\tboard\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards))\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += (spawned.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\n\t\t\t\t});\n\t\t\tbreak;\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\n\t\t\t// TODO: move this somewhere else\n\t\t\tif (isActuallySpawned) {\n\t\t\t\tboardHero.globalInfo.AstralAutomatonsSummonedThisGame++;\n\t\t\t}\n\t\t\tboard\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.filter(\n\t\t\t\t\t(e) =>\n\t\t\t\t\t\te.cardId === CardIds.AstralAutomaton_BG_TTN_401 ||\n\t\t\t\t\t\te.cardId === CardIds.AstralAutomaton_BG_TTN_401_G,\n\t\t\t\t)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\tconst multiplierAstral = e.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\n\t\t\t\t\tmodifyStats(e, e, 3 * multiplierAstral, 2 * multiplierAstral, board, boardHero, gameState, false);\n\t\t\t\t});\n\t\t\tbreak;\n\t\tcase CardIds.DrBoomsMonster_BG31_176:\n\t\tcase CardIds.DrBoomsMonster_BG31_176_G:\n\t\t\tconst multiplierDrBoom = spawned.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 2 : 1;\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\t2 * boardHero.globalInfo.MagnetizedThisGame * multiplierDrBoom,\n\t\t\t\t2 * boardHero.globalInfo.MagnetizedThisGame * multiplierDrBoom,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbreak;\n\t}\n};\n\nexport const handleAfterSpawnEffects = (\n\tboard: BoardEntity[],\n\thero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tallSpawned: readonly BoardEntity[],\n\tgameState: FullGameState,\n): void => {\n\tfor (const spawned of allSpawned) {\n\t\thandleAfterSpawnEffect(board, hero, otherBoard, otherHero, spawned, gameState);\n\t}\n};\n\nexport const onMinionSummoned = (hero: BgsPlayerEntity, board: BoardEntity[], gameState: FullGameState): void => {\n\tconst quests = hero.questEntities ?? [];\n\tif (!quests.length) {\n\t\treturn;\n\t}\n\n\tfor (const quest of quests) {\n\t\tswitch (quest.CardId) {\n\t\t\tcase CardIds.AssembleALineup:\n\t\t\t\tonQuestProgressUpdated(hero, quest, board, gameState);\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nconst handleAfterSpawnEffect = (\n\tboard: BoardEntity[],\n\thero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tspawned: BoardEntity,\n\tgameState: FullGameState,\n): void => {\n\t// So that spawns don't mess up the loop\n\tconst initialBoard = [...board];\n\n\tfor (const trinket of hero.trinkets ?? []) {\n\t\tconst onAfterSpawnedImpl = cardMappings[trinket.cardId];\n\t\tif (hasAfterOtherSpawned(onAfterSpawnedImpl)) {\n\t\t\tonAfterSpawnedImpl.afterOtherSpawned(trinket, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: hero,\n\t\t\t\tboard: board,\n\t\t\t\totherHero: otherHero,\n\t\t\t\totherBoard: otherBoard,\n\t\t\t\tgameState,\n\t\t\t\tapplySelfAuras: false,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const entity of initialBoard) {\n\t\tif (entity.entityId === spawned.entityId) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst onAfterSpawnedImpl = cardMappings[entity.cardId];\n\t\tif (hasAfterOtherSpawned(onAfterSpawnedImpl)) {\n\t\t\tonAfterSpawnedImpl.afterOtherSpawned(entity, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: hero,\n\t\t\t\tboard: board,\n\t\t\t\totherHero: otherHero,\n\t\t\t\totherBoard: otherBoard,\n\t\t\t\tgameState,\n\t\t\t\tapplySelfAuras: false,\n\t\t\t});\n\t\t}\n\n\t\tswitch (entity.cardId) {\n\t\t\tcase CardIds.XyloBones_BG26_172:\n\t\t\tcase CardIds.XyloBones_BG26_172_G:\n\t\t\t\tif (entity.entityId !== spawned.entityId) {\n\t\t\t\t\tconst xylobonesBuff = entity.cardId === CardIds.XyloBones_BG26_172_G ? 4 : 2;\n\t\t\t\t\tmodifyStats(entity, entity, 0, xylobonesBuff, board, hero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.OctosariWrapGod_BG26_804:\n\t\t\tcase CardIds.OctosariWrapGod_BG26_804_G:\n\t\t\t\tif (entity.entityId !== spawned.entityId) {\n\t\t\t\t\tconst octoStats = entity.cardId === CardIds.OctosariWrapGod_BG26_804_G ? 4 : 2;\n\t\t\t\t\tentity.scriptDataNum1 = (entity.scriptDataNum1 ?? 0) + octoStats;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.ObserverOfMyths_BG_TTN_078:\n\t\t\t// case CardIds.ObserverOfMyths_BG_TTN_078_G:\n\t\t\t// \tif (spawned.attack > entity.attack) {\n\t\t\t// \t\tconst observerBuff = entity.cardId === CardIds.ObserverOfMyths_BG_TTN_078_G ? 2 : 1;\n\t\t\t// \t\taddStatsToBoard(entity, board, hero, observerBuff, 0, gameState);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy:\n\t\t\tcase CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy_G:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, hero, Race.DRAGON, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tconst valithriaBuff =\n\t\t\t\t\t\tentity.cardId === CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy_G ? 3 : 2;\n\t\t\t\t\tmodifyStats(entity, entity, valithriaBuff, valithriaBuff, board, hero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, spawned, board, null, null);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Putricide-only\n\t\t\tcase CardIds.ArmsDealer_BG26_RLK_824:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, hero, Race.UNDEAD, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tmodifyStats(spawned, spawned, 1, 0, board, hero, gameState, false);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfor (const trinket of hero.trinkets ?? []) {\n\t\tconst resolvedImpl = cardMappings[trinket.cardId];\n\t\tif (hasAfterOtherSpawned(resolvedImpl)) {\n\t\t\tresolvedImpl.afterOtherSpawned(trinket, {\n\t\t\t\tspawned,\n\t\t\t\thero,\n\t\t\t\tboard,\n\t\t\t\totherHero,\n\t\t\t\totherBoard,\n\t\t\t\tgameState,\n\t\t\t\tapplySelfAuras: false,\n\t\t\t});\n\t\t}\n\t}\n};\n\nexport interface OnSpawnInput {\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\tgameState: FullGameState;\n}\nexport interface OnOtherSpawnInput {\n\tspawned: BoardEntity;\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\totherHero: BgsPlayerEntity;\n\totherBoard: BoardEntity[];\n\tgameState: FullGameState;\n\tapplySelfAuras: boolean;\n}\nexport interface OnOtherSpawnAuraInput {\n\tspawned: BoardEntity;\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\tgameState: FullGameState;\n}\nexport interface OnDespawnInput {\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\tgameState: FullGameState;\n}\n\n/** Trinket reaction when a minion is placed on the friendly board (`handleAddedMinionAuraEffect`, after hero power / quest hooks). */\nexport interface OnFriendlyMinionSummonedTrinketInput {\n\tspawned: BoardEntity;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\totherBoard: BoardEntity[];\n\totherHero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\n"]}
1
+ {"version":3,"file":"add-minion-to-board.js","sourceRoot":"","sources":["../../src/simulation/add-minion-to-board.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\nimport { BgsPlayerEntity } from '../bgs-player-entity';\nimport { BoardEntity } from '../board-entity';\nimport {\n\thasAfterOtherSpawned,\n\thasOnDespawned,\n\thasOnFriendlyMinionSummonedTrinket,\n\thasOnOtherSpawned,\n\thasOnOtherAuraSpawned as hasOnOtherSpawnedAura,\n\thasOnSpawned,\n} from '../cards/card.interface';\nimport { isWhelp } from '../cards/cards-data';\nimport { cardMappings } from '../cards/impl/_card-mappings';\nimport { eternalKnightAttack, eternalKnightHealth } from '../cards/impl/trinket/eternal-portrait';\nimport { updateDivineShield } from '../keywords/divine-shield';\nimport { updateTaunt } from '../keywords/taunt';\nimport { CardIds } from '../services/card-ids';\nimport { pickRandom } from '../services/utils';\nimport { alreadyHasVolumizerBuff, copyEntity, hasCorrectTribe, isVolumizer } from '../utils';\nimport { FullGameState } from './internal-game-state';\nimport { onQuestProgressUpdated } from './quest';\nimport { modifyStats } from './stats';\n\n// export const addMinionsToBoard = (\n// \tboard: BoardEntity[],\n// \tboardHero: BgsPlayerEntity,\n// \totherBoard: BoardEntity[],\n// \totherHero: BgsPlayerEntity,\n// \tindex: number,\n// \tminionsToAdd: readonly BoardEntity[],\n// \tgameState: FullGameState,\n// ): void => {\n// \t// board.splice(index, 0, ...minionsToAdd);\n// \tfor (const minionToAdd of [...minionsToAdd].reverse()) {\n// \t\taddMinionToBoard(board, boardHero, otherBoard, otherHero, index, minionToAdd, gameState, false);\n// \t}\n// \thandleAfterSpawnEffects(board, boardHero, otherBoard, otherHero, minionsToAdd, gameState);\n// };\n\nexport const addMinionToBoard = (\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tindex: number,\n\tminionToAdd: BoardEntity,\n\tgameState: FullGameState,\n\tapplySelfAuras = true,\n): void => {\n\tboard.splice(index, 0, minionToAdd);\n\t// Minion has already been removed from the board in the previous step\n\t// Update the global \"SummonedThisGame/Combat\" info here\n\thandleAddedMinionAuraEffect(board, boardHero, otherBoard, otherHero, minionToAdd, gameState, applySelfAuras);\n\t// Important to do this here, so that \"attack immediately\" minions can be taken into account by the quests\n\tonMinionSummoned(boardHero, board, gameState);\n\thandleSpawnEffect(board, boardHero, otherBoard, otherHero, minionToAdd, gameState, applySelfAuras);\n};\n\nconst handleSpawnEffect = (\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tspawned: BoardEntity,\n\tgameState: FullGameState,\n\tapplySelfAuras = true,\n): void => {\n\tconst cardIds = [spawned.cardId, ...(spawned.additionalCards ?? [])];\n\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\n\tif (cardIds.some((cardId) => isWhelp(cardId, gameState.allCards))) {\n\t\tconst manyWhelps = board.filter((entity) => entity.cardId === CardIds.ManyWhelps_BG22_HERO_305_Buddy);\n\t\tconst goldenManyWhelps = board.filter((entity) => entity.cardId === CardIds.ManyWhelps_BG22_HERO_305_Buddy_G);\n\t\tmanyWhelps.forEach((entity) => {\n\t\t\tmodifyStats(entity, entity, 2, 2, board, boardHero, gameState);\n\t\t});\n\t\tgoldenManyWhelps.forEach((entity) => {\n\t\t\tmodifyStats(entity, entity, 4, 4, board, boardHero, gameState);\n\t\t});\n\t}\n\n\tfor (const entity of board) {\n\t\t// The case for Reborns, and these shouldn't proc on themselves\n\t\tif (entity.entityId === spawned.entityId) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst onOtherSpawnedImpl = cardMappings[entity.cardId];\n\t\tif (hasOnOtherSpawned(onOtherSpawnedImpl)) {\n\t\t\tonOtherSpawnedImpl.onOtherSpawned(entity, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: boardHero,\n\t\t\t\tboard: board,\n\t\t\t\totherBoard: otherBoard,\n\t\t\t\totherHero: otherHero,\n\t\t\t\tapplySelfAuras,\n\t\t\t\tgameState,\n\t\t\t});\n\t\t}\n\n\t\tswitch (entity.cardId) {\n\t\t\tcase CardIds.CobaltGuardian:\n\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.MECH, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\tif (!entity.divineShield) {\n\t\t\t\t\t\tupdateDivineShield(entity, board, boardHero, otherHero, true, gameState);\n\t\t\t\t\t}\n\t\t\t\t\tmodifyStats(entity, entity, 2, 0, board, boardHero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Bigfernal_BGS_204:\n\t\t\t// case CardIds.Bigfernal_TB_BaconUps_304:\n\t\t\t// \tif (hasCorrectTribe(spawned, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards)) {\n\t\t\t// \t\tconst statsBonus = entity.cardId === CardIds.Bigfernal_TB_BaconUps_304 ? 2 : 1;\n\t\t\t// \t\tmodifyStats(entity, entity, statsBonus, statsBonus, board, boardHero, gameState);\n\t\t\t// \t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.MamaBear_BGS_021:\n\t\t\tcase CardIds.MamaBear_TB_BaconUps_090:\n\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\tconst statsBonus = entity.cardId === CardIds.MamaBear_TB_BaconUps_090 ? 12 : 6;\n\t\t\t\t\tmodifyStats(spawned, entity, statsBonus, statsBonus, board, boardHero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.PapaBear_BG27_509:\n\t\t\t// case CardIds.PapaBear_BG27_509_G:\n\t\t\t// \tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\t// \t\tconst statsBonus = entity.cardId === CardIds.PapaBear_BG27_509_G ? 16 : 8;\n\t\t\t// \t\tmodifyStats(spawned, entity, statsBonus, statsBonus, board, boardHero, gameState);\n\t\t\t// \t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.PackLeader_BGS_017:\n\t\t\tcase CardIds.PackLeader_TB_BaconUps_086:\n\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\tconst statsBonus = entity.cardId === CardIds.PackLeader_TB_BaconUps_086 ? 4 : 2;\n\t\t\t\t\tmodifyStats(spawned, entity, statsBonus, 0, board, boardHero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, boardHero, otherHero);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfor (const trinket of boardHero.trinkets ?? []) {\n\t\tconst onOtherSpawnedImpl = cardMappings[trinket.cardId];\n\t\tif (hasOnOtherSpawned(onOtherSpawnedImpl)) {\n\t\t\tonOtherSpawnedImpl.onOtherSpawned(trinket, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: boardHero,\n\t\t\t\tboard: board,\n\t\t\t\totherBoard: otherBoard,\n\t\t\t\totherHero: otherHero,\n\t\t\t\tapplySelfAuras,\n\t\t\t\tgameState,\n\t\t\t});\n\t\t}\n\t}\n};\nexport const handleAddedMinionAuraEffect = (\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tspawned: BoardEntity,\n\tgameState: FullGameState,\n\tapplySelfAuras = true,\n\tisActuallySpawned = true,\n): void => {\n\tfor (const heroPower of boardHero.heroPowers) {\n\t\tswitch (heroPower.cardId) {\n\t\t\tcase CardIds.SproutItOut:\n\t\t\t\tif (isActuallySpawned) {\n\t\t\t\t\tupdateTaunt(spawned, true, board, boardHero, otherHero, gameState);\n\t\t\t\t\tmodifyStats(spawned, boardHero, 1, 2, board, boardHero, gameState);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (boardHero.questRewards?.includes(CardIds.TumblingDisaster_BG28_Reward_505)) {\n\t\tconst tumblingDisasterBonus =\n\t\t\tboardHero.questRewardEntities?.find((e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505)\n\t\t\t\t?.scriptDataNum1 || 1;\n\t\tmodifyStats(spawned, boardHero, tumblingDisasterBonus, tumblingDisasterBonus, board, boardHero, gameState);\n\t}\n\n\tif (isActuallySpawned) {\n\t\tfor (const trinket of boardHero.trinkets ?? []) {\n\t\t\tconst summonedImpl = cardMappings[trinket.cardId];\n\t\t\tif (hasOnFriendlyMinionSummonedTrinket(summonedImpl)) {\n\t\t\t\tsummonedImpl.onFriendlyMinionSummoned(trinket, {\n\t\t\t\t\tspawned,\n\t\t\t\t\tboard,\n\t\t\t\t\thero: boardHero,\n\t\t\t\t\totherBoard,\n\t\t\t\t\totherHero,\n\t\t\t\t\tgameState,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tswitch (trinket.cardId) {\n\t\t\t\tcase CardIds.BlingtronsSunglasses_BG30_MagicItem_978:\n\t\t\t\t\tif (hasCorrectTribe(spawned, boardHero, Race.MECH, gameState.anomalies, gameState.allCards)) {\n\t\t\t\t\t\tconst target = pickRandom(board.filter((e) => !e.divineShield));\n\t\t\t\t\t\tif (!!target) {\n\t\t\t\t\t\t\tupdateDivineShield(target, board, boardHero, otherHero, true, gameState);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.TwinSkyLanterns_BG30_MagicItem_822:\n\t\t\t\tcase CardIds.TwinSkyLanterns_TwinSkyLanternsToken_BG30_MagicItem_822t2:\n\t\t\t\t\tif (!trinket.rememberedMinion) {\n\t\t\t\t\t\ttrinket.rememberedMinion = copyEntity(spawned);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Apply auras to board\n\tconst cardIds = [spawned.cardId, ...(spawned.additionalCards ?? [])];\n\tfor (const spawnedCardId of cardIds) {\n\t\thandleMinionAddedAuraEffect(spawnedCardId, spawned, board, boardHero, gameState, isActuallySpawned);\n\t}\n\n\t// When we want to summon an \"exact copy\", we need to make sure we don't apply the aura twice\n\tif (applySelfAuras) {\n\t\t// The board here already contains the new minion\n\t\t// TODO: what if the additional part is a potential target for the aura effect?\n\t\t// 2024-08-27: changing the order to first handleMinionAddedAuraEffect so that the automatons get boosted,\n\t\t// then apply the aura\n\t\tapplyAurasToSelf(spawned, board, boardHero, gameState);\n\t}\n\n\tif (isActuallySpawned) {\n\t\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\t\tboardHero.globalInfo.BeastsSummonedThisCombat++;\n\t\t\tboardHero.globalInfo.BeastsSummonedThisGame++;\n\t\t}\n\t\tif (hasCorrectTribe(spawned, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards)) {\n\t\t\tboardHero.globalInfo.PiratesSummonedThisGame++;\n\t\t}\n\t}\n};\n\nexport const applyAurasToSelf = (\n\tspawned: BoardEntity,\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n): void => {\n\tspawned.attack += boardHero.globalInfo.AdditionalAttack;\n\n\tif (!!boardHero.questRewards?.length) {\n\t\tfor (const quest of boardHero.questRewards) {\n\t\t\tswitch (quest) {\n\t\t\t\tcase CardIds.VolatileVenom:\n\t\t\t\t\tspawned.attack += 7;\n\t\t\t\t\tspawned.health += 7;\n\t\t\t\t\tspawned.enchantments.push({\n\t\t\t\t\t\tcardId: CardIds.VolatileVenom_VolatileEnchantment,\n\t\t\t\t\t\toriginEntityId: undefined,\n\t\t\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.TheSmokingGun:\n\t\t\t\t\tspawned.attack += 4;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!!boardHero.trinkets?.length) {\n\t\tfor (const trinket of boardHero.trinkets) {\n\t\t\tswitch (trinket.cardId) {\n\t\t\t\tcase CardIds.FeralTalisman_BG30_MagicItem_880:\n\t\t\t\t\tspawned.attack += 2;\n\t\t\t\t\tspawned.health += 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FeralTalisman_FeralTalismanToken_BG30_MagicItem_880t:\n\t\t\t\t\tspawned.attack += 8;\n\t\t\t\t\tspawned.health += 5;\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.DazzlingDagger_BG32_MagicItem_934:\n\t\t\t\t\tspawned.attack += trinket.scriptDataNum1 || 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.HordeKeychainToken_BG30_MagicItem_843t:\n\t\t\t\t\tif (gameState.cardsData.getTavernLevel(spawned.cardId) <= 3) {\n\t\t\t\t\t\tspawned.attack += 7;\n\t\t\t\t\t\tspawned.health += 5;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FlagbearerPortrait_BG30_MagicItem_921:\n\t\t\t\t\tif (\n\t\t\t\t\t\tspawned.cardId === CardIds.Scallywag_SkyPirateToken_BGS_061t ||\n\t\t\t\t\t\tspawned.cardId === CardIds.Scallywag_SkyPirateToken_TB_BaconUps_141t\n\t\t\t\t\t) {\n\t\t\t\t\t\tspawned.attack += 6;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (boardHero.globalInfo.HauntedCarapaceAttackBonus > 0) {\n\t\tmodifyStats(\n\t\t\tspawned,\n\t\t\tspawned,\n\t\t\tboardHero.globalInfo.HauntedCarapaceAttackBonus,\n\t\t\t0,\n\t\t\tboard,\n\t\t\tboardHero,\n\t\t\tgameState,\n\t\t\tfalse,\n\t\t);\n\t}\n\tif (boardHero.globalInfo.HauntedCarapaceHealthBonus > 0) {\n\t\tmodifyStats(\n\t\t\tspawned,\n\t\t\tspawned,\n\t\t\t0,\n\t\t\tboardHero.globalInfo.HauntedCarapaceHealthBonus,\n\t\t\tboard,\n\t\t\tboardHero,\n\t\t\tgameState,\n\t\t\tfalse,\n\t\t);\n\t}\n\tif (hasCorrectTribe(spawned, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.UndeadAttackBonus > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.UndeadAttackBonus,\n\t\t\t\t0,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t}\n\tif (hasCorrectTribe(spawned, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.PirateAttackBonus > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.PirateAttackBonus,\n\t\t\t\t0,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t}\n\t}\n\tif (hasCorrectTribe(spawned, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.GoldrinnBuffAtk > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.GoldrinnBuffAtk,\n\t\t\t\tboardHero.globalInfo.GoldrinnBuffHealth,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tgameState.spectator.registerPowerTarget(boardHero, spawned, board, null, null);\n\t\t}\n\t}\n\tif (isWhelp(spawned.cardId, gameState.allCards)) {\n\t\tmodifyStats(\n\t\t\tspawned,\n\t\t\tspawned,\n\t\t\tboardHero.globalInfo.WhelpAttackBuff ?? 0,\n\t\t\tboardHero.globalInfo.WhelpHealthBuff ?? 0,\n\t\t\tboard,\n\t\t\tboardHero,\n\t\t\tgameState,\n\t\t\tfalse,\n\t\t);\n\t\tgameState.spectator.registerPowerTarget(boardHero, spawned, board, null, null);\n\t}\n\tif (\n\t\tisVolumizer(spawned.cardId, boardHero, gameState.anomalies, gameState.allCards) &&\n\t\t// https://replays.firestoneapp.com/?reviewId=75e82ef1-3442-4307-a3c8-4a3b72fcf6af&turn=11&action=2\n\t\t!alreadyHasVolumizerBuff(spawned, boardHero, gameState)\n\t) {\n\t\tif (boardHero.globalInfo.VolumizerAttackBuff > 0 || boardHero.globalInfo.VolumizerHealthBuff > 0) {\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\tboardHero.globalInfo.VolumizerAttackBuff ?? 0,\n\t\t\t\tboardHero.globalInfo.VolumizerHealthBuff ?? 0,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tgameState.spectator.registerPowerTarget(boardHero, spawned, board, null, null);\n\t\t}\n\t}\n\n\t// In case Putricide spawns a stictched minion whose stitched part creates an aura effect\n\t// const potentialAuraSources: { cardId: string; entityId: number }[] = [\n\t// \t{ cardId: spawned.cardId, entityId: spawned.entityId },\n\t// \t...(spawned.additionalCards ?? []).map((cardId) => ({ cardId, entityId: spawned.entityId })),\n\t// ];\n\n\tif (gameState.cardsData.getTavernLevel(spawned.cardId) % 2 === 1) {\n\t\tconst atkBuff = boardHero.globalInfo.MutatedLasherAttackBuff ?? 0;\n\t\tconst healthBuff = boardHero.globalInfo.MutatedLasherHealthBuff ?? 0;\n\t\tmodifyStats(spawned, spawned, atkBuff, healthBuff, board, boardHero, gameState, false);\n\t}\n\tfor (const entity of board) {\n\t\tconst onOtherSpawnedImpl = cardMappings[entity.cardId];\n\t\tif (hasOnOtherSpawnedAura(onOtherSpawnedImpl)) {\n\t\t\tonOtherSpawnedImpl.onOtherSpawnedAura(entity, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: boardHero,\n\t\t\t\tboard: board,\n\t\t\t\tgameState,\n\t\t\t});\n\t\t}\n\t\tswitch (entity.cardId) {\n\t\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\n\t\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tspawned.attack += entity.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\n\t\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tspawned.attack += entity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t\tspawned.health += entity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Kathranatir_BG21_039:\n\t\t\t// case CardIds.Kathranatir_BG21_039_G:\n\t\t\t// \tif (\n\t\t\t// \t\thasCorrectTribe(spawned, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards) &&\n\t\t\t// \t\tentity.entityId !== spawned.entityId\n\t\t\t// \t) {\n\t\t\t// \t\tspawned.attack += entity.cardId === CardIds.Kathranatir_BG21_039_G ? 2 : 1;\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.CyborgDrake_BG25_043:\n\t\t\tcase CardIds.CyborgDrake_BG25_043_G:\n\t\t\t\tif (spawned.divineShield) {\n\t\t\t\t\tspawned.attack += entity.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SoreLoser_BG27_030:\n\t\t\tcase CardIds.SoreLoser_BG27_030_G:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tspawned.attack += (entity.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst onSpawnedImpl = cardMappings[spawned.cardId];\n\tif (hasOnSpawned(onSpawnedImpl)) {\n\t\tonSpawnedImpl.onSpawned(spawned, {\n\t\t\thero: boardHero,\n\t\t\tboard: board,\n\t\t\tgameState: gameState,\n\t\t});\n\t}\n\tswitch (spawned.cardId) {\n\t\tcase CardIds.EternalKnight_BG25_008:\n\t\tcase CardIds.EternalKnight_BG25_008_G:\n\t\t\tconst multiplierKnight = spawned.cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\n\t\t\tconst statsBonusKnight = multiplierKnight * boardHero.globalInfo.EternalKnightsDeadThisGame;\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tnull,\n\t\t\t\teternalKnightAttack * statsBonusKnight,\n\t\t\t\teternalKnightHealth * statsBonusKnight,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase CardIds.EnsorcelledFungus_BG28_555:\n\t\tcase CardIds.EnsorcelledFungus_BG28_555_G:\n\t\t\tconst multiplierFungus = spawned.cardId === CardIds.EnsorcelledFungus_BG28_555_G ? 2 : 1;\n\t\t\tconst statsBonusFungus = multiplierFungus * boardHero.globalInfo.TavernSpellsCastThisGame;\n\t\t\tmodifyStats(spawned, null, statsBonusFungus, 2 * statsBonusFungus, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t\tcase CardIds.FlourishingFrostling_BG26_537:\n\t\tcase CardIds.FlourishingFrostling_BG26_537_G:\n\t\t\tconst multiplierFrostling = spawned.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\n\t\t\tconst statsBonusFrostling = multiplierFrostling * boardHero.globalInfo.FrostlingBonus;\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tnull,\n\t\t\t\t2 * statsBonusFrostling,\n\t\t\t\tstatsBonusFrostling,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbreak;\n\t\tcase CardIds.SaltyLooter_BGS_081:\n\t\tcase CardIds.SaltyLooter_TB_BaconUps_143:\n\t\t\tconst multiplierLooter = spawned.cardId === CardIds.SaltyLooter_TB_BaconUps_143 ? 2 : 1;\n\t\t\tconst statsBonusLooter = multiplierLooter * boardHero.globalInfo.PiratesSummonedThisGame;\n\t\t\tmodifyStats(spawned, null, 2 * statsBonusLooter, 2 * multiplierLooter, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\n\t\t\tconst multiplierAstral = spawned.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\n\t\t\t// Don't count the yourself\n\t\t\tconst statsBonusAstral = multiplierAstral * (boardHero.globalInfo.AstralAutomatonsSummonedThisGame - 1);\n\t\t\tmodifyStats(spawned, null, 3 * statsBonusAstral, 2 * statsBonusAstral, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t\tcase CardIds.RotHideGnoll_BG25_013:\n\t\tcase CardIds.RotHideGnoll_BG25_013_G:\n\t\t\tconst multiplierGnoll = spawned.cardId === CardIds.RotHideGnoll_BG25_013_G ? 2 : 1;\n\t\t\tconst statsBonusGnoll =\n\t\t\t\tmultiplierGnoll * gameState.sharedState.deaths.filter((e) => e.friendly === spawned.friendly).length;\n\t\t\tmodifyStats(spawned, null, statsBonusGnoll, 0, board, boardHero, gameState, false);\n\t\t\tbreak;\n\t}\n};\n\n// Introduced for Rapid Reanimation: since we will \"addMinionToBoard\" the minion afterwards, the auras will\n// be re-applied then, so we need to remove them first\nexport const removeAurasFromSelf = (\n\tentity: BoardEntity,\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n): void => {\n\tentity.attack -= Math.max(0, boardHero.globalInfo.AdditionalAttack);\n\n\tconst onDespawnedImpl = cardMappings[entity.cardId];\n\tif (hasOnDespawned(onDespawnedImpl)) {\n\t\tonDespawnedImpl.onDespawned(entity, {\n\t\t\thero: boardHero,\n\t\t\tboard: board,\n\t\t\tgameState,\n\t\t});\n\t}\n\n\tif (!!boardHero.questRewards?.length) {\n\t\tfor (const quest of boardHero.questRewards) {\n\t\t\tswitch (quest) {\n\t\t\t\tcase CardIds.VolatileVenom:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 7);\n\t\t\t\t\tentity.health = Math.max(1, entity.health - 7);\n\t\t\t\t\tentity.enchantments = entity.enchantments.filter(\n\t\t\t\t\t\t(e) => e.cardId !== CardIds.VolatileVenom_VolatileEnchantment,\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.TheSmokingGun:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 7);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FlagbearerPortrait_BG30_MagicItem_921:\n\t\t\t\t\tif (\n\t\t\t\t\t\tentity.cardId === CardIds.SkyPirateFlagbearer_BG30_119 ||\n\t\t\t\t\t\tentity.cardId === CardIds.SkyPirateFlagbearer_BG30_119_G\n\t\t\t\t\t) {\n\t\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 8);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!!boardHero.trinkets?.length) {\n\t\tfor (const trinket of boardHero.trinkets) {\n\t\t\tswitch (trinket.cardId) {\n\t\t\t\tcase CardIds.FeralTalisman_BG30_MagicItem_880:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 2);\n\t\t\t\t\tentity.health = Math.max(1, entity.health - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.FeralTalisman_FeralTalismanToken_BG30_MagicItem_880t:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 8);\n\t\t\t\t\tentity.health = Math.max(1, entity.health - 5);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.DazzlingDagger_BG32_MagicItem_934:\n\t\t\t\t\tentity.attack = Math.max(0, entity.attack - (trinket.scriptDataNum1 || 1));\n\t\t\t\t\tbreak;\n\t\t\t\tcase CardIds.HordeKeychainToken_BG30_MagicItem_843t:\n\t\t\t\t\tif (gameState.cardsData.getTavernLevel(entity.cardId) <= 3) {\n\t\t\t\t\t\tentity.attack = Math.max(0, entity.attack - 7);\n\t\t\t\t\t\tentity.health = Math.max(1, entity.health - 5);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (boardHero.globalInfo.HauntedCarapaceAttackBonus > 0) {\n\t\tentity.attack = Math.max(0, entity.attack - boardHero.globalInfo.HauntedCarapaceAttackBonus);\n\t}\n\tif (boardHero.globalInfo.HauntedCarapaceHealthBonus > 0) {\n\t\tentity.health = Math.max(1, entity.health - boardHero.globalInfo.HauntedCarapaceHealthBonus);\n\t}\n\tif (hasCorrectTribe(entity, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.UndeadAttackBonus > 0) {\n\t\t\tentity.attack = Math.max(0, entity.attack - boardHero.globalInfo.UndeadAttackBonus);\n\t\t}\n\t}\n\tif (hasCorrectTribe(entity, boardHero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\n\t\tif (boardHero.globalInfo.GoldrinnBuffAtk > 0) {\n\t\t\tentity.attack = Math.max(0, entity.attack - boardHero.globalInfo.GoldrinnBuffAtk);\n\t\t\tentity.health = Math.max(1, entity.health - boardHero.globalInfo.GoldrinnBuffHealth);\n\t\t}\n\t}\n\n\tfor (const boardEntity of board) {\n\t\tswitch (boardEntity.cardId) {\n\t\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\n\t\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(entity, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== boardEntity.entityId\n\t\t\t\t) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack - (boardEntity.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\n\t\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(entity, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== boardEntity.entityId\n\t\t\t\t) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack - (boardEntity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1),\n\t\t\t\t\t);\n\t\t\t\t\tentity.health = Math.max(\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tentity.health - (boardEntity.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Kathranatir_BG21_039:\n\t\t\t// case CardIds.Kathranatir_BG21_039_G:\n\t\t\t// \tif (\n\t\t\t// \t\thasCorrectTribe(entity, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards) &&\n\t\t\t// \t\tentity.entityId !== boardEntity.entityId\n\t\t\t// \t) {\n\t\t\t// \t\tentity.attack = Math.max(\n\t\t\t// \t\t\t0,\n\t\t\t// \t\t\tentity.attack - (boardEntity.cardId === CardIds.Kathranatir_BG21_039_G ? 2 : 1),\n\t\t\t// \t\t);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.CyborgDrake_BG25_043:\n\t\t\tcase CardIds.CyborgDrake_BG25_043_G:\n\t\t\t\tif (entity.divineShield) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack - (boardEntity.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.SoreLoser_BG27_030:\n\t\t\tcase CardIds.SoreLoser_BG27_030_G:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(entity, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== boardEntity.entityId\n\t\t\t\t) {\n\t\t\t\t\tentity.attack = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tentity.attack -\n\t\t\t\t\t\t\t(boardEntity.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tswitch (entity.cardId) {\n\t\tcase CardIds.EternalKnight_BG25_008:\n\t\tcase CardIds.EternalKnight_BG25_008_G:\n\t\t\tconst multiplierKnight = entity.cardId === CardIds.EternalKnight_BG25_008_G ? 2 : 1;\n\t\t\tconst statsBonusKnight = multiplierKnight * boardHero.globalInfo.EternalKnightsDeadThisGame;\n\t\t\tentity.attack = Math.max(0, entity.attack - eternalKnightAttack * statsBonusKnight);\n\t\t\tentity.health = Math.max(1, entity.health - eternalKnightHealth * statsBonusKnight);\n\t\t\tbreak;\n\t\tcase CardIds.EnsorcelledFungus_BG28_555:\n\t\tcase CardIds.EnsorcelledFungus_BG28_555_G:\n\t\t\tconst multiplierFungus = entity.cardId === CardIds.EnsorcelledFungus_BG28_555_G ? 2 : 1;\n\t\t\tconst statsBonusFungus = multiplierFungus * boardHero.globalInfo.TavernSpellsCastThisGame;\n\t\t\tentity.attack = Math.max(0, entity.attack - statsBonusFungus);\n\t\t\tentity.health = Math.max(1, entity.health - 2 * statsBonusFungus);\n\t\t\tbreak;\n\t\tcase CardIds.FlourishingFrostling_BG26_537:\n\t\tcase CardIds.FlourishingFrostling_BG26_537_G:\n\t\t\tconst multiplierFrostling = entity.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\n\t\t\tconst statsBonusFrostling = multiplierFrostling * boardHero.globalInfo.FrostlingBonus;\n\t\t\tentity.attack = Math.max(0, entity.attack - statsBonusFrostling);\n\t\t\tentity.health = Math.max(1, entity.health - statsBonusFrostling);\n\t\t\tbreak;\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\n\t\t\tconst multiplierAstral = entity.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\n\t\t\t// We remove 1 because the AstralAutomatonsSummonedThisGame also includes the current one\n\t\t\t// and ancestral automaton only counts \"other\" automatons\n\t\t\tconst statsBonusAstral = multiplierAstral * (boardHero.globalInfo.AstralAutomatonsSummonedThisGame - 1);\n\t\t\tentity.attack = Math.max(0, entity.attack - 3 * statsBonusAstral);\n\t\t\tentity.health = Math.max(1, entity.health - 2 * statsBonusAstral);\n\t\t\tbreak;\n\t\tcase CardIds.RotHideGnoll_BG25_013:\n\t\tcase CardIds.RotHideGnoll_BG25_013_G:\n\t\t\tconst multiplierGnoll = entity.cardId === CardIds.RotHideGnoll_BG25_013_G ? 2 : 1;\n\t\t\tconst statsBonusGnoll =\n\t\t\t\tmultiplierGnoll * gameState.sharedState.deaths.filter((e) => e.friendly === entity.friendly).length;\n\t\t\tentity.attack = Math.max(0, entity.attack - statsBonusGnoll);\n\t\t\tbreak;\n\t}\n\n\tfor (const enchantment of entity.enchantments) {\n\t\tswitch (enchantment?.cardId) {\n\t\t\tcase CardIds.TavernLighting_TavernLightsEnchantment:\n\t\t\t\tentity.attack = Math.max(0, entity.attack - enchantment.tagScriptDataNum1);\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nconst handleMinionAddedAuraEffect = (\n\tspawnedCardId: string,\n\tspawned: BoardEntity,\n\tboard: BoardEntity[],\n\tboardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n\tisActuallySpawned = true,\n): void => {\n\tswitch (spawnedCardId) {\n\t\tcase CardIds.SouthseaCaptainLegacy_BG_NEW1_027:\n\t\tcase CardIds.SouthseaCaptainLegacy_TB_BaconUps_136:\n\t\t\tboard\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\n\t\t\t\t// Other\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += spawned.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t\te.health += spawned.cardId === CardIds.SouthseaCaptainLegacy_TB_BaconUps_136 ? 2 : 1;\n\t\t\t\t});\n\t\t\tbreak;\n\t\tcase CardIds.MurlocWarleaderLegacy_BG_EX1_507:\n\t\tcase CardIds.MurlocWarleaderLegacy_TB_BaconUps_008:\n\t\t\tboard\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.MURLOC, gameState.anomalies, gameState.allCards))\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += spawned.cardId === CardIds.MurlocWarleaderLegacy_TB_BaconUps_008 ? 4 : 2;\n\t\t\t\t});\n\t\t\tbreak;\n\t\t// case CardIds.Kathranatir_BG21_039:\n\t\t// case CardIds.Kathranatir_BG21_039_G:\n\t\t// \tboard\n\t\t// \t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.DEMON, gameState.anomalies, gameState.allCards))\n\t\t// \t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t// \t\t.forEach((e) => {\n\t\t// \t\t\te.attack += spawned.cardId === CardIds.Kathranatir_BG21_039_G ? 4 : 2;\n\t\t// \t\t});\n\t\t// \tbreak;\n\t\tcase CardIds.CyborgDrake_BG25_043:\n\t\tcase CardIds.CyborgDrake_BG25_043_G:\n\t\t\tboard\n\t\t\t\t.filter((e) => e.divineShield)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += spawned.cardId === CardIds.CyborgDrake_BG25_043_G ? 12 : 6;\n\t\t\t\t});\n\t\t\tbreak;\n\n\t\tcase CardIds.SoreLoser_BG27_030:\n\t\tcase CardIds.SoreLoser_BG27_030_G:\n\t\t\tboard\n\t\t\t\t.filter((e) => hasCorrectTribe(e, boardHero, Race.UNDEAD, gameState.anomalies, gameState.allCards))\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\te.attack += (spawned.cardId === CardIds.SoreLoser_BG27_030_G ? 2 : 1) * boardHero.tavernTier;\n\t\t\t\t});\n\t\t\tbreak;\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401:\n\t\tcase CardIds.AstralAutomaton_BG_TTN_401_G:\n\t\t\t// TODO: move this somewhere else\n\t\t\tif (isActuallySpawned) {\n\t\t\t\tboardHero.globalInfo.AstralAutomatonsSummonedThisGame++;\n\t\t\t}\n\t\t\tboard\n\t\t\t\t.filter((e) => e.entityId !== spawned.entityId)\n\t\t\t\t.filter(\n\t\t\t\t\t(e) =>\n\t\t\t\t\t\te.cardId === CardIds.AstralAutomaton_BG_TTN_401 ||\n\t\t\t\t\t\te.cardId === CardIds.AstralAutomaton_BG_TTN_401_G,\n\t\t\t\t)\n\t\t\t\t.forEach((e) => {\n\t\t\t\t\tconst multiplierAstral = e.cardId === CardIds.AstralAutomaton_BG_TTN_401_G ? 2 : 1;\n\t\t\t\t\tmodifyStats(e, e, 3 * multiplierAstral, 2 * multiplierAstral, board, boardHero, gameState, false);\n\t\t\t\t});\n\t\t\tbreak;\n\t\tcase CardIds.DrBoomsMonster_BG31_176:\n\t\tcase CardIds.DrBoomsMonster_BG31_176_G:\n\t\t\tconst multiplierDrBoom = spawned.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 2 : 1;\n\t\t\tmodifyStats(\n\t\t\t\tspawned,\n\t\t\t\tspawned,\n\t\t\t\t2 * boardHero.globalInfo.MagnetizedThisGame * multiplierDrBoom,\n\t\t\t\t2 * boardHero.globalInfo.MagnetizedThisGame * multiplierDrBoom,\n\t\t\t\tboard,\n\t\t\t\tboardHero,\n\t\t\t\tgameState,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbreak;\n\t}\n};\n\nexport const handleAfterSpawnEffects = (\n\tboard: BoardEntity[],\n\thero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tallSpawned: readonly BoardEntity[],\n\tgameState: FullGameState,\n): void => {\n\tfor (const spawned of allSpawned) {\n\t\thandleAfterSpawnEffect(board, hero, otherBoard, otherHero, spawned, gameState);\n\t}\n};\n\nexport const onMinionSummoned = (hero: BgsPlayerEntity, board: BoardEntity[], gameState: FullGameState): void => {\n\tconst quests = hero.questEntities ?? [];\n\tif (!quests.length) {\n\t\treturn;\n\t}\n\n\tfor (const quest of quests) {\n\t\tswitch (quest.CardId) {\n\t\t\tcase CardIds.AssembleALineup:\n\t\t\t\tonQuestProgressUpdated(hero, quest, board, gameState);\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nconst handleAfterSpawnEffect = (\n\tboard: BoardEntity[],\n\thero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherHero: BgsPlayerEntity,\n\tspawned: BoardEntity,\n\tgameState: FullGameState,\n): void => {\n\t// So that spawns don't mess up the loop\n\tconst initialBoard = [...board];\n\n\tfor (const trinket of hero.trinkets ?? []) {\n\t\tconst onAfterSpawnedImpl = cardMappings[trinket.cardId];\n\t\tif (hasAfterOtherSpawned(onAfterSpawnedImpl)) {\n\t\t\tonAfterSpawnedImpl.afterOtherSpawned(trinket, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: hero,\n\t\t\t\tboard: board,\n\t\t\t\totherHero: otherHero,\n\t\t\t\totherBoard: otherBoard,\n\t\t\t\tgameState,\n\t\t\t\tapplySelfAuras: false,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const entity of initialBoard) {\n\t\tif (entity.entityId === spawned.entityId) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst onAfterSpawnedImpl = cardMappings[entity.cardId];\n\t\tif (hasAfterOtherSpawned(onAfterSpawnedImpl)) {\n\t\t\tonAfterSpawnedImpl.afterOtherSpawned(entity, {\n\t\t\t\tspawned: spawned,\n\t\t\t\thero: hero,\n\t\t\t\tboard: board,\n\t\t\t\totherHero: otherHero,\n\t\t\t\totherBoard: otherBoard,\n\t\t\t\tgameState,\n\t\t\t\tapplySelfAuras: false,\n\t\t\t});\n\t\t}\n\n\t\tswitch (entity.cardId) {\n\t\t\tcase CardIds.XyloBones_BG26_172:\n\t\t\tcase CardIds.XyloBones_BG26_172_G:\n\t\t\t\tif (entity.entityId !== spawned.entityId) {\n\t\t\t\t\tconst xylobonesBuff = entity.cardId === CardIds.XyloBones_BG26_172_G ? 4 : 2;\n\t\t\t\t\tmodifyStats(entity, entity, 0, xylobonesBuff, board, hero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.OctosariWrapGod_BG26_804:\n\t\t\tcase CardIds.OctosariWrapGod_BG26_804_G:\n\t\t\t\tif (entity.entityId !== spawned.entityId) {\n\t\t\t\t\tconst octoStats = entity.cardId === CardIds.OctosariWrapGod_BG26_804_G ? 4 : 2;\n\t\t\t\t\tentity.scriptDataNum1 = (entity.scriptDataNum1 ?? 0) + octoStats;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.ObserverOfMyths_BG_TTN_078:\n\t\t\t// case CardIds.ObserverOfMyths_BG_TTN_078_G:\n\t\t\t// \tif (spawned.attack > entity.attack) {\n\t\t\t// \t\tconst observerBuff = entity.cardId === CardIds.ObserverOfMyths_BG_TTN_078_G ? 2 : 1;\n\t\t\t// \t\taddStatsToBoard(entity, board, hero, observerBuff, 0, gameState);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy:\n\t\t\tcase CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy_G:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, hero, Race.DRAGON, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tconst valithriaBuff =\n\t\t\t\t\t\tentity.cardId === CardIds.ValithriaDreamwalker_TB_BaconShop_HERO_53_Buddy_G ? 3 : 2;\n\t\t\t\t\tmodifyStats(entity, entity, valithriaBuff, valithriaBuff, board, hero, gameState);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, spawned, board, null, null);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// Putricide-only\n\t\t\tcase CardIds.ArmsDealer_BG26_RLK_824:\n\t\t\t\tif (\n\t\t\t\t\thasCorrectTribe(spawned, hero, Race.UNDEAD, gameState.anomalies, gameState.allCards) &&\n\t\t\t\t\tentity.entityId !== spawned.entityId\n\t\t\t\t) {\n\t\t\t\t\tmodifyStats(spawned, spawned, 1, 0, board, hero, gameState, false);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(entity, entity, board, null, null);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfor (const trinket of hero.trinkets ?? []) {\n\t\tconst resolvedImpl = cardMappings[trinket.cardId];\n\t\tif (hasAfterOtherSpawned(resolvedImpl)) {\n\t\t\tresolvedImpl.afterOtherSpawned(trinket, {\n\t\t\t\tspawned,\n\t\t\t\thero,\n\t\t\t\tboard,\n\t\t\t\totherHero,\n\t\t\t\totherBoard,\n\t\t\t\tgameState,\n\t\t\t\tapplySelfAuras: false,\n\t\t\t});\n\t\t}\n\t}\n};\n\nexport interface OnSpawnInput {\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\tgameState: FullGameState;\n}\nexport interface OnOtherSpawnInput {\n\tspawned: BoardEntity;\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\totherHero: BgsPlayerEntity;\n\totherBoard: BoardEntity[];\n\tgameState: FullGameState;\n\tapplySelfAuras: boolean;\n}\nexport interface OnOtherSpawnAuraInput {\n\tspawned: BoardEntity;\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\tgameState: FullGameState;\n}\nexport interface OnDespawnInput {\n\thero: BgsPlayerEntity;\n\tboard: BoardEntity[];\n\tgameState: FullGameState;\n}\n\n/** Trinket reaction when a minion is placed on the friendly board (`handleAddedMinionAuraEffect`, after hero power / quest hooks). */\nexport interface OnFriendlyMinionSummonedTrinketInput {\n\tspawned: BoardEntity;\n\tboard: BoardEntity[];\n\thero: BgsPlayerEntity;\n\totherBoard: BoardEntity[];\n\totherHero: BgsPlayerEntity;\n\tgameState: FullGameState;\n}\n"]}
@@ -38,7 +38,6 @@ const evil_twin_1 = require("../../cards/impl/quest-reward/evil-twin");
38
38
  const staff_of_origination_1 = require("../../cards/impl/quest-reward/staff-of-origination");
39
39
  const stolen_gold_1 = require("../../cards/impl/quest-reward/stolen-gold");
40
40
  const fleeting_vigor_1 = require("../../cards/impl/spell/fleeting-vigor");
41
- const automaton_portrait_1 = require("../../cards/impl/trinket/automaton-portrait");
42
41
  const bronze_timepiece_1 = require("../../cards/impl/trinket/bronze-timepiece");
43
42
  const emerald_dreamcatcher_1 = require("../../cards/impl/trinket/emerald-dreamcatcher");
44
43
  const eternal_portrait_1 = require("../../cards/impl/trinket/eternal-portrait");
@@ -122,8 +121,6 @@ const getStartOfCombatAction = (cardId) => {
122
121
  return rusty_trident_1.RustyTrident;
123
122
  case "BG30_MagicItem_411":
124
123
  return hoggy_bank_1.HoggyBank;
125
- case "BG30_MagicItem_303":
126
- return automaton_portrait_1.AutomatonPortrait;
127
124
  case "BG30_MagicItem_407":
128
125
  return ship_in_a_bottle_1.ShipInABottle;
129
126
  case "BG30_MagicItem_301":
@@ -1 +1 @@
1
- {"version":3,"file":"soc-action-processor.js","sourceRoot":"","sources":["../../../src/simulation/start-of-combat/soc-action-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\nimport { hasStartOfCombat, StartOfCombatCard, StartOfCombatTiming } from '../../cards/card.interface';\r\nimport { cardMappings } from '../../cards/impl/_card-mappings';\r\nimport { AnomalousTwin } from '../../cards/impl/anomaly/anomalous-twin';\r\nimport { BlessedOrBlighted } from '../../cards/impl/anomaly/blessed-or-blighted';\r\nimport { BoonOfBeetles } from '../../cards/impl/bg-spell/boon-of-beetles';\r\nimport { ToxicTumbleweed } from '../../cards/impl/bg-spell/toxic-tumbleweed';\r\nimport { UpperHand } from '../../cards/impl/bg-spell/upper-hand';\r\nimport { AimHigh } from '../../cards/impl/hero-power/aim-high';\r\nimport { AimLeft } from '../../cards/impl/hero-power/aim-left';\r\nimport { AimLow } from '../../cards/impl/hero-power/aim-low';\r\nimport { AimRight } from '../../cards/impl/hero-power/aim-right';\r\nimport { AllWillBurn } from '../../cards/impl/hero-power/all-will-burn';\r\nimport { EarthInvocation } from '../../cards/impl/hero-power/earth-invocation';\r\nimport { EmbraceYourRage } from '../../cards/impl/hero-power/embrace-your-rage';\r\nimport { FireInvocation } from '../../cards/impl/hero-power/fire-invocation';\r\nimport { LightningInvocation } from '../../cards/impl/hero-power/lightning-invocation';\r\nimport { RapidReanimation } from '../../cards/impl/hero-power/rapid-reanimation';\r\nimport { RebornRites } from '../../cards/impl/hero-power/reborn-rites';\r\nimport { Tentacular } from '../../cards/impl/hero-power/tentacular';\r\nimport { WaterInvocation } from '../../cards/impl/hero-power/water-invocation';\r\nimport { WaxWarband } from '../../cards/impl/hero-power/wax-warband';\r\nimport { AmberGuardian } from '../../cards/impl/minion/amber-guardian';\r\nimport { AudaciousAnchor } from '../../cards/impl/minion/audacious-anchor';\r\nimport { CarbonicCopy } from '../../cards/impl/minion/carbonic-copy';\r\nimport { CorruptedMyrmidon } from '../../cards/impl/minion/corrupted-myrmidon';\r\nimport { ElderTaggawag } from '../../cards/impl/minion/elder-taggawag';\r\nimport { HawkstriderHerald } from '../../cards/impl/minion/hawkstrider-herald';\r\nimport { MantidQueen } from '../../cards/impl/minion/mantid-queen';\r\nimport { Sandy } from '../../cards/impl/minion/sandy';\r\nimport { SunScreener } from '../../cards/impl/minion/sun-screener';\r\nimport { TheUninvitedGuest } from '../../cards/impl/minion/the-uninvited-guest';\r\nimport { ThousandthPaperDrake } from '../../cards/impl/minion/thousandth-paper-drake';\r\nimport { YulonFortuneGranter } from '../../cards/impl/minion/yulon-fortune-granter';\r\nimport { EvilTwin } from '../../cards/impl/quest-reward/evil-twin';\r\nimport { StaffOfOrigination } from '../../cards/impl/quest-reward/staff-of-origination';\r\nimport { StolenGold } from '../../cards/impl/quest-reward/stolen-gold';\r\nimport { FleetingVigor } from '../../cards/impl/spell/fleeting-vigor';\r\nimport { AutomatonPortrait } from '../../cards/impl/trinket/automaton-portrait';\r\nimport { BronzeTimepiece } from '../../cards/impl/trinket/bronze-timepiece';\r\nimport { EmeraldDreamcatcher } from '../../cards/impl/trinket/emerald-dreamcatcher';\r\nimport { EternalPortrait } from '../../cards/impl/trinket/eternal-portrait';\r\nimport { FishySticker } from '../../cards/impl/trinket/fishy-sticker';\r\nimport { HoggyBank } from '../../cards/impl/trinket/hoggy-bank';\r\nimport { HollyMallet } from '../../cards/impl/trinket/holly-mallet';\r\nimport { IronforgeAnvil } from '../../cards/impl/trinket/ironforge-anvil';\r\nimport { JarredFrostling } from '../../cards/impl/trinket/jarred-frostling';\r\nimport { KarazhanChessSet } from '../../cards/impl/trinket/karazhan-chess-set';\r\nimport { RivendarePortrait } from '../../cards/impl/trinket/rivendare-portrait';\r\nimport { RustyTrident } from '../../cards/impl/trinket/rusty-trident';\r\nimport { ShipInABottle } from '../../cards/impl/trinket/ship-in-a-bottle';\r\nimport { SummoningSphere } from '../../cards/impl/trinket/summoning-sphere';\r\nimport { TinyfinOnesie } from '../../cards/impl/trinket/tinyfin-onesie';\r\nimport { TrainingCertificate } from '../../cards/impl/trinket/training-certificate';\r\nimport { ValorousMedallion } from '../../cards/impl/trinket/valorous-medaillion';\r\nimport { CardIds } from '../../services/card-ids';\r\nimport { processMinionDeath } from '../attack';\r\nimport { handleSummonsWhenSpace } from '../summon-when-space';\r\nimport { SoCInput } from './start-of-combat-input';\r\n\r\nexport const performStartOfCombatAction = (\r\n\tcardId: string,\r\n\tentity: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\tinput: SoCInput,\r\n\tprocessDeaths: boolean,\r\n\ttiming?: StartOfCombatTiming,\r\n): boolean => {\r\n\tlet hasTriggered:\r\n\t\t| boolean\r\n\t\t| {\r\n\t\t\t\thasTriggered: boolean;\r\n\t\t\t\tshouldRecomputeCurrentAttacker: boolean;\r\n\t\t } = false;\r\n\tconst promoPortraitCount = getPromoPortraitCount(input.playerEntity);\r\n\tfor (let i = promoPortraitCount; i >= 0; i--) {\r\n\t\tconst card = getStartOfCombatAction(cardId);\r\n\t\tif (!!timing && card?.startOfCombatTiming !== timing) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst action = card?.startOfCombat;\r\n\t\tif (!!action) {\r\n\t\t\thasTriggered = action(entity, input);\r\n\t\t\t// Always proc it (for promo portrait), and use the hasTriggered for finer control\r\n\t\t\tonStartOfCombatTriggered(i, cardId, input.playerEntity);\r\n\t\t\tif (!!hasTriggered) {\r\n\t\t\t\tif (processDeaths) {\r\n\t\t\t\t\tprocessMinionDeath(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\t// See https://replays.firestoneapp.com/?reviewId=2eacbbc2-7dfa-487b-951d-0fa6d31d175e&turn=25&action=1\r\n\t\t\t\t\t\t// It looks like it doesn't look for the \"summons when space\" between Stitched Salvager's SoC and\r\n\t\t\t\t\t\t// Hawkstrider Herald SoC\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\t// https://replays.firestoneapp.com/?reviewId=6293597f-28fa-472e-ba8c-35f6b7deef58&turn=31&action=6\r\n\t\t\t\t\t// The first RapidReanimation triggers, resummons the target, then the second RapidReanimation triggers\r\n\t\t\t\t\t// So we need to process the resummon as soon as the minion dies, and before processing the second RapidReanimation\r\n\t\t\t\t\tconst shouldRecomputeCurrentAttacker = handleSummonsWhenSpace(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (typeof hasTriggered === 'boolean') {\r\n\t\t\t\t\t\thasTriggered = hasTriggered || shouldRecomputeCurrentAttacker;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\thasTriggered.shouldRecomputeCurrentAttacker =\r\n\t\t\t\t\t\t\thasTriggered.shouldRecomputeCurrentAttacker || shouldRecomputeCurrentAttacker;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof hasTriggered !== 'boolean' && hasTriggered.shouldRecomputeCurrentAttacker) {\r\n\t\t\t\t\tinput.currentAttacker =\r\n\t\t\t\t\t\tinput.playerBoard.length > input.opponentBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 0\r\n\t\t\t\t\t\t\t\t: 1\r\n\t\t\t\t\t\t\t: input.opponentBoard.length > input.playerBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 1\r\n\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t\t: Math.round(Math.random());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn !!hasTriggered;\r\n};\r\n\r\n// TODO: load all cards on start, then do some programmatic mapping\r\nconst getStartOfCombatAction = (cardId: string): StartOfCombatCard => {\r\n\tswitch (cardId) {\r\n\t\t// Quest rewards\r\n\t\tcase CardIds.EvilTwin:\r\n\t\t\treturn EvilTwin;\r\n\t\tcase CardIds.StaffOfOrigination_BG24_Reward_312:\r\n\t\t\treturn StaffOfOrigination;\r\n\t\tcase CardIds.StolenGold:\r\n\t\t\treturn StolenGold;\r\n\r\n\t\t// Trinkets\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\t\treturn HollyMallet;\r\n\t\tcase CardIds.TrainingCertificate_BG30_MagicItem_962:\r\n\t\t\treturn TrainingCertificate;\r\n\t\tcase CardIds.ValorousMedallion_BG30_MagicItem_970:\r\n\t\tcase CardIds.ValorousMedallion_ValorousMedallionToken_BG30_MagicItem_970t:\r\n\t\t\treturn ValorousMedallion;\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\t\treturn EmeraldDreamcatcher;\r\n\t\tcase CardIds.JarredFrostling_BG30_MagicItem_952:\r\n\t\t\treturn JarredFrostling;\r\n\t\tcase CardIds.RustyTrident_BG30_MagicItem_917:\r\n\t\t\treturn RustyTrident;\r\n\t\tcase CardIds.HoggyBank_BG30_MagicItem_411:\r\n\t\t\treturn HoggyBank;\r\n\t\tcase CardIds.AutomatonPortrait_BG30_MagicItem_303:\r\n\t\t\treturn AutomatonPortrait;\r\n\t\tcase CardIds.ShipInABottle_BG30_MagicItem_407:\r\n\t\t\treturn ShipInABottle;\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\t\treturn EternalPortrait;\r\n\t\tcase CardIds.RivendarePortrait_BG30_MagicItem_310:\r\n\t\t\treturn RivendarePortrait;\r\n\t\tcase CardIds.TinyfinOnesie_BG30_MagicItem_441:\r\n\t\t\treturn TinyfinOnesie;\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\t\treturn BronzeTimepiece;\r\n\t\tcase CardIds.IronforgeAnvil_BG30_MagicItem_403:\r\n\t\t\treturn IronforgeAnvil;\r\n\t\tcase CardIds.KarazhanChessSet_BG30_MagicItem_972:\r\n\t\t\treturn KarazhanChessSet;\r\n\t\t// case CardIds.FishySticker_BG30_MagicItem_821:\r\n\t\tcase CardIds.FishySticker_FishyStickerToken_BG30_MagicItem_821t2:\r\n\t\t\treturn FishySticker;\r\n\t\tcase CardIds.SummoningSphere_BGDUO_MagicItem_003:\r\n\t\t\treturn SummoningSphere;\r\n\r\n\t\t// Hero powers\r\n\t\tcase CardIds.EarthInvocationToken:\r\n\t\t\treturn EarthInvocation;\r\n\t\tcase CardIds.WaterInvocationToken:\r\n\t\t\treturn WaterInvocation;\r\n\t\tcase CardIds.FireInvocationToken:\r\n\t\t\treturn FireInvocation;\r\n\t\tcase CardIds.LightningInvocationToken:\r\n\t\t\treturn LightningInvocation;\r\n\t\tcase CardIds.AllWillBurn:\r\n\t\t\treturn AllWillBurn;\r\n\t\tcase CardIds.EmbraceYourRage:\r\n\t\t\treturn EmbraceYourRage;\r\n\t\tcase CardIds.Ozumat_Tentacular:\r\n\t\t\treturn Tentacular;\r\n\t\tcase CardIds.RebornRites:\r\n\t\t\treturn RebornRites;\r\n\t\tcase CardIds.TeronGorefiend_RapidReanimation:\r\n\t\t\treturn RapidReanimation;\r\n\t\tcase CardIds.WaxWarband:\r\n\t\t\treturn WaxWarband;\r\n\t\tcase CardIds.AimLeftToken:\r\n\t\t\treturn AimLeft;\r\n\t\tcase CardIds.AimRightToken:\r\n\t\t\treturn AimRight;\r\n\t\tcase CardIds.AimLowToken:\r\n\t\t\treturn AimLow;\r\n\t\tcase CardIds.AimHighToken:\r\n\t\t\treturn AimHigh;\r\n\r\n\t\t// Anomalies\r\n\t\tcase CardIds.BlessedOrBlighted_BG27_Anomaly_726:\r\n\t\t\treturn BlessedOrBlighted;\r\n\t\tcase CardIds.AnomalousTwin_BG27_Anomaly_560:\r\n\t\t\treturn AnomalousTwin;\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn BoonOfBeetles;\r\n\r\n\t\t// Spells\r\n\t\tcase CardIds.ToxicTumbleweed_BG28_641:\r\n\t\t\treturn ToxicTumbleweed;\r\n\t\tcase CardIds.UpperHand_BG28_573:\r\n\t\t\treturn UpperHand;\r\n\t\tcase CardIds.FleetingVigor_BG28_519:\r\n\t\t\treturn FleetingVigor;\r\n\r\n\t\t// Minions\r\n\t\tcase CardIds.AmberGuardian_BG24_500:\r\n\t\tcase CardIds.AmberGuardian_BG24_500_G:\r\n\t\t\treturn AmberGuardian;\r\n\t\t// case CardIds.SanctumRester_BG26_356:\r\n\t\t// case CardIds.SanctumRester_BG26_356_G:\r\n\t\t// \treturn SanctumRester;\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012:\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012_G:\r\n\t\t\treturn CorruptedMyrmidon;\r\n\t\tcase CardIds.MantidQueen_BG22_402:\r\n\t\tcase CardIds.MantidQueen_BG22_402_G:\r\n\t\t\treturn MantidQueen;\r\n\t\tcase CardIds.CarbonicCopy_BG27_503:\r\n\t\tcase CardIds.CarbonicCopy_BG27_503_G:\r\n\t\t\treturn CarbonicCopy;\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079:\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079_G:\r\n\t\t\treturn HawkstriderHerald;\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904:\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904_G:\r\n\t\t\treturn AudaciousAnchor;\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810:\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810_G:\r\n\t\t\treturn ThousandthPaperDrake;\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811:\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811_G:\r\n\t\t\treturn YulonFortuneGranter;\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872:\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872_G:\r\n\t\t// \treturn HoardingHatespawn;\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875:\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875_G:\r\n\t\t\treturn TheUninvitedGuest;\r\n\t\tcase CardIds.Sandy_BGDUO_125:\r\n\t\tcase CardIds.Sandy_BGDUO_125_G:\r\n\t\t\treturn Sandy;\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy:\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy_G:\r\n\t\t\treturn ElderTaggawag;\r\n\t\tcase CardIds.SunScreener_BG30_101:\r\n\t\tcase CardIds.SunScreener_BG30_101_G:\r\n\t\t\treturn SunScreener;\r\n\r\n\t\tdefault:\r\n\t\t\tconst candidate = cardMappings[cardId];\r\n\t\t\tif (hasStartOfCombat(candidate)) {\r\n\t\t\t\treturn candidate;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t}\r\n};\r\n\r\nconst onStartOfCombatTriggered = (iteration: number, triggeredCardId: string, playerEntity: BgsPlayerEntity) => {\r\n\t// Some procs are iso-functional, and don't update the promo portrait\r\n\tconst promoPortraits = playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t);\r\n\tif (promoPortraits.length === 0 || iteration === 0 || iteration > promoPortraits.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tswitch (triggeredCardId) {\r\n\t\tcase CardIds.StolenGold:\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\tcase CardIds.SwattingInsects:\r\n\t\tcase CardIds.RebornRites:\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tconst promoPortrait = promoPortraits[iteration - 1];\r\n\tpromoPortrait.scriptDataNum1--;\r\n};\r\n\r\nconst getPromoPortraitCount = (playerEntity: BgsPlayerEntity) => {\r\n\treturn playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n};\r\n"]}
1
+ {"version":3,"file":"soc-action-processor.js","sourceRoot":"","sources":["../../../src/simulation/start-of-combat/soc-action-processor.ts"],"names":[],"mappings":";;;AAGA,+DAAsG;AACtG,oEAA+D;AAC/D,4EAAwE;AACxE,sFAAiF;AACjF,+EAA0E;AAC1E,iFAA6E;AAC7E,qEAAiE;AACjE,mEAA+D;AAC/D,mEAA+D;AAC/D,iEAA6D;AAC7D,qEAAiE;AACjE,6EAAwE;AACxE,mFAA+E;AAC/E,qFAAgF;AAChF,iFAA6E;AAC7E,2FAAuF;AACvF,qFAAiF;AACjF,2EAAuE;AACvE,uEAAoE;AACpE,mFAA+E;AAC/E,yEAAqE;AACrE,2EAAuE;AACvE,+EAA2E;AAC3E,yEAAqE;AACrE,mFAA+E;AAC/E,2EAAuE;AACvE,mFAA+E;AAC/E,uEAAmE;AACnE,yDAAsD;AACtD,uEAAmE;AACnE,qFAAgF;AAChF,2FAAsF;AACtF,yFAAoF;AACpF,uEAAmE;AACnE,6FAAwF;AACxF,2EAAuE;AACvE,0EAAsE;AACtE,gFAA4E;AAC5E,wFAAoF;AACpF,gFAA4E;AAC5E,0EAAsE;AACtE,oEAAgE;AAChE,wEAAoE;AACpE,8EAA0E;AAC1E,gFAA4E;AAC5E,oFAA+E;AAC/E,oFAAgF;AAChF,0EAAsE;AACtE,gFAA0E;AAC1E,gFAA4E;AAC5E,4EAAwE;AACxE,wFAAoF;AACpF,sFAAiF;AAEjF,sCAA+C;AAC/C,4DAA8D;AAGvD,MAAM,0BAA0B,GAAG,CACzC,MAAc,EACd,MAAkE,EAClE,KAAe,EACf,aAAsB,EACtB,MAA4B,EAClB,EAAE;IACZ,IAAI,YAAY,GAKT,KAAK,CAAC;IACb,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACrE,KAAK,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,MAAK,MAAM,EAAE;YACrD,OAAO,KAAK,CAAC;SACb;QAED,MAAM,MAAM,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;QACnC,IAAI,CAAC,CAAC,MAAM,EAAE;YACb,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAErC,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YACxD,IAAI,CAAC,CAAC,YAAY,EAAE;gBACnB,IAAI,aAAa,EAAE;oBAClB,IAAA,2BAAkB,EACjB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,EAIf,IAAI,CACJ,CAAC;oBAIF,MAAM,8BAA8B,GAAG,IAAA,0CAAsB,EAC5D,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;oBACF,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE;wBACtC,YAAY,GAAG,YAAY,IAAI,8BAA8B,CAAC;qBAC9D;yBAAM;wBACN,YAAY,CAAC,8BAA8B;4BAC1C,YAAY,CAAC,8BAA8B,IAAI,8BAA8B,CAAC;qBAC/E;iBACD;gBACD,IAAI,OAAO,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,8BAA8B,EAAE;oBACrF,KAAK,CAAC,eAAe;wBACpB,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM;4BACpD,CAAC,CAAC,KAAK,CAAC,gBAAgB;gCACvB,CAAC,CAAC,CAAC;gCACH,CAAC,CAAC,CAAC;4BACJ,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM;gCACvD,CAAC,CAAC,KAAK,CAAC,gBAAgB;oCACvB,CAAC,CAAC,CAAC;oCACH,CAAC,CAAC,CAAC;gCACJ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC9B;aACD;SACD;KACD;IACD,OAAO,CAAC,CAAC,YAAY,CAAC;AACvB,CAAC,CAAC;AAvEW,QAAA,0BAA0B,8BAuErC;AAGF,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAqB,EAAE;IACpE,QAAQ,MAAM,EAAE;QAEf;YACC,OAAO,oBAAQ,CAAC;QACjB;YACC,OAAO,yCAAkB,CAAC;QAC3B;YACC,OAAO,wBAAU,CAAC;QAGnB;YACC,OAAO,0BAAW,CAAC;QACpB;YACC,OAAO,0CAAmB,CAAC;QAC5B,0BAAkD;QAClD;YACC,OAAO,uCAAiB,CAAC;QAC1B;YACC,OAAO,0CAAmB,CAAC;QAC5B;YACC,OAAO,kCAAe,CAAC;QACxB;YACC,OAAO,4BAAY,CAAC;QACrB;YACC,OAAO,sBAAS,CAAC;QAClB;YACC,OAAO,gCAAa,CAAC;QACtB;YACC,OAAO,kCAAe,CAAC;QACxB;YACC,OAAO,sCAAiB,CAAC;QAC1B;YACC,OAAO,8BAAa,CAAC;QACtB;YACC,OAAO,kCAAe,CAAC;QACxB;YACC,OAAO,gCAAc,CAAC;QACvB;YACC,OAAO,qCAAgB,CAAC;QAEzB;YACC,OAAO,4BAAY,CAAC;QACrB;YACC,OAAO,kCAAe,CAAC;QAGxB;YACC,OAAO,kCAAe,CAAC;QACxB;YACC,OAAO,kCAAe,CAAC;QACxB;YACC,OAAO,gCAAc,CAAC;QACvB;YACC,OAAO,0CAAmB,CAAC;QAC5B;YACC,OAAO,2BAAW,CAAC;QACpB;YACC,OAAO,mCAAe,CAAC;QACxB;YACC,OAAO,uBAAU,CAAC;QACnB;YACC,OAAO,0BAAW,CAAC;QACpB;YACC,OAAO,oCAAgB,CAAC;QACzB;YACC,OAAO,wBAAU,CAAC;QACnB;YACC,OAAO,kBAAO,CAAC;QAChB;YACC,OAAO,oBAAQ,CAAC;QACjB;YACC,OAAO,gBAAM,CAAC;QACf;YACC,OAAO,kBAAO,CAAC;QAGhB;YACC,OAAO,uCAAiB,CAAC;QAC1B;YACC,OAAO,8BAAa,CAAC;QACtB;YACC,OAAO,+BAAa,CAAC;QAGtB;YACC,OAAO,kCAAe,CAAC;QACxB;YACC,OAAO,sBAAS,CAAC;QAClB;YACC,OAAO,8BAAa,CAAC;QAGtB,gBAAoC;QACpC;YACC,OAAO,8BAAa,CAAC;QAItB,gBAAwC;QACxC;YACC,OAAO,sCAAiB,CAAC;QAC1B,gBAAkC;QAClC;YACC,OAAO,0BAAW,CAAC;QACpB,gBAAmC;QACnC;YACC,OAAO,4BAAY,CAAC;QACrB,gBAAwC;QACxC;YACC,OAAO,sCAAiB,CAAC;QAC1B,gBAAsC;QACtC;YACC,OAAO,kCAAe,CAAC;QACxB,gBAA2C;QAC3C;YACC,OAAO,6CAAoB,CAAC;QAC7B,gBAA0C;QAC1C;YACC,OAAO,2CAAmB,CAAC;QAI5B,gBAAwC;QACxC;YACC,OAAO,uCAAiB,CAAC;QAC1B,iBAA6B;QAC7B;YACC,OAAO,aAAK,CAAC;QACd,kCAAsD;QACtD;YACC,OAAO,8BAAa,CAAC;QACtB,gBAAkC;QAClC;YACC,OAAO,0BAAW,CAAC;QAEpB;YACC,MAAM,SAAS,GAAG,6BAAY,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,IAAA,iCAAgB,EAAC,SAAS,CAAC,EAAE;gBAChC,OAAO,SAAS,CAAC;aACjB;YACD,OAAO,IAAI,CAAC;KACb;AACF,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,SAAiB,EAAE,eAAuB,EAAE,YAA6B,EAAE,EAAE;IAE9G,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAA6C,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,CACpF,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE;QACxF,OAAO;KACP;IAED,QAAQ,eAAe,EAAE;QACxB,uBAAwB;QACxB,0BAA2C;QAC3C,0BAAoD;QACpD,0BAAgD;QAChD,0BAAgD;QAChD,2BAA6B;QAC7B,2BAAyB;QACzB;YACC,OAAO;KACR;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACpD,aAAa,CAAC,cAAc,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,YAA6B,EAAE,EAAE;IAC/D,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAA6C,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,CACpF,CAAC,MAAM,CAAC;AACV,CAAC,CAAC","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\nimport { hasStartOfCombat, StartOfCombatCard, StartOfCombatTiming } from '../../cards/card.interface';\r\nimport { cardMappings } from '../../cards/impl/_card-mappings';\r\nimport { AnomalousTwin } from '../../cards/impl/anomaly/anomalous-twin';\r\nimport { BlessedOrBlighted } from '../../cards/impl/anomaly/blessed-or-blighted';\r\nimport { BoonOfBeetles } from '../../cards/impl/bg-spell/boon-of-beetles';\r\nimport { ToxicTumbleweed } from '../../cards/impl/bg-spell/toxic-tumbleweed';\r\nimport { UpperHand } from '../../cards/impl/bg-spell/upper-hand';\r\nimport { AimHigh } from '../../cards/impl/hero-power/aim-high';\r\nimport { AimLeft } from '../../cards/impl/hero-power/aim-left';\r\nimport { AimLow } from '../../cards/impl/hero-power/aim-low';\r\nimport { AimRight } from '../../cards/impl/hero-power/aim-right';\r\nimport { AllWillBurn } from '../../cards/impl/hero-power/all-will-burn';\r\nimport { EarthInvocation } from '../../cards/impl/hero-power/earth-invocation';\r\nimport { EmbraceYourRage } from '../../cards/impl/hero-power/embrace-your-rage';\r\nimport { FireInvocation } from '../../cards/impl/hero-power/fire-invocation';\r\nimport { LightningInvocation } from '../../cards/impl/hero-power/lightning-invocation';\r\nimport { RapidReanimation } from '../../cards/impl/hero-power/rapid-reanimation';\r\nimport { RebornRites } from '../../cards/impl/hero-power/reborn-rites';\r\nimport { Tentacular } from '../../cards/impl/hero-power/tentacular';\r\nimport { WaterInvocation } from '../../cards/impl/hero-power/water-invocation';\r\nimport { WaxWarband } from '../../cards/impl/hero-power/wax-warband';\r\nimport { AmberGuardian } from '../../cards/impl/minion/amber-guardian';\r\nimport { AudaciousAnchor } from '../../cards/impl/minion/audacious-anchor';\r\nimport { CarbonicCopy } from '../../cards/impl/minion/carbonic-copy';\r\nimport { CorruptedMyrmidon } from '../../cards/impl/minion/corrupted-myrmidon';\r\nimport { ElderTaggawag } from '../../cards/impl/minion/elder-taggawag';\r\nimport { HawkstriderHerald } from '../../cards/impl/minion/hawkstrider-herald';\r\nimport { MantidQueen } from '../../cards/impl/minion/mantid-queen';\r\nimport { Sandy } from '../../cards/impl/minion/sandy';\r\nimport { SunScreener } from '../../cards/impl/minion/sun-screener';\r\nimport { TheUninvitedGuest } from '../../cards/impl/minion/the-uninvited-guest';\r\nimport { ThousandthPaperDrake } from '../../cards/impl/minion/thousandth-paper-drake';\r\nimport { YulonFortuneGranter } from '../../cards/impl/minion/yulon-fortune-granter';\r\nimport { EvilTwin } from '../../cards/impl/quest-reward/evil-twin';\r\nimport { StaffOfOrigination } from '../../cards/impl/quest-reward/staff-of-origination';\r\nimport { StolenGold } from '../../cards/impl/quest-reward/stolen-gold';\r\nimport { FleetingVigor } from '../../cards/impl/spell/fleeting-vigor';\r\nimport { BronzeTimepiece } from '../../cards/impl/trinket/bronze-timepiece';\r\nimport { EmeraldDreamcatcher } from '../../cards/impl/trinket/emerald-dreamcatcher';\r\nimport { EternalPortrait } from '../../cards/impl/trinket/eternal-portrait';\r\nimport { FishySticker } from '../../cards/impl/trinket/fishy-sticker';\r\nimport { HoggyBank } from '../../cards/impl/trinket/hoggy-bank';\r\nimport { HollyMallet } from '../../cards/impl/trinket/holly-mallet';\r\nimport { IronforgeAnvil } from '../../cards/impl/trinket/ironforge-anvil';\r\nimport { JarredFrostling } from '../../cards/impl/trinket/jarred-frostling';\r\nimport { KarazhanChessSet } from '../../cards/impl/trinket/karazhan-chess-set';\r\nimport { RivendarePortrait } from '../../cards/impl/trinket/rivendare-portrait';\r\nimport { RustyTrident } from '../../cards/impl/trinket/rusty-trident';\r\nimport { ShipInABottle } from '../../cards/impl/trinket/ship-in-a-bottle';\r\nimport { SummoningSphere } from '../../cards/impl/trinket/summoning-sphere';\r\nimport { TinyfinOnesie } from '../../cards/impl/trinket/tinyfin-onesie';\r\nimport { TrainingCertificate } from '../../cards/impl/trinket/training-certificate';\r\nimport { ValorousMedallion } from '../../cards/impl/trinket/valorous-medaillion';\r\nimport { CardIds } from '../../services/card-ids';\r\nimport { processMinionDeath } from '../attack';\r\nimport { handleSummonsWhenSpace } from '../summon-when-space';\r\nimport { SoCInput } from './start-of-combat-input';\r\n\r\nexport const performStartOfCombatAction = (\r\n\tcardId: string,\r\n\tentity: BoardEntity | BoardTrinket | BgsPlayerEntity | BoardSecret,\r\n\tinput: SoCInput,\r\n\tprocessDeaths: boolean,\r\n\ttiming?: StartOfCombatTiming,\r\n): boolean => {\r\n\tlet hasTriggered:\r\n\t\t| boolean\r\n\t\t| {\r\n\t\t\t\thasTriggered: boolean;\r\n\t\t\t\tshouldRecomputeCurrentAttacker: boolean;\r\n\t\t } = false;\r\n\tconst promoPortraitCount = getPromoPortraitCount(input.playerEntity);\r\n\tfor (let i = promoPortraitCount; i >= 0; i--) {\r\n\t\tconst card = getStartOfCombatAction(cardId);\r\n\t\tif (!!timing && card?.startOfCombatTiming !== timing) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst action = card?.startOfCombat;\r\n\t\tif (!!action) {\r\n\t\t\thasTriggered = action(entity, input);\r\n\t\t\t// Always proc it (for promo portrait), and use the hasTriggered for finer control\r\n\t\t\tonStartOfCombatTriggered(i, cardId, input.playerEntity);\r\n\t\t\tif (!!hasTriggered) {\r\n\t\t\t\tif (processDeaths) {\r\n\t\t\t\t\tprocessMinionDeath(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\t// See https://replays.firestoneapp.com/?reviewId=2eacbbc2-7dfa-487b-951d-0fa6d31d175e&turn=25&action=1\r\n\t\t\t\t\t\t// It looks like it doesn't look for the \"summons when space\" between Stitched Salvager's SoC and\r\n\t\t\t\t\t\t// Hawkstrider Herald SoC\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t);\r\n\t\t\t\t\t// https://replays.firestoneapp.com/?reviewId=6293597f-28fa-472e-ba8c-35f6b7deef58&turn=31&action=6\r\n\t\t\t\t\t// The first RapidReanimation triggers, resummons the target, then the second RapidReanimation triggers\r\n\t\t\t\t\t// So we need to process the resummon as soon as the minion dies, and before processing the second RapidReanimation\r\n\t\t\t\t\tconst shouldRecomputeCurrentAttacker = handleSummonsWhenSpace(\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (typeof hasTriggered === 'boolean') {\r\n\t\t\t\t\t\thasTriggered = hasTriggered || shouldRecomputeCurrentAttacker;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\thasTriggered.shouldRecomputeCurrentAttacker =\r\n\t\t\t\t\t\t\thasTriggered.shouldRecomputeCurrentAttacker || shouldRecomputeCurrentAttacker;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof hasTriggered !== 'boolean' && hasTriggered.shouldRecomputeCurrentAttacker) {\r\n\t\t\t\t\tinput.currentAttacker =\r\n\t\t\t\t\t\tinput.playerBoard.length > input.opponentBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 0\r\n\t\t\t\t\t\t\t\t: 1\r\n\t\t\t\t\t\t\t: input.opponentBoard.length > input.playerBoard.length\r\n\t\t\t\t\t\t\t? input.playerIsFriendly\r\n\t\t\t\t\t\t\t\t? 1\r\n\t\t\t\t\t\t\t\t: 0\r\n\t\t\t\t\t\t\t: Math.round(Math.random());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn !!hasTriggered;\r\n};\r\n\r\n// TODO: load all cards on start, then do some programmatic mapping\r\nconst getStartOfCombatAction = (cardId: string): StartOfCombatCard => {\r\n\tswitch (cardId) {\r\n\t\t// Quest rewards\r\n\t\tcase CardIds.EvilTwin:\r\n\t\t\treturn EvilTwin;\r\n\t\tcase CardIds.StaffOfOrigination_BG24_Reward_312:\r\n\t\t\treturn StaffOfOrigination;\r\n\t\tcase CardIds.StolenGold:\r\n\t\t\treturn StolenGold;\r\n\r\n\t\t// Trinkets\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\t\treturn HollyMallet;\r\n\t\tcase CardIds.TrainingCertificate_BG30_MagicItem_962:\r\n\t\t\treturn TrainingCertificate;\r\n\t\tcase CardIds.ValorousMedallion_BG30_MagicItem_970:\r\n\t\tcase CardIds.ValorousMedallion_ValorousMedallionToken_BG30_MagicItem_970t:\r\n\t\t\treturn ValorousMedallion;\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\t\treturn EmeraldDreamcatcher;\r\n\t\tcase CardIds.JarredFrostling_BG30_MagicItem_952:\r\n\t\t\treturn JarredFrostling;\r\n\t\tcase CardIds.RustyTrident_BG30_MagicItem_917:\r\n\t\t\treturn RustyTrident;\r\n\t\tcase CardIds.HoggyBank_BG30_MagicItem_411:\r\n\t\t\treturn HoggyBank;\r\n\t\tcase CardIds.ShipInABottle_BG30_MagicItem_407:\r\n\t\t\treturn ShipInABottle;\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\t\treturn EternalPortrait;\r\n\t\tcase CardIds.RivendarePortrait_BG30_MagicItem_310:\r\n\t\t\treturn RivendarePortrait;\r\n\t\tcase CardIds.TinyfinOnesie_BG30_MagicItem_441:\r\n\t\t\treturn TinyfinOnesie;\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\t\treturn BronzeTimepiece;\r\n\t\tcase CardIds.IronforgeAnvil_BG30_MagicItem_403:\r\n\t\t\treturn IronforgeAnvil;\r\n\t\tcase CardIds.KarazhanChessSet_BG30_MagicItem_972:\r\n\t\t\treturn KarazhanChessSet;\r\n\t\t// case CardIds.FishySticker_BG30_MagicItem_821:\r\n\t\tcase CardIds.FishySticker_FishyStickerToken_BG30_MagicItem_821t2:\r\n\t\t\treturn FishySticker;\r\n\t\tcase CardIds.SummoningSphere_BGDUO_MagicItem_003:\r\n\t\t\treturn SummoningSphere;\r\n\r\n\t\t// Hero powers\r\n\t\tcase CardIds.EarthInvocationToken:\r\n\t\t\treturn EarthInvocation;\r\n\t\tcase CardIds.WaterInvocationToken:\r\n\t\t\treturn WaterInvocation;\r\n\t\tcase CardIds.FireInvocationToken:\r\n\t\t\treturn FireInvocation;\r\n\t\tcase CardIds.LightningInvocationToken:\r\n\t\t\treturn LightningInvocation;\r\n\t\tcase CardIds.AllWillBurn:\r\n\t\t\treturn AllWillBurn;\r\n\t\tcase CardIds.EmbraceYourRage:\r\n\t\t\treturn EmbraceYourRage;\r\n\t\tcase CardIds.Ozumat_Tentacular:\r\n\t\t\treturn Tentacular;\r\n\t\tcase CardIds.RebornRites:\r\n\t\t\treturn RebornRites;\r\n\t\tcase CardIds.TeronGorefiend_RapidReanimation:\r\n\t\t\treturn RapidReanimation;\r\n\t\tcase CardIds.WaxWarband:\r\n\t\t\treturn WaxWarband;\r\n\t\tcase CardIds.AimLeftToken:\r\n\t\t\treturn AimLeft;\r\n\t\tcase CardIds.AimRightToken:\r\n\t\t\treturn AimRight;\r\n\t\tcase CardIds.AimLowToken:\r\n\t\t\treturn AimLow;\r\n\t\tcase CardIds.AimHighToken:\r\n\t\t\treturn AimHigh;\r\n\r\n\t\t// Anomalies\r\n\t\tcase CardIds.BlessedOrBlighted_BG27_Anomaly_726:\r\n\t\t\treturn BlessedOrBlighted;\r\n\t\tcase CardIds.AnomalousTwin_BG27_Anomaly_560:\r\n\t\t\treturn AnomalousTwin;\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn BoonOfBeetles;\r\n\r\n\t\t// Spells\r\n\t\tcase CardIds.ToxicTumbleweed_BG28_641:\r\n\t\t\treturn ToxicTumbleweed;\r\n\t\tcase CardIds.UpperHand_BG28_573:\r\n\t\t\treturn UpperHand;\r\n\t\tcase CardIds.FleetingVigor_BG28_519:\r\n\t\t\treturn FleetingVigor;\r\n\r\n\t\t// Minions\r\n\t\tcase CardIds.AmberGuardian_BG24_500:\r\n\t\tcase CardIds.AmberGuardian_BG24_500_G:\r\n\t\t\treturn AmberGuardian;\r\n\t\t// case CardIds.SanctumRester_BG26_356:\r\n\t\t// case CardIds.SanctumRester_BG26_356_G:\r\n\t\t// \treturn SanctumRester;\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012:\r\n\t\tcase CardIds.CorruptedMyrmidon_BG23_012_G:\r\n\t\t\treturn CorruptedMyrmidon;\r\n\t\tcase CardIds.MantidQueen_BG22_402:\r\n\t\tcase CardIds.MantidQueen_BG22_402_G:\r\n\t\t\treturn MantidQueen;\r\n\t\tcase CardIds.CarbonicCopy_BG27_503:\r\n\t\tcase CardIds.CarbonicCopy_BG27_503_G:\r\n\t\t\treturn CarbonicCopy;\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079:\r\n\t\tcase CardIds.HawkstriderHerald_BG27_079_G:\r\n\t\t\treturn HawkstriderHerald;\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904:\r\n\t\tcase CardIds.AudaciousAnchor_BG28_904_G:\r\n\t\t\treturn AudaciousAnchor;\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810:\r\n\t\tcase CardIds.ThousandthPaperDrake_BG29_810_G:\r\n\t\t\treturn ThousandthPaperDrake;\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811:\r\n\t\tcase CardIds.YulonFortuneGranter_BG29_811_G:\r\n\t\t\treturn YulonFortuneGranter;\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872:\r\n\t\t// case CardIds.HoardingHatespawn_BG29_872_G:\r\n\t\t// \treturn HoardingHatespawn;\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875:\r\n\t\tcase CardIds.TheUninvitedGuest_BG29_875_G:\r\n\t\t\treturn TheUninvitedGuest;\r\n\t\tcase CardIds.Sandy_BGDUO_125:\r\n\t\tcase CardIds.Sandy_BGDUO_125_G:\r\n\t\t\treturn Sandy;\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy:\r\n\t\tcase CardIds.ElderTaggawag_TB_BaconShop_HERO_14_Buddy_G:\r\n\t\t\treturn ElderTaggawag;\r\n\t\tcase CardIds.SunScreener_BG30_101:\r\n\t\tcase CardIds.SunScreener_BG30_101_G:\r\n\t\t\treturn SunScreener;\r\n\r\n\t\tdefault:\r\n\t\t\tconst candidate = cardMappings[cardId];\r\n\t\t\tif (hasStartOfCombat(candidate)) {\r\n\t\t\t\treturn candidate;\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t}\r\n};\r\n\r\nconst onStartOfCombatTriggered = (iteration: number, triggeredCardId: string, playerEntity: BgsPlayerEntity) => {\r\n\t// Some procs are iso-functional, and don't update the promo portrait\r\n\tconst promoPortraits = playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t);\r\n\tif (promoPortraits.length === 0 || iteration === 0 || iteration > promoPortraits.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tswitch (triggeredCardId) {\r\n\t\tcase CardIds.StolenGold:\r\n\t\tcase CardIds.HolyMallet_BG30_MagicItem_902:\r\n\t\tcase CardIds.EmeraldDreamcatcher_BG30_MagicItem_542:\r\n\t\tcase CardIds.EternalPortrait_BG30_MagicItem_301:\r\n\t\tcase CardIds.BronzeTimepiece_BG30_MagicItem_995:\r\n\t\tcase CardIds.SwattingInsects:\r\n\t\tcase CardIds.RebornRites:\r\n\t\tcase CardIds.BoonOfBeetles_BG28_603:\r\n\t\t\treturn;\r\n\t}\r\n\r\n\tconst promoPortrait = promoPortraits[iteration - 1];\r\n\tpromoPortrait.scriptDataNum1--;\r\n};\r\n\r\nconst getPromoPortraitCount = (playerEntity: BgsPlayerEntity) => {\r\n\treturn playerEntity.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.PromoPortrait_BG30_MagicItem_918 && t.scriptDataNum1 > 0,\r\n\t).length;\r\n};\r\n"]}
@@ -2,12 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleSharptoothSnapperForPlayer = exports.handleSummonsWhenSpace = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const diremuck_forager_1 = require("../cards/impl/minion/diremuck-forager");
6
+ const automaton_portrait_1 = require("../cards/impl/trinket/automaton-portrait");
5
7
  const taunt_1 = require("../keywords/taunt");
6
8
  const utils_1 = require("../services/utils");
7
9
  const utils_2 = require("../utils");
8
10
  const add_minion_to_board_1 = require("./add-minion-to-board");
9
11
  const deathrattle_spawns_1 = require("./deathrattle-spawns");
10
- const diremuck_forager_1 = require("../cards/impl/minion/diremuck-forager");
11
12
  const spawns_1 = require("./spawns");
12
13
  const handleSummonsWhenSpace = (playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
13
14
  let shouldRecomputeCurrentAttacker = false;
@@ -80,6 +81,11 @@ const handleSummonsWhenSpaceForPlayer = (targetEntity, playerBoard, playerEntity
80
81
  .forEach((t) => {
81
82
  handleBoomControllerForPlayer(t, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
82
83
  });
84
+ targetEntity.trinkets
85
+ .filter((t) => t.cardId === "BG30_MagicItem_303")
86
+ .forEach((t) => {
87
+ (0, automaton_portrait_1.handleAutomatonPortraitForPlayer)(t, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState);
88
+ });
83
89
  playerBoard
84
90
  .filter((e) => e.cardId === "BG32_201" || e.cardId === "BG32_201_G")
85
91
  .forEach((e) => {