@firestone-hs/simulate-bgs-battle 1.1.707 → 1.1.708

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 (41) hide show
  1. package/dist/bgs-player-entity.d.ts +4 -0
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/cards/card.interface.d.ts +6 -1
  4. package/dist/cards/card.interface.js +3 -1
  5. package/dist/cards/card.interface.js.map +1 -1
  6. package/dist/cards/impl/_card-mappings.js +2 -0
  7. package/dist/cards/impl/_card-mappings.js.map +1 -1
  8. package/dist/cards/impl/bg-spell/back-to-back.js +13 -6
  9. package/dist/cards/impl/bg-spell/back-to-back.js.map +1 -1
  10. package/dist/cards/impl/hero-power/lock-and-load.js +1 -1
  11. package/dist/cards/impl/hero-power/lock-and-load.js.map +1 -1
  12. package/dist/cards/impl/minion/choral-mrrrglr.js +2 -2
  13. package/dist/cards/impl/minion/choral-mrrrglr.js.map +1 -1
  14. package/dist/cards/impl/minion/diremuck-forager.js +1 -1
  15. package/dist/cards/impl/minion/diremuck-forager.js.map +1 -1
  16. package/dist/cards/impl/minion/falling-sky-golem.d.ts +2 -2
  17. package/dist/cards/impl/minion/falling-sky-golem.js +9 -0
  18. package/dist/cards/impl/minion/falling-sky-golem.js.map +1 -1
  19. package/dist/cards/impl/minion/mama-mrrglton.js +5 -6
  20. package/dist/cards/impl/minion/mama-mrrglton.js.map +1 -1
  21. package/dist/cards/impl/minion/papa-mrrglton.js +5 -6
  22. package/dist/cards/impl/minion/papa-mrrglton.js.map +1 -1
  23. package/dist/cards/impl/minion/timewarped-mrrrglr.js +2 -2
  24. package/dist/cards/impl/minion/timewarped-mrrrglr.js.map +1 -1
  25. package/dist/cards/impl/trinket/dramaloc-sticker.js +1 -2
  26. package/dist/cards/impl/trinket/dramaloc-sticker.js.map +1 -1
  27. package/dist/cards/impl/trinket/mishmash.d.ts +2 -0
  28. package/dist/cards/impl/trinket/mishmash.js +24 -0
  29. package/dist/cards/impl/trinket/mishmash.js.map +1 -0
  30. package/dist/mechanics/player-global-effects.d.ts +10 -1
  31. package/dist/mechanics/player-global-effects.js +22 -1
  32. package/dist/mechanics/player-global-effects.js.map +1 -1
  33. package/dist/mechanics/tavern-spell-repeat.js +10 -3
  34. package/dist/mechanics/tavern-spell-repeat.js.map +1 -1
  35. package/dist/simulation/deathrattle-spawns.js +5 -5
  36. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  37. package/dist/simulation/global-info-helpers.js +1 -1
  38. package/dist/simulation/global-info-helpers.js.map +1 -1
  39. package/dist/simulation/stats.js +0 -12
  40. package/dist/simulation/stats.js.map +1 -1
  41. package/package.json +1 -1
