@firestone-hs/simulate-bgs-battle 1.1.474 → 1.1.475

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.
@@ -0,0 +1,4 @@
1
+ import { BgsPlayerEntity } from '../bgs-player-entity';
2
+ import { BoardEntity } from '../board-entity';
3
+ import { FullGameState } from './internal-game-state';
4
+ export declare const applyAfterAttackEffects: (attackingEntity: BoardEntity, attackingBoard: BoardEntity[], attackingBoardHero: BgsPlayerEntity, defendingEntity: BoardEntity, defendingBoardHero: BgsPlayerEntity, damageDoneByAttacker: number, damageDoneByDefender: number, gameState: FullGameState) => void;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyAfterAttackEffects = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const utils_1 = require("../utils");
6
+ const blood_gems_1 = require("./blood-gems");
7
+ const cards_in_hand_1 = require("./cards-in-hand");
8
+ const deathrattle_orchestration_1 = require("./deathrattle-orchestration");
9
+ const deathrattle_utils_1 = require("./deathrattle-utils");
10
+ const quest_1 = require("./quest");
11
+ const stats_1 = require("./stats");
12
+ const applyAfterAttackEffects = (attackingEntity, attackingBoard, attackingBoardHero, defendingEntity, defendingBoardHero, damageDoneByAttacker, damageDoneByDefender, gameState) => {
13
+ var _a, _b;
14
+ let secretTriggered = null;
15
+ if ((secretTriggered = (_a = defendingBoardHero.secrets) === null || _a === void 0 ? void 0 : _a.find((secret) => !secret.triggered && (secret === null || secret === void 0 ? void 0 : secret.cardId) === "TB_Bacon_Secrets_14")) != null) {
16
+ if (damageDoneByAttacker >= 3 && !(attackingEntity.health <= 0 || attackingEntity.definitelyDead)) {
17
+ secretTriggered.triggered = true;
18
+ attackingEntity.definitelyDead = true;
19
+ gameState.spectator.registerPowerTarget(secretTriggered, attackingEntity, attackingBoard, defendingBoardHero, attackingBoardHero);
20
+ }
21
+ }
22
+ if (attackingEntity.cardId === "BG20_104" || attackingEntity.cardId === "BG20_104_G") {
23
+ const quantity = attackingEntity.cardId === "BG20_104_G" ? 2 : 1;
24
+ const cards = quantity === 1 ? ["BG20_GEM"] : ["BG20_GEM", "BG20_GEM"];
25
+ (0, cards_in_hand_1.addCardsInHand)(attackingBoardHero, attackingBoard, cards, gameState);
26
+ }
27
+ else if (attackingEntity.cardId === "BG23_350" || attackingEntity.cardId === "BG23_350_G") {
28
+ const modifier = attackingEntity.cardId === "BG23_350_G" ? 2 : 1;
29
+ (0, utils_1.grantStatsToMinionsOfEachType)(attackingEntity, attackingBoard, attackingBoardHero, modifier * 1, modifier * 2, gameState);
30
+ }
31
+ else if (attackingEntity.cardId === "BG26_RLK_117" ||
32
+ attackingEntity.cardId === "BG26_RLK_117_G") {
33
+ attackingEntity.definitelyDead = true;
34
+ }
35
+ else if (attackingEntity.cardId === "BGS_078" ||
36
+ attackingEntity.cardId === "TB_BaconUps_135") {
37
+ const loops = attackingEntity.cardId === "TB_BaconUps_135" ? 2 : 1;
38
+ const validDeathrattles = (0, deathrattle_utils_1.getValidDeathrattles)(attackingBoard.filter((e) => e.entityId !== attackingEntity.entityId), gameState);
39
+ const leftMost = validDeathrattles[0];
40
+ if (!!leftMost) {
41
+ for (let i = 0; i < loops; i++) {
42
+ gameState.spectator.registerPowerTarget(attackingEntity, leftMost, attackingBoard, attackingBoardHero, defendingBoardHero);
43
+ const indexFromRight = attackingBoard.length - (attackingBoard.indexOf(leftMost) + 1);
44
+ (0, deathrattle_orchestration_1.processDeathrattleForMinion)(leftMost, indexFromRight, [leftMost], leftMost.friendly ? gameState.gameState.player : gameState.gameState.opponent, leftMost.friendly ? gameState.gameState.opponent : gameState.gameState.player, gameState, false);
45
+ }
46
+ }
47
+ }
48
+ else if ((_b = attackingEntity.additionalCards) === null || _b === void 0 ? void 0 : _b.includes("BG26_RLK_117")) {
49
+ attackingEntity.definitelyDead = true;
50
+ }
51
+ attackingBoard
52
+ .filter((e) => { var _a; return (_a = e.additionalCards) === null || _a === void 0 ? void 0 : _a.includes("BG_GIL_655"); })
53
+ .forEach((e) => {
54
+ (0, stats_1.modifyStats)(e, 1, 0, attackingBoard, attackingBoardHero, gameState);
55
+ });
56
+ attackingEntity.stealth = false;
57
+ applyOnAttackQuest(attackingEntity, attackingBoard, attackingBoardHero, gameState);
58
+ };
59
+ exports.applyAfterAttackEffects = applyAfterAttackEffects;
60
+ const applyOnAttackQuest = (attackingEntity, attackingBoard, attackingBoardHero, gameState) => {
61
+ var _a, _b;
62
+ const quests = (_a = attackingBoardHero.questEntities) !== null && _a !== void 0 ? _a : [];
63
+ for (const quest of quests) {
64
+ switch (quest.CardId) {
65
+ case "BG24_Quest_352":
66
+ (0, quest_1.onQuestProgressUpdated)(attackingBoardHero, quest, attackingBoard, gameState);
67
+ break;
68
+ }
69
+ }
70
+ const trinkets = (_b = attackingBoardHero.trinkets) !== null && _b !== void 0 ? _b : [];
71
+ for (const trinket of trinkets) {
72
+ switch (trinket.cardId) {
73
+ case "BG30_MagicItem_546":
74
+ trinket.scriptDataNum1--;
75
+ if (trinket.scriptDataNum1 <= 0) {
76
+ for (const entity of attackingBoard.filter((e) => (0, utils_1.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.QUILBOAR, gameState.allCards))) {
77
+ (0, blood_gems_1.playBloodGemsOn)(trinket, entity, 1, attackingBoard, attackingBoardHero, gameState);
78
+ gameState.spectator.registerPowerTarget(trinket, entity, attackingBoard, attackingBoardHero, attackingBoardHero);
79
+ }
80
+ trinket.scriptDataNum1 = gameState.cardsData.defaultScriptDataNum(trinket.cardId);
81
+ }
82
+ break;
83
+ }
84
+ }
85
+ };
86
+ //# sourceMappingURL=after-attack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"after-attack.js","sourceRoot":"","sources":["../../src/simulation/after-attack.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 { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { playBloodGemsOn } from './blood-gems';\r\nimport { addCardsInHand } from './cards-in-hand';\r\nimport { processDeathrattleForMinion } from './deathrattle-orchestration';\r\nimport { getValidDeathrattles } from './deathrattle-utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { onQuestProgressUpdated } from './quest';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const applyAfterAttackEffects = (\r\n\tattackingEntity: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tdamageDoneByAttacker: number,\r\n\tdamageDoneByDefender: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tlet secretTriggered = null;\r\n\tif (\r\n\t\t(secretTriggered = defendingBoardHero.secrets?.find(\r\n\t\t\t(secret) => !secret.triggered && secret?.cardId === CardIds.Reckoning_TB_Bacon_Secrets_14,\r\n\t\t)) != null\r\n\t) {\r\n\t\t// console.log('triggering secret?', damageDoneByAttacker, stringifySimpleCard(attackingEntity, allCards));\r\n\t\tif (damageDoneByAttacker >= 3 && !(attackingEntity.health <= 0 || attackingEntity.definitelyDead)) {\r\n\t\t\tsecretTriggered.triggered = true;\r\n\t\t\tattackingEntity.definitelyDead = true;\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tsecretTriggered,\r\n\t\t\t\tattackingEntity,\r\n\t\t\t\tattackingBoard,\r\n\t\t\t\tdefendingBoardHero,\r\n\t\t\t\tattackingBoardHero,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tif (attackingEntity.cardId === CardIds.Bonker_BG20_104 || attackingEntity.cardId === CardIds.Bonker_BG20_104_G) {\r\n\t\tconst quantity = attackingEntity.cardId === CardIds.Bonker_BG20_104_G ? 2 : 1;\r\n\t\tconst cards = quantity === 1 ? [CardIds.BloodGem] : [CardIds.BloodGem, CardIds.BloodGem];\r\n\t\taddCardsInHand(attackingBoardHero, attackingBoard, cards, gameState);\r\n\t} else if (attackingEntity.cardId === CardIds.Yrel_BG23_350 || attackingEntity.cardId === CardIds.Yrel_BG23_350_G) {\r\n\t\tconst modifier = attackingEntity.cardId === CardIds.Yrel_BG23_350_G ? 2 : 1;\r\n\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\tattackingEntity,\r\n\t\t\tattackingBoard,\r\n\t\t\tattackingBoardHero,\r\n\t\t\tmodifier * 1,\r\n\t\t\tmodifier * 2,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t} else if (\r\n\t\tattackingEntity.cardId === CardIds.IncorporealCorporal_BG26_RLK_117 ||\r\n\t\tattackingEntity.cardId === CardIds.IncorporealCorporal_BG26_RLK_117_G\r\n\t) {\r\n\t\tattackingEntity.definitelyDead = true;\r\n\t} else if (\r\n\t\tattackingEntity.cardId === CardIds.MonstrousMacaw_BGS_078 ||\r\n\t\tattackingEntity.cardId === CardIds.MonstrousMacaw_TB_BaconUps_135\r\n\t) {\r\n\t\tconst loops = attackingEntity.cardId === CardIds.MonstrousMacaw_TB_BaconUps_135 ? 2 : 1;\r\n\t\tconst validDeathrattles = getValidDeathrattles(\r\n\t\t\tattackingBoard.filter((e) => e.entityId !== attackingEntity.entityId),\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tconst leftMost = validDeathrattles[0];\r\n\t\tif (!!leftMost) {\r\n\t\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tattackingEntity,\r\n\t\t\t\t\tleftMost,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tdefendingBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\tconst indexFromRight = attackingBoard.length - (attackingBoard.indexOf(leftMost) + 1);\r\n\t\t\t\tprocessDeathrattleForMinion(\r\n\t\t\t\t\tleftMost,\r\n\t\t\t\t\tindexFromRight,\r\n\t\t\t\t\t[leftMost],\r\n\t\t\t\t\tleftMost.friendly ? gameState.gameState.player : gameState.gameState.opponent,\r\n\t\t\t\t\tleftMost.friendly ? gameState.gameState.opponent : gameState.gameState.player,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// Putricide-only\r\n\telse if (attackingEntity.additionalCards?.includes(CardIds.IncorporealCorporal_BG26_RLK_117)) {\r\n\t\tattackingEntity.definitelyDead = true;\r\n\t}\r\n\r\n\tattackingBoard\r\n\t\t.filter((e) => e.additionalCards?.includes(CardIds.FesterootHulk_BG_GIL_655))\r\n\t\t.forEach((e) => {\r\n\t\t\tmodifyStats(e, 1, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t\t});\r\n\r\n\tattackingEntity.stealth = false;\r\n\r\n\tapplyOnAttackQuest(attackingEntity, attackingBoard, attackingBoardHero, gameState);\r\n};\r\n\r\nconst applyOnAttackQuest = (\r\n\tattackingEntity: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst quests = attackingBoardHero.questEntities ?? [];\r\n\tfor (const quest of quests) {\r\n\t\tswitch (quest.CardId) {\r\n\t\t\tcase CardIds.CrackTheCase:\r\n\t\t\t\tonQuestProgressUpdated(attackingBoardHero, quest, attackingBoard, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tconst trinkets = attackingBoardHero.trinkets ?? [];\r\n\tfor (const trinket of trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.JarOGems_BG30_MagicItem_546:\r\n\t\t\t\ttrinket.scriptDataNum1--;\r\n\t\t\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\t\t\tfor (const entity of attackingBoard.filter((e) =>\r\n\t\t\t\t\t\thasCorrectTribe(e, attackingBoardHero, Race.QUILBOAR, gameState.allCards),\r\n\t\t\t\t\t)) {\r\n\t\t\t\t\t\tplayBloodGemsOn(trinket, entity, 1, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\t\ttrinket,\r\n\t\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttrinket.scriptDataNum1 = gameState.cardsData.defaultScriptDataNum(trinket.cardId);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n};\r\n"]}
@@ -5,19 +5,16 @@ const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const divine_shield_1 = require("../divine-shield");
6
6
  const utils_1 = require("../services/utils");
