@firestone-hs/simulate-bgs-battle 1.1.714 → 1.1.716

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 (81) hide show
  1. package/dist/bgs-player-entity.d.ts +2 -1
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/cards/card.interface.d.ts +5 -1
  4. package/dist/cards/card.interface.js +4 -2
  5. package/dist/cards/card.interface.js.map +1 -1
  6. package/dist/cards/impl/_card-mappings.js +20 -0
  7. package/dist/cards/impl/_card-mappings.js.map +1 -1
  8. package/dist/cards/impl/bg-spell/blood-gem-quilboar-divine-shield.js +2 -2
  9. package/dist/cards/impl/bg-spell/blood-gem-quilboar-divine-shield.js.map +1 -1
  10. package/dist/cards/impl/bg-spell/blood-gem-quilboar-reborn.js +2 -2
  11. package/dist/cards/impl/bg-spell/blood-gem-quilboar-reborn.js.map +1 -1
  12. package/dist/cards/impl/bg-spell/blood-gem-quilboar-taunt.js +2 -2
  13. package/dist/cards/impl/bg-spell/blood-gem-quilboar-taunt.js.map +1 -1
  14. package/dist/cards/impl/bg-spell/conflagration.js +2 -2
  15. package/dist/cards/impl/bg-spell/conflagration.js.map +1 -1
  16. package/dist/cards/impl/bg-spell/deepwater-clan.js +2 -2
  17. package/dist/cards/impl/bg-spell/deepwater-clan.js.map +1 -1
  18. package/dist/cards/impl/bg-spell/queens-command.js +2 -2
  19. package/dist/cards/impl/bg-spell/queens-command.js.map +1 -1
  20. package/dist/cards/impl/minion/bristleback-bully.js +1 -3
  21. package/dist/cards/impl/minion/bristleback-bully.js.map +1 -1
  22. package/dist/cards/impl/minion/chromadrake-pool.js +5 -5
  23. package/dist/cards/impl/minion/chromadrake-pool.js.map +1 -1
  24. package/dist/cards/impl/minion/dead-sea-ravager.d.ts +2 -0
  25. package/dist/cards/impl/minion/dead-sea-ravager.js +20 -0
  26. package/dist/cards/impl/minion/dead-sea-ravager.js.map +1 -0
  27. package/dist/cards/impl/minion/deepwater-chieftain.js +2 -6
  28. package/dist/cards/impl/minion/deepwater-chieftain.js.map +1 -1
  29. package/dist/cards/impl/minion/firelands-fugitive.js +1 -3
  30. package/dist/cards/impl/minion/firelands-fugitive.js.map +1 -1
  31. package/dist/cards/impl/minion/ingenious-inventor.d.ts +2 -0
  32. package/dist/cards/impl/minion/ingenious-inventor.js +14 -0
  33. package/dist/cards/impl/minion/ingenious-inventor.js.map +1 -0
  34. package/dist/cards/impl/minion/leyline-surfacer.js +2 -6
  35. package/dist/cards/impl/minion/leyline-surfacer.js.map +1 -1
  36. package/dist/cards/impl/minion/redtusk-thornraiser.js +1 -3
  37. package/dist/cards/impl/minion/redtusk-thornraiser.js.map +1 -1
  38. package/dist/cards/impl/minion/vinespeaker.js +4 -0
  39. package/dist/cards/impl/minion/vinespeaker.js.map +1 -1
  40. package/dist/cards/impl/spellcraft/trudge-through-lava.d.ts +2 -0
  41. package/dist/cards/impl/spellcraft/trudge-through-lava.js +15 -0
  42. package/dist/cards/impl/spellcraft/trudge-through-lava.js.map +1 -0
  43. package/dist/cards/impl/spellcraft/use-supplies.d.ts +2 -0
  44. package/dist/cards/impl/spellcraft/use-supplies.js +15 -0
  45. package/dist/cards/impl/spellcraft/use-supplies.js.map +1 -0
  46. package/dist/cards/impl/spellcraft/volcanic-visitor.d.ts +2 -0
  47. package/dist/cards/impl/spellcraft/volcanic-visitor.js +17 -0
  48. package/dist/cards/impl/spellcraft/volcanic-visitor.js.map +1 -0
  49. package/dist/cards/impl/trinket/deathtouch-apple.d.ts +2 -0
  50. package/dist/cards/impl/trinket/deathtouch-apple.js +21 -0
  51. package/dist/cards/impl/trinket/deathtouch-apple.js.map +1 -0
  52. package/dist/cards/impl/trinket/rylak-portrait.d.ts +2 -0
  53. package/dist/cards/impl/trinket/rylak-portrait.js +18 -0
  54. package/dist/cards/impl/trinket/rylak-portrait.js.map +1 -0
  55. package/dist/cards/impl/trinket/sky-golem-portrait-enchantment.d.ts +2 -0
  56. package/dist/cards/impl/trinket/sky-golem-portrait-enchantment.js +16 -0
  57. package/dist/cards/impl/trinket/sky-golem-portrait-enchantment.js.map +1 -0
  58. package/dist/cards/impl/trinket/sky-golem-portrait.d.ts +2 -0
  59. package/dist/cards/impl/trinket/sky-golem-portrait.js +20 -0
  60. package/dist/cards/impl/trinket/sky-golem-portrait.js.map +1 -0
  61. package/dist/cards/impl/trinket/soul-fermenter.d.ts +2 -0
  62. package/dist/cards/impl/trinket/soul-fermenter.js +35 -0
  63. package/dist/cards/impl/trinket/soul-fermenter.js.map +1 -0
  64. package/dist/input-sanitation.js +3 -2
  65. package/dist/input-sanitation.js.map +1 -1
  66. package/dist/services/card-ids.d.ts +165 -17
  67. package/dist/services/card-ids.js.map +1 -1
  68. package/dist/simulation/add-minion-to-board.js +11 -4
  69. package/dist/simulation/add-minion-to-board.js.map +1 -1
  70. package/dist/simulation/blood-gems.js +1 -4
  71. package/dist/simulation/blood-gems.js.map +1 -1
  72. package/dist/simulation/deathrattle-spawns.d.ts +2 -2
  73. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  74. package/dist/simulation/global-info-helpers.d.ts +1 -0
  75. package/dist/simulation/global-info-helpers.js +7 -1
  76. package/dist/simulation/global-info-helpers.js.map +1 -1
  77. package/dist/simulation/reborn.js +28 -2
  78. package/dist/simulation/reborn.js.map +1 -1
  79. package/dist/simulation/summon-when-space.js +3 -3
  80. package/dist/simulation/summon-when-space.js.map +1 -1
  81. package/package.json +2 -2
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.chromadrakeCardIds = void 0;
4
4
  exports.chromadrakeCardIds = [
5
- "BG34_634",
6
- "BG34_635",
7
- "BG34_636",
8
- "BG34_637",
9
- "BG34_638",
5
+ "BG34_634t",
6
+ "BG34_635t",
7
+ "BG34_636t",
8
+ "BG34_637t",
9
+ "BG34_638t",
10
10
  ];
11
11
  //# sourceMappingURL=chromadrake-pool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chromadrake-pool.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/chromadrake-pool.ts"],"names":[],"mappings":";;;AAGa,QAAA,kBAAkB,GAAsB;;;;;;CAMpD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\n\r\n/** Random Chromadrake outcomes for Incubation Researcher / Draconic Warden. */\r\nexport const chromadrakeCardIds: readonly string[] = [\r\n\tCardIds.BlueChromadrake_BG34_634,\r\n\tCardIds.BlackChromadrake_BG34_635,\r\n\tCardIds.GreenChromadrake_BG34_636,\r\n\tCardIds.BronzeChromadrake_BG34_637,\r\n\tCardIds.RedChromadrake_BG34_638,\r\n];\r\n"]}
1
+ {"version":3,"file":"chromadrake-pool.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/chromadrake-pool.ts"],"names":[],"mappings":";;;AAGa,QAAA,kBAAkB,GAAsB;;;;;;CAMpD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\n\r\n/** Random Chromadrake outcomes for Incubation Researcher / Draconic Warden. */\r\nexport const chromadrakeCardIds: readonly string[] = [\r\n\tCardIds.BlueChromadrakeToken_BG34_634t,\r\n\tCardIds.BlackChromadrakeToken_BG34_635t,\r\n\tCardIds.GreenChromadrakeToken_BG34_636t,\r\n\tCardIds.BronzeChromadrakeToken_BG34_637t,\r\n\tCardIds.RedChromadrakeToken_BG34_638t,\r\n];\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { RallyCard } from '../../card.interface';
2
+ export declare const DeadSeaRavager: RallyCard;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeadSeaRavager = void 0;
4
+ const utils_1 = require("../../../services/utils");
5
+ const stats_1 = require("../../../simulation/stats");
6
+ exports.DeadSeaRavager = {
7
+ cardIds: ["BG34_765", "BG34_765_G"],
8
+ rally: (minion, input) => {
9
+ const mult = minion.cardId === "BG34_765_G" ? 2 : 1;
10
+ const candidates = input.attackingBoard.filter((e) => e != minion);
11
+ const targets = (0, utils_1.pickMultipleRandomAlive)(candidates, 3);
12
+ for (const target of targets) {
13
+ for (let i = 0; i < mult; i++) {
14
+ (0, stats_1.modifyStats)(target, minion, minion.attack, 0, input.attackingBoard, input.attackingHero, input.gameState);
15
+ }
16
+ }
17
+ return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
18
+ },
19
+ };
20
+ //# sourceMappingURL=dead-sea-ravager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-sea-ravager.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/dead-sea-ravager.ts"],"names":[],"mappings":";;;AAEA,mDAAkE;AAElE,qDAAwD;AAG3C,QAAA,cAAc,GAAc;IACxC,OAAO,EAAE,0BAAoE;IAC7E,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,IAAA,+BAAuB,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC9B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,MAAM,CAAC,MAAM,EACb,CAAC,EACD,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;QACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickMultipleRandomAlive } from '../../../services/utils';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const DeadSeaRavager: RallyCard = {\r\n\tcardIds: [CardIds.DeadSeaRavager_BG34_765, CardIds.DeadSeaRavager_BG34_765_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.DeadSeaRavager_BG34_765_G ? 2 : 1;\r\n\t\tconst candidates = input.attackingBoard.filter((e) => e != minion);\r\n\t\tconst targets = pickMultipleRandomAlive(candidates, 3);\r\n\t\tfor (const target of targets) {\r\n\t\t\tfor (let i = 0; i < mult; i++) {\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.attack,\r\n\t\t\t\t\t0,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\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 { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -6,17 +6,13 @@ exports.DeepwaterChieftain = {
6
6
  cardIds: ["BG35_143", "BG35_143_G"],