@@ -10,13 +10,12 @@ exports.MamaMrrglton = {
10
10
  var _a;
11
11
  const mult = minion.cardId === "BG35_140_G" ? 2 : 1;
12
12
  const mrrg = (_a = input.hero.globalInfo.MrrgltonsPlayedThisGame) !== null && _a !== void 0 ? _a : 0;
13
- const atk = 2 * mult + mrrg;
14
- for (const e of input.board) {
15
- if ((0, utils_1.hasCorrectTribe)(e, input.hero, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {
16
- (0, stats_1.modifyStats)(e, minion, atk, 0, input.board, input.hero, input.gameState);
17
- }
13
+ const atk = 2 * (1 + mrrg) * mult;
14
+ const candidates = input.board.filter((e) => e != minion &&
15
+ (0, utils_1.hasCorrectTribe)(e, input.hero, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards));
16
+ for (const e of candidates) {
17
+ (0, stats_1.modifyStats)(e, minion, atk, 0, input.board, input.hero, input.gameState);
18
18
  }
19
- input.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;
20
19
  return true;
21
20
  },
22
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mama-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/mama-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAI,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACrG,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACzE;SACD;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const MamaMrrglton: BattlecryCard = {\r\n\tcardIds: [CardIds.MamaMrrglton_BG35_140, CardIds.MamaMrrglton_BG35_140_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MamaMrrglton_BG35_140_G ? 2 : 1;\r\n\t\tconst mrrg = input.hero.globalInfo.MrrgltonsPlayedThisGame ?? 0;\r\n\t\tconst atk = 2 * mult + mrrg;\r\n\t\tfor (const e of input.board) {\r\n\t\t\tif (hasCorrectTribe(e, input.hero, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\tmodifyStats(e, minion, atk, 0, input.board, input.hero, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t\tinput.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"mama-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/mama-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,IAAI,MAAM;YACX,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACjG,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;YAC3B,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACzE;QAED,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const MamaMrrglton: BattlecryCard = {\r\n\tcardIds: [CardIds.MamaMrrglton_BG35_140, CardIds.MamaMrrglton_BG35_140_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MamaMrrglton_BG35_140_G ? 2 : 1;\r\n\t\tconst mrrg = input.hero.globalInfo.MrrgltonsPlayedThisGame ?? 0;\r\n\t\tconst atk = 2 * (1 + mrrg) * mult;\r\n\t\tconst candidates = input.board.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te != minion &&\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const e of candidates) {\r\n\t\t\tmodifyStats(e, minion, atk, 0, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t\t// input.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -10,13 +10,12 @@ exports.PapaMrrglton = {
10
10
  var _a;
11
11
  const mult = minion.cardId === "BG35_141_G" ? 2 : 1;
12
12
  const mrrg = (_a = input.hero.globalInfo.MrrgltonsPlayedThisGame) !== null && _a !== void 0 ? _a : 0;
13
- const hp = 2 * mult + mrrg;
14
- for (const e of input.board) {
15
- if ((0, utils_1.hasCorrectTribe)(e, input.hero, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {
16
- (0, stats_1.modifyStats)(e, minion, 0, hp, input.board, input.hero, input.gameState);
17
- }
13
+ const hp = 2 * (1 + mrrg) * mult;
14
+ const candidates = input.board.filter((e) => e != minion &&
15
+ (0, utils_1.hasCorrectTribe)(e, input.hero, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards));
16
+ for (const e of candidates) {
17
+ (0, stats_1.modifyStats)(e, minion, 0, hp, input.board, input.hero, input.gameState);
18
18
  }
19
- input.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;
20
19
  return true;
21
20
  },
22
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"papa-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/papa-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAI,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACrG,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACxE;SACD;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const PapaMrrglton: BattlecryCard = {\r\n\tcardIds: [CardIds.PapaMrrglton_BG35_141, CardIds.PapaMrrglton_BG35_141_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.PapaMrrglton_BG35_141_G ? 2 : 1;\r\n\t\tconst mrrg = input.hero.globalInfo.MrrgltonsPlayedThisGame ?? 0;\r\n\t\tconst hp = 2 * mult + mrrg;\r\n\t\tfor (const e of input.board) {\r\n\t\t\tif (hasCorrectTribe(e, input.hero, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\tmodifyStats(e, minion, 0, hp, input.board, input.hero, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t\tinput.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"papa-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/papa-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,IAAI,MAAM;YACX,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACjG,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;YAC3B,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACxE;QAED,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const PapaMrrglton: BattlecryCard = {\r\n\tcardIds: [CardIds.PapaMrrglton_BG35_141, CardIds.PapaMrrglton_BG35_141_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.PapaMrrglton_BG35_141_G ? 2 : 1;\r\n\t\tconst mrrg = input.hero.globalInfo.MrrgltonsPlayedThisGame ?? 0;\r\n\t\tconst hp = 2 * (1 + mrrg) * mult;\r\n\t\tconst candidates = input.board.filter(\r\n\t\t\t(e) =>\r\n\t\t\t\te != minion &&\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const e of candidates) {\r\n\t\t\tmodifyStats(e, minion, 0, hp, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t\t// input.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -14,8 +14,8 @@ exports.TimewarpedMrrrglr = {
14
14
  const mult = minion.cardId === "BG34_Giant_321_G" ? 2 : 1;
15
15
  const totalAttackInHand = (_b = (_a = input.playerEntity.hand) === null || _a === void 0 ? void 0 : _a.map((e) => { var _a; return (_a = e.attack) !== null && _a !== void 0 ? _a : 0; }).reduce((a, b) => a + b, 0)) !== null && _b !== void 0 ? _b : 0;
16
16
  const totalHealthInHand = (_d = (_c = input.playerEntity.hand) === null || _c === void 0 ? void 0 : _c.map((e) => { var _a; return (_a = e.health) !== null && _a !== void 0 ? _a : 0; }).reduce((a, b) => a + b, 0)) !== null && _d !== void 0 ? _d : 0;
17
- const attackBuff = (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralAttackBuff) || totalAttackInHand || 0;
18
- const healthBuff = (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralHealthBuff) || totalHealthInHand || 0;
17
+ const attackBuff = totalAttackInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralAttackBuff) || 0;
18
+ const healthBuff = totalHealthInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralHealthBuff) || 0;
19
19
  for (let i = 0; i < mult; i++) {
20
20
  for (const target of targets) {
21
21
  if ((0, utils_1.hasCorrectTribe)(target, input.playerEntity, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {
@@ -1 +1 @@
1
- {"version":3,"file":"timewarped-mrrrglr.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-mrrrglr.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,uDAA2D;AAE3D,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,iBAAiB,GAAsB;IACnD,OAAO,EAAE,sCAAsF;IAC/F,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QACvD,MAAM,OAAO,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,MAAM,iBAAiB,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAI,CAAC,CAAC;QAC7G,MAAM,iBAAiB,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAI,CAAC,CAAC;QAE7G,MAAM,UAAU,GACf,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC;QACxG,MAAM,UAAU,GACf,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC;QACxG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC7B,IAAI,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;oBAClH,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;iBACF;aACD;SACD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const TimewarpedMrrrglr: StartOfCombatCard = {\r\n\tcardIds: [CardIds.TimewarpedMrrrglr_BG34_Giant_321, CardIds.TimewarpedMrrrglr_BG34_Giant_321_G],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst targets = getNeighbours(input.playerBoard, minion);\r\n\t\t// Multiplier not needed if relying on global info?\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedMrrrglr_BG34_Giant_321_G ? 2 : 1;\r\n\t\t// When it's summoned by Y'Shaarj hero power, the info isn't set\r\n\t\tconst totalAttackInHand = input.playerEntity.hand?.map((e) => e.attack ?? 0).reduce((a, b) => a + b, 0) ?? 0;\r\n\t\tconst totalHealthInHand = input.playerEntity.hand?.map((e) => e.health ?? 0).reduce((a, b) => a + b, 0) ?? 0;\r\n\t\t// If the minion is gilded in combat, the global info becomes unreliable\r\n\t\tconst attackBuff =\r\n\t\t\t(minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralAttackBuff) || totalAttackInHand || 0;\r\n\t\tconst healthBuff =\r\n\t\t\t(minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralHealthBuff) || totalHealthInHand || 0;\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tfor (const target of targets) {\r\n\t\t\t\tif (hasCorrectTribe(target, input.playerEntity, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tattackBuff,\r\n\t\t\t\t\t\thealthBuff,\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.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"timewarped-mrrrglr.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-mrrrglr.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,uDAA2D;AAE3D,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,iBAAiB,GAAsB;IACnD,OAAO,EAAE,sCAAsF;IAC/F,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QACvD,MAAM,OAAO,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,MAAM,iBAAiB,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAI,CAAC,CAAC;QAC7G,MAAM,iBAAiB,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,MAAM,mCAAI,CAAC,CAAA,EAAA,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mCAAI,CAAC,CAAC;QAK7G,MAAM,UAAU,GACf,iBAAiB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxG,MAAM,UAAU,GACf,iBAAiB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC7B,IACC,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,YAAY,EAClB,qBAAI,CAAC,MAAM,EACX,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;oBACD,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;iBACF;aACD;SACD;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const TimewarpedMrrrglr: StartOfCombatCard = {\r\n\tcardIds: [CardIds.TimewarpedMrrrglr_BG34_Giant_321, CardIds.TimewarpedMrrrglr_BG34_Giant_321_G],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst targets = getNeighbours(input.playerBoard, minion);\r\n\t\t// Multiplier not needed if relying on global info?\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedMrrrglr_BG34_Giant_321_G ? 2 : 1;\r\n\t\t// When it's summoned by Y'Shaarj hero power, the info isn't set\r\n\t\tconst totalAttackInHand = input.playerEntity.hand?.map((e) => e.attack ?? 0).reduce((a, b) => a + b, 0) ?? 0;\r\n\t\tconst totalHealthInHand = input.playerEntity.hand?.map((e) => e.health ?? 0).reduce((a, b) => a + b, 0) ?? 0;\r\n\t\t// If the minion is gilded in combat, the global info becomes unreliable\r\n\t\t// Update 2026-04-25: using the enchantment is not really reliable, in case we have a Mrrrglr and a\r\n\t\t// Timewarped Mrrrlgr. It seems to me, however, that we're getting information about the hand of both players,\r\n\t\t// not only the opponent, so we could use that instead.\r\n\t\tconst attackBuff =\r\n\t\t\ttotalAttackInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralAttackBuff) || 0;\r\n\t\tconst healthBuff =\r\n\t\t\ttotalHealthInHand || (minion.gildedInCombat ? 0 : input.playerEntity.globalInfo.ChoralHealthBuff) || 0;\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tfor (const target of targets) {\r\n\t\t\t\tif (\r\n\t\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tRace.MURLOC,\r\n\t\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tmodifyStats(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tattackBuff,\r\n\t\t\t\t\t\thealthBuff,\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.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -14,8 +14,7 @@ exports.DramalocSticker = {
14
14
  }
15
15
  let highestAttack = 0;
16
16
  for (const card of hand) {
17
- const refCard = input.gameState.allCards.getCard(card.cardId);
18
- const attack = (_b = refCard === null || refCard === void 0 ? void 0 : refCard.attack) !== null && _b !== void 0 ? _b : 0;
17
+ const attack = (_b = card.attack) !== null && _b !== void 0 ? _b : 0;
19
18
  if (attack > highestAttack) {
20
19
  highestAttack = attack;
21
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dramaloc-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/dramaloc-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,qDAAwD;AAExD,0CAAiD;AAGpC,QAAA,eAAe,GAAsB;IACjD,OAAO,EAAE,sBAA4C;IACrD,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,mCAAI,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;SACtE;QACD,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,CAAC,CAAC;YACpC,IAAI,MAAM,GAAG,aAAa,EAAE;gBAC3B,aAAa,GAAG,MAAM,CAAC;aACvB;SACD;QACD,IAAI,aAAa,KAAK,CAAC,EAAE;YACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;SACtE;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;YACvC,IAAI,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBAClH,IAAA,mBAAW,EAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACvG,SAAS,GAAG,IAAI,CAAC;aACjB;SACD;QACD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const DramalocSticker: StartOfCombatCard = {\r\n\tcardIds: [CardIds.DramalocSticker_BG35_MagicItem_754],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst hand = input.playerEntity.hand ?? [];\r\n\t\tif (hand.length === 0) {\r\n\t\t\treturn { hasTriggered: false, shouldRecomputeCurrentAttacker: false };\r\n\t\t}\r\n\t\tlet highestAttack = 0;\r\n\t\tfor (const card of hand) {\r\n\t\t\tconst refCard = input.gameState.allCards.getCard(card.cardId);\r\n\t\t\tconst attack = refCard?.attack ?? 0;\r\n\t\t\tif (attack > highestAttack) {\r\n\t\t\t\thighestAttack = attack;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (highestAttack === 0) {\r\n\t\t\treturn { hasTriggered: false, shouldRecomputeCurrentAttacker: false };\r\n\t\t}\r\n\t\tlet triggered = false;\r\n\t\tfor (const entity of input.playerBoard) {\r\n\t\t\tif (hasCorrectTribe(entity, input.playerEntity, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\tmodifyStats(entity, trinket, highestAttack, 0, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t\t\ttriggered = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { hasTriggered: triggered, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"dramaloc-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/dramaloc-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,eAAe,GAAsB;IACjD,OAAO,EAAE,sBAA4C;IACrD,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,mCAAI,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;SACtE;QACD,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACxB,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,MAAM,mCAAI,CAAC,CAAC;YAChC,IAAI,MAAM,GAAG,aAAa,EAAE;gBAC3B,aAAa,GAAG,MAAM,CAAC;aACvB;SACD;QACD,IAAI,aAAa,KAAK,CAAC,EAAE;YACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;SACtE;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;YACvC,IACC,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,YAAY,EAClB,qBAAI,CAAC,MAAM,EACX,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;gBACD,IAAA,mBAAW,EAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACvG,SAAS,GAAG,IAAI,CAAC;aACjB;SACD;QACD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const DramalocSticker: StartOfCombatCard = {\r\n\tcardIds: [CardIds.DramalocSticker_BG35_MagicItem_754],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst hand = input.playerEntity.hand ?? [];\r\n\t\tif (hand.length === 0) {\r\n\t\t\treturn { hasTriggered: false, shouldRecomputeCurrentAttacker: false };\r\n\t\t}\r\n\t\tlet highestAttack = 0;\r\n\t\tfor (const card of hand) {\r\n\t\t\tconst attack = card.attack ?? 0;\r\n\t\t\tif (attack > highestAttack) {\r\n\t\t\t\thighestAttack = attack;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (highestAttack === 0) {\r\n\t\t\treturn { hasTriggered: false, shouldRecomputeCurrentAttacker: false };\r\n\t\t}\r\n\t\tlet triggered = false;\r\n\t\tfor (const entity of input.playerBoard) {\r\n\t\t\tif (\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tRace.MURLOC,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tmodifyStats(entity, trinket, highestAttack, 0, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t\t\ttriggered = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { hasTriggered: triggered, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { OnStatsChangedCard } from '../../card.interface';
2
+ export declare const Mishmash: OnStatsChangedCard;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mishmash = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.Mishmash = {
6
+ cardIds: ["TB_BaconShop_HERO_33_Buddy", "TB_BaconShop_HERO_33_Buddy_G"],
7
+ onStatsChanged: (minion, input) => {
8
+ if (isAmalgam(input.target)) {
9
+ const mult = input.target.cardId === "TB_BaconShop_HERO_33_Buddy_G" ? 2 : 1;
10
+ (0, stats_1.modifyStats)(minion, minion, input.attackAmount * mult, input.healthAmount * mult, input.board, input.hero, input.gameState);
11
+ }
12
+ },
13
+ };
14
+ const isAmalgam = (entity) => {
15
+ return [
16
+ "TB_BaconShop_HP_033t",
17
+ "TB_BaconShop_HP_033t_G",
18
+ "TB_BaconShop_HP_033t_SKIN_A",
19
+ "TB_BaconShop_HP_033t_SKIN_A_G",
20
+ "TB_BaconShop_HP_033t_SKIN_D",
21
+ "TB_BaconShop_HP_033t_SKIN_D_G",
22
+ ].includes(entity.cardId);
23
+ };
24
+ //# sourceMappingURL=mishmash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mishmash.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/mishmash.ts"],"names":[],"mappings":";;;AAEA,qDAA6E;AAGhE,QAAA,QAAQ,GAAuB;IAC3C,OAAO,EAAE,8DAA4F;IACrG,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,mCAAkD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;SACF;IACF,CAAC;CACD,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAE,EAAE;IACzC,OAAO;;;;;;;KAON,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAiB,CAAC,CAAC;AACtC,CAAC,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats, OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { OnStatsChangedCard } from '../../card.interface';\r\n\r\nexport const Mishmash: OnStatsChangedCard = {\r\n\tcardIds: [CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy, CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G],\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tif (isAmalgam(input.target)) {\r\n\t\t\tconst mult = input.target.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G ? 2 : 1;\r\n\t\t\tmodifyStats(\r\n\t\t\t\tminion,\r\n\t\t\t\tminion,\r\n\t\t\t\tinput.attackAmount * mult,\r\n\t\t\t\tinput.healthAmount * mult,\r\n\t\t\t\tinput.board,\r\n\t\t\t\tinput.hero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n};\r\n\r\nconst isAmalgam = (entity: BoardEntity) => {\r\n\treturn [\r\n\t\tCardIds.Menagerist_AmalgamToken,\r\n\t\tCardIds.Amalgam,\r\n\t\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A,\r\n\t\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A_G,\r\n\t\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D,\r\n\t\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D_G,\r\n\t].includes(entity.cardId as CardIds);\r\n};\r\n"]}
@@ -1,4 +1,13 @@
1
- import { BgsPlayerEntity } from '../bgs-player-entity';
1
+ import { BgsPlayerEntity, BgsPlayerGlobalInfo } from '../bgs-player-entity';
2
2
  import { BoardEntity } from '../board-entity';
3
3
  import { FullGameState } from '../simulation/internal-game-state';
4
4
  export declare const updateVolumizerBuffs: (hero: BgsPlayerEntity, board: BoardEntity[], attackBuff: number, healthBuff: number, gameState: FullGameState) => void;
5
+ export declare const incrementDeathrattlesTriggeredThisGame: (hero: BgsPlayerEntity, board: BoardEntity[], gameState: FullGameState) => void;
6
+ export interface OnGlobalInfoUpdatedInput<T extends keyof BgsPlayerGlobalInfo> {
7
+ type: T;
8
+ oldValue: number;
9
+ newValue: number;
10
+ hero: BgsPlayerEntity;
11
+ board: BoardEntity[];
12
+ gameState: FullGameState;
13
+ }
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateVolumizerBuffs = void 0;
3
+ exports.incrementDeathrattlesTriggeredThisGame = exports.updateVolumizerBuffs = void 0;
4
+ const card_interface_1 = require("../cards/card.interface");
5
+ const _card_mappings_1 = require("../cards/impl/_card-mappings");
4
6
  const stats_1 = require("../simulation/stats");
5
7
  const utils_1 = require("../utils");
6
8
  const updateVolumizerBuffs = (hero, board, attackBuff, healthBuff, gameState) => {
@@ -13,4 +15,23 @@ const updateVolumizerBuffs = (hero, board, attackBuff, healthBuff, gameState) =>
13
15
  }
14
16
  };
15
17
  exports.updateVolumizerBuffs = updateVolumizerBuffs;
18
+ const incrementDeathrattlesTriggeredThisGame = (hero, board, gameState) => {
19
+ var _a;
20
+ const previousValue = (_a = hero.globalInfo.DeathrattlesTriggeredThisGame) !== null && _a !== void 0 ? _a : 0;
21
+ hero.globalInfo.DeathrattlesTriggeredThisGame = previousValue + 1;
22
+ for (const entity of board) {
23
+ const cardImpl = _card_mappings_1.cardMappings[entity.cardId];
24
+ if ((0, card_interface_1.hasOnGlobalInfoUpdated)(cardImpl)) {
25
+ cardImpl.onGlobalInfoUpdated(entity, {
26
+ type: 'DeathrattlesTriggeredThisGame',
27
+ oldValue: previousValue,
28
+ newValue: hero.globalInfo.DeathrattlesTriggeredThisGame,
29
+ hero: hero,
30
+ board: board,
31
+ gameState: gameState,
32
+ });
33
+ }
34
+ }
35
+ };
36
+ exports.incrementDeathrattlesTriggeredThisGame = incrementDeathrattlesTriggeredThisGame;
16
37
  //# sourceMappingURL=player-global-effects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"player-global-effects.js","sourceRoot":"","sources":["../../src/mechanics/player-global-effects.ts"],"names":[],"mappings":";;;AAGA,+CAAkD;AAClD,oCAAuC;AAEhC,MAAM,oBAAoB,GAAG,CACnC,IAAqB,EACrB,KAAoB,EACpB,UAAkB,EAClB,UAAkB,EAClB,SAAwB,EACvB,EAAE;IACH,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,IAAI,IAAA,mBAAW,EAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9E,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SAC1E;KAOD;AACF,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { modifyStats } from '../simulation/stats';\r\nimport { isVolumizer } from '../utils';\r\n\r\nexport const updateVolumizerBuffs = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tattackBuff: number,\r\n\thealthBuff: number,\r\n\tgameState: FullGameState,\r\n) => {\r\n\thero.globalInfo.VolumizerAttackBuff += attackBuff;\r\n\thero.globalInfo.VolumizerHealthBuff += healthBuff;\r\n\tfor (const entity of board) {\r\n\t\tif (isVolumizer(entity.cardId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t}\r\n\t\t// for (const enchantment of entity.enchantments) {\r\n\t\t// \tconst rootDbfId = gameState.allCards.getCard(enchantment.cardId).entityDbfIf;\r\n\t\t// \tif (isVolumizer(rootDbfId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t// \t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n};\r\n"]}
1
+ {"version":3,"file":"player-global-effects.js","sourceRoot":"","sources":["../../src/mechanics/player-global-effects.ts"],"names":[],"mappings":";;;AAEA,4DAAiE;AACjE,iEAA4D;AAE5D,+CAAkD;AAClD,oCAAuC;AAEhC,MAAM,oBAAoB,GAAG,CACnC,IAAqB,EACrB,KAAoB,EACpB,UAAkB,EAClB,UAAkB,EAClB,SAAwB,EACvB,EAAE;IACH,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,IAAI,IAAA,mBAAW,EAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9E,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SAC1E;KAOD;AACF,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B;AAEK,MAAM,sCAAsC,GAAG,CACrD,IAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;;IACH,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,6BAA6B,mCAAI,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,6BAA6B,GAAG,aAAa,GAAG,CAAC,CAAC;IAClE,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,MAAM,QAAQ,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,IAAA,uCAAsB,EAAC,QAAQ,CAAC,EAAE;YACrC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE;gBACpC,IAAI,EAAE,+BAA+B;gBACrC,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,6BAA6B;gBACvD,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,SAAS;aACpB,CAAC,CAAC;SACH;KACD;AACF,CAAC,CAAC;AApBW,QAAA,sCAAsC,0CAoBjD","sourcesContent":["import { BgsPlayerEntity, BgsPlayerGlobalInfo } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnGlobalInfoUpdated } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { modifyStats } from '../simulation/stats';\r\nimport { isVolumizer } from '../utils';\r\n\r\nexport const updateVolumizerBuffs = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tattackBuff: number,\r\n\thealthBuff: number,\r\n\tgameState: FullGameState,\r\n) => {\r\n\thero.globalInfo.VolumizerAttackBuff += attackBuff;\r\n\thero.globalInfo.VolumizerHealthBuff += healthBuff;\r\n\tfor (const entity of board) {\r\n\t\tif (isVolumizer(entity.cardId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t}\r\n\t\t// for (const enchantment of entity.enchantments) {\r\n\t\t// \tconst rootDbfId = gameState.allCards.getCard(enchantment.cardId).entityDbfIf;\r\n\t\t// \tif (isVolumizer(rootDbfId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t// \t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n};\r\n\r\nexport const incrementDeathrattlesTriggeredThisGame = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst previousValue = hero.globalInfo.DeathrattlesTriggeredThisGame ?? 0;\r\n\thero.globalInfo.DeathrattlesTriggeredThisGame = previousValue + 1;\r\n\tfor (const entity of board) {\r\n\t\tconst cardImpl = cardMappings[entity.cardId];\r\n\t\tif (hasOnGlobalInfoUpdated(cardImpl)) {\r\n\t\t\tcardImpl.onGlobalInfoUpdated(entity, {\r\n\t\t\t\ttype: 'DeathrattlesTriggeredThisGame',\r\n\t\t\t\toldValue: previousValue,\r\n\t\t\t\tnewValue: hero.globalInfo.DeathrattlesTriggeredThisGame,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tboard: board,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface OnGlobalInfoUpdatedInput<T extends keyof BgsPlayerGlobalInfo> {\r\n\ttype: T;\r\n\toldValue: number;\r\n\tnewValue: number;\r\n\thero: BgsPlayerEntity;\r\n\tboard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTavernSpellEffectRepeatCount = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
4
5
  const getTavernSpellEffectRepeatCount = (input) => {
5
- var _a;
6
+ var _a, _b;
6
7
  if (input.source !== input.hero) {
7
8
  return 1;
8
9
  }
@@ -24,10 +25,16 @@ const getTavernSpellEffectRepeatCount = (input) => {
24
25
  2 * input.board.filter((e) => e.cardId === "BG33_825_G").length;
25
26
  repeats += proudPrivateerExtra;
26
27
  }
27
- const cathedrals = input.hero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_434" && t.scriptDataNum1 > 0);
28
+ const cathedrals = input.hero.trinkets.filter((t) => {
29
+ var _a, _b;
30
+ return t.cardId === "BG30_MagicItem_434" &&
31
+ t.scriptDataNum1 > 0 &&
32
+ ((_b = (_a = t.tags) === null || _a === void 0 ? void 0 : _a[reference_data_1.GameTag.TRIGGER_VISUAL]) !== null && _b !== void 0 ? _b : 0) > 0;
33
+ });
28
34
  repeats += cathedrals.length;
29
35
  for (const cathedral of cathedrals) {
30
- cathedral.scriptDataNum1--;
36
+ cathedral.tags = (_b = cathedral.tags) !== null && _b !== void 0 ? _b : {};
37
+ cathedral.tags[reference_data_1.GameTag.TRIGGER_VISUAL] = 0;
31
38
  }
32
39
  return repeats;
33
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tavern-spell-repeat.js","sourceRoot":"","sources":["../../src/mechanics/tavern-spell-repeat.ts"],"names":[],"mappings":";;;AAOO,MAAM,+BAA+B,GAAG,CAAC,KAAqB,EAAU,EAAE;;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QAChC,OAAO,CAAC,CAAC;KACT;IACD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAA0C,CAAC,CAAC;IACrG,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAwC,CAAC,CAAC;IACnG,IACC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;QACtC,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC5D;QACD,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC;IACD,MAAM,cAAc,GACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAuC,CAAC,CAAC,MAAM;QACjF,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAyC,CAAC,CAAC,MAAM,CAAC;IACzF,OAAO,IAAI,cAAc,CAAC;IAE1B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,0CAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAErE,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QACjD,MAAM,mBAAmB,GACxB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAoC,CAAC,CAAC,MAAM;YAC9E,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAsC,CAAC,CAAC,MAAM,CAAC;QACtF,OAAO,IAAI,mBAAmB,CAAC;KAC/B;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAgD,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,CACvF,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QACnC,SAAS,CAAC,cAAc,EAAE,CAAC;KAC3B;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAtCW,QAAA,+BAA+B,mCAsC1C","sourcesContent":["import { CastSpellInput } from '../cards/card.interface';\r\nimport { CardIds } from '../services/card-ids';\r\n\r\n/**\r\n * Balinda Stonehearth: extra spell effect resolutions for spells you cast that target a friendly board minion.\r\n * Maelstrom Emergent: each copy adds +1 extra resolution (golden +2) for tavern spells you cast; stacks additively with Balinda.\r\n */\r\nexport const getTavernSpellEffectRepeatCount = (input: CastSpellInput): number => {\r\n\tif (input.source !== input.hero) {\r\n\t\treturn 1;\r\n\t}\r\n\tlet repeats = 1;\r\n\tconst hasGoldenBalinda = input.board.some((e) => e.cardId === CardIds.BalindaStonehearth_BG35_883_G);\r\n\tconst hasNormalBalinda = input.board.some((e) => e.cardId === CardIds.BalindaStonehearth_BG35_883);\r\n\tif (\r\n\t\t(hasGoldenBalinda || hasNormalBalinda) &&\r\n\t\tinput.target &&\r\n\t\tinput.board.some((e) => e.entityId === input.target.entityId)\r\n\t) {\r\n\t\trepeats = hasGoldenBalinda ? 3 : 2;\r\n\t}\r\n\tconst maelstromExtra =\r\n\t\tinput.board.filter((e) => e.cardId === CardIds.MaelstromEmergent_BG34_922).length +\r\n\t\t2 * input.board.filter((e) => e.cardId === CardIds.MaelstromEmergent_BG34_922_G).length;\r\n\trepeats += maelstromExtra;\r\n\r\n\tconst spellCard = input.gameState.allCards.getCard(input.spellCardId);\r\n\tconst isBountySpell = spellCard?.mechanics?.includes('BACON_BOUNTY');\r\n\t// Proud Privateer only affects bounties *you* (the hero) cast — same as Balinda / onTavernSpellCast.\r\n\tif (isBountySpell && input.source === input.hero) {\r\n\t\tconst proudPrivateerExtra =\r\n\t\t\tinput.board.filter((e) => e.cardId === CardIds.ProudPrivateer_BG33_825).length +\r\n\t\t\t2 * input.board.filter((e) => e.cardId === CardIds.ProudPrivateer_BG33_825_G).length;\r\n\t\trepeats += proudPrivateerExtra;\r\n\t}\r\n\r\n\tconst cathedrals = input.hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ReplicaCathedral_BG30_MagicItem_434 && t.scriptDataNum1 > 0,\r\n\t);\r\n\trepeats += cathedrals.length;\r\n\tfor (const cathedral of cathedrals) {\r\n\t\tcathedral.scriptDataNum1--;\r\n\t}\r\n\r\n\treturn repeats;\r\n};\r\n"]}
1
+ {"version":3,"file":"tavern-spell-repeat.js","sourceRoot":"","sources":["../../src/mechanics/tavern-spell-repeat.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAQhD,MAAM,+BAA+B,GAAG,CAAC,KAAqB,EAAU,EAAE;;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QAChC,OAAO,CAAC,CAAC;KACT;IACD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAA0C,CAAC,CAAC;IACrG,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAwC,CAAC,CAAC;IACnG,IACC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;QACtC,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC5D;QACD,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC;IACD,MAAM,cAAc,GACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAuC,CAAC,CAAC,MAAM;QACjF,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAyC,CAAC,CAAC,MAAM,CAAC;IACzF,OAAO,IAAI,cAAc,CAAC;IAE1B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,0CAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAErE,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QACjD,MAAM,mBAAmB,GACxB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAoC,CAAC,CAAC,MAAM;YAC9E,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAsC,CAAC,CAAC,MAAM,CAAC;QACtF,OAAO,IAAI,mBAAmB,CAAC;KAC/B;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE;;QACL,OAAA,CAAC,CAAC,MAAM,yBAAgD;YAExD,CAAC,CAAC,cAAc,GAAG,CAAC;YAapB,CAAC,MAAA,MAAA,CAAC,CAAC,IAAI,0CAAG,wBAAO,CAAC,cAAc,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAA;KAAA,CAC5C,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QACnC,SAAS,CAAC,IAAI,GAAG,MAAA,SAAS,CAAC,IAAI,mCAAI,EAAE,CAAC;QACtC,SAAS,CAAC,IAAI,CAAC,wBAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KAC3C;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAvDW,QAAA,+BAA+B,mCAuD1C","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { CastSpellInput } from '../cards/card.interface';\r\nimport { CardIds } from '../services/card-ids';\r\n\r\n/**\r\n * Balinda Stonehearth: extra spell effect resolutions for spells you cast that target a friendly board minion.\r\n * Maelstrom Emergent: each copy adds +1 extra resolution (golden +2) for tavern spells you cast; stacks additively with Balinda.\r\n */\r\nexport const getTavernSpellEffectRepeatCount = (input: CastSpellInput): number => {\r\n\tif (input.source !== input.hero) {\r\n\t\treturn 1;\r\n\t}\r\n\tlet repeats = 1;\r\n\tconst hasGoldenBalinda = input.board.some((e) => e.cardId === CardIds.BalindaStonehearth_BG35_883_G);\r\n\tconst hasNormalBalinda = input.board.some((e) => e.cardId === CardIds.BalindaStonehearth_BG35_883);\r\n\tif (\r\n\t\t(hasGoldenBalinda || hasNormalBalinda) &&\r\n\t\tinput.target &&\r\n\t\tinput.board.some((e) => e.entityId === input.target.entityId)\r\n\t) {\r\n\t\trepeats = hasGoldenBalinda ? 3 : 2;\r\n\t}\r\n\tconst maelstromExtra =\r\n\t\tinput.board.filter((e) => e.cardId === CardIds.MaelstromEmergent_BG34_922).length +\r\n\t\t2 * input.board.filter((e) => e.cardId === CardIds.MaelstromEmergent_BG34_922_G).length;\r\n\trepeats += maelstromExtra;\r\n\r\n\tconst spellCard = input.gameState.allCards.getCard(input.spellCardId);\r\n\tconst isBountySpell = spellCard?.mechanics?.includes('BACON_BOUNTY');\r\n\t// Proud Privateer only affects bounties *you* (the hero) cast — same as Balinda / onTavernSpellCast.\r\n\tif (isBountySpell && input.source === input.hero) {\r\n\t\tconst proudPrivateerExtra =\r\n\t\t\tinput.board.filter((e) => e.cardId === CardIds.ProudPrivateer_BG33_825).length +\r\n\t\t\t2 * input.board.filter((e) => e.cardId === CardIds.ProudPrivateer_BG33_825_G).length;\r\n\t\trepeats += proudPrivateerExtra;\r\n\t}\r\n\r\n\tconst cathedrals = input.hero.trinkets.filter(\r\n\t\t(t) =>\r\n\t\t\tt.cardId === CardIds.ReplicaCathedral_BG30_MagicItem_434 &&\r\n\t\t\t// Total number of times it can trigger\r\n\t\t\tt.scriptDataNum1 > 0 &&\r\n\t\t\t// Total number of times it can still trigger (recruit + combat)\r\n\t\t\t// 2026-04-25:https://replays.firestoneapp.com/?reviewId=f7d1d5ec-b83d-49f5-9669-b063a3debc79&turn=15&action=1\r\n\t\t\t// It triggered during shop, and doesn't re-trigger during combat\r\n\t\t\t/**\r\n\t\t\t * \t{\r\n\t\t\t\t\t\"cardId\": \"BG30_MagicItem_434\",\r\n\t\t\t\t\t\"entityId\": 306,\r\n\t\t\t\t\t\"scriptDataNum1\": 1,\r\n\t\t\t\t\t\"scriptDataNum2\": 0,\r\n\t\t\t\t\t\"scriptDataNum6\": 1\r\n\t\t\t\t},\r\n\t\t\t */\r\n\t\t\t(t.tags?.[GameTag.TRIGGER_VISUAL] ?? 0) > 0,\r\n\t);\r\n\trepeats += cathedrals.length;\r\n\tfor (const cathedral of cathedrals) {\r\n\t\tcathedral.tags = cathedral.tags ?? {};\r\n\t\tcathedral.tags[GameTag.TRIGGER_VISUAL] = 0;\r\n\t}\r\n\r\n\treturn repeats;\r\n};\r\n"]}
@@ -5,6 +5,7 @@ const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const card_interface_1 = require("../cards/card.interface");
6
6
  const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
7
  const divine_shield_1 = require("../keywords/divine-shield");
8
+ const player_global_effects_1 = require("../mechanics/player-global-effects");
8
9
  const utils_1 = require("../services/utils");
9
10
  const utils_2 = require("../utils");
10
11
  const attack_1 = require("./attack");
@@ -55,7 +56,7 @@ const spawnEntities = (cardId, quantity, boardToSpawnInto, boardToSpawnIntoHero,
55
56
  };
56
57
  exports.spawnEntities = spawnEntities;
57
58
  const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, entitiesDeadThisAttack, gameState) => {
58
- var _a, _b, _c, _d, _e, _f, _g;
59
+ var _a, _b, _c, _d, _e, _f;
59
60
  const finalSpawns = [];
60
61
  const multiplier = (0, deathrattle_effects_1.computeDeathrattleMultiplier)([...boardWithDeadEntity], boardWithDeadEntityHero, deadEntity, gameState.sharedState);
61
62
  const deathrattleTriggeredInput = {
@@ -76,8 +77,8 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
76
77
  return ((_b = (_a = a.entityId) !== null && _a !== void 0 ? _a : a.timing) !== null && _b !== void 0 ? _b : 0) -
77
78
  ((_d = (_c = b.entityId) !== null && _c !== void 0 ? _c : b.timing) !== null && _d !== void 0 ? _d : 0);
78
79
  });
79
- for (let i = 0; i < multiplier; i++) {
80
- for (const card of cards) {
80
+ for (const card of cards) {
81
+ for (let i = 0; i < multiplier; i++) {
81
82
  let hasTriggered = false;
82
83
  const spawnedEntities = [];
83
84
  const refCard = gameState.allCards.getCard(card.cardId);
@@ -578,8 +579,7 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
578
579
  }
579
580
  }
580
581
  if (hasTriggered) {
581
- boardWithDeadEntityHero.globalInfo.DeathrattlesTriggeredThisGame =
582
- ((_g = boardWithDeadEntityHero.globalInfo.DeathrattlesTriggeredThisGame) !== null && _g !== void 0 ? _g : 0) + 1;
582
+ (0, player_global_effects_1.incrementDeathrattlesTriggeredThisGame)(boardWithDeadEntityHero, boardWithDeadEntity, gameState);
583
583
  (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
584
584
  }
585
585
  }