7
7
  const utils_2 = require("../utils");
8
- const blood_gems_1 = require("./blood-gems");
9
- const cards_in_hand_1 = require("./cards-in-hand");
8
+ const after_attack_1 = require("./after-attack");
10
9
  const damage_effects_1 = require("./damage-effects");
11
10
  const deathrattle_effects_1 = require("./deathrattle-effects");
12
11
  const deathrattle_orchestration_1 = require("./deathrattle-orchestration");
13
12
  const deathrattle_spawns_1 = require("./deathrattle-spawns");
14
- const deathrattle_utils_1 = require("./deathrattle-utils");
15
13
  const frenzy_1 = require("./frenzy");
16
14
  const minion_death_1 = require("./minion-death");
17
15
  const minion_kill_1 = require("./minion-kill");
18
16
  const on_attack_1 = require("./on-attack");
19
17
  const on_being_attacked_1 = require("./on-being-attacked");
20
- const quest_1 = require("./quest");
21
18
  const spawns_1 = require("./spawns");
22
19
  const stats_1 = require("./stats");
23
20
  const summon_when_space_1 = require("./summon-when-space");
@@ -61,7 +58,7 @@ const doFullAttack = (attackingEntity, attackingBoard, attackingBoardHero, defen
61
58
  (0, on_being_attacked_1.applyOnBeingAttackedBuffs)(attackingEntity, attackingBoard, attackingBoardHero, defendingEntity, defendingBoard, defendingBoardHero, gameState);
62
59
  (0, on_attack_1.applyOnAttackEffects)(attackingEntity, attackingBoard, attackingBoardHero, defendingEntity, defendingBoard, defendingBoardHero, gameState);
63
60
  const { damageDoneByAttacker, damageDoneByDefender } = performAttack(attackingEntity, defendingEntity, attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, gameState);
64
- applyAfterAttackEffects(attackingEntity, attackingBoard, attackingBoardHero, defendingEntity, defendingBoardHero, damageDoneByAttacker, damageDoneByDefender, gameState);
61
+ (0, after_attack_1.applyAfterAttackEffects)(attackingEntity, attackingBoard, attackingBoardHero, defendingEntity, defendingBoardHero, damageDoneByAttacker, damageDoneByDefender, gameState);
65
62
  (0, exports.processMinionDeath)(attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, gameState);
66
63
  (0, stats_1.applyAfterStatsUpdate)(gameState);
67
64
  attackingEntity.immuneWhenAttackCharges = Math.max(0, ((_a = attackingEntity.immuneWhenAttackCharges) !== null && _a !== void 0 ? _a : 0) - 1);
@@ -76,66 +73,6 @@ const doFullAttack = (attackingEntity, attackingBoard, attackingBoardHero, defen
76
73
  }
77
74
  };
