@firestone-hs/simulate-bgs-battle 1.1.706 → 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 (50) 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/fire-forged-evoker.js +1 -1
  20. package/dist/cards/impl/minion/fire-forged-evoker.js.map +1 -1
  21. package/dist/cards/impl/minion/incubation-researcher.js +1 -1
  22. package/dist/cards/impl/minion/incubation-researcher.js.map +1 -1
  23. package/dist/cards/impl/minion/junk-jouster.js +1 -1
  24. package/dist/cards/impl/minion/junk-jouster.js.map +1 -1
  25. package/dist/cards/impl/minion/mama-mrrglton.js +5 -6
  26. package/dist/cards/impl/minion/mama-mrrglton.js.map +1 -1
  27. package/dist/cards/impl/minion/papa-mrrglton.js +5 -6
  28. package/dist/cards/impl/minion/papa-mrrglton.js.map +1 -1
  29. package/dist/cards/impl/minion/timewarped-mrrrglr.js +2 -2
  30. package/dist/cards/impl/minion/timewarped-mrrrglr.js.map +1 -1
  31. package/dist/cards/impl/trinket/dramaloc-sticker.js +1 -2
  32. package/dist/cards/impl/trinket/dramaloc-sticker.js.map +1 -1
  33. package/dist/cards/impl/trinket/mishmash.d.ts +2 -0
  34. package/dist/cards/impl/trinket/mishmash.js +24 -0
  35. package/dist/cards/impl/trinket/mishmash.js.map +1 -0
  36. package/dist/mechanics/player-global-effects.d.ts +10 -1
  37. package/dist/mechanics/player-global-effects.js +22 -1
  38. package/dist/mechanics/player-global-effects.js.map +1 -1
  39. package/dist/mechanics/tavern-spell-repeat.js +10 -3
  40. package/dist/mechanics/tavern-spell-repeat.js.map +1 -1
  41. package/dist/services/hand-minion-priority.js +6 -6
  42. package/dist/services/hand-minion-priority.js.map +1 -1
  43. package/dist/simulation/deathrattle-spawns.js +5 -5
  44. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  45. package/dist/simulation/global-info-helpers.js +1 -1
  46. package/dist/simulation/global-info-helpers.js.map +1 -1
  47. package/dist/simulation/spawns.js.map +1 -1
  48. package/dist/simulation/stats.js +0 -12
  49. package/dist/simulation/stats.js.map +1 -1
  50. package/package.json +1 -1
@@ -10,7 +10,7 @@ exports.FireForgedEvoker = {
10
10
  var _a, _b, _c;
11
11
  const mult = minion.cardId === "BG32_822_G" ? 2 : 1;
12
12
  const spells = (_a = input.playerEntity.globalInfo.SpellsCastThisGame) !== null && _a !== void 0 ? _a : 0;
13
- const atk = (_b = minion.scriptDataNum1) !== null && _b !== void 0 ? _b : mult * (1 + spells);
13
+ const atk = (_b = minion.scriptDataNum1) !== null && _b !== void 0 ? _b : mult * (2 + spells);
14
14
  const health = (_c = minion.scriptDataNum2) !== null && _c !== void 0 ? _c : mult * (1 + spells);
15
15
  const targetBoard = input.playerBoard.filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.DRAGON, input.gameState.anomalies, input.gameState.allCards));
