@firestone-hs/simulate-bgs-battle 1.1.659 → 1.1.662

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 (76) hide show
  1. package/dist/cards/cards-data.d.ts +3 -1
  2. package/dist/cards/cards-data.js +3 -2
  3. package/dist/cards/cards-data.js.map +1 -1
  4. package/dist/cards/impl/_card-mappings.js +4 -0
  5. package/dist/cards/impl/_card-mappings.js.map +1 -1
  6. package/dist/cards/impl/minion/apexis-guardian.js +15 -11
  7. package/dist/cards/impl/minion/apexis-guardian.js.map +1 -1
  8. package/dist/cards/impl/minion/bassgill.js +1 -1
  9. package/dist/cards/impl/minion/bassgill.js.map +1 -1
  10. package/dist/cards/impl/minion/blue-volumizer.d.ts +2 -2
  11. package/dist/cards/impl/minion/blue-volumizer.js +1 -1
  12. package/dist/cards/impl/minion/blue-volumizer.js.map +1 -1
  13. package/dist/cards/impl/minion/bluesy-siren.js +1 -1
  14. package/dist/cards/impl/minion/bluesy-siren.js.map +1 -1
  15. package/dist/cards/impl/minion/clunker-junker.js +1 -1
  16. package/dist/cards/impl/minion/clunker-junker.js.map +1 -1
  17. package/dist/cards/impl/minion/dramaloc.js +7 -6
  18. package/dist/cards/impl/minion/dramaloc.js.map +1 -1
  19. package/dist/cards/impl/minion/impulsive-trickster.js +13 -5
  20. package/dist/cards/impl/minion/impulsive-trickster.js.map +1 -1
  21. package/dist/cards/impl/minion/pashmar-the-vengeful.js +2 -1
  22. package/dist/cards/impl/minion/pashmar-the-vengeful.js.map +1 -1
  23. package/dist/cards/impl/minion/profound-thinker.d.ts +2 -2
  24. package/dist/cards/impl/minion/profound-thinker.js +11 -8
  25. package/dist/cards/impl/minion/profound-thinker.js.map +1 -1
  26. package/dist/cards/impl/minion/red-volumizer.d.ts +2 -2
  27. package/dist/cards/impl/minion/red-volumizer.js +1 -1
  28. package/dist/cards/impl/minion/red-volumizer.js.map +1 -1
  29. package/dist/cards/impl/minion/rickety-repairbot.js +1 -1
  30. package/dist/cards/impl/minion/rickety-repairbot.js.map +1 -1
  31. package/dist/cards/impl/minion/roaring-rallier.d.ts +2 -2
  32. package/dist/cards/impl/minion/roaring-rallier.js +1 -1
  33. package/dist/cards/impl/minion/roaring-rallier.js.map +1 -1
  34. package/dist/cards/impl/minion/silent-enforcer.js +1 -1
  35. package/dist/cards/impl/minion/silent-enforcer.js.map +1 -1
  36. package/dist/cards/impl/minion/soulsplitter.js +6 -11
  37. package/dist/cards/impl/minion/soulsplitter.js.map +1 -1
  38. package/dist/cards/impl/minion/the-glad-iator.d.ts +2 -0
  39. package/dist/cards/impl/minion/the-glad-iator.js +12 -0
  40. package/dist/cards/impl/minion/the-glad-iator.js.map +1 -0
  41. package/dist/cards/impl/minion/timewarped-electron.js +1 -1
  42. package/dist/cards/impl/minion/timewarped-electron.js.map +1 -1
  43. package/dist/cards/impl/minion/timewarped-immortal.js +2 -2
  44. package/dist/cards/impl/minion/timewarped-immortal.js.map +1 -1
  45. package/dist/cards/impl/minion/timewarped-interpreter.js +2 -1
  46. package/dist/cards/impl/minion/timewarped-interpreter.js.map +1 -1
  47. package/dist/cards/impl/minion/timewarped-murcules.js +3 -0
  48. package/dist/cards/impl/minion/timewarped-murcules.js.map +1 -1
  49. package/dist/cards/impl/minion/timewarped-pashmar.js +2 -1
  50. package/dist/cards/impl/minion/timewarped-pashmar.js.map +1 -1
  51. package/dist/cards/impl/minion/timewarped-trickster.js +5 -8
  52. package/dist/cards/impl/minion/timewarped-trickster.js.map +1 -1
  53. package/dist/cards/impl/minion/timewarped-warghoul.js +9 -1
  54. package/dist/cards/impl/minion/timewarped-warghoul.js.map +1 -1
  55. package/dist/cards/impl/minion/whelp-watcher.js +4 -1
  56. package/dist/cards/impl/minion/whelp-watcher.js.map +1 -1
  57. package/dist/cards/impl/spellcraft/crab-mount.d.ts +2 -0
  58. package/dist/cards/impl/spellcraft/crab-mount.js +23 -0
  59. package/dist/cards/impl/spellcraft/crab-mount.js.map +1 -0
  60. package/dist/cards/impl/spellcraft/deep-blues.js +2 -1
  61. package/dist/cards/impl/spellcraft/deep-blues.js.map +1 -1
  62. package/dist/cards/impl/trinket/sepulchral-sergent.js +4 -2
  63. package/dist/cards/impl/trinket/sepulchral-sergent.js.map +1 -1
  64. package/dist/simulation/damage-effects.js +1 -1
  65. package/dist/simulation/damage-effects.js.map +1 -1
  66. package/dist/simulation/deathrattle-effects.js +10 -2
  67. package/dist/simulation/deathrattle-effects.js.map +1 -1
  68. package/dist/simulation/deathrattle-spawns.js +14 -14
  69. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  70. package/dist/simulation/magnetize.d.ts +1 -1
  71. package/dist/simulation/magnetize.js +74 -64
  72. package/dist/simulation/magnetize.js.map +1 -1
  73. package/dist/utils.d.ts +3 -1
  74. package/dist/utils.js +13 -8
  75. package/dist/utils.js.map +1 -1
  76. package/package.json +1 -1