78
75
  exports.doFullAttack = doFullAttack;
79
- const applyAfterAttackEffects = (attackingEntity, attackingBoard, attackingBoardHero, defendingEntity, defendingBoardHero, damageDoneByAttacker, damageDoneByDefender, gameState) => {
80
- var _a, _b;
81
- let secretTriggered = null;
82
- if ((secretTriggered = (_a = defendingBoardHero.secrets) === null || _a === void 0 ? void 0 : _a.find((secret) => !secret.triggered && (secret === null || secret === void 0 ? void 0 : secret.cardId) === "TB_Bacon_Secrets_14")) != null) {
83
- if (damageDoneByAttacker >= 3 && !(attackingEntity.health <= 0 || attackingEntity.definitelyDead)) {
84
- secretTriggered.triggered = true;
85
- attackingEntity.definitelyDead = true;
86
- gameState.spectator.registerPowerTarget(secretTriggered, attackingEntity, attackingBoard, defendingBoardHero, attackingBoardHero);
87
- }
88
- }
89
- if (attackingEntity.cardId === "BG20_104" || attackingEntity.cardId === "BG20_104_G") {
90
- const quantity = attackingEntity.cardId === "BG20_104_G" ? 2 : 1;
91
- const cards = quantity === 1 ? ["BG20_GEM"] : ["BG20_GEM", "BG20_GEM"];
92
- (0, cards_in_hand_1.addCardsInHand)(attackingBoardHero, attackingBoard, cards, gameState);
93
- }
94
- else if (attackingEntity.cardId === "BG23_350" || attackingEntity.cardId === "BG23_350_G") {
95
- const modifier = attackingEntity.cardId === "BG23_350_G" ? 2 : 1;
96
- (0, utils_2.grantStatsToMinionsOfEachType)(attackingEntity, attackingBoard, attackingBoardHero, modifier * 1, modifier * 2, gameState);
97
- }
98
- else if (attackingEntity.cardId === "BG26_RLK_117" ||
99
- attackingEntity.cardId === "BG26_RLK_117_G") {
100
- attackingEntity.definitelyDead = true;
101
- }
102
- else if ((_b = attackingEntity.additionalCards) === null || _b === void 0 ? void 0 : _b.includes("BG26_RLK_117")) {
103
- attackingEntity.definitelyDead = true;
104
- }
105
- attackingBoard
106
- .filter((e) => { var _a; return (_a = e.additionalCards) === null || _a === void 0 ? void 0 : _a.includes("BG_GIL_655"); })
107
- .forEach((e) => {
108
- (0, stats_1.modifyStats)(e, 1, 0, attackingBoard, attackingBoardHero, gameState);
109
- });
110
- attackingEntity.stealth = false;
111
- applyOnAttackQuest(attackingEntity, attackingBoard, attackingBoardHero, gameState);
112
- };
113
- const applyOnAttackQuest = (attackingEntity, attackingBoard, attackingBoardHero, gameState) => {
114
- var _a, _b;
115
- const quests = (_a = attackingBoardHero.questEntities) !== null && _a !== void 0 ? _a : [];
116
- for (const quest of quests) {
117
- switch (quest.CardId) {
118
- case "BG24_Quest_352":
119
- (0, quest_1.onQuestProgressUpdated)(attackingBoardHero, quest, attackingBoard, gameState);
120
- break;
121
- }
122
- }
123
- const trinkets = (_b = attackingBoardHero.trinkets) !== null && _b !== void 0 ? _b : [];
124
- for (const trinket of trinkets) {
125
- switch (trinket.cardId) {
126
- case "BG30_MagicItem_546":
127
- trinket.scriptDataNum1--;
128
- if (trinket.scriptDataNum1 <= 0) {
129
- for (const entity of attackingBoard.filter((e) => (0, utils_2.hasCorrectTribe)(e, attackingBoardHero, reference_data_1.Race.QUILBOAR, gameState.allCards))) {
130
- (0, blood_gems_1.playBloodGemsOn)(trinket, entity, 1, attackingBoard, attackingBoardHero, gameState);
131
- gameState.spectator.registerPowerTarget(trinket, entity, attackingBoard, attackingBoardHero, attackingBoardHero);
132
- }
133
- trinket.scriptDataNum1 = gameState.cardsData.defaultScriptDataNum(trinket.cardId);
134
- }
135
- break;
136
- }
137
- }
138
- };
139
76
  const performAttack = (attackingEntity, defendingEntity, attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, gameState) => {
140
77
  let damageDoneByAttacker = 0;
141
78
  let damageDoneByDefender = 0;
@@ -244,38 +181,12 @@ const performAttack = (attackingEntity, defendingEntity, attackingBoard, attacki
244
181
  }
245
182
  }