7
7
  battlecry: (minion, input) => {
8
8
  const mult = minion.cardId === "BG35_143_G" ? 2 : 1;
9
- const spell = minion.cardId === "BG35_143_G"
10
- ? "BG35_149_G"
11
- : "BG35_149";
9
+ const spell = "BG35_149";
12
10
  (0, cards_in_hand_1.addCardsInHand)(input.hero, input.board, Array(mult).fill(spell), input.gameState);
13
11
  return true;
14
12
  },
15
13
  deathrattleSpawn: (minion, input) => {
16
14
  const mult = minion.cardId === "BG35_143_G" ? 2 : 1;
17
- const spell = minion.cardId === "BG35_143_G"
18
- ? "BG35_149_G"
19
- : "BG35_149";
15
+ const spell = "BG35_149";
20
16
  (0, cards_in_hand_1.addCardsInHand)(input.boardWithDeadEntityHero, input.boardWithDeadEntity, Array(mult).fill(spell), input.gameState);
21
17
  return [];
22
18
  },
@@ -1 +1 @@
1
- {"version":3,"file":"deepwater-chieftain.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/deepwater-chieftain.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAItD,QAAA,kBAAkB,GAAyC;IACvE,OAAO,EAAE,0BAA4E;IACrF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAW,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GACV,MAAM,CAAC,MAAM,iBAA0C;YACtD,CAAC;YACD,CAAC,WAA+B,CAAC;QACnC,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GACV,MAAM,CAAC,MAAM,iBAA0C;YACtD,CAAC;YACD,CAAC,WAA+B,CAAC;QACnC,IAAA,8BAAc,EACb,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACvB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { BattlecryCard, DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const DeepwaterChieftain: BattlecryCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.DeepwaterChieftain_BG35_143, CardIds.DeepwaterChieftain_BG35_143_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput): boolean => {\r\n\t\tconst mult = minion.cardId === CardIds.DeepwaterChieftain_BG35_143_G ? 2 : 1;\r\n\t\tconst spell =\r\n\t\t\tminion.cardId === CardIds.DeepwaterChieftain_BG35_143_G\r\n\t\t\t\t? CardIds.DeepwaterClan_BG35_149_G\r\n\t\t\t\t: CardIds.DeepwaterClan_BG35_149;\r\n\t\taddCardsInHand(input.hero, input.board, Array(mult).fill(spell), input.gameState);\r\n\t\treturn true;\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.DeepwaterChieftain_BG35_143_G ? 2 : 1;\r\n\t\tconst spell =\r\n\t\t\tminion.cardId === CardIds.DeepwaterChieftain_BG35_143_G\r\n\t\t\t\t? CardIds.DeepwaterClan_BG35_149_G\r\n\t\t\t\t: CardIds.DeepwaterClan_BG35_149;\r\n\t\taddCardsInHand(\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tArray(mult).fill(spell),\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"deepwater-chieftain.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/deepwater-chieftain.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAItD,QAAA,kBAAkB,GAAyC;IACvE,OAAO,EAAE,0BAA4E;IACrF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAW,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,aAAiC,CAAC;QAC7C,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,aAAiC,CAAC;QAC7C,IAAA,8BAAc,EACb,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACvB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { BattlecryCard, DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const DeepwaterChieftain: BattlecryCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.DeepwaterChieftain_BG35_143, CardIds.DeepwaterChieftain_BG35_143_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput): boolean => {\r\n\t\tconst mult = minion.cardId === CardIds.DeepwaterChieftain_BG35_143_G ? 2 : 1;\r\n\t\tconst spell = CardIds.DeepwaterClan_BG35_149;\r\n\t\taddCardsInHand(input.hero, input.board, Array(mult).fill(spell), input.gameState);\r\n\t\treturn true;\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.DeepwaterChieftain_BG35_143_G ? 2 : 1;\r\n\t\tconst spell = CardIds.DeepwaterClan_BG35_149;\r\n\t\taddCardsInHand(\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tArray(mult).fill(spell),\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -6,9 +6,7 @@ exports.FirelandsFugitive = {
6
6
  cardIds: ["BG35_882", "BG35_882_G"],
7
7
  battlecry: (minion, input) => {
8
8
  const mult = minion.cardId === "BG35_882_G" ? 2 : 1;
9
- const spell = minion.cardId === "BG35_882_G"
10
- ? "BG35_910_G"
11
- : "BG35_910";
9
+ const spell = "BG35_910";
12
10
  (0, cards_in_hand_1.addCardsInHand)(input.hero, input.board, Array(mult).fill(spell), input.gameState);
13
11
  return true;
14
12
  },
@@ -1 +1 @@
1
- {"version":3,"file":"firelands-fugitive.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/firelands-fugitive.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAGtD,QAAA,iBAAiB,GAAkB;IAC/C,OAAO,EAAE,0BAA0E;IACnF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAW,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,KAAK,GACV,MAAM,CAAC,MAAM,iBAAyC;YACrD,CAAC;YACD,CAAC,WAA+B,CAAC;QACnC,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const FirelandsFugitive: BattlecryCard = {\r\n\tcardIds: [CardIds.FirelandsFugitive_BG35_882, CardIds.FirelandsFugitive_BG35_882_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput): boolean => {\r\n\t\tconst mult = minion.cardId === CardIds.FirelandsFugitive_BG35_882_G ? 2 : 1;\r\n\t\tconst spell =\r\n\t\t\tminion.cardId === CardIds.FirelandsFugitive_BG35_882_G\r\n\t\t\t\t? CardIds.Conflagration_BG35_910_G\r\n\t\t\t\t: CardIds.Conflagration_BG35_910;\r\n\t\taddCardsInHand(input.hero, input.board, Array(mult).fill(spell), input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"firelands-fugitive.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/firelands-fugitive.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAGtD,QAAA,iBAAiB,GAAkB;IAC/C,OAAO,EAAE,0BAA0E;IACnF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAW,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,KAAK,aAAiC,CAAC;QAC7C,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const FirelandsFugitive: BattlecryCard = {\r\n\tcardIds: [CardIds.FirelandsFugitive_BG35_882, CardIds.FirelandsFugitive_BG35_882_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput): boolean => {\r\n\t\tconst mult = minion.cardId === CardIds.FirelandsFugitive_BG35_882_G ? 2 : 1;\r\n\t\tconst spell = CardIds.Conflagration_BG35_910;\r\n\t\taddCardsInHand(input.hero, input.board, Array(mult).fill(spell), input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnCard } from '../../card.interface';
2
+ export declare const IngeniousInventor: DeathrattleSpawnCard;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IngeniousInventor = void 0;
4
+ const global_info_helpers_1 = require("../../../simulation/global-info-helpers");
5
+ exports.IngeniousInventor = {
6
+ cardIds: ["BG35_890", "BG35_890_G"],
7
+ deathrattleSpawn: (minion, input) => {
8
+ const mult = minion.cardId === "BG35_890_G" ? 2 : 1;
9
+ const atkBuff = 2 * mult * (1 + input.boardWithDeadEntityHero.globalInfo.MagnetizedThisGame);
10
+ (0, global_info_helpers_1.increaseMechAttackBonus)(minion, input.boardWithDeadEntity, input.boardWithDeadEntityHero, atkBuff, input.gameState);
11
+ return [];
12
+ },
13
+ };
14
+ //# sourceMappingURL=ingenious-inventor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingenious-inventor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/ingenious-inventor.ts"],"names":[],"mappings":";;;AAGA,iFAAkF;AAGrE,QAAA,iBAAiB,GAAyB;IACtD,OAAO,EAAE,0BAA0E;IACnF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAC7F,IAAA,6CAAuB,EACtB,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,OAAO,EACP,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,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 { increaseMechAttackBonus } from '../../../simulation/global-info-helpers';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const IngeniousInventor: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.IngeniousInventor_BG35_890, CardIds.IngeniousInventor_BG35_890_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.IngeniousInventor_BG35_890_G ? 2 : 1;\r\n\t\tconst atkBuff = 2 * mult * (1 + input.boardWithDeadEntityHero.globalInfo.MagnetizedThisGame);\r\n\t\tincreaseMechAttackBonus(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tatkBuff,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -6,17 +6,13 @@ exports.LeylineSurfacer = {
6
6
  cardIds: ["BG35_881", "BG35_881_G"],
7
7
  battlecry: (minion, input) => {
8
8
  const mult = minion.cardId === "BG35_881_G" ? 2 : 1;
9
- const spell = minion.cardId === "BG35_881_G"
10
- ? "BG35_911_G"
11
- : "BG35_911";
9
+ const spell = "BG35_911";
12
10
  (0, cards_in_hand_1.addCardsInHand)(input.hero, input.board, Array(mult).fill(spell), input.gameState);
13
11
  return true;
14
12
  },
15
13
  deathrattleSpawn: (minion, input) => {
16
14
  const mult = minion.cardId === "BG35_881_G" ? 2 : 1;
17
- const spell = minion.cardId === "BG35_881_G"
18
- ? "BG35_911_G"
19
- : "BG35_911";
15
+ const spell = "BG35_911";
20
16
  (0, cards_in_hand_1.addCardsInHand)(input.boardWithDeadEntityHero, input.boardWithDeadEntity, Array(mult).fill(spell), input.gameState);
21
17
  return [];
22
18
  },
@@ -1 +1 @@
1
- {"version":3,"file":"leyline-surfacer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/leyline-surfacer.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAItD,QAAA,eAAe,GAAyC;IACpE,OAAO,EAAE,0BAAsE;IAC/E,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAW,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GACV,MAAM,CAAC,MAAM,iBAAuC;YACnD,CAAC;YACD,CAAC,WAAkC,CAAC;QACtC,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GACV,MAAM,CAAC,MAAM,iBAAuC;YACnD,CAAC;YACD,CAAC,WAAkC,CAAC;QACtC,IAAA,8BAAc,EACb,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACvB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { BattlecryCard, DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const LeylineSurfacer: BattlecryCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.LeylineSurfacer_BG35_881, CardIds.LeylineSurfacer_BG35_881_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput): boolean => {\r\n\t\tconst mult = minion.cardId === CardIds.LeylineSurfacer_BG35_881_G ? 2 : 1;\r\n\t\tconst spell =\r\n\t\t\tminion.cardId === CardIds.LeylineSurfacer_BG35_881_G\r\n\t\t\t\t? CardIds.ArcaneAbsorption_BG35_911_G\r\n\t\t\t\t: CardIds.ArcaneAbsorption_BG35_911;\r\n\t\taddCardsInHand(input.hero, input.board, Array(mult).fill(spell), input.gameState);\r\n\t\treturn true;\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.LeylineSurfacer_BG35_881_G ? 2 : 1;\r\n\t\tconst spell =\r\n\t\t\tminion.cardId === CardIds.LeylineSurfacer_BG35_881_G\r\n\t\t\t\t? CardIds.ArcaneAbsorption_BG35_911_G\r\n\t\t\t\t: CardIds.ArcaneAbsorption_BG35_911;\r\n\t\taddCardsInHand(\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tArray(mult).fill(spell),\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"leyline-surfacer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/leyline-surfacer.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAItD,QAAA,eAAe,GAAyC;IACpE,OAAO,EAAE,0BAAsE;IAC/E,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAW,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,aAAoC,CAAC;QAChD,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,aAAoC,CAAC;QAChD,IAAA,8BAAc,EACb,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACvB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { BattlecryCard, DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const LeylineSurfacer: BattlecryCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.LeylineSurfacer_BG35_881, CardIds.LeylineSurfacer_BG35_881_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput): boolean => {\r\n\t\tconst mult = minion.cardId === CardIds.LeylineSurfacer_BG35_881_G ? 2 : 1;\r\n\t\tconst spell = CardIds.ArcaneAbsorption_BG35_911;\r\n\t\taddCardsInHand(input.hero, input.board, Array(mult).fill(spell), input.gameState);\r\n\t\treturn true;\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.LeylineSurfacer_BG35_881_G ? 2 : 1;\r\n\t\tconst spell = CardIds.ArcaneAbsorption_BG35_911;\r\n\t\taddCardsInHand(\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tArray(mult).fill(spell),\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -6,9 +6,7 @@ exports.RedtuskThornraiser = {
6
6
  cardIds: ["BG35_433", "BG35_433_G"],
7
7
  endOfTurn: (minion, input) => {
8
8
  const mult = minion.cardId === "BG35_433_G" ? 2 : 1;
9
- const gemId = minion.cardId === "BG35_433_G"
10
- ? "BG20_GEM_Reborn_G"
11
- : "BG20_GEM_Reborn";
9
+ const gemId = minion.cardId === "BG20_GEM_Reborn";
12
10
  const ids = Array(mult).fill(gemId);
13
11
  (0, cards_in_hand_1.addCardsInHand)(input.hero, input.board, ids, input.gameState);
14
12
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"redtusk-thornraiser.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/redtusk-thornraiser.ts"],"names":[],"mappings":";;;AACA,qEAAmE;AAItD,QAAA,kBAAkB,GAAkB;IAChD,OAAO,EAAE,0BAA4E;IACrF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GACV,MAAM,CAAC,MAAM,iBAA0C;YACtD,CAAC;YACD,CAAC,kBAAiC,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const RedtuskThornraiser: EndOfTurnCard = {\r\n\tcardIds: [CardIds.RedtuskThornraiser_BG35_433, CardIds.RedtuskThornraiser_BG35_433_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RedtuskThornraiser_BG35_433_G ? 2 : 1;\r\n\t\tconst gemId =\r\n\t\t\tminion.cardId === CardIds.RedtuskThornraiser_BG35_433_G\r\n\t\t\t\t? CardIds.BloodGem_BG20_GEM_Reborn_G\r\n\t\t\t\t: CardIds.BloodGem_BG20_GEM_Reborn;\r\n\t\tconst ids = Array(mult).fill(gemId);\r\n\t\taddCardsInHand(input.hero, input.board, ids, input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"redtusk-thornraiser.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/redtusk-thornraiser.ts"],"names":[],"mappings":";;;AAEA,qEAAmE;AAGtD,QAAA,kBAAkB,GAAkB;IAChD,OAAO,EAAE,0BAA4E;IACrF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,sBAAqC,CAAC;QACjE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const RedtuskThornraiser: EndOfTurnCard = {\r\n\tcardIds: [CardIds.RedtuskThornraiser_BG35_433, CardIds.RedtuskThornraiser_BG35_433_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RedtuskThornraiser_BG35_433_G ? 2 : 1;\r\n\t\tconst gemId = minion.cardId === CardIds.BloodGem_BG20_GEM_Reborn;\r\n\t\tconst ids = Array(mult).fill(gemId);\r\n\t\taddCardsInHand(input.hero, input.board, ids, input.gameState);\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
@@ -11,6 +11,10 @@ exports.Vinespeaker = {
11
11
  }
12
12
  const mult = minion.cardId === "BG35_437_G" ? 2 : 1;
13
13
  input.hero.globalInfo.BloodGemAttackBonus += 1 * mult;
14
+ const portraits = input.hero.trinkets.filter((t) => t.cardId === "BG35_MagicItem_433");
15
+ if (portraits.length > 0) {
16
+ input.hero.globalInfo.BloodGemHealthBonus += 1 * mult;
17
+ }
14
18
  },
15
19
  };
16
20
  //# sourceMappingURL=vinespeaker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vinespeaker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/vinespeaker.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAIvD,0CAAmD;AAGtC,QAAA,WAAW,GAAmC;IAC1D,OAAO,EAAE,0BAA8D;IACvE,0BAA0B,EAAE,CAAC,MAAmB,EAAE,KAAsC,EAAE,EAAE;QAC3F,IAAI,CAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,UAAU,EAAE,wBAAO,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACxF,OAAO;SACP;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,GAAG,IAAI,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterFriendlyMinionDeathInput } from '../../../simulation/attack';\r\nimport { hasEntityMechanic } from '../../../utils';\r\nimport { OnAfterFriendlyMinionDeathCard } from '../../card.interface';\r\n\r\nexport const Vinespeaker: OnAfterFriendlyMinionDeathCard = {\r\n\tcardIds: [CardIds.Vinespeaker_BG35_437, CardIds.Vinespeaker_BG35_437_G],\r\n\tonAfterFriendlyMinionDeath: (minion: BoardEntity, input: OnAfterFriendlyMinionDeathInput) => {\r\n\t\tif (!hasEntityMechanic(input.deadEntity, GameTag.DEATHRATTLE, input.gameState.allCards)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst mult = minion.cardId === CardIds.Vinespeaker_BG35_437_G ? 2 : 1;\r\n\t\tinput.hero.globalInfo.BloodGemAttackBonus += 1 * mult;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"vinespeaker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/vinespeaker.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAIvD,0CAAmD;AAGtC,QAAA,WAAW,GAAmC;IAC1D,OAAO,EAAE,0BAA8D;IACvE,0BAA0B,EAAE,CAAC,MAAmB,EAAE,KAAsC,EAAE,EAAE;QAC3F,IAAI,CAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,UAAU,EAAE,wBAAO,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACxF,OAAO;SACP;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,GAAG,IAAI,CAAC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,yBAAmD,CAClE,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,CAAC,GAAG,IAAI,CAAC;SACtD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterFriendlyMinionDeathInput } from '../../../simulation/attack';\r\nimport { hasEntityMechanic } from '../../../utils';\r\nimport { OnAfterFriendlyMinionDeathCard } from '../../card.interface';\r\n\r\nexport const Vinespeaker: OnAfterFriendlyMinionDeathCard = {\r\n\tcardIds: [CardIds.Vinespeaker_BG35_437, CardIds.Vinespeaker_BG35_437_G],\r\n\tonAfterFriendlyMinionDeath: (minion: BoardEntity, input: OnAfterFriendlyMinionDeathInput) => {\r\n\t\tif (!hasEntityMechanic(input.deadEntity, GameTag.DEATHRATTLE, input.gameState.allCards)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst mult = minion.cardId === CardIds.Vinespeaker_BG35_437_G ? 2 : 1;\r\n\t\tinput.hero.globalInfo.BloodGemAttackBonus += 1 * mult;\r\n\t\tconst portraits = input.hero.trinkets.filter(\r\n\t\t\t(t) => t.cardId === CardIds.VinespeakerPortrait_BG35_MagicItem_433,\r\n\t\t);\r\n\t\tif (portraits.length > 0) {\r\n\t\t\tinput.hero.globalInfo.BloodGemHealthBonus += 1 * mult;\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 TrudgeThroughLava: TavernSpellCard;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrudgeThroughLava = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ exports.TrudgeThroughLava = {
6
+ cardIds: [
7
+ "BG30_117t2",
8
+ "BG30_117_Gt2",
9
+ ],
10
+ castTavernSpell: (spellCardId, input) => {
11
+ const mult = spellCardId === "BG30_117_Gt2" ? 2 : 1;
12
+ (0, utils_1.addStatsToBoard)(input.source, input.board, input.hero, 4 * mult, 0, input.gameState);
13
+ },
14
+ };
15
+ //# sourceMappingURL=trudge-through-lava.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trudge-through-lava.js","sourceRoot":"","sources":["../../../../src/cards/impl/spellcraft/trudge-through-lava.ts"],"names":[],"mappings":";;;AACA,0CAAiD;AAGpC,QAAA,iBAAiB,GAAoB;IACjD,OAAO,EAAE;;;KAGR;IACD,eAAe,EAAE,CAAC,WAAmB,EAAE,KAAqB,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,WAAW,mBAAgE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,IAAA,uBAAe,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\n\r\nexport const TrudgeThroughLava: TavernSpellCard = {\r\n\tcardIds: [\r\n\t\tCardIds.VolcanicVisitor_TrudgeThroughLavaToken_BG30_117t2,\r\n\t\tCardIds.VolcanicVisitor_TrudgeThroughLavaToken_BG30_117_Gt2,\r\n\t],\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => {\r\n\t\tconst mult = spellCardId === CardIds.VolcanicVisitor_TrudgeThroughLavaToken_BG30_117_Gt2 ? 2 : 1;\r\n\t\taddStatsToBoard(input.source, input.board, input.hero, 4 * mult, 0, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { TavernSpellCard } from '../../card.interface';
2
+ export declare const UseSupplies: TavernSpellCard;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UseSupplies = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ exports.UseSupplies = {
6
+ cardIds: [
7
+ "BG30_117t3",
8
+ "BG30_117_Gt3",
9
+ ],
10
+ castTavernSpell: (spellCardId, input) => {
11
+ const mult = spellCardId === "BG30_117t3" ? 2 : 1;
12
+ (0, utils_1.addStatsToBoard)(input.source, input.board, input.hero, 0, 4 * mult, input.gameState);
13
+ },
14
+ };
15
+ //# sourceMappingURL=use-supplies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-supplies.js","sourceRoot":"","sources":["../../../../src/cards/impl/spellcraft/use-supplies.ts"],"names":[],"mappings":";;;AACA,0CAAiD;AAGpC,QAAA,WAAW,GAAoB;IAC3C,OAAO,EAAE;;;KAGR;IACD,eAAe,EAAE,CAAC,WAAmB,EAAE,KAAqB,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,WAAW,iBAAwD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAA,uBAAe,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\n\r\nexport const UseSupplies: TavernSpellCard = {\r\n\tcardIds: [\r\n\t\tCardIds.VolcanicVisitor_UseSuppliesToken_BG30_117t3,\r\n\t\tCardIds.VolcanicVisitor_UseSuppliesToken_BG30_117_Gt3,\r\n\t],\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => {\r\n\t\tconst mult = spellCardId === CardIds.VolcanicVisitor_UseSuppliesToken_BG30_117t3 ? 2 : 1;\r\n\t\taddStatsToBoard(input.source, input.board, input.hero, 0, 4 * mult, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { TavernSpellCard } from '../../card.interface';
2
+ export declare const VolcanicVisitor: TavernSpellCard;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VolcanicVisitor = void 0;
4
+ const trudge_through_lava_1 = require("./trudge-through-lava");
5
+ const use_supplies_1 = require("./use-supplies");
6
+ exports.VolcanicVisitor = {
7
+ cardIds: ["BG30_117", "BG30_117_G"],
8
+ castTavernSpell: (spellCardId, input) => {
9
+ if (Math.random() < 0.5) {
10
+ return trudge_through_lava_1.TrudgeThroughLava.castTavernSpell(spellCardId, input);
11
+ }
12
+ else {
13
+ return use_supplies_1.UseSupplies.castTavernSpell(spellCardId, input);
14
+ }
15
+ },
16
+ };
17
+ //# sourceMappingURL=volcanic-visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volcanic-visitor.js","sourceRoot":"","sources":["../../../../src/cards/impl/spellcraft/volcanic-visitor.ts"],"names":[],"mappings":";;;AAEA,+DAA0D;AAC1D,iDAA6C;AAEhC,QAAA,eAAe,GAAoB;IAC/C,OAAO,EAAE,0BAAsE;IAC/E,eAAe,EAAE,CAAC,WAAmB,EAAE,KAAqB,EAAE,EAAE;QAC/D,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE;YACxB,OAAO,uCAAiB,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SAC7D;aAAM;YACN,OAAO,0BAAW,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SACvD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\r\nimport { CastSpellInput, TavernSpellCard } from '../../card.interface';\r\nimport { TrudgeThroughLava } from './trudge-through-lava';\r\nimport { UseSupplies } from './use-supplies';\r\n\r\nexport const VolcanicVisitor: TavernSpellCard = {\r\n\tcardIds: [CardIds.VolcanicVisitor_BG30_117, CardIds.VolcanicVisitor_BG30_117_G],\r\n\tcastTavernSpell: (spellCardId: string, input: CastSpellInput) => {\r\n\t\tif (Math.random() < 0.5) {\r\n\t\t\treturn TrudgeThroughLava.castTavernSpell(spellCardId, input);\r\n\t\t} else {\r\n\t\t\treturn UseSupplies.castTavernSpell(spellCardId, input);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { AfterRebornCard, DefaultScriptDataNumCard } from '../../card.interface';
2
+ export declare const DeathtouchApple: AfterRebornCard & DefaultScriptDataNumCard;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeathtouchApple = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const reborn_1 = require("../../../keywords/reborn");
6
+ const utils_1 = require("../../../utils");
7
+ exports.DeathtouchApple = {
8
+ cardIds: ["BG35_MagicItem_731"],
9
+ defaultScriptDataNum: (cardId) => 3,
10
+ afterReborn: (trinket, input) => {
11
+ if (trinket.scriptDataNum1 > 0) {
12
+ const target = input.rebornEntity;
13
+ if ((0, utils_1.hasCorrectTribe)(target, input.boardWithKilledMinionHero, reference_data_1.Race.UNDEAD, input.gameState.anomalies, input.gameState.allCards)) {
14
+ (0, reborn_1.updateReborn)(target, true, input.boardWithKilledMinion, input.boardWithKilledMinionHero, input.opponentBoardHero, input.gameState);
15
+ input.gameState.spectator.registerPowerTarget(trinket, target, input.boardWithKilledMinion, input.boardWithKilledMinionHero, input.opponentBoardHero);
16
+ trinket.scriptDataNum1--;
17
+ }
18
+ }
19
+ },
20
+ };
21
+ //# sourceMappingURL=deathtouch-apple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deathtouch-apple.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/deathtouch-apple.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAEpD,qDAAwD;AAGxD,0CAAiD;AAGpC,QAAA,eAAe,GAA+C;IAC1E,OAAO,EAAE,sBAA4C;IACrD,oBAAoB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAC3C,WAAW,EAAE,CAAC,OAAqB,EAAE,KAAwB,EAAE,EAAE;QAChE,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;YAClC,IACC,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,yBAAyB,EAC/B,qBAAI,CAAC,MAAM,EACX,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;gBACD,IAAA,qBAAY,EACX,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,OAAO,EACP,MAAM,EACN,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,yBAAyB,EAC/B,KAAK,CAAC,iBAAiB,CACvB,CAAC;gBACF,OAAO,CAAC,cAAc,EAAE,CAAC;aACzB;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { updateReborn } from '../../../keywords/reborn';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterRebornCard, DefaultScriptDataNumCard } from '../../card.interface';\r\n\r\nexport const DeathtouchApple: AfterRebornCard & DefaultScriptDataNumCard = {\r\n\tcardIds: [CardIds.DeathtouchApple_BG35_MagicItem_731],\r\n\tdefaultScriptDataNum: (cardId: string) => 3,\r\n\tafterReborn: (trinket: BoardTrinket, input: RebornEffectInput) => {\r\n\t\tif (trinket.scriptDataNum1 > 0) {\r\n\t\t\tconst target = input.rebornEntity;\r\n\t\t\tif (\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\t\t\tRace.UNDEAD,\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\tupdateReborn(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tinput.boardWithKilledMinion,\r\n\t\t\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\t\t\tinput.opponentBoardHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\ttrinket,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tinput.boardWithKilledMinion,\r\n\t\t\t\t\tinput.boardWithKilledMinionHero,\r\n\t\t\t\t\tinput.opponentBoardHero,\r\n\t\t\t\t);\r\n\t\t\t\ttrinket.scriptDataNum1--;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const RylakPortrait: StartOfCombatCard;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RylakPortrait = void 0;
4
+ const deathrattle_orchestration_1 = require("../../../simulation/deathrattle-orchestration");
5
+ const rylak_metalhead_1 = require("../minion/rylak-metalhead");
6
+ exports.RylakPortrait = {
7
+ cardIds: ["BG35_MagicItem_834"],
8
+ startOfCombat: (trinket, input) => {
9
+ const targets = input.playerBoard.filter((e) => rylak_metalhead_1.RylakMetalhead.cardIds.includes(e.cardId));
10
+ for (const target of targets) {
11
+ input.gameState.spectator.registerPowerTarget(trinket, target, input.playerBoard, input.playerEntity, input.opponentEntity);
12
+ const indexFromRight = input.playerBoard.length - (input.playerBoard.indexOf(target) + 1);
13
+ (0, deathrattle_orchestration_1.processDeathrattleForMinion)(target, indexFromRight, [target], input.playerEntity.friendly ? input.gameState.gameState.player : input.gameState.gameState.opponent, input.playerEntity.friendly ? input.gameState.gameState.opponent : input.gameState.gameState.player, input.gameState, false);
14
+ }
15
+ return true;
16
+ },
17
+ };
18
+ //# sourceMappingURL=rylak-portrait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rylak-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/rylak-portrait.ts"],"names":[],"mappings":";;;AAEA,6FAA4F;AAG5F,+DAA2D;AAE9C,QAAA,aAAa,GAAsB;IAC/C,OAAO,EAAE,sBAA0C;IACnD,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3F,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,OAAO,EACP,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACpB,CAAC;YACF,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1F,IAAA,uDAA2B,EAC1B,MAAM,EACN,cAAc,EACd,CAAC,MAAM,CAAC,EACR,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EACnG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EACnG,KAAK,CAAC,SAAS,EACf,KAAK,CACL,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { processDeathrattleForMinion } from '../../../simulation/deathrattle-orchestration';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\nimport { RylakMetalhead } from '../minion/rylak-metalhead';\r\n\r\nexport const RylakPortrait: StartOfCombatCard = {\r\n\tcardIds: [CardIds.RylakPortrait_BG35_MagicItem_834],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst targets = input.playerBoard.filter((e) => RylakMetalhead.cardIds.includes(e.cardId));\r\n\t\tfor (const target of targets) {\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\ttrinket,\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t);\r\n\t\t\tconst indexFromRight = input.playerBoard.length - (input.playerBoard.indexOf(target) + 1);\r\n\t\t\tprocessDeathrattleForMinion(\r\n\t\t\t\ttarget,\r\n\t\t\t\tindexFromRight,\r\n\t\t\t\t[target],\r\n\t\t\t\tinput.playerEntity.friendly ? input.gameState.gameState.player : input.gameState.gameState.opponent,\r\n\t\t\t\tinput.playerEntity.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 true;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnEnchantmentCard } from '../../card.interface';
2
+ export declare const SkyGolemPortraitEnchantment: DeathrattleSpawnEnchantmentCard;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkyGolemPortraitEnchantment = void 0;
4
+ const stats_1 = require("../../../simulation/stats");
5
+ exports.SkyGolemPortraitEnchantment = {
6
+ cardIds: ["BG35_MagicItem_740e2"],
7
+ deathrattleSpawnEnchantmentEffect: (enchantment, minion, input) => {
8
+ const targets = input.boardWithDeadEntity.filter((e) => !e.definitelyDead && e.health > 0);
9
+ for (const target of targets) {
10
+ (0, stats_1.modifyStats)(target, minion, 3, 3, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.gameState);
11
+ input.gameState.spectator.registerPowerTarget(minion, target, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoardHero);
12
+ }
13
+ return null;
14
+ },
15
+ };
16
+ //# sourceMappingURL=sky-golem-portrait-enchantment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sky-golem-portrait-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/sky-golem-portrait-enchantment.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AAG3C,QAAA,2BAA2B,GAAoC;IAC3E,OAAO,EAAE,wBAAkE;IAC3E,iCAAiC,EAAE,CAClC,WAA6B,EAC7B,MAAsC,EACtC,KAAgC,EAC/B,EAAE;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3F,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,CAAC,EACD,CAAC,EACD,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,MAAM,EACN,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,cAAc,CACpB,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\n\r\nexport const SkyGolemPortraitEnchantment: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: [CardIds.SkyGolemPortrait_SkywardEnchantment_BG35_MagicItem_740e2],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => {\r\n\t\tconst targets = input.boardWithDeadEntity.filter((e) => !e.definitelyDead && e.health > 0);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(\r\n\t\t\t\ttarget,\r\n\t\t\t\tminion,\r\n\t\t\t\t3,\r\n\t\t\t\t3,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\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\tminion,\r\n\t\t\t\ttarget,\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}\r\n\t\treturn null;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { StartOfCombatCard } from '../../card.interface';
2
+ export declare const SkyGolemPortrait: StartOfCombatCard;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkyGolemPortrait = void 0;
4
+ exports.SkyGolemPortrait = {
5
+ cardIds: ["BG35_MagicItem_740"],
6
+ startOfCombat: (trinket, input) => {
7
+ const targets = input.playerBoard;
8
+ for (const target of targets) {
9
+ target.enchantments.push({
10
+ cardId: "BG35_MagicItem_740e2",
11
+ originEntityId: trinket.entityId,
12
+ repeats: 1,
13
+ timing: input.gameState.sharedState.currentEntityId++,
14
+ });
15
+ input.gameState.spectator.registerPowerTarget(trinket, target, input.playerBoard, input.playerEntity, input.opponentEntity);
16
+ }
17
+ return { hasTriggered: true, shouldRecomputeCurrentAttacker: false };
18
+ },
19
+ };
20
+ //# sourceMappingURL=sky-golem-portrait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sky-golem-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/sky-golem-portrait.ts"],"names":[],"mappings":";;;AAKa,QAAA,gBAAgB,GAAsB;IAClD,OAAO,EAAE,sBAA6C;IACtD,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxB,MAAM,wBAAkE;gBACxE,cAAc,EAAE,OAAO,CAAC,QAAQ;gBAChC,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;YACH,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,OAAO,EACP,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACpB,CAAC;SACF;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["import { 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 { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const SkyGolemPortrait: StartOfCombatCard = {\r\n\tcardIds: [CardIds.SkyGolemPortrait_BG35_MagicItem_740],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst targets = input.playerBoard;\r\n\t\tfor (const target of targets) {\r\n\t\t\ttarget.enchantments.push({\r\n\t\t\t\tcardId: CardIds.SkyGolemPortrait_SkywardEnchantment_BG35_MagicItem_740e2,\r\n\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\trepeats: 1,\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\ttrinket,\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { OnAfterFriendlyMinionDeathCard, StartOfCombatCard } from '../../card.interface';
2
+ export declare const SoulFermenter: StartOfCombatCard & OnAfterFriendlyMinionDeathCard;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SoulFermenter = void 0;
4
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
5
+ const utils_1 = require("../../../utils");
6
+ exports.SoulFermenter = {
7
+ cardIds: ["BG35_MagicItem_732"],
8
+ startOfCombatTiming: 'start-of-combat',
9
+ startOfCombat: (trinket, input) => {
10
+ const targets = input.playerBoard.slice(0, 3);
11
+ trinket.rememberedMinions = [];
12
+ for (const target of targets) {
13
+ trinket.rememberedMinions.push((0, utils_1.copyEntity)(target));
14
+ target.definitelyDead = true;
15
+ }
16
+ return true;
17
+ },
18
+ onAfterFriendlyMinionDeath: (trinket, input) => {
19
+ var _a;
20
+ if (input.board.length > 0 || ((_a = trinket.rememberedMinions) === null || _a === void 0 ? void 0 : _a.length) === 0) {
21
+ return;
22
+ }
23
+ for (const minion of trinket.rememberedMinions) {
24
+ (0, deathrattle_spawns_1.simplifiedSpawnEntitiesWithAddToBoard)(minion.cardId, 1, {
25
+ boardWithDeadEntity: input.board,
26
+ boardWithDeadEntityHero: input.hero,
27
+ otherBoard: input.otherBoard,
28
+ otherBoardHero: input.otherHero,
29
+ gameState: input.gameState,
30
+ deadEntity: minion,
31
+ }, trinket, 0, minion);
32
+ }
33
+ },
34
+ };
35
+ //# sourceMappingURL=soul-fermenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soul-fermenter.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/soul-fermenter.ts"],"names":[],"mappings":";;;AAGA,+EAA+F;AAE/F,0CAA4C;AAG/B,QAAA,aAAa,GAAuD;IAChF,OAAO,EAAE,sBAA0C;IACnD,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;SAC7B;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,0BAA0B,EAAE,CAAC,OAAqB,EAAE,KAAsC,EAAE,EAAE;;QAC7F,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAA,MAAA,OAAO,CAAC,iBAAiB,0CAAE,MAAM,MAAK,CAAC,EAAE;YACtE,OAAO;SACP;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC/C,IAAA,0DAAqC,EACpC,MAAM,CAAC,MAAM,EACb,CAAC,EACD;gBACC,mBAAmB,EAAE,KAAK,CAAC,KAAK;gBAChC,uBAAuB,EAAE,KAAK,CAAC,IAAI;gBACnC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,cAAc,EAAE,KAAK,CAAC,SAAS;gBAC/B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM;aAClB,EACD,OAAO,EACP,CAAC,EACD,MAAM,CACN,CAAC;SACF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterFriendlyMinionDeathInput } from '../../../simulation/attack';\r\nimport { simplifiedSpawnEntitiesWithAddToBoard } from '../../../simulation/deathrattle-spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { copyEntity } from '../../../utils';\r\nimport { OnAfterFriendlyMinionDeathCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const SoulFermenter: StartOfCombatCard & OnAfterFriendlyMinionDeathCard = {\r\n\tcardIds: [CardIds.SoulFermenter_BG35_MagicItem_732],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst targets = input.playerBoard.slice(0, 3);\r\n\t\ttrinket.rememberedMinions = [];\r\n\t\tfor (const target of targets) {\r\n\t\t\ttrinket.rememberedMinions.push(copyEntity(target));\r\n\t\t\ttarget.definitelyDead = true;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\tonAfterFriendlyMinionDeath: (trinket: BoardTrinket, input: OnAfterFriendlyMinionDeathInput) => {\r\n\t\tif (input.board.length > 0 || trinket.rememberedMinions?.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (const minion of trinket.rememberedMinions) {\r\n\t\t\tsimplifiedSpawnEntitiesWithAddToBoard(\r\n\t\t\t\tminion.cardId,\r\n\t\t\t\t1,\r\n\t\t\t\t{\r\n\t\t\t\t\tboardWithDeadEntity: input.board,\r\n\t\t\t\t\tboardWithDeadEntityHero: input.hero,\r\n\t\t\t\t\totherBoard: input.otherBoard,\r\n\t\t\t\t\totherBoardHero: input.otherHero,\r\n\t\t\t\t\tgameState: input.gameState,\r\n\t\t\t\t\tdeadEntity: minion,\r\n\t\t\t\t},\r\n\t\t\t\ttrinket,\r\n\t\t\t\t0,\r\n\t\t\t\tminion,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -53,7 +53,7 @@ const buildFinalInput = (battleInput, cards, cardsData) => {
53
53
  };
54
54
  exports.buildFinalInput = buildFinalInput;
55
55
  const buildFinalInputForPlayer = (playerInfo, isPlayer, anomalies, cards, cardsData, entityIdContainer) => {
56
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
56
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
57
57
  if (!playerInfo) {
58
58
  return { board: [], hand: [], player: null };
59
59
  }
@@ -64,7 +64,8 @@ const buildFinalInputForPlayer = (playerInfo, isPlayer, anomalies, cards, cardsD
64
64
  playerInfo.player.friendly = isPlayer;
65
65
  playerInfo.player.globalInfo = (_g = playerInfo.player.globalInfo) !== null && _g !== void 0 ? _g : {};
66
66
  playerInfo.player.globalInfo.PirateAttackBonus = (_h = playerInfo.player.globalInfo.PirateAttackBonus) !== null && _h !== void 0 ? _h : 0;
67
- playerInfo.player.heroPowers = ((_j = playerInfo.player.heroPowers) === null || _j === void 0 ? void 0 : _j.length)
67
+ playerInfo.player.globalInfo.MechAttackBonus = (_j = playerInfo.player.globalInfo.MechAttackBonus) !== null && _j !== void 0 ? _j : 0;
68
+ playerInfo.player.heroPowers = ((_k = playerInfo.player.heroPowers) === null || _k === void 0 ? void 0 : _k.length)
68
69
  ? playerInfo.player.heroPowers.map((hp, index) => sanitizeHeroPower(hp, index, playerInfo.player, cards))
69
70
  : [
70
71
  {
@@ -1 +1 @@
1
- {"version":3,"file":"input-sanitation.js","sourceRoot":"","sources":["../src/input-sanitation.ts"],"names":[],"mappings":"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","sourcesContent":["import { AllCardsService } from '@firestone-hs/reference-data';\r\nimport { BgsBattleInfo } from './bgs-battle-info';\r\nimport { BgsBoardInfo } from './bgs-board-info';\r\nimport { BgsHeroPower, BgsPlayerEntity } from './bgs-player-entity';\r\nimport { BoardEntity } from './board-entity';\r\nimport { CardsData } from './cards/cards-data';\r\nimport { CardIds } from './services/card-ids';\r\nimport { setImplicitDataHero, setMissingAuras } from './simulation/auras';\r\nimport { fixEnchantments } from './simulation/enchantments';\r\nimport { addImpliedMechanics } from './utils';\r\n\r\nexport const buildFinalInput = (\r\n\tbattleInput: BgsBattleInfo,\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n): BgsBattleInfo => {\r\n\tconst entityIdContainer = { entityId: 999_999_999 };\r\n\r\n\tconst {\r\n\t\tboard: playerBoard,\r\n\t\thand: playerHand,\r\n\t\tplayer: playerEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.playerBoard,\r\n\t\ttrue,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\tconst {\r\n\t\tboard: playerTeammateBoard,\r\n\t\thand: playerTeammateHand,\r\n\t\tplayer: playerTeammateEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.playerTeammateBoard,\r\n\t\ttrue,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\r\n\tconst {\r\n\t\tboard: opponentBoard,\r\n\t\thand: opponentHand,\r\n\t\tplayer: opponentEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.opponentBoard,\r\n\t\tfalse,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\tconst {\r\n\t\tboard: opponentTeammateBoard,\r\n\t\thand: opponentTeammateHand,\r\n\t\tplayer: opponentTeammateEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.opponentTeammateBoard,\r\n\t\tfalse,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\r\n\t// We do this so that we can have mutated objects inside the simulation and still\r\n\t// be able to start from a fresh copy for each simulation\r\n\tconst inputReady: BgsBattleInfo = {\r\n\t\tplayerBoard: {\r\n\t\t\tboard: playerBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...playerEntity,\r\n\t\t\t\thand: playerHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\tplayerTeammateBoard: !!playerTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: playerTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...playerTeammateEntity,\r\n\t\t\t\t\t\thand: playerTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\topponentBoard: {\r\n\t\t\tboard: opponentBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...opponentEntity,\r\n\t\t\t\thand: opponentHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\topponentTeammateBoard: !!opponentTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: opponentTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...opponentTeammateEntity,\r\n\t\t\t\t\t\thand: opponentTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\tgameState: {\r\n\t\t\t...battleInput.gameState,\r\n\t\t\tanomalies: battleInput.gameState.anomalies?.filter((a) => !!a) ?? ([] as readonly string[]),\r\n\t\t},\r\n\t} as BgsBattleInfo;\r\n\treturn inputReady;\r\n};\r\n\r\nconst buildFinalInputForPlayer = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tanomalies: readonly string[],\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n\tentityIdContainer: { entityId: number },\r\n): { board: BoardEntity[]; hand: BoardEntity[]; player: BgsPlayerEntity } => {\r\n\tif (!playerInfo) {\r\n\t\treturn { board: [], hand: [], player: null };\r\n\t}\r\n\r\n\tconst { board, hand } = buildFinalInputBoard(playerInfo, isPlayer, cardsData, cards);\r\n\tconst isGhost = playerInfo.player?.hpLeft != null && playerInfo.player.hpLeft <= 0;\r\n\tplayerInfo.player.secrets = (playerInfo.player.secrets ?? playerInfo.secrets)?.filter((e) => !!e?.cardId) ?? [];\r\n\t// Add the scriptDataNum1 only on the start of combat phase, so that it doesn't trigger too soon\r\n\t// Don't do this, as secrets like Fleeting Vigor use this info to tell how much buff it will apply\r\n\t// playerInfo.player.secrets.forEach((secret) => (secret.scriptDataNum1 = 0));\r\n\t// Trinkets don't seem to trigger when facing the ghost\r\n\t// http://replays.firestoneapp.com/?reviewId=4ad32e03-2620-4fb1-8b43-cad55afd30fc&turn=27&action=2\r\n\t// One of the trinkets is Blood Golem Sticker, and no Blood Golem is summoned\r\n\t// Looks like that's not always the case:\r\n\t// http://replays.firestoneapp.com/?reviewId=9958e8d3-4388-4e6f-9b36-35f3a08be2f6&turn=25&action=4\r\n\t// playerInfo.player.trinkets = isGhost ? [] : playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? [];\r\n\tplayerInfo.player.trinkets = (playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? []).sort(\r\n\t\t(a, b) => a.entityId - b.entityId,\r\n\t);\r\n\tplayerInfo.player.friendly = isPlayer;\r\n\tplayerInfo.player.globalInfo = playerInfo.player.globalInfo ?? {};\r\n\tplayerInfo.player.globalInfo.PirateAttackBonus = playerInfo.player.globalInfo.PirateAttackBonus ?? 0;\r\n\tplayerInfo.player.heroPowers = playerInfo.player.heroPowers?.length\r\n\t\t? playerInfo.player.heroPowers.map((hp, index) => sanitizeHeroPower(hp, index, playerInfo.player, cards))\r\n\t\t: [\r\n\t\t\t\t{\r\n\t\t\t\t\tcardId: playerInfo.player.heroPowerId,\r\n\t\t\t\t\tentityId: playerInfo.player.heroPowerEntityId,\r\n\t\t\t\t\tused: playerInfo.player.heroPowerUsed,\r\n\t\t\t\t\tinfo: playerInfo.player.heroPowerInfo,\r\n\t\t\t\t\tinfo2: playerInfo.player.heroPowerInfo2,\r\n\t\t\t\t} as BgsHeroPower,\r\n\t\t ];\r\n\t// playerInfo.player.heroPowerId =\r\n\t// \tplayerInfo.player.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t// \t(normalizeHeroCardId(playerInfo.player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t// \t\t? playerInfo.player.questRewardEntities?.[0]?.cardId\r\n\t// \t\t: null) ??\r\n\t// \tplayerInfo.player.heroPowerId;\r\n\tplayerInfo.player.cardId = isGhost ? CardIds.Kelthuzad_TB_BaconShop_HERO_KelThuzad : playerInfo.player.cardId;\r\n\tplayerInfo.player.hpLeft = Math.max(1, playerInfo.player.hpLeft);\r\n\t// When using the simulator, the aura is not applied when receiving the board state.\r\n\tsetMissingAuras(board, playerInfo.player, anomalies, cards);\r\n\t// Avenge, maxHealth, etc.\r\n\t// setImplicitData(playerBoard, cardsData);\r\n\t// setImplicitData(opponentBoard, cardsData);\r\n\t// Avenge, globalInfo\r\n\tsetImplicitDataHero(playerInfo.player, cardsData, isPlayer, entityIdContainer);\r\n\treturn { board, hand, player: playerInfo.player };\r\n};\r\n\r\nconst sanitizeHeroPower = (\r\n\thp: BgsHeroPower,\r\n\tindex: number,\r\n\tplayer: BgsPlayerEntity,\r\n\tcards: AllCardsService,\r\n): BgsHeroPower => {\r\n\treturn hp;\r\n\t// FIXME: fix this when the situation presents itself. At the moment, we already have trinkets / hero powers / quest rewards\r\n\t// handled separately, so maybe there is no need to map a quest reward to one of Sire D.'s hero power\r\n\t// if (index !== 0) {\r\n\t// \treturn hp;\r\n\t// }\r\n\r\n\t// hp.cardId =\r\n\t// \tplayer.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t// \t(normalizeHeroCardId(player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t// \t\t? player.questRewardEntities?.[0]?.cardId\r\n\t// \t\t: null) ??\r\n\t// \thp.cardId;\r\n\t// return hp;\r\n};\r\n\r\nconst buildFinalInputBoard = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tcardsData: CardsData,\r\n\tcards: AllCardsService,\r\n): { board: BoardEntity[]; hand: BoardEntity[] } => {\r\n\tconst board = playerInfo.board\r\n\t\t.map((entity) => fixEnchantments(entity, cards))\r\n\t\t.map((entity) => ({\r\n\t\t\t...entity,\r\n\t\t\tinInitialState: true,\r\n\t\t\tscriptDataNum1: cardsData.defaultScriptDataNum(entity.cardId) || entity.scriptDataNum1,\r\n\t\t}))\r\n\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity));\r\n\tconst hand =\r\n\t\tplayerInfo.player.hand\r\n\t\t\t?.map((entity) => ({ ...entity, inInitialState: true }))\r\n\t\t\t.map((entity) => fixEnchantments(entity, cards))\r\n\t\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity)) ?? [];\r\n\r\n\treturn { board, hand };\r\n};\r\n"]}
1
+ {"version":3,"file":"input-sanitation.js","sourceRoot":"","sources":["../src/input-sanitation.ts"],"names":[],"mappings":";;;AAOA,8CAA0E;AAC1E,4DAA4D;AAC5D,mCAA8C;AAEvC,MAAM,eAAe,GAAG,CAC9B,WAA0B,EAC1B,KAAsB,EACtB,SAAoB,EACJ,EAAE;;IAClB,MAAM,iBAAiB,GAAG,EAAE,QAAQ,EAAE,SAAW,EAAE,CAAC;IAEpD,MAAM,EACL,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACpB,GAAG,wBAAwB,CAC3B,WAAW,CAAC,WAAW,EACvB,IAAI,EACJ,WAAW,CAAC,SAAS,CAAC,SAAS,EAC/B,KAAK,EACL,SAAS,EACT,iBAAiB,CACjB,CAAC;IACF,MAAM,EACL,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,oBAAoB,GAC5B,GAAG,wBAAwB,CAC3B,WAAW,CAAC,mBAAmB,EAC/B,IAAI,EACJ,WAAW,CAAC,SAAS,CAAC,SAAS,EAC/B,KAAK,EACL,SAAS,EACT,iBAAiB,CACjB,CAAC;IAEF,MAAM,EACL,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,GACtB,GAAG,wBAAwB,CAC3B,WAAW,CAAC,aAAa,EACzB,KAAK,EACL,WAAW,CAAC,SAAS,CAAC,SAAS,EAC/B,KAAK,EACL,SAAS,EACT,iBAAiB,CACjB,CAAC;IACF,MAAM,EACL,KAAK,EAAE,qBAAqB,EAC5B,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,sBAAsB,GAC9B,GAAG,wBAAwB,CAC3B,WAAW,CAAC,qBAAqB,EACjC,KAAK,EACL,WAAW,CAAC,SAAS,CAAC,SAAS,EAC/B,KAAK,EACL,SAAS,EACT,iBAAiB,CACjB,CAAC;IAIF,MAAM,UAAU,GAAkB;QACjC,WAAW,EAAE;YACZ,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE;gBACP,GAAG,YAAY;gBACf,IAAI,EAAE,UAAU;aAChB;SACD;QACD,mBAAmB,EAAE,CAAC,CAAC,oBAAoB;YAC1C,CAAC,CAAC;gBACA,KAAK,EAAE,mBAAmB;gBAC1B,MAAM,EAAE;oBACP,GAAG,oBAAoB;oBACvB,IAAI,EAAE,kBAAkB;iBACxB;aACA;YACH,CAAC,CAAC,IAAI;QACP,aAAa,EAAE;YACd,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE;gBACP,GAAG,cAAc;gBACjB,IAAI,EAAE,YAAY;aAClB;SACD;QACD,qBAAqB,EAAE,CAAC,CAAC,sBAAsB;YAC9C,CAAC,CAAC;gBACA,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE;oBACP,GAAG,sBAAsB;oBACzB,IAAI,EAAE,oBAAoB;iBAC1B;aACA;YACH,CAAC,CAAC,IAAI;QACP,SAAS,EAAE;YACV,GAAG,WAAW,CAAC,SAAS;YACxB,SAAS,EAAE,MAAA,MAAA,WAAW,CAAC,SAAS,CAAC,SAAS,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAK,EAAwB;SAC3F;KACgB,CAAC;IACnB,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AAlGW,QAAA,eAAe,mBAkG1B;AAEF,MAAM,wBAAwB,GAAG,CAChC,UAAwB,EACxB,QAAiB,EACjB,SAA4B,EAC5B,KAAsB,EACtB,SAAoB,EACpB,iBAAuC,EACkC,EAAE;;IAC3E,IAAI,CAAC,UAAU,EAAE;QAChB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC7C;IAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,CAAA,MAAA,UAAU,CAAC,MAAM,0CAAE,MAAM,KAAI,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACnF,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,MAAA,MAAA,CAAC,MAAA,UAAU,CAAC,MAAM,CAAC,OAAO,mCAAI,UAAU,CAAC,OAAO,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,CAAC,mCAAI,EAAE,CAAC;IAUhH,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAA,MAAA,UAAU,CAAC,MAAM,CAAC,QAAQ,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,CAAC,mCAAI,EAAE,CAAC,CAAC,IAAI,CAC/F,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CACjC,CAAC;IACF,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACtC,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,MAAA,UAAU,CAAC,MAAM,CAAC,UAAU,mCAAI,EAAE,CAAC;IAClE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,GAAG,MAAA,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,mCAAI,CAAC,CAAC;IACrG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,GAAG,MAAA,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,mCAAI,CAAC,CAAC;IACjG,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,CAAA,MAAA,UAAU,CAAC,MAAM,CAAC,UAAU,0CAAE,MAAM;QAClE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzG,CAAC,CAAC;YACA;gBACC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW;gBACrC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,iBAAiB;gBAC7C,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa;gBACrC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa;gBACrC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc;aACvB;SAChB,CAAC;IAOL,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,+BAA+C,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9G,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,IAAA,uBAAe,EAAC,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAK5D,IAAA,2BAAmB,EAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC/E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACzB,EAAgB,EAChB,KAAa,EACb,MAAuB,EACvB,KAAsB,EACP,EAAE;IACjB,OAAO,EAAE,CAAC;AAcX,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC5B,UAAwB,EACxB,QAAiB,EACjB,SAAoB,EACpB,KAAsB,EAC0B,EAAE;;IAClD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK;SAC5B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,8BAAe,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjB,GAAG,MAAM;QACT,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc;KACtF,CAAC,CAAC;SACF,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAA,2BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAkB,CAAA,CAAC,CAAC;IACtG,MAAM,IAAI,GACT,MAAA,MAAA,UAAU,CAAC,MAAM,CAAC,IAAI,0CACnB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EACtD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,8BAAe,EAAC,MAAM,EAAE,KAAK,CAAC,EAC9C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAA,2BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAkB,CAAA,CAAC,mCAAI,EAAE,CAAC;IAE7G,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import { AllCardsService } from '@firestone-hs/reference-data';\r\nimport { BgsBattleInfo } from './bgs-battle-info';\r\nimport { BgsBoardInfo } from './bgs-board-info';\r\nimport { BgsHeroPower, BgsPlayerEntity } from './bgs-player-entity';\r\nimport { BoardEntity } from './board-entity';\r\nimport { CardsData } from './cards/cards-data';\r\nimport { CardIds } from './services/card-ids';\r\nimport { setImplicitDataHero, setMissingAuras } from './simulation/auras';\r\nimport { fixEnchantments } from './simulation/enchantments';\r\nimport { addImpliedMechanics } from './utils';\r\n\r\nexport const buildFinalInput = (\r\n\tbattleInput: BgsBattleInfo,\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n): BgsBattleInfo => {\r\n\tconst entityIdContainer = { entityId: 999_999_999 };\r\n\r\n\tconst {\r\n\t\tboard: playerBoard,\r\n\t\thand: playerHand,\r\n\t\tplayer: playerEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.playerBoard,\r\n\t\ttrue,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\tconst {\r\n\t\tboard: playerTeammateBoard,\r\n\t\thand: playerTeammateHand,\r\n\t\tplayer: playerTeammateEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.playerTeammateBoard,\r\n\t\ttrue,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\r\n\tconst {\r\n\t\tboard: opponentBoard,\r\n\t\thand: opponentHand,\r\n\t\tplayer: opponentEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.opponentBoard,\r\n\t\tfalse,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\tconst {\r\n\t\tboard: opponentTeammateBoard,\r\n\t\thand: opponentTeammateHand,\r\n\t\tplayer: opponentTeammateEntity,\r\n\t} = buildFinalInputForPlayer(\r\n\t\tbattleInput.opponentTeammateBoard,\r\n\t\tfalse,\r\n\t\tbattleInput.gameState.anomalies,\r\n\t\tcards,\r\n\t\tcardsData,\r\n\t\tentityIdContainer,\r\n\t);\r\n\r\n\t// We do this so that we can have mutated objects inside the simulation and still\r\n\t// be able to start from a fresh copy for each simulation\r\n\tconst inputReady: BgsBattleInfo = {\r\n\t\tplayerBoard: {\r\n\t\t\tboard: playerBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...playerEntity,\r\n\t\t\t\thand: playerHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\tplayerTeammateBoard: !!playerTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: playerTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...playerTeammateEntity,\r\n\t\t\t\t\t\thand: playerTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\topponentBoard: {\r\n\t\t\tboard: opponentBoard,\r\n\t\t\tplayer: {\r\n\t\t\t\t...opponentEntity,\r\n\t\t\t\thand: opponentHand,\r\n\t\t\t},\r\n\t\t},\r\n\t\topponentTeammateBoard: !!opponentTeammateEntity\r\n\t\t\t? {\r\n\t\t\t\t\tboard: opponentTeammateBoard,\r\n\t\t\t\t\tplayer: {\r\n\t\t\t\t\t\t...opponentTeammateEntity,\r\n\t\t\t\t\t\thand: opponentTeammateHand,\r\n\t\t\t\t\t},\r\n\t\t\t }\r\n\t\t\t: null,\r\n\t\tgameState: {\r\n\t\t\t...battleInput.gameState,\r\n\t\t\tanomalies: battleInput.gameState.anomalies?.filter((a) => !!a) ?? ([] as readonly string[]),\r\n\t\t},\r\n\t} as BgsBattleInfo;\r\n\treturn inputReady;\r\n};\r\n\r\nconst buildFinalInputForPlayer = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tanomalies: readonly string[],\r\n\tcards: AllCardsService,\r\n\tcardsData: CardsData,\r\n\tentityIdContainer: { entityId: number },\r\n): { board: BoardEntity[]; hand: BoardEntity[]; player: BgsPlayerEntity } => {\r\n\tif (!playerInfo) {\r\n\t\treturn { board: [], hand: [], player: null };\r\n\t}\r\n\r\n\tconst { board, hand } = buildFinalInputBoard(playerInfo, isPlayer, cardsData, cards);\r\n\tconst isGhost = playerInfo.player?.hpLeft != null && playerInfo.player.hpLeft <= 0;\r\n\tplayerInfo.player.secrets = (playerInfo.player.secrets ?? playerInfo.secrets)?.filter((e) => !!e?.cardId) ?? [];\r\n\t// Add the scriptDataNum1 only on the start of combat phase, so that it doesn't trigger too soon\r\n\t// Don't do this, as secrets like Fleeting Vigor use this info to tell how much buff it will apply\r\n\t// playerInfo.player.secrets.forEach((secret) => (secret.scriptDataNum1 = 0));\r\n\t// Trinkets don't seem to trigger when facing the ghost\r\n\t// http://replays.firestoneapp.com/?reviewId=4ad32e03-2620-4fb1-8b43-cad55afd30fc&turn=27&action=2\r\n\t// One of the trinkets is Blood Golem Sticker, and no Blood Golem is summoned\r\n\t// Looks like that's not always the case:\r\n\t// http://replays.firestoneapp.com/?reviewId=9958e8d3-4388-4e6f-9b36-35f3a08be2f6&turn=25&action=4\r\n\t// playerInfo.player.trinkets = isGhost ? [] : playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? [];\r\n\tplayerInfo.player.trinkets = (playerInfo.player.trinkets?.filter((e) => !!e?.cardId) ?? []).sort(\r\n\t\t(a, b) => a.entityId - b.entityId,\r\n\t);\r\n\tplayerInfo.player.friendly = isPlayer;\r\n\tplayerInfo.player.globalInfo = playerInfo.player.globalInfo ?? {};\r\n\tplayerInfo.player.globalInfo.PirateAttackBonus = playerInfo.player.globalInfo.PirateAttackBonus ?? 0;\r\n\tplayerInfo.player.globalInfo.MechAttackBonus = playerInfo.player.globalInfo.MechAttackBonus ?? 0;\r\n\tplayerInfo.player.heroPowers = playerInfo.player.heroPowers?.length\r\n\t\t? playerInfo.player.heroPowers.map((hp, index) => sanitizeHeroPower(hp, index, playerInfo.player, cards))\r\n\t\t: [\r\n\t\t\t\t{\r\n\t\t\t\t\tcardId: playerInfo.player.heroPowerId,\r\n\t\t\t\t\tentityId: playerInfo.player.heroPowerEntityId,\r\n\t\t\t\t\tused: playerInfo.player.heroPowerUsed,\r\n\t\t\t\t\tinfo: playerInfo.player.heroPowerInfo,\r\n\t\t\t\t\tinfo2: playerInfo.player.heroPowerInfo2,\r\n\t\t\t\t} as BgsHeroPower,\r\n\t\t ];\r\n\t// playerInfo.player.heroPowerId =\r\n\t// \tplayerInfo.player.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t// \t(normalizeHeroCardId(playerInfo.player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t// \t\t? playerInfo.player.questRewardEntities?.[0]?.cardId\r\n\t// \t\t: null) ??\r\n\t// \tplayerInfo.player.heroPowerId;\r\n\tplayerInfo.player.cardId = isGhost ? CardIds.Kelthuzad_TB_BaconShop_HERO_KelThuzad : playerInfo.player.cardId;\r\n\tplayerInfo.player.hpLeft = Math.max(1, playerInfo.player.hpLeft);\r\n\t// When using the simulator, the aura is not applied when receiving the board state.\r\n\tsetMissingAuras(board, playerInfo.player, anomalies, cards);\r\n\t// Avenge, maxHealth, etc.\r\n\t// setImplicitData(playerBoard, cardsData);\r\n\t// setImplicitData(opponentBoard, cardsData);\r\n\t// Avenge, globalInfo\r\n\tsetImplicitDataHero(playerInfo.player, cardsData, isPlayer, entityIdContainer);\r\n\treturn { board, hand, player: playerInfo.player };\r\n};\r\n\r\nconst sanitizeHeroPower = (\r\n\thp: BgsHeroPower,\r\n\tindex: number,\r\n\tplayer: BgsPlayerEntity,\r\n\tcards: AllCardsService,\r\n): BgsHeroPower => {\r\n\treturn hp;\r\n\t// FIXME: fix this when the situation presents itself. At the moment, we already have trinkets / hero powers / quest rewards\r\n\t// handled separately, so maybe there is no need to map a quest reward to one of Sire D.'s hero power\r\n\t// if (index !== 0) {\r\n\t// \treturn hp;\r\n\t// }\r\n\r\n\t// hp.cardId =\r\n\t// \tplayer.trinkets.find((t) => t.scriptDataNum6 === 3)?.cardId ??\r\n\t// \t(normalizeHeroCardId(player.cardId, cards) === CardIds.SireDenathrius_BG24_HERO_100\r\n\t// \t\t? player.questRewardEntities?.[0]?.cardId\r\n\t// \t\t: null) ??\r\n\t// \thp.cardId;\r\n\t// return hp;\r\n};\r\n\r\nconst buildFinalInputBoard = (\r\n\tplayerInfo: BgsBoardInfo,\r\n\tisPlayer: boolean,\r\n\tcardsData: CardsData,\r\n\tcards: AllCardsService,\r\n): { board: BoardEntity[]; hand: BoardEntity[] } => {\r\n\tconst board = playerInfo.board\r\n\t\t.map((entity) => fixEnchantments(entity, cards))\r\n\t\t.map((entity) => ({\r\n\t\t\t...entity,\r\n\t\t\tinInitialState: true,\r\n\t\t\tscriptDataNum1: cardsData.defaultScriptDataNum(entity.cardId) || entity.scriptDataNum1,\r\n\t\t}))\r\n\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity));\r\n\tconst hand =\r\n\t\tplayerInfo.player.hand\r\n\t\t\t?.map((entity) => ({ ...entity, inInitialState: true }))\r\n\t\t\t.map((entity) => fixEnchantments(entity, cards))\r\n\t\t\t.map((entity) => ({ ...addImpliedMechanics(entity, cardsData), friendly: isPlayer } as BoardEntity)) ?? [];\r\n\r\n\treturn { board, hand };\r\n};\r\n"]}