@@ -6,10 +6,11 @@ exports.TimewarpedPashmar = {
6
6
  cardIds: ["BG34_Giant_211", "BG34_Giant_211_G"],
7
7
  baseAvengeValue: (cardId) => 4,
8
8
  avenge: (minion, input) => {
9
+ var _a;
9
10
  const mult = minion.cardId === "BG34_Giant_211_G" ? 2 : 1;
10
11
  const cardsToAdd = [];
11
12
  for (let i = 0; i < mult; i++) {
12
- cardsToAdd.push(input.gameState.cardsData.getRandomSpellcraft());
13
+ cardsToAdd.push(input.gameState.cardsData.getRandomSpellcraft({ maxTavernTier: (_a = input.hero.tavernTier) !== null && _a !== void 0 ? _a : 3 }));
13
14
  }
14
15
  for (let i = 0; i < mult; i++) {
15
16
  cardsToAdd.push(input.gameState.cardsData.getRandomTavernSpell());
@@ -1 +1 @@
1
- {"version":3,"file":"timewarped-pashmar.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-pashmar.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAGtD,QAAA,iBAAiB,GAAe;IAC5C,OAAO,EAAE,sCAAsF;IAC/F,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC;SACjE;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAC;SAClE;QACD,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\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\n\r\nexport const TimewarpedPashmar: AvengeCard = {\r\n\tcardIds: [CardIds.TimewarpedPashmar_BG34_Giant_211, CardIds.TimewarpedPashmar_BG34_Giant_211_G],\r\n\tbaseAvengeValue: (cardId: string) => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedPashmar_BG34_Giant_211_G ? 2 : 1;\r\n\t\tconst cardsToAdd = [];\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tcardsToAdd.push(input.gameState.cardsData.getRandomSpellcraft());\r\n\t\t}\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tcardsToAdd.push(input.gameState.cardsData.getRandomTavernSpell());\r\n\t\t}\r\n\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"timewarped-pashmar.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-pashmar.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAGtD,QAAA,iBAAiB,GAAe;IAC5C,OAAO,EAAE,sCAAsF;IAC/F,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,UAAU,CAAC,IAAI,CACd,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,aAAa,EAAE,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,EAAE,CAAC,CAC5F,CAAC;SACF;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAC;SAClE;QACD,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\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\n\r\nexport const TimewarpedPashmar: AvengeCard = {\r\n\tcardIds: [CardIds.TimewarpedPashmar_BG34_Giant_211, CardIds.TimewarpedPashmar_BG34_Giant_211_G],\r\n\tbaseAvengeValue: (cardId: string) => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedPashmar_BG34_Giant_211_G ? 2 : 1;\r\n\t\tconst cardsToAdd = [];\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tcardsToAdd.push(\r\n\t\t\t\tinput.gameState.cardsData.getRandomSpellcraft({ maxTavernTier: input.hero.tavernTier ?? 3 }),\r\n\t\t\t);\r\n\t\t}\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tcardsToAdd.push(input.gameState.cardsData.getRandomTavernSpell());\r\n\t\t}\r\n\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TimewarpedTrickster = void 0;
4
- const attack_1 = require("../../../simulation/attack");
4
+ const utils_1 = require("../../../services/utils");
5
5
  const stats_1 = require("../../../simulation/stats");
6
6
  exports.TimewarpedTrickster = {
7
7
  cardIds: ["BG34_Giant_010", "BG34_Giant_010_G"],
8
8
  deathrattleSpawn: (minion, input) => {
9
- var _a;
10
9
  const mult = minion.cardId === "BG34_Giant_010_G" ? 2 : 1;
11
- const hasImpulsivePortrait = (_a = input.boardWithDeadEntityHero.trinkets) === null || _a === void 0 ? void 0 : _a.some((t) => t.cardId === "BG32_MagicItem_820");
12
- const targets = hasImpulsivePortrait
13
- ? (0, attack_1.getNeighbours)(input.boardWithDeadEntity, input.deadEntity, input.deadEntityIndexFromRight)
14
- : input.boardWithDeadEntity.filter((e) => e != minion);
15
- for (let j = 0; j < mult; j++) {
16
- for (const target of targets) {
10
+ const targets = input.boardWithDeadEntity.filter((e) => e != minion);
11
+ const target = (0, utils_1.pickRandomAlive)(targets);
12
+ if (!!target) {
13
+ for (let j = 0; j < mult; j++) {
17
14
  (0, stats_1.modifyStats)(target, minion, minion.maxAttack, minion.maxHealth, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.gameState);
18
15
  }
19
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timewarped-trickster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-trickster.ts"],"names":[],"mappings":";;;AAEA,uDAA2D;AAE3D,qDAAwD;AAG3C,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,sCAA0F;IACnG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,oBAAoB,GAAG,MAAA,KAAK,CAAC,uBAAuB,CAAC,QAAQ,0CAAE,IAAI,CACxE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAiD,CAChE,CAAC;QACF,MAAM,OAAO,GAAG,oBAAoB;YACnC,CAAC,CAAC,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,wBAAwB,CAAC;YAC5F,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC7B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TimewarpedTrickster: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TimewarpedTrickster_BG34_Giant_010, CardIds.TimewarpedTrickster_BG34_Giant_010_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedTrickster_BG34_Giant_010_G ? 2 : 1;\r\n\t\tconst hasImpulsivePortrait = input.boardWithDeadEntityHero.trinkets?.some(\r\n\t\t\t(t) => t.cardId === CardIds.ImpulsivePortrait_BG32_MagicItem_820,\r\n\t\t);\r\n\t\tconst targets = hasImpulsivePortrait\r\n\t\t\t? getNeighbours(input.boardWithDeadEntity, input.deadEntity, input.deadEntityIndexFromRight)\r\n\t\t\t: input.boardWithDeadEntity.filter((e) => e != minion);\r\n\t\tfor (let j = 0; j < mult; j++) {\r\n\t\t\tfor (const target of targets) {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\tminion.maxAttack,\r\n\t\t\t\t\tminion.maxHealth,\r\n\t\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"timewarped-trickster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-trickster.ts"],"names":[],"mappings":";;;AAEA,mDAA0D;AAE1D,qDAAwD;AAG3C,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,sCAA0F;IACnG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAAiD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,MAAM,EAAE;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC9B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandomAlive } from '../../../services/utils';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TimewarpedTrickster: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TimewarpedTrickster_BG34_Giant_010, CardIds.TimewarpedTrickster_BG34_Giant_010_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedTrickster_BG34_Giant_010_G ? 2 : 1;\r\n\t\tconst targets = input.boardWithDeadEntity.filter((e) => e != minion);\r\n\t\tconst target = pickRandomAlive(targets);\r\n\t\tif (!!target) {\r\n\t\t\tfor (let j = 0; j < mult; j++) {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\tminion.maxAttack,\r\n\t\t\t\t\tminion.maxHealth,\r\n\t\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -5,23 +5,31 @@ const utils_1 = require("../../../services/utils");
5
5
  const attack_1 = require("../../../simulation/attack");
6
6
  const deathrattle_orchestration_1 = require("../../../simulation/deathrattle-orchestration");
7
7
  const deathrattle_utils_1 = require("../../../simulation/deathrattle-utils");
8
+ let callStackDepth = 0;
8
9
  exports.TimewarpedWarghoul = {
9
10
  cardIds: ["BG34_Giant_331", "BG34_Giant_331_G"],
10
11
  deathrattleSpawn: (minion, input) => {
12
+ callStackDepth++;
11
13
  const allNeighbours = (0, attack_1.getNeighbours)(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight).filter((e) => !!e &&
12
14
  (0, deathrattle_utils_1.hasValidDeathrattle)(e, input.boardWithDeadEntityHero, input.gameState) &&
13
- !exports.TimewarpedWarghoul.cardIds.includes(e.cardId));
15
+ !exports.TimewarpedWarghoul.cardIds.includes(e.cardId) &&
16
+ e.entityId !== minion.entityId);
14
17
  const neighbours = minion.cardId === "BG34_Giant_331_G"
15
18
  ? allNeighbours
16
19
  : [(0, utils_1.pickRandom)(allNeighbours)].filter((e) => !!e);
17
20
  if (neighbours.length === 0) {
21
+ callStackDepth--;
18
22
  return [];
19
23
  }
24
+ if (callStackDepth > 10) {
25
+ console.log('warning: timewarped warghoul call stack depth is too deep');
26
+ }
20
27
  for (const neighbour of neighbours) {
21
28
  input.gameState.spectator.registerPowerTarget(minion, neighbour, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoardHero);
22
29
  const indexFromRight = input.boardWithDeadEntity.length - (input.boardWithDeadEntity.indexOf(neighbour) + 1);
23
30
  (0, deathrattle_orchestration_1.processDeathrattleForMinion)(neighbour, indexFromRight, [neighbour], neighbour.friendly ? input.gameState.gameState.player : input.gameState.gameState.opponent, neighbour.friendly ? input.gameState.gameState.opponent : input.gameState.gameState.player, input.gameState, false);
24
31
  }
32
+ callStackDepth--;
25
33
  return [];
26
34
  },
27
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"timewarped-warghoul.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-warghoul.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AACrD,uDAA2D;AAE3D,6FAA4F;AAC5F,6EAA4E;AAG/D,QAAA,kBAAkB,GAAyB;IACvD,OAAO,EAAE,sCAAwF;IACjG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,aAAa,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAC5G,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,CAAC;YACH,IAAA,uCAAmB,EAAC,CAAC,EAAE,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,SAAS,CAAC;YACtE,CAAC,0BAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAC/C,CAAC;QACF,MAAM,UAAU,GACf,MAAM,CAAC,MAAM,uBAAgD;YAC5D,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,CAAC,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,OAAO,EAAE,CAAC;SACV;QACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YACnC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,MAAM,EACN,SAAS,EACT,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,cAAc,CACpB,CAAC;YACF,MAAM,cAAc,GACnB,KAAK,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACvF,IAAA,uDAA2B,EAC1B,SAAS,EACT,cAAc,EACd,CAAC,SAAS,CAAC,EACX,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAC1F,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAC1F,KAAK,CAAC,SAAS,EACf,KAAK,CACL,CAAC;SACF;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { processDeathrattleForMinion } from '../../../simulation/deathrattle-orchestration';\r\nimport { hasValidDeathrattle } from '../../../simulation/deathrattle-utils';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TimewarpedWarghoul: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TimewarpedWarghoul_BG34_Giant_331, CardIds.TimewarpedWarghoul_BG34_Giant_331_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst allNeighbours = getNeighbours(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight).filter(\r\n\t\t\t(e) =>\r\n\t\t\t\t!!e &&\r\n\t\t\t\thasValidDeathrattle(e, input.boardWithDeadEntityHero, input.gameState) &&\r\n\t\t\t\t!TimewarpedWarghoul.cardIds.includes(e.cardId),\r\n\t\t);\r\n\t\tconst neighbours =\r\n\t\t\tminion.cardId === CardIds.TimewarpedWarghoul_BG34_Giant_331_G\r\n\t\t\t\t? allNeighbours\r\n\t\t\t\t: [pickRandom(allNeighbours)].filter((e) => !!e);\r\n\t\tif (neighbours.length === 0) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tfor (const neighbour of neighbours) {\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tminion,\r\n\t\t\t\tneighbour,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.otherBoardHero,\r\n\t\t\t);\r\n\t\t\tconst indexFromRight =\r\n\t\t\t\tinput.boardWithDeadEntity.length - (input.boardWithDeadEntity.indexOf(neighbour) + 1);\r\n\t\t\tprocessDeathrattleForMinion(\r\n\t\t\t\tneighbour,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\t[neighbour],\r\n\t\t\t\tneighbour.friendly ? input.gameState.gameState.player : input.gameState.gameState.opponent,\r\n\t\t\t\tneighbour.friendly ? input.gameState.gameState.opponent : input.gameState.gameState.player,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t\tfalse,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"timewarped-warghoul.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-warghoul.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AACrD,uDAA2D;AAE3D,6FAA4F;AAC5F,6EAA4E;AAG5E,IAAI,cAAc,GAAG,CAAC,CAAC;AAEV,QAAA,kBAAkB,GAAyB;IACvD,OAAO,EAAE,sCAAwF;IACjG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,cAAc,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC,MAAM,CAC5G,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,CAAC;YACH,IAAA,uCAAmB,EAAC,CAAC,EAAE,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,SAAS,CAAC;YACtE,CAAC,0BAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAI9C,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAG/B,CAAC;QACF,MAAM,UAAU,GACf,MAAM,CAAC,MAAM,uBAAgD;YAC5D,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,CAAC,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;SACV;QACD,IAAI,cAAc,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;SACzE;QACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YACnC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,MAAM,EACN,SAAS,EACT,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,cAAc,CACpB,CAAC;YACF,MAAM,cAAc,GACnB,KAAK,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACvF,IAAA,uDAA2B,EAC1B,SAAS,EACT,cAAc,EACd,CAAC,SAAS,CAAC,EACX,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAC1F,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAC1F,KAAK,CAAC,SAAS,EACf,KAAK,CACL,CAAC;SACF;QACD,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { processDeathrattleForMinion } from '../../../simulation/deathrattle-orchestration';\r\nimport { hasValidDeathrattle } from '../../../simulation/deathrattle-utils';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nlet callStackDepth = 0; // Global variable to track call stack depth\r\n\r\nexport const TimewarpedWarghoul: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TimewarpedWarghoul_BG34_Giant_331, CardIds.TimewarpedWarghoul_BG34_Giant_331_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tcallStackDepth++;\r\n\t\tconst allNeighbours = getNeighbours(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight).filter(\r\n\t\t\t(e) =>\r\n\t\t\t\t!!e &&\r\n\t\t\t\thasValidDeathrattle(e, input.boardWithDeadEntityHero, input.gameState) &&\r\n\t\t\t\t!TimewarpedWarghoul.cardIds.includes(e.cardId) &&\r\n\t\t\t\t// The Warghoul will proc all the Whirl-O-Trons deathrattles but the copied deathrattle\r\n\t\t\t\t// cannot re-proc on the Warghoul itself. (If you manage to get a set up with 2 Whirl-O-Trons,\r\n\t\t\t\t// Macaw and Warghoul then congrats! Things may start to loop)\r\n\t\t\t\te.entityId !== minion.entityId,\r\n\t\t\t// !e.enchantments?.some((e) => TimewarpedWarghoul.cardIds.includes(e.cardId)) &&\r\n\t\t\t// !e.rememberedDeathrattles?.some((e) => TimewarpedWarghoul.cardIds.includes(e.cardId)),\r\n\t\t);\r\n\t\tconst neighbours =\r\n\t\t\tminion.cardId === CardIds.TimewarpedWarghoul_BG34_Giant_331_G\r\n\t\t\t\t? allNeighbours\r\n\t\t\t\t: [pickRandom(allNeighbours)].filter((e) => !!e);\r\n\t\tif (neighbours.length === 0) {\r\n\t\t\tcallStackDepth--;\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif (callStackDepth > 10) {\r\n\t\t\tconsole.log('warning: timewarped warghoul call stack depth is too deep');\r\n\t\t}\r\n\t\tfor (const neighbour of neighbours) {\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tminion,\r\n\t\t\t\tneighbour,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.otherBoardHero,\r\n\t\t\t);\r\n\t\t\tconst indexFromRight =\r\n\t\t\t\tinput.boardWithDeadEntity.length - (input.boardWithDeadEntity.indexOf(neighbour) + 1);\r\n\t\t\tprocessDeathrattleForMinion(\r\n\t\t\t\tneighbour,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\t[neighbour],\r\n\t\t\t\tneighbour.friendly ? input.gameState.gameState.player : input.gameState.gameState.opponent,\r\n\t\t\t\tneighbour.friendly ? input.gameState.gameState.opponent : input.gameState.gameState.player,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t\tfalse,\r\n\t\t\t);\r\n\t\t}\r\n\t\tcallStackDepth--;\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -24,7 +24,10 @@ exports.WhelpWatcher = {
24
24
  spawns.forEach((e) => {
25
25
  e.attackImmediately = true;
26
26
  });
27
- (0, spawns_1.performEntitySpawns)(spawns, spawnInput.boardWithDeadEntity, spawnInput.boardWithDeadEntityHero, minion, input.attackingBoard.length - input.attackingBoard.indexOf(input.attacker) - 1, spawnInput.otherBoard, spawnInput.otherBoardHero, spawnInput.gameState, true, input.defendingEntity);
27
+ const spawned = (0, spawns_1.performEntitySpawns)(spawns, spawnInput.boardWithDeadEntity, spawnInput.boardWithDeadEntityHero, minion, input.attackingBoard.length - input.attackingBoard.indexOf(input.attacker) - 1, spawnInput.otherBoard, spawnInput.otherBoardHero, spawnInput.gameState, true, input.defendingEntity);
28
+ spawned.forEach((e) => {
29
+ e.hasAttacked = 0;
30
+ });
28
31
  return {
29
32
  dmgDoneByAttacker: 0,
30
33
  dmgDoneByDefender: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"whelp-watcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/whelp-watcher.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAEjF,uDAAiE;AAGpD,QAAA,YAAY,GAAc;IACtC,OAAO,EAAE,0BAAgE;IACzE,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAA4D,EAAE;QAC9G,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;YAC3B,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QACD,MAAM,UAAU,GAA8B;YAC7C,mBAAmB,EAAE,KAAK,CAAC,cAAc;YACzC,uBAAuB,EAAE,KAAK,CAAC,aAAa;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,QAAQ;YAC1B,UAAU,EAAE,KAAK,CAAC,cAAc;YAChC,cAAc,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC;QACF,MAAM,WAAW,GAChB,MAAM,CAAC,MAAM,iBAAoC;YAChD,CAAC;YACD,CAAC,YAAuD,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAA,4CAAuB,EAAC,WAAW,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,IAAA,4BAAmB,EAClB,MAAM,EACN,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,uBAAuB,EAClC,MAAM,EACN,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC9E,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,cAAc,EACzB,UAAU,CAAC,SAAS,EACpB,IAAI,EACJ,KAAK,CAAC,eAAe,CACrB,CAAC;QACF,OAAO;YACN,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;SACpB,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const WhelpWatcher: RallyCard = {\r\n\tcardIds: [CardIds.WhelpWatcher_BG34_631, CardIds.WhelpWatcher_BG34_631_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tif (!input.defendingEntity) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\t\tconst spawnInput: DeathrattleTriggeredInput = {\r\n\t\t\tboardWithDeadEntity: input.attackingBoard,\r\n\t\t\tboardWithDeadEntityHero: input.attackingHero,\r\n\t\t\tgameState: input.gameState,\r\n\t\t\tdeadEntity: input.attacker,\r\n\t\t\totherBoard: input.defendingBoard,\r\n\t\t\totherBoardHero: input.defendingHero,\r\n\t\t};\r\n\t\tconst spawnCardId =\r\n\t\t\tminion.cardId === CardIds.WhelpWatcher_BG34_631_G\r\n\t\t\t\t? CardIds.TwilightHatchling_TwilightWhelpToken_BG34_630_Gt\r\n\t\t\t\t: CardIds.TwilightHatchling_TwilightWhelpToken_BG34_630t;\r\n\t\tconst spawns = simplifiedSpawnEntities(spawnCardId, 1, spawnInput);\r\n\t\tspawns.forEach((e) => {\r\n\t\t\te.attackImmediately = true;\r\n\t\t});\r\n\t\tperformEntitySpawns(\r\n\t\t\tspawns,\r\n\t\t\tspawnInput.boardWithDeadEntity,\r\n\t\t\tspawnInput.boardWithDeadEntityHero,\r\n\t\t\tminion,\r\n\t\t\tinput.attackingBoard.length - input.attackingBoard.indexOf(input.attacker) - 1,\r\n\t\t\tspawnInput.otherBoard,\r\n\t\t\tspawnInput.otherBoardHero,\r\n\t\t\tspawnInput.gameState,\r\n\t\t\ttrue,\r\n\t\t\tinput.defendingEntity,\r\n\t\t);\r\n\t\treturn {\r\n\t\t\tdmgDoneByAttacker: 0,\r\n\t\t\tdmgDoneByDefender: 0,\r\n\t\t};\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"whelp-watcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/whelp-watcher.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAEjF,uDAAiE;AAGpD,QAAA,YAAY,GAAc;IACtC,OAAO,EAAE,0BAAgE;IACzE,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAA4D,EAAE;QAC9G,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;YAC3B,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QACD,MAAM,UAAU,GAA8B;YAC7C,mBAAmB,EAAE,KAAK,CAAC,cAAc;YACzC,uBAAuB,EAAE,KAAK,CAAC,aAAa;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,QAAQ;YAC1B,UAAU,EAAE,KAAK,CAAC,cAAc;YAChC,cAAc,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC;QACF,MAAM,WAAW,GAChB,MAAM,CAAC,MAAM,iBAAoC;YAChD,CAAC;YACD,CAAC,YAAuD,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAA,4CAAuB,EAAC,WAAW,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,4BAAmB,EAClC,MAAM,EACN,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,uBAAuB,EAClC,MAAM,EACN,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC9E,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,cAAc,EACzB,UAAU,CAAC,SAAS,EACpB,IAAI,EACJ,KAAK,CAAC,eAAe,CACrB,CAAC;QAGF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,OAAO;YACN,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;SACpB,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const WhelpWatcher: RallyCard = {\r\n\tcardIds: [CardIds.WhelpWatcher_BG34_631, CardIds.WhelpWatcher_BG34_631_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tif (!input.defendingEntity) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\t\tconst spawnInput: DeathrattleTriggeredInput = {\r\n\t\t\tboardWithDeadEntity: input.attackingBoard,\r\n\t\t\tboardWithDeadEntityHero: input.attackingHero,\r\n\t\t\tgameState: input.gameState,\r\n\t\t\tdeadEntity: input.attacker,\r\n\t\t\totherBoard: input.defendingBoard,\r\n\t\t\totherBoardHero: input.defendingHero,\r\n\t\t};\r\n\t\tconst spawnCardId =\r\n\t\t\tminion.cardId === CardIds.WhelpWatcher_BG34_631_G\r\n\t\t\t\t? CardIds.TwilightHatchling_TwilightWhelpToken_BG34_630_Gt\r\n\t\t\t\t: CardIds.TwilightHatchling_TwilightWhelpToken_BG34_630t;\r\n\t\tconst spawns = simplifiedSpawnEntities(spawnCardId, 1, spawnInput);\r\n\t\tspawns.forEach((e) => {\r\n\t\t\te.attackImmediately = true;\r\n\t\t});\r\n\t\tconst spawned = performEntitySpawns(\r\n\t\t\tspawns,\r\n\t\t\tspawnInput.boardWithDeadEntity,\r\n\t\t\tspawnInput.boardWithDeadEntityHero,\r\n\t\t\tminion,\r\n\t\t\tinput.attackingBoard.length - input.attackingBoard.indexOf(input.attacker) - 1,\r\n\t\t\tspawnInput.otherBoard,\r\n\t\t\tspawnInput.otherBoardHero,\r\n\t\t\tspawnInput.gameState,\r\n\t\t\ttrue,\r\n\t\t\tinput.defendingEntity,\r\n\t\t);\r\n\t\t// 2025-12-03: not sure, that might be a HS bug\r\n\t\t// https://replays.firestoneapp.com/?reviewId=67e46c7c-9ac8-41d5-8712-d12e44bef9f9&turn=9&action=6\r\n\t\tspawned.forEach((e) => {\r\n\t\t\te.hasAttacked = 0;\r\n\t\t});\r\n\t\treturn {\r\n\t\t\tdmgDoneByAttacker: 0,\r\n\t\t\tdmgDoneByDefender: 0,\r\n\t\t};\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { TavernSpellCard } from '../../card.interface';
2
+ export declare const CrabMount: TavernSpellCard;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CrabMount = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ exports.CrabMount = {
6
+ cardIds: ["BG27_004t", "BG27_004_Gt"],
7
+ castTavernSpell: (spellCardId, input) => {
8
+ var _a;
9
+ const target = (_a = input.target) !== null && _a !== void 0 ? _a : (0, utils_1.pickRandom)(input.board);
10
+ if (!!target) {
11
+ const enchantmentId = spellCardId === "BG27_004_Gt"
12
+ ? "BG27_004_Ge"
13
+ : "BG27_004e";
14
+ target.enchantments.push({
15
+ cardId: enchantmentId,
16
+ originEntityId: input.source.entityId,
17
+ timing: input.gameState.sharedState.currentEntityId++,
18
+ });
19
+ input.gameState.spectator.registerPowerTarget(input.source, target, input.board, input.hero, input.otherHero);
20
+ }
21
+ },
22
+ };
23
+ //# sourceMappingURL=crab-mount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crab-mount.js","sourceRoot":"","sources":["../../../../src/cards/impl/spellcraft/crab-mount.ts"],"names":[],"mappings":";;;AACA,mDAAqD;AAGxC,QAAA,SAAS,GAAoB;IACzC,OAAO,EAAE,4BAA0F;IACnG,eAAe,EAAE,CAAC,WAAmB,EAAE,KAAqB,EAAE,EAAE;;QAC/D,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,MAAM,mCAAI,IAAA,kBAAU,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,CAAC,MAAM,EAAE;YACb,MAAM,aAAa,GAClB,WAAW,kBAAiD;gBAC3D,CAAC;gBACD,CAAC,YAAkD,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxB,MAAM,EAAE,aAAa;gBACrB,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;gBACrC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;YACH,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,MAAM,EACZ,MAAM,EACN,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;SACF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\n\r\nexport const CrabMount: TavernSpellCard = {\r\n\tcardIds: [CardIds.SurfNSurf_CrabMountToken_BG27_004t, CardIds.SurfNSurf_CrabMountToken_BG27_004_Gt],\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => {\r\n\t\tconst target = input.target ?? pickRandom(input.board);\r\n\t\tif (!!target) {\r\n\t\t\tconst enchantmentId =\r\n\t\t\t\tspellCardId === CardIds.SurfNSurf_CrabMountToken_BG27_004_Gt\r\n\t\t\t\t\t? CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge\r\n\t\t\t\t\t: CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004e;\r\n\t\t\ttarget.enchantments.push({\r\n\t\t\t\tcardId: enchantmentId,\r\n\t\t\t\toriginEntityId: input.source.entityId,\r\n\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t});\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tinput.source,\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.board,\r\n\t\t\t\tinput.hero,\r\n\t\t\t\tinput.otherHero,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -10,7 +10,8 @@ exports.DeepBlues = {
10
10
  const mult = spellCardId === "BG26_502t" ? 1 : 2;
11
11
  const target = (_a = input.target) !== null && _a !== void 0 ? _a : (0, utils_1.pickRandom)(input.board);
12
12
  if (!!target) {
13
- const currentBuff = input.hero.globalInfo.DeepBluesPlayed;
13
+ const currentBuff = input.hero.globalInfo.DeepBluesPlayed + 1;
14
+ input.hero.globalInfo.DeepBluesPlayed++;
14
15
  (0, stats_1.modifyStats)(target, input.source, 2 * currentBuff * mult, 3 * currentBuff * mult, input.board, input.hero, input.gameState);
15
16
  input.gameState.spectator.registerPowerTarget(input.source, target, input.board, input.hero, input.otherHero);
16
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deep-blues.js","sourceRoot":"","sources":["../../../../src/cards/impl/spellcraft/deep-blues.ts"],"names":[],"mappings":";;;AACA,mDAAqD;AACrD,qDAAwD;AAG3C,QAAA,SAAS,GAAoB;IACzC,OAAO,EAAE,4BAAsG;IAC/G,eAAe,EAAE,CAAC,WAAmB,EAAE,KAAqB,EAAE,EAAE;;QAC/D,MAAM,IAAI,GAAG,WAAW,gBAAqD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,MAAM,mCAAI,IAAA,kBAAU,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,CAAC,MAAM,EAAE;YACb,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YAC1D,IAAA,mBAAW,EACV,MAAM,EACN,KAAK,CAAC,MAAM,EACZ,CAAC,GAAG,WAAW,GAAG,IAAI,EACtB,CAAC,GAAG,WAAW,GAAG,IAAI,EACtB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,MAAM,EACZ,MAAM,EACN,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;SACF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\n\r\nexport const DeepBlues: TavernSpellCard = {\r\n\tcardIds: [CardIds.DeepBlueCrooner_DeepBluesToken_BG26_502t, CardIds.DeepBlueCrooner_DeepBluesToken_BG26_502_Gt],\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => {\r\n\t\tconst mult = spellCardId === CardIds.DeepBlueCrooner_DeepBluesToken_BG26_502t ? 1 : 2;\r\n\t\tconst target = input.target ?? pickRandom(input.board);\r\n\t\tif (!!target) {\r\n\t\t\tconst currentBuff = input.hero.globalInfo.DeepBluesPlayed;\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.source,\r\n\t\t\t\t2 * currentBuff * mult,\r\n\t\t\t\t3 * currentBuff * 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\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tinput.source,\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.board,\r\n\t\t\t\tinput.hero,\r\n\t\t\t\tinput.otherHero,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"deep-blues.js","sourceRoot":"","sources":["../../../../src/cards/impl/spellcraft/deep-blues.ts"],"names":[],"mappings":";;;AACA,mDAAqD;AACrD,qDAAwD;AAG3C,QAAA,SAAS,GAAoB;IACzC,OAAO,EAAE,4BAAsG;IAC/G,eAAe,EAAE,CAAC,WAAmB,EAAE,KAAqB,EAAE,EAAE;;QAC/D,MAAM,IAAI,GAAG,WAAW,gBAAqD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,MAAM,mCAAI,IAAA,kBAAU,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,CAAC,MAAM,EAAE;YACb,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,CAAC,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;YACxC,IAAA,mBAAW,EACV,MAAM,EACN,KAAK,CAAC,MAAM,EACZ,CAAC,GAAG,WAAW,GAAG,IAAI,EACtB,CAAC,GAAG,WAAW,GAAG,IAAI,EACtB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,MAAM,EACZ,MAAM,EACN,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;SACF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\n\r\nexport const DeepBlues: TavernSpellCard = {\r\n\tcardIds: [CardIds.DeepBlueCrooner_DeepBluesToken_BG26_502t, CardIds.DeepBlueCrooner_DeepBluesToken_BG26_502_Gt],\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => {\r\n\t\tconst mult = spellCardId === CardIds.DeepBlueCrooner_DeepBluesToken_BG26_502t ? 1 : 2;\r\n\t\tconst target = input.target ?? pickRandom(input.board);\r\n\t\tif (!!target) {\r\n\t\t\tconst currentBuff = input.hero.globalInfo.DeepBluesPlayed + 1;\r\n\t\t\tinput.hero.globalInfo.DeepBluesPlayed++;\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.source,\r\n\t\t\t\t2 * currentBuff * mult,\r\n\t\t\t\t3 * currentBuff * 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\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\tinput.source,\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.board,\r\n\t\t\t\tinput.hero,\r\n\t\t\t\tinput.otherHero,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -6,13 +6,15 @@ exports.SepulchralSergeant = {
6
6
  cardIds: ["BG34_111", "BG34_111_G"],
7
7
  deathrattleSpawn: (minion, input) => {
8
8
  const mult = minion.cardId === "BG34_111_G" ? 2 : 1;
9
- const base = minion.scriptDataNum1 || 2;
9
+ const base = 1 + (minion.scriptDataNum1 || 1);
10
10
  const buff = base * mult;
11
11
  (0, utils_1.addStatsToAliveBoard)(minion, input.boardWithDeadEntity, input.boardWithDeadEntityHero, 0, buff, input.gameState);
12
12
  return [];
13
13
  },
14
14
  onStatsChanged: (minion, input) => {
15
- minion.scriptDataNum1 = (minion.scriptDataNum1 || 2) + 2;
15
+ if (input.target === minion && input.attackAmount > 0) {
16
+ minion.scriptDataNum1 = (minion.scriptDataNum1 || 2) + 1;
17
+ }
16
18
  },
17
19
  };
18
20
  //# sourceMappingURL=sepulchral-sergent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sepulchral-sergent.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/sepulchral-sergent.ts"],"names":[],"mappings":";;;AAIA,0CAAsD;AAGzC,QAAA,kBAAkB,GAA8C;IAC5E,OAAO,EAAE,0BAA4E;IACrF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACzB,IAAA,4BAAoB,EACnB,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,CAAC,EACD,IAAI,EACJ,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;IACD,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { addStatsToAliveBoard } from '../../../utils';\r\nimport { DeathrattleSpawnCard, OnStatsChangedCard } from '../../card.interface';\r\n\r\nexport const SepulchralSergeant: DeathrattleSpawnCard & OnStatsChangedCard = {\r\n\tcardIds: [CardIds.SepulchralSergeant_BG34_111, CardIds.SepulchralSergeant_BG34_111_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SepulchralSergeant_BG34_111_G ? 2 : 1;\r\n\t\tconst base = minion.scriptDataNum1 || 2;\r\n\t\tconst buff = base * mult;\r\n\t\taddStatsToAliveBoard(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t0,\r\n\t\t\tbuff,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tminion.scriptDataNum1 = (minion.scriptDataNum1 || 2) + 2;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"sepulchral-sergent.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/sepulchral-sergent.ts"],"names":[],"mappings":";;;AAIA,0CAAsD;AAGzC,QAAA,kBAAkB,GAA8C;IAC5E,OAAO,EAAE,0BAA4E;IACrF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7E,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACzB,IAAA,4BAAoB,EACnB,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,CAAC,EACD,IAAI,EACJ,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;IACD,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE;YACtD,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACzD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { addStatsToAliveBoard } from '../../../utils';\r\nimport { DeathrattleSpawnCard, OnStatsChangedCard } from '../../card.interface';\r\n\r\nexport const SepulchralSergeant: DeathrattleSpawnCard & OnStatsChangedCard = {\r\n\tcardIds: [CardIds.SepulchralSergeant_BG34_111, CardIds.SepulchralSergeant_BG34_111_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SepulchralSergeant_BG34_111_G ? 2 : 1;\r\n\t\t// Not sure about that +1\r\n\t\tconst base = 1 + (minion.scriptDataNum1 || 1);\r\n\t\tconst buff = base * mult;\r\n\t\taddStatsToAliveBoard(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t0,\r\n\t\t\tbuff,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tif (input.target === minion && input.attackAmount > 0) {\r\n\t\t\tminion.scriptDataNum1 = (minion.scriptDataNum1 || 2) + 1;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -114,7 +114,7 @@ const handleOtherEntityEffects = (entity, board, hero, otherBoard, otherHero, sp
114
114
  const stats = e.cardId === "BG29_806_G" ? 2 : 1;
115
115
  const target = (0, utils_1.pickRandom)(board.filter((e) => e.entityId !== entity.entityId));
116
116
  if (!!target) {
117
- (0, stats_1.modifyStats)(target, e, 2 * stats, stats, board, hero, gameState);
117
+ (0, stats_1.modifyStats)(target, e, 2 * stats, 1 * stats, board, hero, gameState);
118
118
  }
119
119
  });
120
120
  board
@@ -1 +1 @@
1
- {"version":3,"file":"damage-effects.js","sourceRoot":"","sources":["../../src/simulation/damage-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: board,\r\n\t\t\thero: hero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, board, hero, otherHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(damagedEntity, damagedEntity, board, hero, otherHero);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, board, hero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\t// case CardIds.CraftyAranasi_BG29_821:\r\n\t\t// case CardIds.CraftyAranasi_BG29_821_G:\r\n\t\t// \tconst aranasiLoops = damagedEntity.cardId === CardIds.CraftyAranasi_BG29_821_G ? 2 : 1;\r\n\t\t// \tfor (let i = 0; i < aranasiLoops; i++) {\r\n\t\t// \t\tdealDamageToRandomEnemy(\r\n\t\t// \t\t\tenemyBoard,\r\n\t\t// \t\t\tenemyHero,\r\n\t\t// \t\t\tdamagedEntity,\r\n\t\t// \t\t\t5,\r\n\t\t// \t\t\tfriendlyBoard,\r\n\t\t// \t\t\tfriendlyHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.MarineMatriarch_BG29_610:\r\n\t\t// case CardIds.MarineMatriarch_BG29_610_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.MarineMatriarch_BG29_610_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300:\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300_G:\r\n\t\t// \tconst winterfinnerStats = damagedEntity.cardId === CardIds.VeryHungryWinterfinner_BG29_300_G ? 2 : 1;\r\n\t\t// \tconst minionInHand = pickRandom(\r\n\t\t// \t\thero.hand.filter(\r\n\t\t// \t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// \tif (!!minionInHand) {\r\n\t\t// \t\tminionInHand.attack += 2 * winterfinnerStats;\r\n\t\t// \t\tminionInHand.health += winterfinnerStats;\r\n\t\t// \t\tminionInHand.maxHealth += winterfinnerStats;\r\n\t\t// \t\tgameState.spectator.registerPowerTarget(damagedEntity, minionInHand, board, hero, otherHero);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590:\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.SoftHeartedSiren_BG26_590_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.LongJohnCopper_BG29_831:\r\n\t\t// case CardIds.LongJohnCopper_BG29_831_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.LongJohnCopper_BG29_831_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160:\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.BristlingBuffoon_BG29_160_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => CardIds.BloodGem);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(damagedEntity, board, hero, otherBoard, otherHero, spawnedEntities, gameState);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tboard,\r\n\t\thero,\r\n\t\tdamagedEntity,\r\n\t\tboard.length - (board.indexOf(damagedEntity) + 1),\r\n\t\totherBoard,\r\n\t\totherHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = board[board.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of board) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of otherBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: otherBoard,\r\n\t\t\t\t\thero: otherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 2 * stats, stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\thero.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_BG30_MagicItem_427 ||\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t,\r\n\t\t)\r\n\t\t.forEach((carving) => {\r\n\t\t\tconst target = pickRandomAlive(board);\r\n\t\t\tif (!!target) {\r\n\t\t\t\tconst buff = carving.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t ? 4 : 2;\r\n\t\t\t\tmodifyStats(target, carving, buff, 0, board, hero, gameState);\r\n\t\t\t}\r\n\t\t});\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"damage-effects.js","sourceRoot":"","sources":["../../src/simulation/damage-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasAfterDealDamage, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom, pickRandomAlive } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: board,\r\n\t\t\thero: hero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, board, hero, otherHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(damagedEntity, damagedEntity, board, hero, otherHero);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, board, hero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboard,\r\n\t\t\t\t\thero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\t// case CardIds.CraftyAranasi_BG29_821:\r\n\t\t// case CardIds.CraftyAranasi_BG29_821_G:\r\n\t\t// \tconst aranasiLoops = damagedEntity.cardId === CardIds.CraftyAranasi_BG29_821_G ? 2 : 1;\r\n\t\t// \tfor (let i = 0; i < aranasiLoops; i++) {\r\n\t\t// \t\tdealDamageToRandomEnemy(\r\n\t\t// \t\t\tenemyBoard,\r\n\t\t// \t\t\tenemyHero,\r\n\t\t// \t\t\tdamagedEntity,\r\n\t\t// \t\t\t5,\r\n\t\t// \t\t\tfriendlyBoard,\r\n\t\t// \t\t\tfriendlyHero,\r\n\t\t// \t\t\tgameState,\r\n\t\t// \t\t);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.MarineMatriarch_BG29_610:\r\n\t\t// case CardIds.MarineMatriarch_BG29_610_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.MarineMatriarch_BG29_610_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300:\r\n\t\t// case CardIds.VeryHungryWinterfinner_BG29_300_G:\r\n\t\t// \tconst winterfinnerStats = damagedEntity.cardId === CardIds.VeryHungryWinterfinner_BG29_300_G ? 2 : 1;\r\n\t\t// \tconst minionInHand = pickRandom(\r\n\t\t// \t\thero.hand.filter(\r\n\t\t// \t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\r\n\t\t// \t\t),\r\n\t\t// \t);\r\n\t\t// \tif (!!minionInHand) {\r\n\t\t// \t\tminionInHand.attack += 2 * winterfinnerStats;\r\n\t\t// \t\tminionInHand.health += winterfinnerStats;\r\n\t\t// \t\tminionInHand.maxHealth += winterfinnerStats;\r\n\t\t// \t\tgameState.spectator.registerPowerTarget(damagedEntity, minionInHand, board, hero, otherHero);\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590:\r\n\t\t// case CardIds.SoftHeartedSiren_BG26_590_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.SoftHeartedSiren_BG26_590_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.LongJohnCopper_BG29_831:\r\n\t\t// case CardIds.LongJohnCopper_BG29_831_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.LongJohnCopper_BG29_831_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => null);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160:\r\n\t\t// case CardIds.BristlingBuffoon_BG29_160_G:\r\n\t\t// \tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t// \t\tconst numbersOfCardsToAdd = damagedEntity.cardId === CardIds.BristlingBuffoon_BG29_160_G ? 2 : 1;\r\n\t\t// \t\tconst cardsToAdd = Array.from({ length: numbersOfCardsToAdd }).map(() => CardIds.BloodGem);\r\n\t\t// \t\taddCardsInHand(hero, board, cardsToAdd, gameState);\r\n\t\t// \t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t// \t}\r\n\t\t// \tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(damagedEntity, board, hero, otherBoard, otherHero, spawnedEntities, gameState);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tboard,\r\n\t\thero,\r\n\t\tdamagedEntity,\r\n\t\tboard.length - (board.indexOf(damagedEntity) + 1),\r\n\t\totherBoard,\r\n\t\totherHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = board[board.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? 0;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of board) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of otherBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: otherBoard,\r\n\t\t\t\t\thero: otherHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 2 * stats, 1 * stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\thero.trinkets\r\n\t\t.filter(\r\n\t\t\t(t) =>\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_BG30_MagicItem_427 ||\r\n\t\t\t\tt.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t,\r\n\t\t)\r\n\t\t.forEach((carving) => {\r\n\t\t\tconst target = pickRandomAlive(board);\r\n\t\t\tif (!!target) {\r\n\t\t\t\tconst buff = carving.cardId === CardIds.TigerCarving_TigerCarvingToken_BG30_MagicItem_427t ? 4 : 2;\r\n\t\t\t\tmodifyStats(target, carving, buff, 0, board, hero, gameState);\r\n\t\t\t}\r\n\t\t});\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
@@ -324,10 +324,18 @@ const rememberDeathrattles = (fish, inputDeadEntities, cardsData, allCards, shar
324
324
  else {
325
325
  fish.rememberedDeathrattles = [...(fish.rememberedDeathrattles || []), ...newDeathrattles];
326
326
  }
327
- if (newDeathrattles.some((d) => { var _a; return (_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000"); })) {
327
+ if (newDeathrattles.some((d) => {
328
+ var _a, _b;
329
+ return ((_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000")) ||
330
+ ((_b = d.cardId) === null || _b === void 0 ? void 0 : _b.startsWith("BG34_Giant_031"));
331
+ })) {
328
332
  const leapfroggerDeathrattles = (0, remembered_deathrattle_1.groupLeapfroggerDeathrattles)(fish.rememberedDeathrattles);
329
333
  fish.rememberedDeathrattles = [
330
- ...fish.rememberedDeathrattles.filter((d) => { var _a; return !((_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000")); }),
334
+ ...fish.rememberedDeathrattles.filter((d) => {
335
+ var _a, _b;
336
+ return !((_a = d.cardId) === null || _a === void 0 ? void 0 : _a.startsWith("BG21_000")) &&
337
+ !((_b = d.cardId) === null || _b === void 0 ? void 0 : _b.startsWith("BG34_Giant_031"));
338
+ }),
331
339
  ...leapfroggerDeathrattles,
332
340
  ];
333
341
  }