246
183
  }
247
- if (attackingEntity.cardId === "BGS_078" ||
248
- attackingEntity.cardId === "TB_BaconUps_135") {
249
- const loops = attackingEntity.cardId === "TB_BaconUps_135" ? 2 : 1;
250
- const validDeathrattles = (0, deathrattle_utils_1.getValidDeathrattles)(attackingBoard.filter((e) => e.entityId !== attackingEntity.entityId), gameState);
251
- const leftMost = validDeathrattles[0];
252
- if (!!leftMost) {
253
- for (let i = 0; i < loops; i++) {
254
- gameState.spectator.registerPowerTarget(attackingEntity, leftMost, attackingBoard, attackingBoardHero, defendingBoardHero);
255
- const indexFromRight = attackingBoard.length - (attackingBoard.indexOf(leftMost) + 1);
256
- (0, deathrattle_orchestration_1.processDeathrattleForMinion)(leftMost, indexFromRight, [leftMost], leftMost.friendly ? gameState.gameState.player : gameState.gameState.opponent, leftMost.friendly ? gameState.gameState.opponent : gameState.gameState.player, gameState, false);
257
- }
258
- }
259
- }
260
184
  attackingEntity.attackImmediately = false;
261
185
  if (attackingEntity.enchantments.some((e) => e.cardId === "BG24_Reward_364e")) {
262
186
  attackingEntity.definitelyDead = true;
263
187
  }
