@firestone-hs/simulate-bgs-battle 1.1.471 → 1.1.473

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 (33) hide show
  1. package/README.md +5 -6
  2. package/dist/bgs-player-entity.d.ts +3 -2
  3. package/dist/bgs-player-entity.js.map +1 -1
  4. package/dist/cards/cards-data.js +1 -1
  5. package/dist/cards/cards-data.js.map +1 -1
  6. package/dist/input-clone.js +2 -1
  7. package/dist/input-clone.js.map +1 -1
  8. package/dist/input-sanitation.js +12 -5
  9. package/dist/input-sanitation.js.map +1 -1
  10. package/dist/simulation/add-minion-to-board.js +5 -5
  11. package/dist/simulation/add-minion-to-board.js.map +1 -1
  12. package/dist/simulation/attack.js +5 -3
  13. package/dist/simulation/attack.js.map +1 -1
  14. package/dist/simulation/avenge.js +22 -15
  15. package/dist/simulation/avenge.js.map +1 -1
  16. package/dist/simulation/damage-effects.js +1 -1
  17. package/dist/simulation/damage-effects.js.map +1 -1
  18. package/dist/simulation/deathrattle-effects.js +1 -5
  19. package/dist/simulation/deathrattle-effects.js.map +1 -1
  20. package/dist/simulation/minion-death.d.ts +1 -1
  21. package/dist/simulation/minion-death.js +14 -10
  22. package/dist/simulation/minion-death.js.map +1 -1
  23. package/dist/simulation/on-being-attacked.js +1 -1
  24. package/dist/simulation/on-being-attacked.js.map +1 -1
  25. package/dist/simulation/spectator/game-action.js +29 -15
  26. package/dist/simulation/spectator/game-action.js.map +1 -1
  27. package/dist/simulation/start-of-combat.js +2 -0
  28. package/dist/simulation/start-of-combat.js.map +1 -1
  29. package/dist/simulation/summon-when-space.js +3 -0
  30. package/dist/simulation/summon-when-space.js.map +1 -1
  31. package/dist/utils.js +6 -3
  32. package/dist/utils.js.map +1 -1
  33. package/package.json +1 -1
@@ -3,4 +3,4 @@ import { BoardEntity } from '../board-entity';
3
3
  import { FullGameState } from './internal-game-state';
4
4
  export declare const makeMinionsDie: (board: BoardEntity[], boardHero: BgsPlayerEntity, otherBoard: BoardEntity[], otherBoardHero: BgsPlayerEntity, gameState: FullGameState) => [number[], BoardEntity[]];
5
5
  export declare const onMinionDeadHeroPower: (board: BoardEntity[], boardHero: BgsPlayerEntity, deadEntity: BoardEntity, gameState: FullGameState) => void;
6
- export declare const onMinionDeadQuest: (deadEntity: BoardEntity, board: BoardEntity[], boardHero: BgsPlayerEntity, otherBoard: BoardEntity[], otherBoardHero: BgsPlayerEntity, gameState: FullGameState) => void;
6
+ export declare const onMinionDeadQuest: (deadEntity: BoardEntity, indexFromRight: number, board: BoardEntity[], boardHero: BgsPlayerEntity, otherBoard: BoardEntity[], otherBoardHero: BgsPlayerEntity, gameState: FullGameState) => void;
@@ -34,11 +34,12 @@ const makeMinionsDie = (board, boardHero, otherBoard, otherBoardHero, gameState)
34
34
  }
35
35
  }
36
36
  for (const deadEntity of deadEntities) {
37
+ const indexFromRight = indexesFromRightAfterDeath[deadEntities.indexOf(deadEntity)];
37
38
  (0, avenge_1.updateAvengeCounters)(board, boardHero);
38
39
  (0, exports.onMinionDeadHeroPower)(board, boardHero, deadEntity, gameState);
39
40
  (0, exports.onMinionDeadHeroPower)(otherBoard, otherBoardHero, deadEntity, gameState);
40
- (0, exports.onMinionDeadQuest)(deadEntity, board, boardHero, otherBoard, otherBoardHero, gameState);
41
- (0, exports.onMinionDeadQuest)(deadEntity, otherBoard, otherBoardHero, board, boardHero, gameState);
41
+ (0, exports.onMinionDeadQuest)(deadEntity, indexFromRight, board, boardHero, otherBoard, otherBoardHero, gameState);
42
+ (0, exports.onMinionDeadQuest)(deadEntity, indexFromRight, otherBoard, otherBoardHero, board, boardHero, gameState);
42
43
  }
43
44
  return [indexesFromRightAfterDeath, deadEntities];
44
45
  };
@@ -53,7 +54,7 @@ const onMinionDeadHeroPower = (board, boardHero, deadEntity, gameState) => {
53
54
  }
54
55
  };
55
56
  exports.onMinionDeadHeroPower = onMinionDeadHeroPower;