16
16
  for (const target of targetBoard) {
@@ -1 +1 @@
1
- {"version":3,"file":"fire-forged-evoker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fire-forged-evoker.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAsB;IAClD,OAAO,EAAE,0BAAwE;IACjF,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;YACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjG;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fire-forged Evoker (Tier 6, 8/5)\r\n * Start of Combat: Give your Dragons +1/+1. Improves permanently after you cast a Tavern spell.\r\n * (Spells during combat should count — see REVIEW_QUEUE_BG_35_2.md if any spell path skips SpellsCastThisGame.)\r\n *\r\n * Golden Fire-forged Evoker (Tier 6, 16/10)\r\n * Start of Combat: Give your Dragons +2/+2. Improves permanently after you cast a Tavern spell.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-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 FireForgedEvoker: StartOfCombatCard = {\r\n\tcardIds: [CardIds.FireForgedEvoker_BG32_822, CardIds.FireForgedEvoker_BG32_822_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\tconst spells = input.playerEntity.globalInfo.SpellsCastThisGame ?? 0;\r\n\t\tconst atk = minion.scriptDataNum1 ?? mult * (1 + spells);\r\n\t\tconst health = minion.scriptDataNum2 ?? mult * (1 + spells);\r\n\t\tconst targetBoard = input.playerBoard.filter((e) =>\r\n\t\t\thasCorrectTribe(e, input.playerEntity, Race.DRAGON, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const target of targetBoard) {\r\n\t\t\tmodifyStats(target, minion, atk, health, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"fire-forged-evoker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fire-forged-evoker.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAsB;IAClD,OAAO,EAAE,0BAAwE;IACjF,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;YACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjG;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fire-forged Evoker (Tier 6, 8/5)\r\n * Start of Combat: Give your Dragons +1/+1. Improves permanently after you cast a Tavern spell.\r\n * (Spells during combat should count — see REVIEW_QUEUE_BG_35_2.md if any spell path skips SpellsCastThisGame.)\r\n *\r\n * Golden Fire-forged Evoker (Tier 6, 16/10)\r\n * Start of Combat: Give your Dragons +2/+2. Improves permanently after you cast a Tavern spell.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-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 FireForgedEvoker: StartOfCombatCard = {\r\n\tcardIds: [CardIds.FireForgedEvoker_BG32_822, CardIds.FireForgedEvoker_BG32_822_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\tconst spells = input.playerEntity.globalInfo.SpellsCastThisGame ?? 0;\r\n\t\tconst atk = minion.scriptDataNum1 ?? mult * (2 + spells);\r\n\t\tconst health = minion.scriptDataNum2 ?? mult * (1 + spells);\r\n\t\tconst targetBoard = input.playerBoard.filter((e) =>\r\n\t\t\thasCorrectTribe(e, input.playerEntity, Race.DRAGON, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const target of targetBoard) {\r\n\t\t\tmodifyStats(target, minion, atk, health, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
@@ -6,7 +6,7 @@ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
6
  const chromadrake_pool_1 = require("./chromadrake-pool");
7
7
  exports.IncubationResearcher = {
8
8
  cardIds: ["BG34_632", "BG34_632_G"],
9
- baseAvengeValue: () => 4,
9
+ baseAvengeValue: () => 3,
10
10
  avenge: (minion, input) => {
11
11
  const mult = minion.cardId === "BG34_632_G" ? 2 : 1;
12
12
  for (let i = 0; i < mult; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"incubation-researcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/incubation-researcher.ts"],"names":[],"mappings":";;;AACA,mDAAqD;AAGrD,qEAAmE;AAEnE,yDAAwD;AAE3C,QAAA,oBAAoB,GAAe;IAC/C,OAAO,EAAE,0BAAgF;IACzF,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,IAAA,kBAAU,EAAC,qCAAkB,CAAC,CAAC;YAC1C,IAAI,EAAE,EAAE;gBACP,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC/D;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AvengeCard } from '../../card.interface';\r\nimport { chromadrakeCardIds } from './chromadrake-pool';\r\n\r\nexport const IncubationResearcher: AvengeCard = {\r\n\tcardIds: [CardIds.IncubationResearcher_BG34_632, CardIds.IncubationResearcher_BG34_632_G],\r\n\tbaseAvengeValue: () => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.IncubationResearcher_BG34_632_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tconst id = pickRandom(chromadrakeCardIds);\r\n\t\t\tif (id) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [id], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"incubation-researcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/incubation-researcher.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,qEAAmE;AAEnE,yDAAwD;AAE3C,QAAA,oBAAoB,GAAe;IAC/C,OAAO,EAAE,0BAAgF;IACzF,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,IAAA,kBAAU,EAAC,qCAAkB,CAAC,CAAC;YAC1C,IAAI,EAAE,EAAE;gBACP,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC/D;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AvengeCard } from '../../card.interface';\r\nimport { chromadrakeCardIds } from './chromadrake-pool';\r\n\r\nexport const IncubationResearcher: AvengeCard = {\r\n\tcardIds: [CardIds.IncubationResearcher_BG34_632, CardIds.IncubationResearcher_BG34_632_G],\r\n\tbaseAvengeValue: () => 3,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.IncubationResearcher_BG34_632_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tconst id = pickRandom(chromadrakeCardIds);\r\n\t\t\tif (id) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [id], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -7,7 +7,7 @@ exports.JunkJouster = {
7
7
  onAfterMagnetize: (entity, input) => {
8
8
  const mult = entity.cardId === "BG34_175_G" ? 2 : 1;
9
9
  for (const m of input.board) {
10
- (0, stats_1.modifyStats)(m, entity, 6 * mult, 6 * mult, input.board, input.hero, input.gameState);
10
+ (0, stats_1.modifyStats)(m, entity, 5 * mult, 5 * mult, input.board, input.hero, input.gameState);
11
11
  }
12
12
  },
13
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"junk-jouster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/junk-jouster.ts"],"names":[],"mappings":";;;AAUA,qDAAwD;AAG3C,QAAA,WAAW,GAAyB;IAChD,OAAO,EAAE,0BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACrF;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Junk Jouster (Tier 6, 8/7)\r\n * After you Magnetize a minion, give your minions +6/+6.\r\n *\r\n * Golden Junk Jouster (Tier 6, 16/14)\r\n * After you Magnetize a minion, give your minions +12/+12.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterMagnetizeInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnAfterMagnetizeCard } from '../../card.interface';\r\n\r\nexport const JunkJouster: OnAfterMagnetizeCard = {\r\n\tcardIds: [CardIds.JunkJouster_BG34_175, CardIds.JunkJouster_BG34_175_G],\r\n\tonAfterMagnetize: (entity: BoardEntity, input: OnAfterMagnetizeInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.JunkJouster_BG34_175_G ? 2 : 1;\r\n\t\tfor (const m of input.board) {\r\n\t\t\tmodifyStats(m, entity, 6 * mult, 6 * mult, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"junk-jouster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/junk-jouster.ts"],"names":[],"mappings":";;;AAUA,qDAAwD;AAG3C,QAAA,WAAW,GAAyB;IAChD,OAAO,EAAE,0BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACrF;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Junk Jouster (Tier 6, 8/7)\r\n * After you Magnetize a minion, give your minions +6/+6.\r\n *\r\n * Golden Junk Jouster (Tier 6, 16/14)\r\n * After you Magnetize a minion, give your minions +12/+12.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterMagnetizeInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnAfterMagnetizeCard } from '../../card.interface';\r\n\r\nexport const JunkJouster: OnAfterMagnetizeCard = {\r\n\tcardIds: [CardIds.JunkJouster_BG34_175, CardIds.JunkJouster_BG34_175_G],\r\n\tonAfterMagnetize: (entity: BoardEntity, input: OnAfterMagnetizeInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.JunkJouster_BG34_175_G ? 2 : 1;\r\n\t\tfor (const m of input.board) {\r\n\t\t\tmodifyStats(m, entity, 5 * mult, 5 * mult, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -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 = 3 * 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;AAGpD,qDAAwD;AAExD,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 { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { CardIds } from '../../../services/card-ids';\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 = 3 * 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 = 3 * 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;AAGpD,qDAAwD;AAExD,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 { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { CardIds } from '../../../services/card-ids';\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 = 3 * 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"]}
@@ -2,22 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isHandMinionCandidate = exports.getHighestAttackHandMinions = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const utils_1 = require("./utils");
5
6
  const getHighestAttackHandMinions = (hand, count, isMinionInHand) => {
6
7
  if (!(hand === null || hand === void 0 ? void 0 : hand.length) || count <= 0) {
7
8
  return [];
8
9
  }
9
- const scored = hand
10
- .map((entity, index) => ({ entity, index }))
11
- .filter(({ entity }) => isMinionInHand(entity));
12
- scored.sort((a, b) => {
10
+ const scored = hand.map((entity, index) => ({ entity, index })).filter(({ entity }) => isMinionInHand(entity));
11
+ const randomized = (0, utils_1.shuffleArray)(scored);
12
+ randomized.sort((a, b) => {
13
13
  var _a, _b;
14
14
  const atkDiff = ((_a = b.entity.attack) !== null && _a !== void 0 ? _a : 0) - ((_b = a.entity.attack) !== null && _b !== void 0 ? _b : 0);
15
15
  if (atkDiff !== 0) {
16
16
  return atkDiff;
17
17
  }
18
- return a.index - b.index;
18
+ return 0;
19
19
  });
20
- return scored.slice(0, count).map((s) => s.entity);
20
+ return randomized.slice(0, count).map((s) => s.entity);
21
21
  };
22
22
  exports.getHighestAttackHandMinions = getHighestAttackHandMinions;
23
23
  const isHandMinionCandidate = (entity, cardTypeUpper) => {
@@ -1 +1 @@
1
- {"version":3,"file":"hand-minion-priority.js","sourceRoot":"","sources":["../../src/services/hand-minion-priority.ts"],"names":[],"mappings":";;;AAAA,iEAAwD;AAOjD,MAAM,2BAA2B,GAAG,CAC1C,IAAwC,EACxC,KAAa,EACb,cAA2C,EAC3B,EAAE;IAClB,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,IAAI,KAAK,IAAI,CAAC,EAAE;QAChC,OAAO,EAAE,CAAC;KACV;IACD,MAAM,MAAM,GAAG,IAAI;SACjB,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3C,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;QACpB,MAAM,OAAO,GAAG,CAAC,MAAA,CAAC,CAAC,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC,CAAC;QAChE,IAAI,OAAO,KAAK,CAAC,EAAE;YAClB,OAAO,OAAO,CAAC;SACf;QACD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAnBW,QAAA,2BAA2B,+BAmBtC;AAEK,MAAM,qBAAqB,GAAG,CACpC,MAAmB,EACnB,aAAiD,EACvC,EAAE;IACZ,OAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAC;AACzG,CAAC,CAAC;AALW,QAAA,qBAAqB,yBAKhC","sourcesContent":["import { CardType } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../board-entity';\r\n\r\n/**\r\n * Minions in hand with the highest current Attack (ties: earlier in hand wins).\r\n * Used by Expert Aviator, Diremuck Forager, etc.\r\n */\r\nexport const getHighestAttackHandMinions = (\r\n\thand: readonly BoardEntity[] | undefined,\r\n\tcount: number,\r\n\tisMinionInHand: (e: BoardEntity) => boolean,\r\n): BoardEntity[] => {\r\n\tif (!hand?.length || count <= 0) {\r\n\t\treturn [];\r\n\t}\r\n\tconst scored = hand\r\n\t\t.map((entity, index) => ({ entity, index }))\r\n\t\t.filter(({ entity }) => isMinionInHand(entity));\r\n\tscored.sort((a, b) => {\r\n\t\tconst atkDiff = (b.entity.attack ?? 0) - (a.entity.attack ?? 0);\r\n\t\tif (atkDiff !== 0) {\r\n\t\t\treturn atkDiff;\r\n\t\t}\r\n\t\treturn a.index - b.index;\r\n\t});\r\n\treturn scored.slice(0, count).map((s) => s.entity);\r\n};\r\n\r\nexport const isHandMinionCandidate = (\r\n\tentity: BoardEntity,\r\n\tcardTypeUpper: (id: string) => string | undefined,\r\n): boolean => {\r\n\treturn !!entity?.cardId && !entity.locked && cardTypeUpper(entity.cardId) === CardType[CardType.MINION];\r\n};\r\n"]}
1
+ {"version":3,"file":"hand-minion-priority.js","sourceRoot":"","sources":["../../src/services/hand-minion-priority.ts"],"names":[],"mappings":";;;AAAA,iEAAwD;AAExD,mCAAuC;AAMhC,MAAM,2BAA2B,GAAG,CAC1C,IAAwC,EACxC,KAAa,EACb,cAA2C,EAC3B,EAAE;IAClB,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,IAAI,KAAK,IAAI,CAAC,EAAE;QAChC,OAAO,EAAE,CAAC;KACV;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/G,MAAM,UAAU,GAAG,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC;IACxC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;QACxB,MAAM,OAAO,GAAG,CAAC,MAAA,CAAC,CAAC,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC,CAAC;QAChE,IAAI,OAAO,KAAK,CAAC,EAAE;YAClB,OAAO,OAAO,CAAC;SACf;QAED,OAAO,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC,CAAC;AAnBW,QAAA,2BAA2B,+BAmBtC;AAEK,MAAM,qBAAqB,GAAG,CACpC,MAAmB,EACnB,aAAiD,EACvC,EAAE;IACZ,OAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAC;AACzG,CAAC,CAAC;AALW,QAAA,qBAAqB,yBAKhC","sourcesContent":["import { CardType } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { shuffleArray } from './utils';\r\n\r\n/**\r\n * Minions in hand with the highest current Attack.\r\n * Used by Expert Aviator, Diremuck Forager, etc.\r\n */\r\nexport const getHighestAttackHandMinions = (\r\n\thand: readonly BoardEntity[] | undefined,\r\n\tcount: number,\r\n\tisMinionInHand: (e: BoardEntity) => boolean,\r\n): BoardEntity[] => {\r\n\tif (!hand?.length || count <= 0) {\r\n\t\treturn [];\r\n\t}\r\n\tconst scored = hand.map((entity, index) => ({ entity, index })).filter(({ entity }) => isMinionInHand(entity));\r\n\tconst randomized = shuffleArray(scored);\r\n\trandomized.sort((a, b) => {\r\n\t\tconst atkDiff = (b.entity.attack ?? 0) - (a.entity.attack ?? 0);\r\n\t\tif (atkDiff !== 0) {\r\n\t\t\treturn atkDiff;\r\n\t\t}\r\n\t\t// UPDATE 2026-04-21: it doesn't look like we want to pick the earliest in hand anymore in case of ties\r\n\t\treturn 0; //a.index - b.index;\r\n\t});\r\n\treturn randomized.slice(0, count).map((s) => s.entity);\r\n};\r\n\r\nexport const isHandMinionCandidate = (\r\n\tentity: BoardEntity,\r\n\tcardTypeUpper: (id: string) => string | undefined,\r\n): boolean => {\r\n\treturn !!entity?.cardId && !entity.locked && cardTypeUpper(entity.cardId) === CardType[CardType.MINION];\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
  }