264
188
  return { damageDoneByAttacker, damageDoneByDefender };
265
189
  };
266
- const triggerRandomDeathrattle = (sourceEntity, attackingBoard, attackingBoardHero, defendingBoard, defendingBoardHero, gameState, excludeSource = false) => {
267
- const validDeathrattles = (0, deathrattle_utils_1.getValidDeathrattles)(attackingBoard, gameState).filter((entity) => !excludeSource || entity.entityId !== sourceEntity.entityId);
268
- if (validDeathrattles.length === 0) {
269
- return;
270
- }
271
- const targetEntity = (0, utils_1.pickRandom)(validDeathrattles);
272
- if (!(targetEntity === null || targetEntity === void 0 ? void 0 : targetEntity.cardId)) {
273
- console.error('missing card id when triggering random deathrattle', (0, utils_2.stringifySimpleCard)(targetEntity, gameState.allCards), targetEntity, validDeathrattles.length, (0, utils_2.stringifySimple)(validDeathrattles, gameState.allCards), (0, utils_2.stringifySimple)(attackingBoard, gameState.allCards), excludeSource, (0, utils_2.stringifySimpleCard)(sourceEntity, gameState.allCards));
274
- }
275
- gameState.spectator.registerPowerTarget(sourceEntity, targetEntity, attackingBoard, attackingBoardHero, defendingBoardHero);
276
- const indexFromRight = attackingBoard.length - (attackingBoard.indexOf(targetEntity) + 1);
277
- (0, deathrattle_orchestration_1.processDeathrattleForMinion)(targetEntity, indexFromRight, [targetEntity], targetEntity.friendly ? gameState.gameState.player : gameState.gameState.opponent, targetEntity.friendly ? gameState.gameState.opponent : gameState.gameState.player, gameState, false);
278
- };
279
190
  const getAttackingEntity = (attackingBoard, allCards) => {
280
191
  const debug = attackingBoard.map((e) => {
281
192
  var _a;