56
- const onMinionDeadQuest = (deadEntity, board, boardHero, otherBoard, otherBoardHero, gameState) => {
57
+ const onMinionDeadQuest = (deadEntity, indexFromRight, board, boardHero, otherBoard, otherBoardHero, gameState) => {
57
58
  var _a, _b, _c, _d, _e, _f;
58
59
  const quests = (_a = boardHero.questEntities) !== null && _a !== void 0 ? _a : [];
59
60
  for (const quest of quests) {
@@ -72,7 +73,7 @@ const onMinionDeadQuest = (deadEntity, board, boardHero, otherBoard, otherBoardH
72
73
  for (let i = 0; i < loops; i++) {
73
74
  const target = (0, utils_1.pickRandomAlive)(board);
74
75
  if (!!target) {
75
- (0, stats_1.modifyStats)(target, deadEntity.attack, deadEntity.health, board, boardHero, gameState);
76
+ (0, stats_1.modifyStats)(target, deadEntity.maxAttack, deadEntity.maxHealth, board, boardHero, gameState);
76
77
  gameState.spectator.registerPowerTarget(boardHero, target, board, boardHero, otherBoardHero);
77
78
  }
78
79
  }
@@ -92,12 +93,15 @@ const onMinionDeadQuest = (deadEntity, board, boardHero, otherBoard, otherBoardH
92
93
  const bloodGemEnchantment = (_c = (_b = deadEntity.enchantments) === null || _b === void 0 ? void 0 : _b.find((e) => e.cardId === "BG20_GEMe")) !== null && _c !== void 0 ? _c : (_d = deadEntity.enchantments) === null || _d === void 0 ? void 0 : _d.find((e) => e.cardId === "BG20_GEMe2");
93
94
  const bloodGemAttack = (_e = bloodGemEnchantment === null || bloodGemEnchantment === void 0 ? void 0 : bloodGemEnchantment.tagScriptDataNum1) !== null && _e !== void 0 ? _e : 0;
94
95
  const bloodGemHealth = (_f = bloodGemEnchantment === null || bloodGemEnchantment === void 0 ? void 0 : bloodGemEnchantment.tagScriptDataNum2) !== null && _f !== void 0 ? _f : 0;
95
- const spawns = (0, deathrattle_spawns_1.spawnEntities)("BG30_MagicItem_442t", 1, board, boardHero, otherBoard, otherBoardHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, deadEntity.friendly, false);
96
- spawns.forEach((b) => {
97
- b.attack = bloodGemAttack;
98
- b.health = bloodGemHealth;
99
- });
100
- (0, spawns_1.performEntitySpawns)(spawns, board, boardHero, deadEntity, 0, otherBoard, otherBoardHero, gameState);
96
+ if (bloodGemAttack > 0 || bloodGemHealth > 0) {
97
+ const spawns = (0, deathrattle_spawns_1.spawnEntities)("BG30_MagicItem_442t", 1, board, boardHero, otherBoard, otherBoardHero, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, deadEntity.friendly, false);
98
+ spawns.forEach((b) => {
99
+ b.attack = bloodGemAttack;
100
+ b.health = bloodGemHealth;
101
+ });
102
+ (0, spawns_1.performEntitySpawns)(spawns, board, boardHero, deadEntity, indexFromRight, otherBoard, otherBoardHero, gameState);
103
+ }
104
+ trinket.scriptDataNum1--;
101
105
  }
102
106
  break;
103
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"minion-death.js","sourceRoot":"","sources":["../../src/simulation/minion-death.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { pickRandomAlive } from '../services/utils';\r\nimport { getEffectiveTribesForEntity, hasCorrectTribe } from '../utils';\r\nimport { updateAvengeCounters } from './avenge';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { onQuestProgressUpdated } from './quest';\r\nimport { removeMinionFromBoard } from './remove-minion-from-board';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const makeMinionsDie = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): [number[], BoardEntity[]] => {\r\n\t// Because entities spawn to the left, so the right index is unchanged\r\n\tconst deadMinionIndexesFromRight: number[] = [];\r\n\tconst deadEntities: BoardEntity[] = [];\r\n\tconst initialBoardLength = board.length;\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\tdeadMinionIndexesFromRight.push(initialBoardLength - (i + 1));\r\n\t\t\tdeadEntities.push(board[i]);\r\n\t\t\t// console.log(\r\n\t\t\t// \t'\\tflagging dead minion 0',\r\n\t\t\t// \tstringifySimpleCard(board[i], allCards),\r\n\t\t\t// \tstringifySimple(board, allCards),\r\n\t\t\t// \tinitialBoardLength,\r\n\t\t\t// \ti,\r\n\t\t\t// \tdeadMinionIndexesFromRight,\r\n\t\t\t// );\r\n\t\t}\r\n\t}\r\n\r\n\t// These will always be processed from left to right afterwards\r\n\t// We compute the indexes as they will be once the new board is effective. For a\r\n\t// board of length N, having an indexFromRight at N means it will spawn at the very left\r\n\t// of the board (first minion)\r\n\tlet indexesFromRightAfterDeath = [];\r\n\tfor (let i = deadMinionIndexesFromRight.length - 1; i >= 0; i--) {\r\n\t\tconst newIndex = deadMinionIndexesFromRight[i] - indexesFromRightAfterDeath.length;\r\n\t\tindexesFromRightAfterDeath.push(newIndex);\r\n\t}\r\n\tindexesFromRightAfterDeath = indexesFromRightAfterDeath.reverse();\r\n\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\t// console.log('\\tflagging dead minion', stringifySimpleCard(board[i], allCards), deadMinionIndexesFromRight);\r\n\t\t\tremoveMinionFromBoard(board, boardHero, i, gameState);\r\n\t\t\t// We modify the original array, so we need to update teh current index accordingly\r\n\t\t\ti--;\r\n\t\t}\r\n\t}\r\n\r\n\t// console.debug('dead entities', stringifySimple(deadEntities, allCards));\r\n\t// Update the avenge counters as soon as minions die. If we wait until the \"avenge\" phase, we might\r\n\t// update the counters for entities that have been spawned after the death of the original entity\r\n\t// ISSUE: deaths are actually processed one by one. Once a minion dies, its DR triggers, then the next, etc.\r\n\t// This means that if you have a minion that summons another one, it can progress and complete and quest\r\n\t// and the next minion dying could count towards that quest progress\r\n\t// See http://replays.firestoneapp.com/?reviewId=0ce4db9c-3269-4704-b662-8a8c31f5afe1&turn=16&action=27\r\n\tfor (const deadEntity of deadEntities) {\r\n\t\tupdateAvengeCounters(board, boardHero);\r\n\t\tonMinionDeadHeroPower(board, boardHero, deadEntity, gameState);\r\n\t\tonMinionDeadHeroPower(otherBoard, otherBoardHero, deadEntity, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, board, boardHero, otherBoard, otherBoardHero, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, otherBoard, otherBoardHero, board, boardHero, gameState);\r\n\t}\r\n\r\n\treturn [indexesFromRightAfterDeath, deadEntities];\r\n};\r\n\r\nexport const onMinionDeadHeroPower = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (\r\n\t\tboardHero.heroPowerId === CardIds.IllTakeThat &&\r\n\t\tboardHero.heroPowerUsed &&\r\n\t\tboardHero.heroPowerInfo2 <= 0 &&\r\n\t\tdeadEntity.friendly !== boardHero.friendly\r\n\t) {\r\n\t\taddCardsInHand(boardHero, board, [deadEntity.cardId], gameState);\r\n\t\tboardHero.heroPowerInfo2 = 1;\r\n\t}\r\n};\r\n\r\nexport const onMinionDeadQuest = (\r\n\tdeadEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst quests = boardHero.questEntities ?? [];\r\n\tfor (const quest of quests) {\r\n\t\tswitch (quest.CardId) {\r\n\t\t\tcase CardIds.ReenactTheMurder:\r\n\t\t\t\tonQuestProgressUpdated(boardHero, quest, board, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\t\tif (trinket.scriptDataNum1 > 0 && deadEntity.friendly === boardHero.friendly) {\r\n\t\t\t\t\tconst loops = trinket.cardId === CardIds.AllianceKeychain_BG30_MagicItem_433 ? 1 : 2;\r\n\t\t\t\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t\t\t\tconst target = pickRandomAlive(board);\r\n\t\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\t\tmodifyStats(target, deadEntity.attack, deadEntity.health, board, boardHero, gameState);\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttrinket.scriptDataNum1--;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TheEyeOfDalaran_BG30_MagicItem_981:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\tgetEffectiveTribesForEntity(deadEntity, boardHero, gameState.allCards).length === 0\r\n\t\t\t\t) {\r\n\t\t\t\t\taddCardsInHand(boardHero, board, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\ttrinket.scriptDataNum1 > 0 &&\r\n\t\t\t\t\thasCorrectTribe(deadEntity, boardHero, Race.QUILBOAR, gameState.allCards)\r\n\t\t\t\t) {\r\n\t\t\t\t\t// TODO: blood gem size\r\n\t\t\t\t\tconst bloodGemEnchantment =\r\n\t\t\t\t\t\tdeadEntity.enchantments?.find((e) => e.cardId === CardIds.BloodGem_BloodGemEnchantment) ??\r\n\t\t\t\t\t\tdeadEntity.enchantments?.find((e) => e.cardId === CardIds.BloodGem_BloodGemsEnchantment);\r\n\t\t\t\t\tconst bloodGemAttack = bloodGemEnchantment?.tagScriptDataNum1 ?? 0;\r\n\t\t\t\t\tconst bloodGemHealth = bloodGemEnchantment?.tagScriptDataNum2 ?? 0;\r\n\t\t\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\t\t\tCardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t,\r\n\t\t\t\t\t\t1,\r\n\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\t\tgameState.spectator,\r\n\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tspawns.forEach((b) => {\r\n\t\t\t\t\t\tb.attack = bloodGemAttack;\r\n\t\t\t\t\t\tb.health = bloodGemHealth;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tperformEntitySpawns(spawns, board, boardHero, deadEntity, 0, otherBoard, otherBoardHero, gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"minion-death.js","sourceRoot":"","sources":["../../src/simulation/minion-death.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { pickRandomAlive } from '../services/utils';\r\nimport { getEffectiveTribesForEntity, hasCorrectTribe } from '../utils';\r\nimport { updateAvengeCounters } from './avenge';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { onQuestProgressUpdated } from './quest';\r\nimport { removeMinionFromBoard } from './remove-minion-from-board';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const makeMinionsDie = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): [number[], BoardEntity[]] => {\r\n\t// Because entities spawn to the left, so the right index is unchanged\r\n\tconst deadMinionIndexesFromRight: number[] = [];\r\n\tconst deadEntities: BoardEntity[] = [];\r\n\tconst initialBoardLength = board.length;\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\tdeadMinionIndexesFromRight.push(initialBoardLength - (i + 1));\r\n\t\t\tdeadEntities.push(board[i]);\r\n\t\t\t// console.log(\r\n\t\t\t// \t'\\tflagging dead minion 0',\r\n\t\t\t// \tstringifySimpleCard(board[i], allCards),\r\n\t\t\t// \tstringifySimple(board, allCards),\r\n\t\t\t// \tinitialBoardLength,\r\n\t\t\t// \ti,\r\n\t\t\t// \tdeadMinionIndexesFromRight,\r\n\t\t\t// );\r\n\t\t}\r\n\t}\r\n\r\n\t// These will always be processed from left to right afterwards\r\n\t// We compute the indexes as they will be once the new board is effective. For a\r\n\t// board of length N, having an indexFromRight at N means it will spawn at the very left\r\n\t// of the board (first minion)\r\n\tlet indexesFromRightAfterDeath = [];\r\n\tfor (let i = deadMinionIndexesFromRight.length - 1; i >= 0; i--) {\r\n\t\tconst newIndex = deadMinionIndexesFromRight[i] - indexesFromRightAfterDeath.length;\r\n\t\tindexesFromRightAfterDeath.push(newIndex);\r\n\t}\r\n\tindexesFromRightAfterDeath = indexesFromRightAfterDeath.reverse();\r\n\r\n\tfor (let i = 0; i < board.length; i++) {\r\n\t\tif (board[i].health <= 0 || board[i].definitelyDead) {\r\n\t\t\t// console.log('\\tflagging dead minion', stringifySimpleCard(board[i], allCards), deadMinionIndexesFromRight);\r\n\t\t\tremoveMinionFromBoard(board, boardHero, i, gameState);\r\n\t\t\t// We modify the original array, so we need to update teh current index accordingly\r\n\t\t\ti--;\r\n\t\t}\r\n\t}\r\n\r\n\t// console.debug('dead entities', stringifySimple(deadEntities, allCards));\r\n\t// Update the avenge counters as soon as minions die. If we wait until the \"avenge\" phase, we might\r\n\t// update the counters for entities that have been spawned after the death of the original entity\r\n\t// ISSUE: deaths are actually processed one by one. Once a minion dies, its DR triggers, then the next, etc.\r\n\t// This means that if you have a minion that summons another one, it can progress and complete and quest\r\n\t// and the next minion dying could count towards that quest progress\r\n\t// See http://replays.firestoneapp.com/?reviewId=0ce4db9c-3269-4704-b662-8a8c31f5afe1&turn=16&action=27\r\n\tfor (const deadEntity of deadEntities) {\r\n\t\tconst indexFromRight = indexesFromRightAfterDeath[deadEntities.indexOf(deadEntity)];\r\n\t\tupdateAvengeCounters(board, boardHero);\r\n\t\tonMinionDeadHeroPower(board, boardHero, deadEntity, gameState);\r\n\t\tonMinionDeadHeroPower(otherBoard, otherBoardHero, deadEntity, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, indexFromRight, board, boardHero, otherBoard, otherBoardHero, gameState);\r\n\t\tonMinionDeadQuest(deadEntity, indexFromRight, otherBoard, otherBoardHero, board, boardHero, gameState);\r\n\t}\r\n\r\n\treturn [indexesFromRightAfterDeath, deadEntities];\r\n};\r\n\r\nexport const onMinionDeadHeroPower = (\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (\r\n\t\tboardHero.heroPowerId === CardIds.IllTakeThat &&\r\n\t\tboardHero.heroPowerUsed &&\r\n\t\tboardHero.heroPowerInfo2 <= 0 &&\r\n\t\tdeadEntity.friendly !== boardHero.friendly\r\n\t) {\r\n\t\taddCardsInHand(boardHero, board, [deadEntity.cardId], gameState);\r\n\t\tboardHero.heroPowerInfo2 = 1;\r\n\t}\r\n};\r\n\r\nexport const onMinionDeadQuest = (\r\n\tdeadEntity: BoardEntity,\r\n\tindexFromRight: number,\r\n\tboard: BoardEntity[],\r\n\tboardHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst quests = boardHero.questEntities ?? [];\r\n\tfor (const quest of quests) {\r\n\t\tswitch (quest.CardId) {\r\n\t\t\tcase CardIds.ReenactTheMurder:\r\n\t\t\t\tonQuestProgressUpdated(boardHero, quest, board, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.AllianceKeychain_BG30_MagicItem_433:\r\n\t\t\tcase CardIds.AllianceKeychain_AllianceKeychainToken_BG30_MagicItem_433t:\r\n\t\t\t\tif (trinket.scriptDataNum1 > 0 && deadEntity.friendly === boardHero.friendly) {\r\n\t\t\t\t\tconst loops = trinket.cardId === CardIds.AllianceKeychain_BG30_MagicItem_433 ? 1 : 2;\r\n\t\t\t\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t\t\t\tconst target = pickRandomAlive(board);\r\n\t\t\t\t\t\tif (!!target) {\r\n\t\t\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tdeadEntity.maxAttack,\r\n\t\t\t\t\t\t\t\tdeadEntity.maxHealth,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttrinket.scriptDataNum1--;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.TheEyeOfDalaran_BG30_MagicItem_981:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\tgetEffectiveTribesForEntity(deadEntity, boardHero, gameState.allCards).length === 0\r\n\t\t\t\t) {\r\n\t\t\t\t\taddCardsInHand(boardHero, board, [null], gameState);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.BloodGolemSticker_BG30_MagicItem_442:\r\n\t\t\t\tif (\r\n\t\t\t\t\tdeadEntity.friendly === boardHero.friendly &&\r\n\t\t\t\t\ttrinket.scriptDataNum1 > 0 &&\r\n\t\t\t\t\thasCorrectTribe(deadEntity, boardHero, Race.QUILBOAR, gameState.allCards)\r\n\t\t\t\t) {\r\n\t\t\t\t\tconst bloodGemEnchantment =\r\n\t\t\t\t\t\tdeadEntity.enchantments?.find((e) => e.cardId === CardIds.BloodGem_BloodGemEnchantment) ??\r\n\t\t\t\t\t\tdeadEntity.enchantments?.find((e) => e.cardId === CardIds.BloodGem_BloodGemsEnchantment);\r\n\t\t\t\t\tconst bloodGemAttack = bloodGemEnchantment?.tagScriptDataNum1 ?? 0;\r\n\t\t\t\t\tconst bloodGemHealth = bloodGemEnchantment?.tagScriptDataNum2 ?? 0;\r\n\t\t\t\t\tif (bloodGemAttack > 0 || bloodGemHealth > 0) {\r\n\t\t\t\t\t\tconst spawns = spawnEntities(\r\n\t\t\t\t\t\t\tCardIds.BloodGolemSticker_BloodGolemToken_BG30_MagicItem_442t,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState.allCards,\r\n\t\t\t\t\t\t\tgameState.cardsData,\r\n\t\t\t\t\t\t\tgameState.sharedState,\r\n\t\t\t\t\t\t\tgameState.spectator,\r\n\t\t\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tspawns.forEach((b) => {\r\n\t\t\t\t\t\t\tb.attack = bloodGemAttack;\r\n\t\t\t\t\t\t\tb.health = bloodGemHealth;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tperformEntitySpawns(\r\n\t\t\t\t\t\t\tspawns,\r\n\t\t\t\t\t\t\tboard,\r\n\t\t\t\t\t\t\tboardHero,\r\n\t\t\t\t\t\t\tdeadEntity,\r\n\t\t\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\t\t\totherBoard,\r\n\t\t\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttrinket.scriptDataNum1--;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n};\r\n"]}
@@ -105,7 +105,7 @@ const applyOnBeingAttackedBuffs = (attackerEntity, attackerBoard, attackerHero,
105
105
  }
106
106
  }
107
107
  else if (["BG24_001", "BG24_001_G"].includes(defendingEntity.cardId)) {
108
- attackerEntity.health = 1;
108
+ (0, stats_1.setEntityStats)(attackerEntity, attackerEntity.attack, 1, attackerBoard, attackerHero, gameState);
109
109
  }
110
110
  else if (["BG28_406", "BG28_406_G"].includes(defendingEntity.cardId)) {
111
111
  (0, utils_1.updateVenomous)(defendingEntity, true, defendingBoard, defendingPlayerEntity, gameState);
@@ -1 +1 @@
1
- {"version":3,"file":"on-being-attacked.js","sourceRoot":"","sources":["../../src/simulation/on-being-attacked.ts"],"names":[],"mappings":";;;AAGA,oDAAsD;AACtD,oCAA2D;AAC3D,qCAAyC;AAEzC,uCAA4G;AAC5G,mCAAsD;AAE/C,MAAM,yBAAyB,GAAG,CACxC,cAA2B,EAC3B,aAA4B,EAC5B,YAA6B,EAC7B,eAA4B,EAC5B,cAA6B,EAC7B,qBAAsC,EACtC,SAAwB,EACjB,EAAE;;IAET,KAAK,MAAM,MAAM,IAAI,CAAC,MAAA,qBAAqB,CAAC,OAAO,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;QACvF,QAAQ,MAAM,CAAC,MAAM,EAAE;YACtB;gBACC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;oBAClC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,kCAAkB,EACjB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,IAAI,EACJ,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,8BAAoB,EACnB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,2BAAiB,EAChB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,yBAAe,EACd,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;YACP;gBACC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;oBACxB,IAAA,+BAAqB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,SAAS,CACT,CAAC;iBACF;gBACD,MAAM;SACP;KACD;IAED,IAAI,eAAe,CAAC,KAAK,EAAE;QAC1B,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,cAAsC,CAAC,CAAC;QACzG,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAC5C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,sBAA8C,CACvE,CAAC;QACF,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5B,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC5E,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,MAAM,EACN,MAAM,EACN,cAAc,EACd,YAAY,EACZ,qBAAqB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAClC,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC5E,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,MAAM,EACN,MAAM,EACN,cAAc,EACd,YAAY,EACZ,qBAAqB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,cAAmC,CAAC,CAAC;QACjG,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,sBAA2C,CAAC,CAAC;QAC/G,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAA,mBAAW,EAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;YACrF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,GAAG,EACH,eAAe,EACf,cAAc,EACd,YAAY,EACZ,qBAAqB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC1B,IAAA,mBAAW,EAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;YACrF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,GAAG,EACH,eAAe,EACf,cAAc,EACd,YAAY,EACZ,qBAAqB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,cAAc;aACZ,MAAM,CACN,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,MAAM,iCAAuD;YAC/D,CAAC,CAAC,MAAM,mCAAyD,CAClE;aACA,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iCAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,IAAA,uBAAe,EAAC,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;KACJ;IAGD,IAAI,eAAe,CAAC,MAAM,cAAuC,EAAE;QAClE,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAClE,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC5E,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,eAAe,EACf,MAAM,EACN,cAAc,EACd,YAAY,EACZ,qBAAqB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;KACH;SAAM,IAAI,eAAe,CAAC,MAAM,sBAA+C,EAAE;QACjF,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAClE,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAC5E,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,eAAe,EACf,MAAM,EACN,cAAc,EACd,YAAY,EACZ,qBAAqB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;KACH;SAAM,IACN,eAAe,CAAC,MAAM,eAA+B;QACrD,eAAe,CAAC,MAAM,iBAAiC,EACtD;QACD,IAAA,mBAAW,EACV,eAAe,EACf,eAAe,CAAC,MAAM,iBAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/D,CAAC,EACD,cAAc,EACd,qBAAqB,EACrB,SAAS,CACT,CAAC;QACF,SAAS,CAAC,SAAS,CAAC,mBAAmB,CACtC,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,qBAAqB,CACrB,CAAC;KACF;SAAM,IACN,0BAA4E,CAAC,QAAQ,CACpF,eAAe,CAAC,MAAiB,CACjC,EACA;QAED,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QACnE,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;QAC7C,IAAI,eAAe,CAAC,YAAY,EAAE;YACjC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,eAAe,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;SAC7D;aAAM,IAAI,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,EAAE;SAE/D;aAAM,IAAI,cAAc,GAAG,UAAU,EAAE;YACvC,eAAe,CAAC,MAAM,GAAG,cAAc,GAAG,CAAC,CAAC;YAC5C,eAAe,CAAC,MAAM,GAAG,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;SAC7D;KACD;SAAM,IACN,0BAAsE,CAAC,QAAQ,CAC9E,eAAe,CAAC,MAAiB,CACjC,EACA;QACD,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;KAC1B;SAAM,IACN,0BAAwE,CAAC,QAAQ,CAChF,eAAe,CAAC,MAAiB,CACjC,EACA;QACD,IAAA,sBAAc,EAAC,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;KACxF;IAGD,IACC,cAAc,CAAC,MAAM,eAA0C;QAC/D,cAAc,CAAC,MAAM,iBAA4C,EAChE;QACD,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC;KAC/B;SAAM,IACN,0BAAoF,CAAC,QAAQ,CAC5F,cAAc,CAAC,MAAiB,CAChC;QACD,cAAc,CAAC,iBAAiB,GAAG,CAAC,EACnC;QAED,IAAA,sBAAc,EAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;QACxF,cAAc,CAAC,iBAAiB,EAAE,CAAC;KACnC;AACF,CAAC,CAAC;AAzOW,QAAA,yBAAyB,6BAyOpC","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { updateDivineShield } from '../divine-shield';\r\nimport { addStatsToBoard, updateVenomous } from '../utils';\r\nimport { getNeighbours } from './attack';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { handlePackTactics, handleSnakeTrap, handleSplittingImage, handleVenomstrikeTrap } from './secrets';\r\nimport { modifyStats, setEntityStats } from './stats';\r\n\r\nexport const applyOnBeingAttackedBuffs = (\r\n\tattackerEntity: BoardEntity,\r\n\tattackerBoard: BoardEntity[],\r\n\tattackerHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// We need to respect the order of the secrets\r\n\tfor (const secret of (defendingPlayerEntity.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.AutodefenseMatrix_TB_Bacon_Secrets_07:\r\n\t\t\t\tif (!defendingEntity.divineShield) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\tupdateDivineShield(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SplittingImage_TB_Bacon_Secrets_04:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSplittingImage(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PackTactics_TB_Bacon_Secrets_15:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandlePackTactics(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SnakeTrap_TB_Bacon_Secrets_02:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSnakeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.VenomstrikeTrap_TB_Bacon_Secrets_01:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleVenomstrikeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (defendingEntity.taunt) {\r\n\t\tconst champions = defendingBoard.filter((entity) => entity.cardId === CardIds.ChampionOfYshaarj_BGS_111);\r\n\t\tconst goldenChampions = defendingBoard.filter(\r\n\t\t\t(entity) => entity.cardId === CardIds.ChampionOfYshaarj_TB_BaconUps_301,\r\n\t\t);\r\n\t\tchampions.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 1, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tentity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t\tgoldenChampions.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 2, 4, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tentity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tconst arms = defendingBoard.filter((entity) => entity.cardId === CardIds.ArmOfTheEmpire_BGS_110);\r\n\t\tconst goldenArms = defendingBoard.filter((entity) => entity.cardId === CardIds.ArmOfTheEmpire_TB_BaconUps_302);\r\n\t\tarms.forEach((arm) => {\r\n\t\t\tmodifyStats(defendingEntity, 2, 0, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tarm,\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t\tgoldenArms.forEach((arm) => {\r\n\t\t\tmodifyStats(defendingEntity, 4, 0, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tarm,\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tdefendingBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((entity) => {\r\n\t\t\t\tconst buff = entity.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ? 1 : 2;\r\n\t\t\t\taddStatsToBoard(entity, defendingBoard, defendingPlayerEntity, buff, 0, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\t// Based on defending entity\r\n\tif (defendingEntity.cardId === CardIds.TormentedRitualist_BGS_201) {\r\n\t\tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t\tneighbours.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 1, 1, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t} else if (defendingEntity.cardId === CardIds.TormentedRitualist_TB_BaconUps_257) {\r\n\t\tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t\tneighbours.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 2, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t} else if (\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300 ||\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G\r\n\t) {\r\n\t\tmodifyStats(\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G ? 2 : 1,\r\n\t\t\t0,\r\n\t\t\tdefendingBoard,\r\n\t\t\tdefendingPlayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingBoard,\r\n\t\t\tattackerHero,\r\n\t\t\tdefendingPlayerEntity,\r\n\t\t);\r\n\t} else if (\r\n\t\t[CardIds.AdaptableBarricade_BG27_022, CardIds.AdaptableBarricade_BG27_022_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\t// https://twitter.com/LoewenMitchell/status/1692225556559901031?s=20\r\n\t\tconst totalStats = defendingEntity.attack + defendingEntity.health;\r\n\t\tconst attackerAttack = attackerEntity.attack;\r\n\t\tif (defendingEntity.divineShield) {\r\n\t\t\tdefendingEntity.health = 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t} else if (attackerEntity.venomous || attackerEntity.poisonous) {\r\n\t\t\t// Do nothing\r\n\t\t} else if (attackerAttack < totalStats) {\r\n\t\t\tdefendingEntity.health = attackerAttack + 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t}\r\n\t} else if (\r\n\t\t[CardIds.GraniteGuardian_BG24_001, CardIds.GraniteGuardian_BG24_001_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\tattackerEntity.health = 1;\r\n\t} else if (\r\n\t\t[CardIds.WaywardGrimscale_BG28_406, CardIds.WaywardGrimscale_BG28_406_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\tupdateVenomous(defendingEntity, true, defendingBoard, defendingPlayerEntity, gameState);\r\n\t}\r\n\r\n\t// Based on attacking entity\r\n\tif (\r\n\t\tattackerEntity.cardId === CardIds.SindoreiStraightShot_BG25_016 ||\r\n\t\tattackerEntity.cardId === CardIds.SindoreiStraightShot_BG25_016_G\r\n\t) {\r\n\t\tdefendingEntity.taunt = false;\r\n\t\tdefendingEntity.reborn = false;\r\n\t} else if (\r\n\t\t[CardIds.TransmutedBramblewitch_BG27_013, CardIds.TransmutedBramblewitch_BG27_013_G].includes(\r\n\t\t\tattackerEntity.cardId as CardIds,\r\n\t\t) &&\r\n\t\tattackerEntity.abiityChargesLeft > 0\r\n\t) {\r\n\t\t// TODO: also modify all code that directly sets the stats of an entity\r\n\t\tsetEntityStats(defendingEntity, 3, 3, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\tattackerEntity.abiityChargesLeft--;\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"on-being-attacked.js","sourceRoot":"","sources":["../../src/simulation/on-being-attacked.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { updateDivineShield } from '../divine-shield';\r\nimport { addStatsToBoard, updateVenomous } from '../utils';\r\nimport { getNeighbours } from './attack';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { handlePackTactics, handleSnakeTrap, handleSplittingImage, handleVenomstrikeTrap } from './secrets';\r\nimport { modifyStats, setEntityStats } from './stats';\r\n\r\nexport const applyOnBeingAttackedBuffs = (\r\n\tattackerEntity: BoardEntity,\r\n\tattackerBoard: BoardEntity[],\r\n\tattackerHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingPlayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\t// We need to respect the order of the secrets\r\n\tfor (const secret of (defendingPlayerEntity.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.AutodefenseMatrix_TB_Bacon_Secrets_07:\r\n\t\t\t\tif (!defendingEntity.divineShield) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\tupdateDivineShield(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SplittingImage_TB_Bacon_Secrets_04:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSplittingImage(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.PackTactics_TB_Bacon_Secrets_15:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandlePackTactics(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.SnakeTrap_TB_Bacon_Secrets_02:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleSnakeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.VenomstrikeTrap_TB_Bacon_Secrets_01:\r\n\t\t\t\tif (defendingBoard.length < 7) {\r\n\t\t\t\t\tsecret.triggered = true;\r\n\t\t\t\t\thandleVenomstrikeTrap(\r\n\t\t\t\t\t\tdefendingEntity,\r\n\t\t\t\t\t\tdefendingBoard,\r\n\t\t\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t\t\t\tattackerBoard,\r\n\t\t\t\t\t\tattackerHero,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (defendingEntity.taunt) {\r\n\t\tconst champions = defendingBoard.filter((entity) => entity.cardId === CardIds.ChampionOfYshaarj_BGS_111);\r\n\t\tconst goldenChampions = defendingBoard.filter(\r\n\t\t\t(entity) => entity.cardId === CardIds.ChampionOfYshaarj_TB_BaconUps_301,\r\n\t\t);\r\n\t\tchampions.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 1, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tentity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t\tgoldenChampions.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 2, 4, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tentity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tconst arms = defendingBoard.filter((entity) => entity.cardId === CardIds.ArmOfTheEmpire_BGS_110);\r\n\t\tconst goldenArms = defendingBoard.filter((entity) => entity.cardId === CardIds.ArmOfTheEmpire_TB_BaconUps_302);\r\n\t\tarms.forEach((arm) => {\r\n\t\t\tmodifyStats(defendingEntity, 2, 0, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tarm,\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t\tgoldenArms.forEach((arm) => {\r\n\t\t\tmodifyStats(defendingEntity, 4, 0, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tarm,\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tdefendingBoard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ||\r\n\t\t\t\t\te.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy_G,\r\n\t\t\t)\r\n\t\t\t.forEach((entity) => {\r\n\t\t\t\tconst buff = entity.cardId === CardIds.WanderingTreant_TB_BaconShop_HERO_95_Buddy ? 1 : 2;\r\n\t\t\t\taddStatsToBoard(entity, defendingBoard, defendingPlayerEntity, buff, 0, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\t// Based on defending entity\r\n\tif (defendingEntity.cardId === CardIds.TormentedRitualist_BGS_201) {\r\n\t\tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t\tneighbours.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 1, 1, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t} else if (defendingEntity.cardId === CardIds.TormentedRitualist_TB_BaconUps_257) {\r\n\t\tconst neighbours = getNeighbours(defendingBoard, defendingEntity);\r\n\t\tneighbours.forEach((entity) => {\r\n\t\t\tmodifyStats(entity, 2, 2, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdefendingEntity,\r\n\t\t\t\tentity,\r\n\t\t\t\tdefendingBoard,\r\n\t\t\t\tattackerHero,\r\n\t\t\t\tdefendingPlayerEntity,\r\n\t\t\t);\r\n\t\t});\r\n\t} else if (\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300 ||\r\n\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G\r\n\t) {\r\n\t\tmodifyStats(\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity.cardId === CardIds.DozyWhelp_BG24_300_G ? 2 : 1,\r\n\t\t\t0,\r\n\t\t\tdefendingBoard,\r\n\t\t\tdefendingPlayerEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingEntity,\r\n\t\t\tdefendingBoard,\r\n\t\t\tattackerHero,\r\n\t\t\tdefendingPlayerEntity,\r\n\t\t);\r\n\t} else if (\r\n\t\t[CardIds.AdaptableBarricade_BG27_022, CardIds.AdaptableBarricade_BG27_022_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\t// https://twitter.com/LoewenMitchell/status/1692225556559901031?s=20\r\n\t\tconst totalStats = defendingEntity.attack + defendingEntity.health;\r\n\t\tconst attackerAttack = attackerEntity.attack;\r\n\t\tif (defendingEntity.divineShield) {\r\n\t\t\tdefendingEntity.health = 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t} else if (attackerEntity.venomous || attackerEntity.poisonous) {\r\n\t\t\t// Do nothing\r\n\t\t} else if (attackerAttack < totalStats) {\r\n\t\t\tdefendingEntity.health = attackerAttack + 1;\r\n\t\t\tdefendingEntity.attack = totalStats - defendingEntity.health;\r\n\t\t}\r\n\t} else if (\r\n\t\t[CardIds.GraniteGuardian_BG24_001, CardIds.GraniteGuardian_BG24_001_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\tsetEntityStats(attackerEntity, attackerEntity.attack, 1, attackerBoard, attackerHero, gameState);\r\n\t\t// attackerEntity.health = 1;\r\n\t} else if (\r\n\t\t[CardIds.WaywardGrimscale_BG28_406, CardIds.WaywardGrimscale_BG28_406_G].includes(\r\n\t\t\tdefendingEntity.cardId as CardIds,\r\n\t\t)\r\n\t) {\r\n\t\tupdateVenomous(defendingEntity, true, defendingBoard, defendingPlayerEntity, gameState);\r\n\t}\r\n\r\n\t// Based on attacking entity\r\n\tif (\r\n\t\tattackerEntity.cardId === CardIds.SindoreiStraightShot_BG25_016 ||\r\n\t\tattackerEntity.cardId === CardIds.SindoreiStraightShot_BG25_016_G\r\n\t) {\r\n\t\tdefendingEntity.taunt = false;\r\n\t\tdefendingEntity.reborn = false;\r\n\t} else if (\r\n\t\t[CardIds.TransmutedBramblewitch_BG27_013, CardIds.TransmutedBramblewitch_BG27_013_G].includes(\r\n\t\t\tattackerEntity.cardId as CardIds,\r\n\t\t) &&\r\n\t\tattackerEntity.abiityChargesLeft > 0\r\n\t) {\r\n\t\t// TODO: also modify all code that directly sets the stats of an entity\r\n\t\tsetEntityStats(defendingEntity, 3, 3, defendingBoard, defendingPlayerEntity, gameState);\r\n\t\tattackerEntity.abiityChargesLeft--;\r\n\t}\r\n};\r\n"]}
@@ -2,29 +2,43 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildGameAction = void 0;
4
4
  const buildGameAction = (playerHero, opponentHero, action) => {
5
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
5
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11;
6
+ const isPlayerSireD = (_a = playerHero === null || playerHero === void 0 ? void 0 : playerHero.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG24_HERO_100");
7
+ const isOpponentSireD = (_b = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.cardId) === null || _b === void 0 ? void 0 : _b.startsWith("BG24_HERO_100");
6
8
  const result = {
7
9
  ...action,
8
- playerSecrets: ((_a = playerHero === null || playerHero === void 0 ? void 0 : playerHero.secrets) !== null && _a !== void 0 ? _a : []).filter((s) => !s.triggered),
10
+ playerSecrets: ((_c = playerHero === null || playerHero === void 0 ? void 0 : playerHero.secrets) !== null && _c !== void 0 ? _c : []).filter((s) => !s.triggered),
9
11
  playerCardId: playerHero === null || playerHero === void 0 ? void 0 : playerHero.cardId,
10
12
  playerEntityId: playerHero === null || playerHero === void 0 ? void 0 : playerHero.entityId,
11
- playerHeroPowerCardId: playerHero === null || playerHero === void 0 ? void 0 : playerHero.heroPowerId,
12
- playerHeroPowerEntityId: playerHero === null || playerHero === void 0 ? void 0 : playerHero.heroPowerEntityId,
13
+ playerHeroPowerCardId: (_h = (_e = (_d = playerHero === null || playerHero === void 0 ? void 0 : playerHero.trinkets.find((t) => t.scriptDataNum6 === 3)) === null || _d === void 0 ? void 0 : _d.cardId) !== null && _e !== void 0 ? _e : (isPlayerSireD ? (_g = (_f = playerHero.questRewardEntities) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.cardId : null)) !== null && _h !== void 0 ? _h : playerHero === null || playerHero === void 0 ? void 0 : playerHero.heroPowerId,
14
+ playerHeroPowerEntityId: 100000002,
13
15
  playerHeroPowerUsed: playerHero === null || playerHero === void 0 ? void 0 : playerHero.heroPowerUsed,
14
- playerRewardCardId: (_d = (_c = (_b = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.cardId) !== null && _d !== void 0 ? _d : (_e = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewards) === null || _e === void 0 ? void 0 : _e[0],
15
- playerRewardEntityId: (_g = (_f = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.entityId,
16
- playerRewardData: (_j = (_h = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _h === void 0 ? void 0 : _h[0]) === null || _j === void 0 ? void 0 : _j.scriptDataNum1,
17
- playerTrinkets: (_k = playerHero === null || playerHero === void 0 ? void 0 : playerHero.trinkets) !== null && _k !== void 0 ? _k : [],
18
- opponentSecrets: ((_l = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.secrets) !== null && _l !== void 0 ? _l : []).filter((s) => !s.triggered),
16
+ playerRewardCardId: isPlayerSireD && ((_j = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _j === void 0 ? void 0 : _j.length) < 2
17
+ ? null
18
+ : (_m = (_l = (_k = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _k === void 0 ? void 0 : _k[1]) === null || _l === void 0 ? void 0 : _l.cardId) !== null && _m !== void 0 ? _m : (_o = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewards) === null || _o === void 0 ? void 0 : _o[0],
19
+ playerRewardEntityId: isPlayerSireD && ((_p = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _p === void 0 ? void 0 : _p.length) < 2
20
+ ? null
21
+ : (_r = (_q = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _q === void 0 ? void 0 : _q[1]) === null || _r === void 0 ? void 0 : _r.entityId,
22
+ playerRewardData: isPlayerSireD && ((_s = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _s === void 0 ? void 0 : _s.length) < 2
23
+ ? null
24
+ : (_u = (_t = playerHero === null || playerHero === void 0 ? void 0 : playerHero.questRewardEntities) === null || _t === void 0 ? void 0 : _t[0]) === null || _u === void 0 ? void 0 : _u.scriptDataNum1,
25
+ playerTrinkets: playerHero === null || playerHero === void 0 ? void 0 : playerHero.trinkets,
26
+ opponentSecrets: ((_v = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.secrets) !== null && _v !== void 0 ? _v : []).filter((s) => !s.triggered),
19
27
  opponentCardId: opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.cardId,
20
28
  opponentEntityId: opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.entityId,
21
- opponentHeroPowerCardId: opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.heroPowerId,
22
- opponentHeroPowerEntityId: opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.heroPowerEntityId,
29
+ opponentHeroPowerCardId: (_0 = (_x = (_w = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.trinkets.find((t) => t.scriptDataNum6 === 3)) === null || _w === void 0 ? void 0 : _w.cardId) !== null && _x !== void 0 ? _x : (isOpponentSireD ? (_z = (_y = opponentHero.questRewardEntities) === null || _y === void 0 ? void 0 : _y[0]) === null || _z === void 0 ? void 0 : _z.cardId : null)) !== null && _0 !== void 0 ? _0 : opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.heroPowerId,
30
+ opponentHeroPowerEntityId: 200000002,
23
31
  opponentHeroPowerUsed: opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.heroPowerUsed,
24
- opponentRewardCardId: (_p = (_o = (_m = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _m === void 0 ? void 0 : _m[0]) === null || _o === void 0 ? void 0 : _o.cardId) !== null && _p !== void 0 ? _p : (_q = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewards) === null || _q === void 0 ? void 0 : _q[0],
25
- opponentRewardEntityId: (_s = (_r = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _r === void 0 ? void 0 : _r[0]) === null || _s === void 0 ? void 0 : _s.entityId,
26
- opponentRewardData: (_u = (_t = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _t === void 0 ? void 0 : _t[0]) === null || _u === void 0 ? void 0 : _u.scriptDataNum1,
27
- opponentTrinkets: (_v = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.trinkets) !== null && _v !== void 0 ? _v : [],
32
+ opponentRewardCardId: isOpponentSireD && ((_1 = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _1 === void 0 ? void 0 : _1.length) < 2
33
+ ? null
34
+ : (_4 = (_3 = (_2 = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _2 === void 0 ? void 0 : _2[1]) === null || _3 === void 0 ? void 0 : _3.cardId) !== null && _4 !== void 0 ? _4 : (_5 = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewards) === null || _5 === void 0 ? void 0 : _5[0],
35
+ opponentRewardEntityId: isOpponentSireD && ((_6 = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _6 === void 0 ? void 0 : _6.length) < 2
36
+ ? null
37
+ : (_8 = (_7 = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _7 === void 0 ? void 0 : _7[1]) === null || _8 === void 0 ? void 0 : _8.entityId,
38
+ opponentRewardData: isOpponentSireD && ((_9 = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _9 === void 0 ? void 0 : _9.length) < 2
39
+ ? null
40
+ : (_11 = (_10 = opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.questRewardEntities) === null || _10 === void 0 ? void 0 : _10[0]) === null || _11 === void 0 ? void 0 : _11.scriptDataNum1,
41
+ opponentTrinkets: opponentHero === null || opponentHero === void 0 ? void 0 : opponentHero.trinkets,
28
42
  };
29
43
  return result;
30
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"game-action.js","sourceRoot":"","sources":["../../../src/simulation/spectator/game-action.ts"],"names":[],"mappings":";;;AAuDO,MAAM,eAAe,GAAG,CAC9B,UAA2B,EAC3B,YAA6B,EAC7B,MAA2B,EACd,EAAE;;IACf,MAAM,MAAM,GAAe;QAC1B,GAAG,MAAM;QAET,aAAa,EAAE,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,YAAY,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM;QAChC,cAAc,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ;QACpC,qBAAqB,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW;QAC9C,uBAAuB,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,iBAAiB;QACtD,mBAAmB,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa;QAC9C,kBAAkB,EAAE,MAAA,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB,0CAAG,CAAC,CAAC,0CAAE,MAAM,mCAAI,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,YAAY,0CAAG,CAAC,CAAC;QACjG,oBAAoB,EAAE,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB,0CAAG,CAAC,CAAC,0CAAE,QAAQ;QACpE,gBAAgB,EAAE,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,mBAAmB,0CAAG,CAAC,CAAC,0CAAE,cAAc;QACtE,cAAc,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,mCAAI,EAAE;QAE1C,eAAe,EAAE,CAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,cAAc,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM;QACpC,gBAAgB,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ;QACxC,uBAAuB,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,WAAW;QAClD,yBAAyB,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,iBAAiB;QAC1D,qBAAqB,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,aAAa;QAClD,oBAAoB,EAAE,MAAA,MAAA,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,0CAAG,CAAC,CAAC,0CAAE,MAAM,mCAAI,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,0CAAG,CAAC,CAAC;QACvG,sBAAsB,EAAE,MAAA,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,0CAAG,CAAC,CAAC,0CAAE,QAAQ;QACxE,kBAAkB,EAAE,MAAA,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,0CAAG,CAAC,CAAC,0CAAE,cAAc;QAC1E,gBAAgB,EAAE,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,mCAAI,EAAE;KAChC,CAAC;IAChB,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AA/BW,QAAA,eAAe,mBA+B1B","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\n\r\nexport interface GameAction {\r\n\ttype:\r\n\t\t| 'damage'\r\n\t\t| 'attack'\r\n\t\t| 'spawn'\r\n\t\t| 'minion-death'\r\n\t\t| 'power-target'\r\n\t\t| 'start-of-combat'\r\n\t\t| 'player-attack'\r\n\t\t| 'opponent-attack';\r\n\tplayerBoard: readonly BoardEntity[];\r\n\tplayerHand: readonly BoardEntity[];\r\n\tplayerSecrets: readonly BoardSecret[];\r\n\tplayerTrinkets: readonly BoardTrinket[];\r\n\topponentBoard: readonly BoardEntity[];\r\n\topponentHand: readonly BoardEntity[];\r\n\topponentSecrets: readonly BoardSecret[];\r\n\topponentTrinkets: readonly BoardTrinket[];\r\n\tplayerCardId: string;\r\n\tplayerEntityId: number;\r\n\tplayerHeroPowerCardId: string;\r\n\tplayerHeroPowerEntityId: number;\r\n\tplayerHeroPowerUsed: boolean;\r\n\topponentCardId: string;\r\n\topponentEntityId: number;\r\n\topponentHeroPowerCardId: string;\r\n\topponentHeroPowerEntityId: number;\r\n\topponentHeroPowerUsed: boolean;\r\n\tplayerRewardCardId: string;\r\n\tplayerRewardEntityId: number;\r\n\tplayerRewardData: number;\r\n\topponentRewardCardId: string;\r\n\topponentRewardEntityId: number;\r\n\topponentRewardData: number;\r\n\tsourceEntityId?: number;\r\n\t/** @deprecated */\r\n\ttargetEntityId?: number;\r\n\ttargetEntityIds?: number[];\r\n\r\n\tdamages?: Damage[];\r\n\tspawns?: readonly BoardEntity[];\r\n\tdeaths?: readonly BoardEntity[];\r\n\tdeadMinionsPositionsOnBoard?: readonly number[];\r\n}\r\n\r\nexport interface Damage {\r\n\treadonly sourceEntityId?: number;\r\n\treadonly targetEntityId?: number;\r\n\treadonly damage?: number;\r\n}\r\n\r\nexport const buildGameAction = (\r\n\tplayerHero: BgsPlayerEntity,\r\n\topponentHero: BgsPlayerEntity,\r\n\taction: Partial<GameAction>,\r\n): GameAction => {\r\n\tconst result: GameAction = {\r\n\t\t...action,\r\n\r\n\t\tplayerSecrets: (playerHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\tplayerCardId: playerHero?.cardId,\r\n\t\tplayerEntityId: playerHero?.entityId,\r\n\t\tplayerHeroPowerCardId: playerHero?.heroPowerId,\r\n\t\tplayerHeroPowerEntityId: playerHero?.heroPowerEntityId,\r\n\t\tplayerHeroPowerUsed: playerHero?.heroPowerUsed,\r\n\t\tplayerRewardCardId: playerHero?.questRewardEntities?.[0]?.cardId ?? playerHero?.questRewards?.[0],\r\n\t\tplayerRewardEntityId: playerHero?.questRewardEntities?.[0]?.entityId,\r\n\t\tplayerRewardData: playerHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\tplayerTrinkets: playerHero?.trinkets ?? [],\r\n\r\n\t\topponentSecrets: (opponentHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\topponentCardId: opponentHero?.cardId,\r\n\t\topponentEntityId: opponentHero?.entityId,\r\n\t\topponentHeroPowerCardId: opponentHero?.heroPowerId,\r\n\t\topponentHeroPowerEntityId: opponentHero?.heroPowerEntityId,\r\n\t\topponentHeroPowerUsed: opponentHero?.heroPowerUsed,\r\n\t\topponentRewardCardId: opponentHero?.questRewardEntities?.[0]?.cardId ?? opponentHero?.questRewards?.[0],\r\n\t\topponentRewardEntityId: opponentHero?.questRewardEntities?.[0]?.entityId,\r\n\t\topponentRewardData: opponentHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\topponentTrinkets: opponentHero?.trinkets ?? [],\r\n\t} as GameAction;\r\n\treturn result;\r\n};\r\n"]}
1
+ {"version":3,"file":"game-action.js","sourceRoot":"","sources":["../../../src/simulation/spectator/game-action.ts"],"names":[],"mappings":"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","sourcesContent":["import { CardIds } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../../bgs-player-entity';\r\nimport { BoardEntity } from '../../board-entity';\r\nimport { BoardSecret } from '../../board-secret';\r\n\r\nexport interface GameAction {\r\n\ttype:\r\n\t\t| 'damage'\r\n\t\t| 'attack'\r\n\t\t| 'spawn'\r\n\t\t| 'minion-death'\r\n\t\t| 'power-target'\r\n\t\t| 'start-of-combat'\r\n\t\t| 'player-attack'\r\n\t\t| 'opponent-attack';\r\n\tplayerBoard: readonly BoardEntity[];\r\n\tplayerHand: readonly BoardEntity[];\r\n\tplayerSecrets: readonly BoardSecret[];\r\n\tplayerTrinkets: readonly BoardTrinket[];\r\n\topponentBoard: readonly BoardEntity[];\r\n\topponentHand: readonly BoardEntity[];\r\n\topponentSecrets: readonly BoardSecret[];\r\n\topponentTrinkets: readonly BoardTrinket[];\r\n\tplayerCardId: string;\r\n\tplayerEntityId: number;\r\n\tplayerHeroPowerCardId: string;\r\n\tplayerHeroPowerEntityId: number;\r\n\tplayerHeroPowerUsed: boolean;\r\n\topponentCardId: string;\r\n\topponentEntityId: number;\r\n\topponentHeroPowerCardId: string;\r\n\topponentHeroPowerEntityId: number;\r\n\topponentHeroPowerUsed: boolean;\r\n\tplayerRewardCardId: string;\r\n\tplayerRewardEntityId: number;\r\n\tplayerRewardData: number;\r\n\topponentRewardCardId: string;\r\n\topponentRewardEntityId: number;\r\n\topponentRewardData: number;\r\n\tsourceEntityId?: number;\r\n\t/** @deprecated */\r\n\ttargetEntityId?: number;\r\n\ttargetEntityIds?: number[];\r\n\r\n\tdamages?: Damage[];\r\n\tspawns?: readonly BoardEntity[];\r\n\tdeaths?: readonly BoardEntity[];\r\n\tdeadMinionsPositionsOnBoard?: readonly number[];\r\n}\r\n\r\nexport interface Damage {\r\n\treadonly sourceEntityId?: number;\r\n\treadonly targetEntityId?: number;\r\n\treadonly damage?: number;\r\n}\r\n\r\nexport const buildGameAction = (\r\n\tplayerHero: BgsPlayerEntity,\r\n\topponentHero: BgsPlayerEntity,\r\n\taction: Partial<GameAction>,\r\n): GameAction => {\r\n\tconst isPlayerSireD = playerHero?.cardId?.startsWith(CardIds.SireDenathrius_BG24_HERO_100);\r\n\tconst isOpponentSireD = opponentHero?.cardId?.startsWith(CardIds.SireDenathrius_BG24_HERO_100);\r\n\tconst result: GameAction = {\r\n\t\t...action,\r\n\r\n\t\tplayerSecrets: (playerHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\tplayerCardId: playerHero?.cardId,\r\n\t\tplayerEntityId: playerHero?.entityId,\r\n\t\tplayerHeroPowerCardId:\r\n\t\t\tplayerHero?.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t\t\t(isPlayerSireD ? playerHero.questRewardEntities?.[0]?.cardId : null) ??\r\n\t\t\tplayerHero?.heroPowerId,\r\n\t\tplayerHeroPowerEntityId: 100000002,\r\n\t\tplayerHeroPowerUsed: playerHero?.heroPowerUsed,\r\n\t\tplayerRewardCardId:\r\n\t\t\tisPlayerSireD && playerHero?.questRewardEntities?.length < 2\r\n\t\t\t\t? null\r\n\t\t\t\t: playerHero?.questRewardEntities?.[1]?.cardId ?? playerHero?.questRewards?.[0],\r\n\t\tplayerRewardEntityId:\r\n\t\t\tisPlayerSireD && playerHero?.questRewardEntities?.length < 2\r\n\t\t\t\t? null\r\n\t\t\t\t: playerHero?.questRewardEntities?.[1]?.entityId,\r\n\t\tplayerRewardData:\r\n\t\t\tisPlayerSireD && playerHero?.questRewardEntities?.length < 2\r\n\t\t\t\t? null\r\n\t\t\t\t: playerHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\tplayerTrinkets: playerHero?.trinkets,\r\n\r\n\t\topponentSecrets: (opponentHero?.secrets ?? []).filter((s) => !s.triggered),\r\n\t\topponentCardId: opponentHero?.cardId,\r\n\t\topponentEntityId: opponentHero?.entityId,\r\n\t\topponentHeroPowerCardId:\r\n\t\t\topponentHero?.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t\t\t(isOpponentSireD ? opponentHero.questRewardEntities?.[0]?.cardId : null) ??\r\n\t\t\topponentHero?.heroPowerId,\r\n\t\topponentHeroPowerEntityId: 200000002,\r\n\t\topponentHeroPowerUsed: opponentHero?.heroPowerUsed,\r\n\t\topponentRewardCardId:\r\n\t\t\tisOpponentSireD && opponentHero?.questRewardEntities?.length < 2\r\n\t\t\t\t? null\r\n\t\t\t\t: opponentHero?.questRewardEntities?.[1]?.cardId ?? opponentHero?.questRewards?.[0],\r\n\t\topponentRewardEntityId:\r\n\t\t\tisOpponentSireD && opponentHero?.questRewardEntities?.length < 2\r\n\t\t\t\t? null\r\n\t\t\t\t: opponentHero?.questRewardEntities?.[1]?.entityId,\r\n\t\topponentRewardData:\r\n\t\t\tisOpponentSireD && opponentHero?.questRewardEntities?.length < 2\r\n\t\t\t\t? null\r\n\t\t\t\t: opponentHero?.questRewardEntities?.[0]?.scriptDataNum1,\r\n\t\topponentTrinkets: opponentHero?.trinkets,\r\n\t} as GameAction;\r\n\treturn result;\r\n};\r\n"]}
@@ -344,6 +344,7 @@ const handleStartOfCombatQuestRewardsForPlayer = (playerEntity, playerBoard, opp
344
344
  for (let i = 0; i < Math.min(playerBoard.length, 7); i++) {
345
345
  const entityToCoy = playerBoard[i];
346
346
  const copy = (0, utils_2.copyEntity)(entityToCoy);
347
+ (0, add_minion_to_board_1.removeAurasFromSelf)(copy, playerBoard, playerEntity, gameState);
347
348
  const newMinions = (0, deathrattle_spawns_1.spawnEntities)(copy.cardId, 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState.allCards, gameState.cardsData, gameState.sharedState, gameState.spectator, playerEntity.friendly, false, false, false, copy);
348
349
  const spawns = (0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, playerEntity, playerBoard.length - i - 1, opponentBoard, opponentEntity, gameState);
349
350
  i += spawns.length;
@@ -1080,6 +1081,7 @@ const performStartOfCombatMinionsForPlayer = (attacker, attackingBoard, attackin
1080
1081
  if (attackingBoard.length > 0 || defendingBoard.length > 0) {
1081
1082
  const quantity = attacker.cardId === "BG30_101" ? 3 : 6;
1082
1083
  (0, divine_shield_1.grantDivineShieldToLeftmostMinions)(attacker, attackingBoard, attackingBoardHero, quantity, defendingBoardHero, gameState);
1084
+ (0, divine_shield_1.grantDivineShieldToLeftmostMinions)(attacker, defendingBoard, defendingBoardHero, quantity, attackingBoardHero, gameState);
1083
1085
  }
1084
1086
  }
1085
1087
  else if (attacker.cardId === "BG30_119" ||