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

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 (36) hide show
  1. package/dist/cards/card.interface.d.ts +5 -1
  2. package/dist/cards/card.interface.js +3 -1
  3. package/dist/cards/card.interface.js.map +1 -1
  4. package/dist/cards/impl/_card-mappings.js +2 -0
  5. package/dist/cards/impl/_card-mappings.js.map +1 -1
  6. package/dist/cards/impl/minion/apexis-guardian.js +9 -11
  7. package/dist/cards/impl/minion/apexis-guardian.js.map +1 -1
  8. package/dist/cards/impl/minion/blue-volumizer.js +3 -6
  9. package/dist/cards/impl/minion/blue-volumizer.js.map +1 -1
  10. package/dist/cards/impl/minion/expert-aviator.js +3 -1
  11. package/dist/cards/impl/minion/expert-aviator.js.map +1 -1
  12. package/dist/cards/impl/minion/green-volumizer.d.ts +2 -2
  13. package/dist/cards/impl/minion/green-volumizer.js +5 -9
  14. package/dist/cards/impl/minion/green-volumizer.js.map +1 -1
  15. package/dist/cards/impl/minion/red-volumizer.js +3 -6
  16. package/dist/cards/impl/minion/red-volumizer.js.map +1 -1
  17. package/dist/cards/impl/minion/surf-n-surf-crab-riding.d.ts +2 -0
  18. package/dist/cards/impl/minion/surf-n-surf-crab-riding.js +14 -0
  19. package/dist/cards/impl/minion/surf-n-surf-crab-riding.js.map +1 -0
  20. package/dist/cards/impl/minion/timewarped-expeditioner.js +2 -2
  21. package/dist/cards/impl/minion/timewarped-expeditioner.js.map +1 -1
  22. package/dist/cards/impl/minion/twilight-hatchling.js +3 -6
  23. package/dist/cards/impl/minion/twilight-hatchling.js.map +1 -1
  24. package/dist/mechanics/player-global-effects.d.ts +4 -0
  25. package/dist/mechanics/player-global-effects.js +16 -0
  26. package/dist/mechanics/player-global-effects.js.map +1 -0
  27. package/dist/mechanics/rally.js +1 -1
  28. package/dist/mechanics/rally.js.map +1 -1
  29. package/dist/simulation/enchantments.js +7 -2
  30. package/dist/simulation/enchantments.js.map +1 -1
  31. package/dist/simulation/magnetize.d.ts +6 -0
  32. package/dist/simulation/magnetize.js +12 -1
  33. package/dist/simulation/magnetize.js.map +1 -1
  34. package/dist/utils.d.ts +1 -1
  35. package/dist/utils.js.map +1 -1
  36. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"expert-aviator.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/expert-aviator.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAEjF,uDAAiE;AACjE,qDAAwD;AAG3C,QAAA,aAAa,GAAc;IACvC,OAAO,EAAE,0BAAkE;IAC3E,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAA4D,EAAE;QAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5G,IAAI,MAAM,CAAC,MAAM,EAAE;YAClB,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,UAAU,GAA8B;YAC7C,mBAAmB,EAAE,KAAK,CAAC,cAAc;YACzC,uBAAuB,EAAE,KAAK,CAAC,aAAa;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,KAAK,CAAC,cAAc;YAChC,cAAc,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,4CAAuB,EAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACvB,CAAC,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;SAC9C;QACD,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,MAAM,CAAC,GAAG,CAAC,EACtE,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,cAAc,EACzB,KAAK,CAAC,SAAS,CACf,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 { modifyStats } from '../../../simulation/stats';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const ExpertAviator: RallyCard = {\r\n\tcardIds: [CardIds.ExpertAviator_BG34_140, CardIds.ExpertAviator_BG34_140_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tconst mult = minion.cardId === CardIds.ExpertAviator_BG34_140_G ? 2 : 1;\r\n\t\tconst target = input.attackingHero.hand.filter((e) => !!e.maxHealth && e.cardId)[0];\r\n\t\tif (!target) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tmodifyStats(target, minion, 1 * mult, 1 * mult, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\tif (target.locked) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\ttarget.locked = true;\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: minion,\r\n\t\t\totherBoard: input.defendingBoard,\r\n\t\t\totherBoardHero: input.defendingHero,\r\n\t\t};\r\n\t\tconst spawns = simplifiedSpawnEntities(target.cardId, 1, spawnInput);\r\n\t\tfor (const s of spawns) {\r\n\t\t\ts.onCanceledSummon = () => (s.locked = false);\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(minion) - 1,\r\n\t\t\tspawnInput.otherBoard,\r\n\t\t\tspawnInput.otherBoardHero,\r\n\t\t\tinput.gameState,\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":"expert-aviator.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/expert-aviator.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAEjF,uDAAiE;AACjE,qDAAwD;AACxD,0CAA4C;AAG/B,QAAA,aAAa,GAAc;IACvC,OAAO,EAAE,0BAAkE;IAC3E,KAAK,EAAE,CAAC,MAAmB,EAAE,KAAoB,EAA4D,EAAE;QAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,EAAE;YACZ,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5G,IAAI,MAAM,CAAC,MAAM,EAAE;YAClB,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;QACjC,MAAM,UAAU,GAA8B;YAC7C,mBAAmB,EAAE,KAAK,CAAC,cAAc;YACzC,uBAAuB,EAAE,KAAK,CAAC,aAAa;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,KAAK,CAAC,cAAc;YAChC,cAAc,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,4CAAuB,EAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACvB,CAAC,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;SAC9C;QACD,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,MAAM,CAAC,GAAG,CAAC,EACtE,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,cAAc,EACzB,KAAK,CAAC,SAAS,CACf,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 { modifyStats } from '../../../simulation/stats';\r\nimport { copyEntity } from '../../../utils';\r\nimport { RallyCard } from '../../card.interface';\r\n\r\nexport const ExpertAviator: RallyCard = {\r\n\tcardIds: [CardIds.ExpertAviator_BG34_140, CardIds.ExpertAviator_BG34_140_G],\r\n\trally: (minion: BoardEntity, input: OnAttackInput): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tconst mult = minion.cardId === CardIds.ExpertAviator_BG34_140_G ? 2 : 1;\r\n\t\tconst target = input.attackingHero.hand.filter((e) => !!e.maxHealth && e.cardId)[0];\r\n\t\tif (!target) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tmodifyStats(target, minion, 1 * mult, 1 * mult, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\tif (target.locked) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\ttarget.locked = true;\r\n\t\tconst clone = copyEntity(target);\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: minion,\r\n\t\t\totherBoard: input.defendingBoard,\r\n\t\t\totherBoardHero: input.defendingHero,\r\n\t\t};\r\n\t\tconst spawns = simplifiedSpawnEntities(clone.cardId, 1, spawnInput, clone);\r\n\t\tfor (const s of spawns) {\r\n\t\t\ts.onCanceledSummon = () => (s.locked = false);\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(minion) - 1,\r\n\t\t\tspawnInput.otherBoard,\r\n\t\t\tspawnInput.otherBoardHero,\r\n\t\t\tinput.gameState,\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,2 +1,2 @@
1
- import { OnBeforeMagnetizeCard } from '../../card.interface';
2
- export declare const GreenVolumizer: OnBeforeMagnetizeCard;
1
+ import { OnBeforeMagnetizeSelfCard } from '../../card.interface';
2
+ export declare const GreenVolumizer: OnBeforeMagnetizeSelfCard;
@@ -1,19 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GreenVolumizer = void 0;
4
+ const player_global_effects_1 = require("../../../mechanics/player-global-effects");
4
5
  const stats_1 = require("../../../simulation/stats");
5
- const utils_1 = require("../../../utils");
6
6
  exports.GreenVolumizer = {
7
7
  cardIds: ["BG34_170t3", "BG34_170t3_G"],
8
- onBeforeMagnetize: (entity, input) => {
8
+ onBeforeMagnetizeSelf: (entity, input) => {
9
9
  const mult = entity.cardId === "BG34_170t3_G" ? 2 : 1;
10
- const buff = 2 * mult;
11
- input.hero.globalInfo.VolumizerAttackBuff += buff;
12
- input.hero.globalInfo.VolumizerHealthBuff += buff;
13
- const targets = input.board.filter((e) => (0, utils_1.isVolumizer)(e.cardId, input.hero, input.gameState.anomalies, input.gameState.allCards));
14
- for (const target of targets) {
15
- (0, stats_1.modifyStats)(target, entity, buff, buff, input.board, input.hero, input.gameState);
16
- }
10
+ const buff = 1 * mult;
11
+ (0, player_global_effects_1.updateVolumizerBuffs)(input.hero, input.board, buff, buff, input.gameState);
12
+ (0, stats_1.modifyStats)(entity, entity, input.hero.globalInfo.VolumizerAttackBuff, input.hero.globalInfo.VolumizerHealthBuff, input.board, input.hero, input.gameState);
17
13
  },
18
14
  };
19
15
  //# sourceMappingURL=green-volumizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"green-volumizer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/green-volumizer.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AACxD,0CAA6C;AAGhC,QAAA,cAAc,GAA0B;IACpD,OAAO,EAAE,8BAA6F;IACtG,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAA6B,EAAE,EAAE;QACzE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,mBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,IAAA,mBAAW,EAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACtF,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SAClF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnBeforeMagnetizeInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { isVolumizer } from '../../../utils';\r\nimport { OnBeforeMagnetizeCard } from '../../card.interface';\r\n\r\nexport const GreenVolumizer: OnBeforeMagnetizeCard = {\r\n\tcardIds: [CardIds.AutoAccelerator_GreenVolumizerToken_BG34_170t3, CardIds.GreenVolumizer_BG34_170t3_G],\r\n\tonBeforeMagnetize: (entity: BoardEntity, input: OnBeforeMagnetizeInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.GreenVolumizer_BG34_170t3_G ? 2 : 1;\r\n\t\tconst buff = 2 * mult;\r\n\t\tinput.hero.globalInfo.VolumizerAttackBuff += buff;\r\n\t\tinput.hero.globalInfo.VolumizerHealthBuff += buff;\r\n\t\tconst targets = input.board.filter((e) =>\r\n\t\t\tisVolumizer(e.cardId, input.hero, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(target, entity, buff, buff, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"green-volumizer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/green-volumizer.ts"],"names":[],"mappings":";;;AACA,oFAAgF;AAGhF,qDAAwD;AAG3C,QAAA,cAAc,GAA8B;IACxD,OAAO,EAAE,8BAA6F;IACtG,qBAAqB,EAAE,CAAC,MAAmB,EAAE,KAAiC,EAAE,EAAE;QACjF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,mBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,IAAA,4CAAoB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EACzC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EACzC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { updateVolumizerBuffs } from '../../../mechanics/player-global-effects';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnBeforeMagnetizeSelfInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnBeforeMagnetizeSelfCard } from '../../card.interface';\r\n\r\nexport const GreenVolumizer: OnBeforeMagnetizeSelfCard = {\r\n\tcardIds: [CardIds.AutoAccelerator_GreenVolumizerToken_BG34_170t3, CardIds.GreenVolumizer_BG34_170t3_G],\r\n\tonBeforeMagnetizeSelf: (entity: BoardEntity, input: OnBeforeMagnetizeSelfInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.GreenVolumizer_BG34_170t3_G ? 2 : 1;\r\n\t\tconst buff = 1 * mult;\r\n\t\tupdateVolumizerBuffs(input.hero, input.board, buff, buff, input.gameState);\r\n\t\tmodifyStats(\r\n\t\t\tentity,\r\n\t\t\tentity,\r\n\t\t\tinput.hero.globalInfo.VolumizerAttackBuff,\r\n\t\t\tinput.hero.globalInfo.VolumizerHealthBuff,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
@@ -1,18 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RedVolumizer = void 0;
4
+ const player_global_effects_1 = require("../../../mechanics/player-global-effects");
4
5
  const stats_1 = require("../../../simulation/stats");
5
- const utils_1 = require("../../../utils");
6
6
  exports.RedVolumizer = {
7
7
  cardIds: ["BG34_170t", "BG34_170t_G"],
8
8
  onBeforeMagnetize: (entity, input) => {
9
9
  const mult = entity.cardId === "BG34_170t_G" ? 2 : 1;
10
10
  const buff = 3 * mult;
11
- input.hero.globalInfo.VolumizerAttackBuff += buff;
12
- const targets = input.board.filter((e) => (0, utils_1.isVolumizer)(e.cardId, input.hero, input.gameState.anomalies, input.gameState.allCards));
13
- for (const target of targets) {
14
- (0, stats_1.modifyStats)(target, entity, buff, 0, input.board, input.hero, input.gameState);
15
- }
11
+ (0, player_global_effects_1.updateVolumizerBuffs)(input.hero, input.board, buff, 0, input.gameState);
12
+ (0, stats_1.modifyStats)(entity, entity, input.hero.globalInfo.VolumizerAttackBuff, input.hero.globalInfo.VolumizerHealthBuff, input.board, input.hero, input.gameState);
16
13
  },
17
14
  };
18
15
  //# sourceMappingURL=red-volumizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"red-volumizer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/red-volumizer.ts"],"names":[],"mappings":";;;AAGA,qDAAwD;AACxD,0CAA6C;AAGhC,QAAA,YAAY,GAA0B;IAClD,OAAO,EAAE,4BAAuF;IAChG,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAA6B,EAAE,EAAE;QACzE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,kBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,IAAA,mBAAW,EAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACtF,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SAC/E;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnBeforeMagnetizeInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { isVolumizer } from '../../../utils';\r\nimport { OnBeforeMagnetizeCard } from '../../card.interface';\r\n\r\nexport const RedVolumizer: OnBeforeMagnetizeCard = {\r\n\tcardIds: [CardIds.AutoAccelerator_RedVolumizerToken_BG34_170t, CardIds.RedVolumizer_BG34_170t_G],\r\n\tonBeforeMagnetize: (entity: BoardEntity, input: OnBeforeMagnetizeInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.RedVolumizer_BG34_170t_G ? 2 : 1;\r\n\t\tconst buff = 3 * mult;\r\n\t\tinput.hero.globalInfo.VolumizerAttackBuff += buff;\r\n\t\tconst targets = input.board.filter((e) =>\r\n\t\t\tisVolumizer(e.cardId, input.hero, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(target, entity, buff, 0, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"red-volumizer.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/red-volumizer.ts"],"names":[],"mappings":";;;AACA,oFAAgF;AAGhF,qDAAwD;AAG3C,QAAA,YAAY,GAA0B;IAClD,OAAO,EAAE,4BAAuF;IAChG,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAA6B,EAAE,EAAE;QACzE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,kBAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,IAAA,4CAAoB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACxE,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EACzC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EACzC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { updateVolumizerBuffs } from '../../../mechanics/player-global-effects';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnBeforeMagnetizeInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnBeforeMagnetizeCard } from '../../card.interface';\r\n\r\nexport const RedVolumizer: OnBeforeMagnetizeCard = {\r\n\tcardIds: [CardIds.AutoAccelerator_RedVolumizerToken_BG34_170t, CardIds.RedVolumizer_BG34_170t_G],\r\n\tonBeforeMagnetize: (entity: BoardEntity, input: OnBeforeMagnetizeInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.RedVolumizer_BG34_170t_G ? 2 : 1;\r\n\t\tconst buff = 3 * mult;\r\n\t\tupdateVolumizerBuffs(input.hero, input.board, buff, 0, input.gameState);\r\n\t\tmodifyStats(\r\n\t\t\tentity,\r\n\t\t\tentity,\r\n\t\t\tinput.hero.globalInfo.VolumizerAttackBuff,\r\n\t\t\tinput.hero.globalInfo.VolumizerHealthBuff,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeathrattleSpawnEnchantmentCard } from '../../card.interface';
2
+ export declare const SurfNSurfCrabRiding: DeathrattleSpawnEnchantmentCard;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SurfNSurfCrabRiding = void 0;
4
+ const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
5
+ exports.SurfNSurfCrabRiding = {
6
+ cardIds: ["BG27_004e", "BG27_004_Ge"],
7
+ deathrattleSpawnEnchantmentEffect: (enchantment, minion, input) => {
8
+ const spawnId = enchantment.cardId === "BG27_004_Ge"
9
+ ? "BG27_004_Gt2"
10
+ : "BG27_004t2";
11
+ return (0, deathrattle_spawns_1.simplifiedSpawnEntities)(spawnId, 1, input);
12
+ },
13
+ };
14
+ //# sourceMappingURL=surf-n-surf-crab-riding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surf-n-surf-crab-riding.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/surf-n-surf-crab-riding.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,mBAAmB,GAAoC;IACnE,OAAO,EAAE,4BAAwG;IACjH,iCAAiC,EAAE,CAClC,WAA+B,EAC/B,MAAsC,EACtC,KAAgC,EAC/B,EAAE;QACH,MAAM,OAAO,GACZ,WAAW,CAAC,MAAM,kBAAwD;YACzE,CAAC;YACD,CAAC,aAAuC,CAAC;QAC3C,OAAO,IAAA,4CAAuB,EAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IACnD,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 { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\n\r\nexport const SurfNSurfCrabRiding: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: [CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004e, CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: { cardId: string },\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => {\r\n\t\tconst spawnId =\r\n\t\t\tenchantment.cardId === CardIds.SurfNSurf_CrabRidingEnchantment_BG27_004_Ge\r\n\t\t\t\t? CardIds.SurfNSurf_CrabToken_BG27_004_Gt2\r\n\t\t\t\t: CardIds.SurfNSurf_CrabToken_BG27_004t2;\r\n\t\treturn simplifiedSpawnEntities(spawnId, 1, input);\r\n\t},\r\n};\r\n"]}
@@ -10,11 +10,11 @@ exports.TimewarpedExpeditioner = {
10
10
  const minionsInHand = input.hero.hand.filter((c) => !!(c === null || c === void 0 ? void 0 : c.maxHealth));
11
11
  if (minionsInHand.length > 0) {
12
12
  const target = minionsInHand[0];
13
- (0, stats_1.modifyStats)(target, minion, input.attackAmount * mult, input.healthAmount * mult, input.board, input.hero, input.gameState);
13
+ (0, stats_1.modifyStats)(target, minion, input.attackAmount * mult, input.healthAmount * mult, input.board, input.hero, input.gameState, true, true, false);
14
14
  }
15
15
  if (minionsInHand.length > 1) {
16
16
  const target = minionsInHand[1];
17
- (0, stats_1.modifyStats)(target, minion, input.attackAmount * mult, input.healthAmount * mult, input.board, input.hero, input.gameState);
17
+ (0, stats_1.modifyStats)(target, minion, input.attackAmount * mult, input.healthAmount * mult, input.board, input.hero, input.gameState, true, true, false);
18
18
  }
19
19
  }
20
20
  },
@@ -1 +1 @@
1
- {"version":3,"file":"timewarped-expeditioner.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-expeditioner.ts"],"names":[],"mappings":";;;AAEA,qDAA6E;AAGhE,QAAA,sBAAsB,GAAuB;IACzD,OAAO,EAAE,sCAAgG;IACzG,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAAoD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAClF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,SAAS,CAAA,CAAC,CAAC;YACpE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;aACF;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats, OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { OnStatsChangedCard } from '../../card.interface';\r\n\r\nexport const TimewarpedExpeditioner: OnStatsChangedCard = {\r\n\tcardIds: [CardIds.TimewarpedExpeditioner_BG34_Giant_317, CardIds.TimewarpedExpeditioner_BG34_Giant_317_G],\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedExpeditioner_BG34_Giant_317_G ? 2 : 1;\r\n\t\tif ((input.attackAmount > 0 || input.healthAmount > 0) && input.target === minion) {\r\n\t\t\tconst minionsInHand = input.hero.hand.filter((c) => !!c?.maxHealth);\r\n\t\t\tif (minionsInHand.length > 0) {\r\n\t\t\t\tconst target = minionsInHand[0];\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\tinput.attackAmount * mult,\r\n\t\t\t\t\tinput.healthAmount * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tif (minionsInHand.length > 1) {\r\n\t\t\t\tconst target = minionsInHand[1];\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\tinput.attackAmount * mult,\r\n\t\t\t\t\tinput.healthAmount * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\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},\r\n};\r\n"]}
1
+ {"version":3,"file":"timewarped-expeditioner.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-expeditioner.ts"],"names":[],"mappings":";;;AAEA,qDAA6E;AAGhE,QAAA,sBAAsB,GAAuB;IACzD,OAAO,EAAE,sCAAgG;IACzG,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAAoD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAClF,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,SAAS,CAAA,CAAC,CAAC;YACpE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,EACf,IAAI,EACJ,IAAI,EACJ,KAAK,CACL,CAAC;aACF;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,EACf,IAAI,EACJ,IAAI,EACJ,KAAK,CACL,CAAC;aACF;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats, OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { OnStatsChangedCard } from '../../card.interface';\r\n\r\nexport const TimewarpedExpeditioner: OnStatsChangedCard = {\r\n\tcardIds: [CardIds.TimewarpedExpeditioner_BG34_Giant_317, CardIds.TimewarpedExpeditioner_BG34_Giant_317_G],\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedExpeditioner_BG34_Giant_317_G ? 2 : 1;\r\n\t\tif ((input.attackAmount > 0 || input.healthAmount > 0) && input.target === minion) {\r\n\t\t\tconst minionsInHand = input.hero.hand.filter((c) => !!c?.maxHealth);\r\n\t\t\tif (minionsInHand.length > 0) {\r\n\t\t\t\tconst target = minionsInHand[0];\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\tinput.attackAmount * mult,\r\n\t\t\t\t\tinput.healthAmount * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tif (minionsInHand.length > 1) {\r\n\t\t\t\tconst target = minionsInHand[1];\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\tinput.attackAmount * mult,\r\n\t\t\t\t\tinput.healthAmount * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -3,13 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TwilightHatchling = void 0;
4
4
  const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
5
5
  exports.TwilightHatchling = {
6
- cardIds: [
7
- "BG34_630t",
8
- "BG34_630_Gt",
9
- ],
6
+ cardIds: ["BG34_630", "BG34_630_G"],
10
7
  deathrattleSpawn: (minion, input) => {
11
- const mult = minion.cardId === "BG34_630_Gt" ? 2 : 1;
12
- const spawns = (0, deathrattle_spawns_1.simplifiedSpawnEntities)("BRM_004", mult, input);
8
+ const mult = minion.cardId === "BG34_630_G" ? 2 : 1;
9
+ const spawns = (0, deathrattle_spawns_1.simplifiedSpawnEntities)("BG34_630t", mult, input);
13
10
  spawns.forEach((e) => {
14
11
  e.attackImmediately = true;
15
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"twilight-hatchling.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/twilight-hatchling.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,iBAAiB,GAAyB;IACtD,OAAO,EAAE;;;KAGR;IACD,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,kBAA6D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,MAAM,GAAG,IAAA,4CAAuB,aAAwB,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;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 { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TwilightHatchling: DeathrattleSpawnCard = {\r\n\tcardIds: [\r\n\t\tCardIds.TwilightHatchling_TwilightWhelpToken_BG34_630t,\r\n\t\tCardIds.TwilightHatchling_TwilightWhelpToken_BG34_630_Gt,\r\n\t],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.TwilightHatchling_TwilightWhelpToken_BG34_630_Gt ? 2 : 1;\r\n\t\tconst spawns = simplifiedSpawnEntities(CardIds.TwilightWhelp, mult, input);\r\n\t\tspawns.forEach((e) => {\r\n\t\t\te.attackImmediately = true;\r\n\t\t});\r\n\t\treturn spawns;\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"twilight-hatchling.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/twilight-hatchling.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,iBAAiB,GAAyB;IACtD,OAAO,EAAE,0BAA0E;IACnF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,IAAA,4CAAuB,eAAyD,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5G,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;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 { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TwilightHatchling: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TwilightHatchling_BG34_630, CardIds.TwilightHatchling_BG34_630_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.TwilightHatchling_BG34_630_G ? 2 : 1;\r\n\t\tconst spawns = simplifiedSpawnEntities(CardIds.TwilightHatchling_TwilightWhelpToken_BG34_630t, mult, input);\r\n\t\tspawns.forEach((e) => {\r\n\t\t\te.attackImmediately = true;\r\n\t\t});\r\n\t\treturn spawns;\r\n\t},\r\n};\r\n"]}
@@ -0,0 +1,4 @@
1
+ import { BgsPlayerEntity } from '../bgs-player-entity';
2
+ import { BoardEntity } from '../board-entity';
3
+ import { FullGameState } from '../simulation/internal-game-state';
4
+ export declare const updateVolumizerBuffs: (hero: BgsPlayerEntity, board: BoardEntity[], attackBuff: number, healthBuff: number, gameState: FullGameState) => void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateVolumizerBuffs = void 0;
4
+ const stats_1 = require("../simulation/stats");
5
+ const utils_1 = require("../utils");
6
+ const updateVolumizerBuffs = (hero, board, attackBuff, healthBuff, gameState) => {
7
+ hero.globalInfo.VolumizerAttackBuff += attackBuff;
8
+ hero.globalInfo.VolumizerHealthBuff += healthBuff;
9
+ for (const entity of board) {
10
+ if ((0, utils_1.isVolumizer)(entity.cardId, hero, gameState.anomalies, gameState.allCards)) {
11
+ (0, stats_1.modifyStats)(entity, hero, attackBuff, healthBuff, board, hero, gameState);
12
+ }
13
+ }
14
+ };
15
+ exports.updateVolumizerBuffs = updateVolumizerBuffs;
16
+ //# sourceMappingURL=player-global-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-global-effects.js","sourceRoot":"","sources":["../../src/mechanics/player-global-effects.ts"],"names":[],"mappings":";;;AAGA,+CAAkD;AAClD,oCAAuC;AAEhC,MAAM,oBAAoB,GAAG,CACnC,IAAqB,EACrB,KAAoB,EACpB,UAAkB,EAClB,UAAkB,EAClB,SAAwB,EACvB,EAAE;IACH,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,IAAI,IAAA,mBAAW,EAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9E,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SAC1E;KAOD;AACF,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { modifyStats } from '../simulation/stats';\r\nimport { isVolumizer } from '../utils';\r\n\r\nexport const updateVolumizerBuffs = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tattackBuff: number,\r\n\thealthBuff: number,\r\n\tgameState: FullGameState,\r\n) => {\r\n\thero.globalInfo.VolumizerAttackBuff += attackBuff;\r\n\thero.globalInfo.VolumizerHealthBuff += healthBuff;\r\n\tfor (const entity of board) {\r\n\t\tif (isVolumizer(entity.cardId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t}\r\n\t\t// for (const enchantment of entity.enchantments) {\r\n\t\t// \tconst rootDbfId = gameState.allCards.getCard(enchantment.cardId).entityDbfIf;\r\n\t\t// \tif (isVolumizer(rootDbfId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t// \t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n};\r\n"]}
@@ -24,7 +24,7 @@ const triggerRally = (attackingBoard, attackingBoardHero, attacker, defendingBoa
24
24
  : 1;
25
25
  const numberOfRallyingCries = (_d = (_c = attackingBoardHero.questRewardEntities) === null || _c === void 0 ? void 0 : _c.filter((r) => r.cardId === "BG33_Reward_021").length) !== null && _d !== void 0 ? _d : 0;
26
26
  const multiplier = triggerMult + numberOfRallyingCries;
27
- const rallyLoops = 1 + (isAttackerRallying ? multiplier : 0);
27
+ const rallyLoops = !isAttackerRallying ? 1 : multiplier;
28
28
  for (let i = 0; i < rallyLoops; i++) {
29
29
  const onAttackImpl = _card_mappings_1.cardMappings[attacker.cardId];
30
30
  if ((0, card_interface_1.hasRally)(onAttackImpl)) {
@@ -1 +1 @@
1
- {"version":3,"file":"rally.js","sourceRoot":"","sources":["../../src/mechanics/rally.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasRally } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { fixEnchantments } from '../simulation/enchantments';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { hasEntityMechanic } from '../utils';\r\n\r\nconst DOUBLE_RALLY_CARD_IDS: string[] = [CardIds.TimewarpedDeios_BG34_Giant_376];\r\nconst TRIPLE_RALLY_CARD_IDS: string[] = [CardIds.TimewarpedDeios_BG34_Giant_376_G];\r\n\r\nexport const triggerRally = (\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tattacker: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tgameState: FullGameState,\r\n): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\tconst isAttackerRallying = hasEntityMechanic(attacker, GameTag.BACON_RALLY, gameState.allCards);\r\n\r\n\tconst cardIds = [\r\n\t\t...attackingBoard.map((e) => e.cardId),\r\n\t\t...(attackingBoardHero.secrets?.map((e) => e.cardId) ?? []),\r\n\t];\r\n\tconst triggerMult = cardIds.some((cardId) => TRIPLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t? 3\r\n\t\t: cardIds.some((cardId) => DOUBLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t? 2\r\n\t\t: 1;\r\n\tconst numberOfRallyingCries =\r\n\t\tattackingBoardHero.questRewardEntities?.filter((r) => r.cardId === CardIds.RallyingCry_BG33_Reward_021)\r\n\t\t\t.length ?? 0;\r\n\tconst multiplier = triggerMult + numberOfRallyingCries;\r\n\tconst rallyLoops = 1 + (isAttackerRallying ? multiplier : 0);\r\n\r\n\tfor (let i = 0; i < rallyLoops; i++) {\r\n\t\tconst onAttackImpl = cardMappings[attacker.cardId];\r\n\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(attacker, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = attacker.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\t\tlet enchantmentToMinion: BoardEntity = {\r\n\t\t\t\t\t...enchantment,\r\n\t\t\t\t\tentityId: attacker.entityId,\r\n\t\t\t\t\tattack: attacker.attack,\r\n\t\t\t\t\thealth: attacker.health,\r\n\t\t\t\t\tmaxHealth: attacker.maxHealth,\r\n\t\t\t\t\tmaxAttack: attacker.maxAttack,\r\n\t\t\t\t\tabiityChargesLeft: attacker.abiityChargesLeft,\r\n\t\t\t\t};\r\n\t\t\t\tenchantmentToMinion = fixEnchantments(enchantmentToMinion, gameState.allCards);\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(enchantmentToMinion, {\r\n\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t});\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn { dmgDoneByAttacker: damageDoneByAttacker, dmgDoneByDefender: damageDoneByDefender };\r\n};\r\n"]}
1
+ {"version":3,"file":"rally.js","sourceRoot":"","sources":["../../src/mechanics/rally.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasRally } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { fixEnchantments } from '../simulation/enchantments';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { hasEntityMechanic } from '../utils';\r\n\r\nconst DOUBLE_RALLY_CARD_IDS: string[] = [CardIds.TimewarpedDeios_BG34_Giant_376];\r\nconst TRIPLE_RALLY_CARD_IDS: string[] = [CardIds.TimewarpedDeios_BG34_Giant_376_G];\r\n\r\nexport const triggerRally = (\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tattacker: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tgameState: FullGameState,\r\n): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\tconst isAttackerRallying = hasEntityMechanic(attacker, GameTag.BACON_RALLY, gameState.allCards);\r\n\r\n\tconst cardIds = [\r\n\t\t...attackingBoard.map((e) => e.cardId),\r\n\t\t...(attackingBoardHero.secrets?.map((e) => e.cardId) ?? []),\r\n\t];\r\n\tconst triggerMult = cardIds.some((cardId) => TRIPLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t? 3\r\n\t\t: cardIds.some((cardId) => DOUBLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t? 2\r\n\t\t: 1;\r\n\tconst numberOfRallyingCries =\r\n\t\tattackingBoardHero.questRewardEntities?.filter((r) => r.cardId === CardIds.RallyingCry_BG33_Reward_021)\r\n\t\t\t.length ?? 0;\r\n\tconst multiplier = triggerMult + numberOfRallyingCries;\r\n\tconst rallyLoops = !isAttackerRallying ? 1 : multiplier;\r\n\r\n\tfor (let i = 0; i < rallyLoops; i++) {\r\n\t\tconst onAttackImpl = cardMappings[attacker.cardId];\r\n\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(attacker, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = attacker.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasRally(onAttackImpl)) {\r\n\t\t\t\tlet enchantmentToMinion: BoardEntity = {\r\n\t\t\t\t\t...enchantment,\r\n\t\t\t\t\tentityId: attacker.entityId,\r\n\t\t\t\t\tattack: attacker.attack,\r\n\t\t\t\t\thealth: attacker.health,\r\n\t\t\t\t\tmaxHealth: attacker.maxHealth,\r\n\t\t\t\t\tmaxAttack: attacker.maxAttack,\r\n\t\t\t\t\tabiityChargesLeft: attacker.abiityChargesLeft,\r\n\t\t\t\t};\r\n\t\t\t\tenchantmentToMinion = fixEnchantments(enchantmentToMinion, gameState.allCards);\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.rally(enchantmentToMinion, {\r\n\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t});\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn { dmgDoneByAttacker: damageDoneByAttacker, dmgDoneByDefender: damageDoneByDefender };\r\n};\r\n"]}
@@ -4,12 +4,17 @@ exports.fixEnchantments = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const fixEnchantments = (entity, allCards) => {
6
6
  var _a;
7
- const newEnchantments = ((_a = entity.enchantments) !== null && _a !== void 0 ? _a : []).map((enchantment) => isNaN(+enchantment.cardId)
7
+ const newEnchantments = ((_a = entity.enchantments) !== null && _a !== void 0 ? _a : [])
8
+ .map((enchantment) => isNaN(+enchantment.cardId)
8
9
  ? enchantment
9
10
  : {
10
11
  ...enchantment,
11
12
  cardId: getEnchantmentForDbfId(+enchantment.cardId, allCards),
12
- });
13
+ })
14
+ .map((enchantment, index) => ({
15
+ ...enchantment,
16
+ timing: enchantment.timing || entity.entityId + index + 1,
17
+ }));
13
18
  return {
14
19
  ...entity,
15
20
  enchantments: newEnchantments,
@@ -1 +1 @@
1
- {"version":3,"file":"enchantments.js","sourceRoot":"","sources":["../../src/simulation/enchantments.ts"],"names":[],"mappings":";;;AAAA,iEAAyE;AAGlE,MAAM,eAAe,GAAG,CAAC,MAAmB,EAAE,QAAyB,EAAe,EAAE;;IAC9F,MAAM,eAAe,GAAG,CAAC,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACvE,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,WAAW;QACb,CAAC,CAAC;YACA,GAAG,WAAW;YACd,MAAM,EAAE,sBAAsB,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC5D,CACJ,CAAC;IACF,OAAO;QACN,GAAG,MAAM;QACT,YAAY,EAAE,eAAe;QAC7B,kBAAkB,EAAE,EAAE;KACtB,CAAC;AACH,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B;AAEF,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,QAAyB,EAAU,EAAE;;IACnF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,WAAW,CAAC,EAAE;QACnE,OAAO,OAAO,CAAC,EAAE,CAAC;KAClB;IAGD,OAAO,MAAA,MAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,0CAAE,EAAE,mCAAI,MAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,0CAAE,EAAE,CAAC;AACtF,CAAC,CAAC","sourcesContent":["import { AllCardsService, CardType } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../board-entity';\r\n\r\nexport const fixEnchantments = (entity: BoardEntity, allCards: AllCardsService): BoardEntity => {\r\n\tconst newEnchantments = (entity.enchantments ?? []).map((enchantment) =>\r\n\t\tisNaN(+enchantment.cardId)\r\n\t\t\t? enchantment\r\n\t\t\t: {\r\n\t\t\t\t\t...enchantment,\r\n\t\t\t\t\tcardId: getEnchantmentForDbfId(+enchantment.cardId, allCards),\r\n\t\t\t },\r\n\t);\r\n\treturn {\r\n\t\t...entity,\r\n\t\tenchantments: newEnchantments,\r\n\t\tpendingAttackBuffs: [],\r\n\t};\r\n};\r\n\r\nconst getEnchantmentForDbfId = (dbfId: number, allCards: AllCardsService): string => {\r\n\tconst refCard = allCards.getCard(dbfId);\r\n\tif (refCard.type?.toUpperCase() === CardType[CardType.ENCHANTMENT]) {\r\n\t\treturn refCard.id;\r\n\t}\r\n\r\n\t// Otherwise, we need to figure out the root\r\n\treturn allCards.getCard(refCard.enchantmentDbfId)?.id ?? allCards.getCard(dbfId)?.id;\r\n};\r\n"]}
1
+ {"version":3,"file":"enchantments.js","sourceRoot":"","sources":["../../src/simulation/enchantments.ts"],"names":[],"mappings":";;;AAAA,iEAAyE;AAGlE,MAAM,eAAe,GAAG,CAAC,MAAmB,EAAE,QAAyB,EAAe,EAAE;;IAC9F,MAAM,eAAe,GAAG,CAAC,MAAA,MAAM,CAAC,YAAY,mCAAI,EAAE,CAAC;SACjD,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACpB,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,WAAW;QACb,CAAC,CAAC;YACA,GAAG,WAAW;YACd,MAAM,EAAE,sBAAsB,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC5D,CACJ;SACA,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,WAAW;QACd,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC;KACzD,CAAC,CAAC,CAAC;IACL,OAAO;QACN,GAAG,MAAM;QACT,YAAY,EAAE,eAAe;QAC7B,kBAAkB,EAAE,EAAE;KACtB,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEF,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,QAAyB,EAAU,EAAE;;IACnF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,WAAW,EAAE,MAAK,yBAAQ,CAAC,yBAAQ,CAAC,WAAW,CAAC,EAAE;QACnE,OAAO,OAAO,CAAC,EAAE,CAAC;KAClB;IAGD,OAAO,MAAA,MAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,0CAAE,EAAE,mCAAI,MAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,0CAAE,EAAE,CAAC;AACtF,CAAC,CAAC","sourcesContent":["import { AllCardsService, CardType } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../board-entity';\r\n\r\nexport const fixEnchantments = (entity: BoardEntity, allCards: AllCardsService): BoardEntity => {\r\n\tconst newEnchantments = (entity.enchantments ?? [])\r\n\t\t.map((enchantment) =>\r\n\t\t\tisNaN(+enchantment.cardId)\r\n\t\t\t\t? enchantment\r\n\t\t\t\t: {\r\n\t\t\t\t\t\t...enchantment,\r\n\t\t\t\t\t\tcardId: getEnchantmentForDbfId(+enchantment.cardId, allCards),\r\n\t\t\t\t },\r\n\t\t)\r\n\t\t.map((enchantment, index) => ({\r\n\t\t\t...enchantment,\r\n\t\t\ttiming: enchantment.timing || entity.entityId + index + 1,\r\n\t\t}));\r\n\treturn {\r\n\t\t...entity,\r\n\t\tenchantments: newEnchantments,\r\n\t\tpendingAttackBuffs: [],\r\n\t};\r\n};\r\n\r\nconst getEnchantmentForDbfId = (dbfId: number, allCards: AllCardsService): string => {\r\n\tconst refCard = allCards.getCard(dbfId);\r\n\tif (refCard.type?.toUpperCase() === CardType[CardType.ENCHANTMENT]) {\r\n\t\treturn refCard.id;\r\n\t}\r\n\r\n\t// Otherwise, we need to figure out the root\r\n\treturn allCards.getCard(refCard.enchantmentDbfId)?.id ?? allCards.getCard(dbfId)?.id;\r\n};\r\n"]}
@@ -11,6 +11,12 @@ export interface OnBeforeMagnetizeInput {
11
11
  magnetizeTarget: BoardEntity;
12
12
  gameState: FullGameState;
13
13
  }
14
+ export interface OnBeforeMagnetizeSelfInput {
15
+ board: BoardEntity[];
16
+ hero: BgsPlayerEntity;
17
+ magnetizeTarget: BoardEntity;
18
+ gameState: FullGameState;
19
+ }
14
20
  export interface OnAfterMagnetizeInput {
15
21
  board: BoardEntity[];
16
22
  hero: BgsPlayerEntity;
@@ -4,18 +4,29 @@ exports.magnetizeToTarget = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const card_interface_1 = require("../cards/card.interface");
6
6
  const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
+ const utils_1 = require("../utils");
7
8
  const stats_1 = require("./stats");
8
9
  const magnetizeToTarget = (target, source, cardToMagnetize, board, hero, otherBoard, otherHero, gameState) => {
9
10
  var _a, _b, _c, _d, _e, _f, _g;
10
11
  const electromagneticDevices = hero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_709").length;
11
12
  const greaterElecromagneticDevices = hero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_709t").length;
12
13
  const modularCard = typeof cardToMagnetize === 'string' ? { ...gameState.allCards.getCard(cardToMagnetize) } : cardToMagnetize;
14
+ const modularBoardEntity = (0, utils_1.buildSingleBoardEntity)(modularCard.id, hero, board, gameState.allCards, hero.friendly, gameState.sharedState.currentEntityId++, false, gameState.cardsData, gameState.sharedState, null);
13
15
  const magnetMult = board.some((e) => e.cardId === "BG34_177_G")
14
16
  ? 3
15
17
  : board.some((e) => e.cardId === "BG34_177")
16
18
  ? 2
17
19
  : 1;
18
20
  for (let i = 0; i < magnetMult; i++) {
21
+ const onBeforeMagnetizeSelfImpl = _card_mappings_1.cardMappings[modularBoardEntity.cardId];
22
+ if ((0, card_interface_1.hasOnBeforeMagnetizeSelf)(onBeforeMagnetizeSelfImpl)) {
23
+ onBeforeMagnetizeSelfImpl.onBeforeMagnetizeSelf(modularBoardEntity, {
24
+ board: board,
25
+ hero: hero,
26
+ magnetizeTarget: target,
27
+ gameState: gameState,
28
+ });
29
+ }
19
30
  for (const boardEntity of board) {
20
31
  const onBeforeMagnetizeImpl = _card_mappings_1.cardMappings[boardEntity.cardId];
21
32
  if ((0, card_interface_1.hasOnBeforeMagnetize)(onBeforeMagnetizeImpl)) {
@@ -28,7 +39,7 @@ const magnetizeToTarget = (target, source, cardToMagnetize, board, hero, otherBo
28
39
  });
29
40
  }
30
41
  }
31
- (0, stats_1.modifyStats)(target, source, modularCard.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, modularCard.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, board, hero, gameState);
42
+ (0, stats_1.modifyStats)(target, source, modularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, modularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices, board, hero, gameState);
32
43
  target.taunt = target.taunt || ((_a = modularCard.mechanics) === null || _a === void 0 ? void 0 : _a.includes(reference_data_1.GameTag[reference_data_1.GameTag.TAUNT]));
33
44
  target.divineShield = target.divineShield || ((_b = modularCard.mechanics) === null || _b === void 0 ? void 0 : _b.includes(reference_data_1.GameTag[reference_data_1.GameTag.DIVINE_SHIELD]));
34
45
  target.poisonous = target.poisonous || ((_c = modularCard.mechanics) === null || _c === void 0 ? void 0 : _c.includes(reference_data_1.GameTag[reference_data_1.GameTag.POISONOUS]));
@@ -1 +1 @@
1
- {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../src/simulation/magnetize.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnAfterMagnetize, hasOnBeforeMagnetize } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { Mutable } from '../services/utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\ttarget: BoardEntity,\r\n\tsource: BoardEntity,\r\n\tcardToMagnetize: string | ReferenceCard,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst modularCard =\r\n\t\ttypeof cardToMagnetize === 'string' ? { ...gameState.allCards.getCard(cardToMagnetize) } : cardToMagnetize;\r\n\r\n\tconst magnetMult = board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177_G)\r\n\t\t? 3\r\n\t\t: board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177)\r\n\t\t? 2\r\n\t\t: 1;\r\n\tfor (let i = 0; i < magnetMult; i++) {\r\n\t\tfor (const boardEntity of board) {\r\n\t\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmodifyStats(\r\n\t\t\ttarget,\r\n\t\t\tsource,\r\n\t\t\tmodularCard.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\tmodularCard.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\tboard,\r\n\t\t\thero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\ttarget.taunt = target.taunt || modularCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\t\ttarget.divineShield = target.divineShield || modularCard.mechanics?.includes(GameTag[GameTag.DIVINE_SHIELD]);\r\n\t\ttarget.poisonous = target.poisonous || modularCard.mechanics?.includes(GameTag[GameTag.POISONOUS]);\r\n\t\ttarget.venomous = target.venomous || modularCard.mechanics?.includes(GameTag[GameTag.VENOMOUS]);\r\n\t\ttarget.windfury = target.windfury || modularCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\t\ttarget.reborn = target.reborn || modularCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\t\ttarget.stealth = target.stealth || modularCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\r\n\t\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\t\tif (magneticEnchantment) {\r\n\t\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\t\ttarget.enchantments.push({\r\n\t\t\t\tcardId: enchantment,\r\n\t\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t});\r\n\t\t}\r\n\t\tif ([CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(cardToMagnetize as CardIds)) {\r\n\t\t\tconst mult = cardToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t}\r\n\r\n\t\t// Dr Boom's Monster?\r\n\t\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\t\tfor (const entity of board) {\r\n\t\t\tconst drBoomBases =\r\n\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e,\r\n\t\t\t\t).length;\r\n\t\t\tconst drBoomGoldens =\r\n\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge,\r\n\t\t\t\t).length;\r\n\t\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t}\r\n\r\n\t\tconst onAfterMagnetizeImpl = cardMappings[modularCard.id];\r\n\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(target, {\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\totherHero: otherHero,\r\n\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: Mutable<ReferenceCard>;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnAfterMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tmagnetizedCard: ReferenceCard;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
1
+ {"version":3,"file":"magnetize.js","sourceRoot":"","sources":["../../src/simulation/magnetize.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnAfterMagnetize, hasOnBeforeMagnetize, hasOnBeforeMagnetizeSelf } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { Mutable } from '../services/utils';\r\nimport { buildSingleBoardEntity } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const magnetizeToTarget = (\r\n\ttarget: BoardEntity,\r\n\tsource: BoardEntity,\r\n\tcardToMagnetize: string | ReferenceCard,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst electromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_BG30_MagicItem_709,\r\n\t).length;\r\n\tconst greaterElecromagneticDevices = hero.trinkets.filter(\r\n\t\t(t) => t.cardId === CardIds.ElectromagneticDevice_ElectromagneticDeviceToken_BG30_MagicItem_709t,\r\n\t).length;\r\n\r\n\tconst modularCard =\r\n\t\ttypeof cardToMagnetize === 'string' ? { ...gameState.allCards.getCard(cardToMagnetize) } : cardToMagnetize;\r\n\tconst modularBoardEntity = buildSingleBoardEntity(\r\n\t\tmodularCard.id,\r\n\t\thero,\r\n\t\tboard,\r\n\t\tgameState.allCards,\r\n\t\thero.friendly,\r\n\t\tgameState.sharedState.currentEntityId++,\r\n\t\tfalse,\r\n\t\tgameState.cardsData,\r\n\t\tgameState.sharedState,\r\n\t\tnull,\r\n\t);\r\n\r\n\tconst magnetMult = board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177_G)\r\n\t\t? 3\r\n\t\t: board.some((e) => e.cardId === CardIds.DoubleDemolisher_BG34_177)\r\n\t\t? 2\r\n\t\t: 1;\r\n\tfor (let i = 0; i < magnetMult; i++) {\r\n\t\tconst onBeforeMagnetizeSelfImpl = cardMappings[modularBoardEntity.cardId];\r\n\t\tif (hasOnBeforeMagnetizeSelf(onBeforeMagnetizeSelfImpl)) {\r\n\t\t\tonBeforeMagnetizeSelfImpl.onBeforeMagnetizeSelf(modularBoardEntity, {\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfor (const boardEntity of board) {\r\n\t\t\tconst onBeforeMagnetizeImpl = cardMappings[boardEntity.cardId];\r\n\t\t\tif (hasOnBeforeMagnetize(onBeforeMagnetizeImpl)) {\r\n\t\t\t\tonBeforeMagnetizeImpl.onBeforeMagnetize(boardEntity, {\r\n\t\t\t\t\tboard: board,\r\n\t\t\t\t\thero: hero,\r\n\t\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\t\tgameState: gameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmodifyStats(\r\n\t\t\ttarget,\r\n\t\t\tsource,\r\n\t\t\tmodularBoardEntity.attack + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\tmodularBoardEntity.health + 2 * electromagneticDevices + 4 * greaterElecromagneticDevices,\r\n\t\t\tboard,\r\n\t\t\thero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\ttarget.taunt = target.taunt || modularCard.mechanics?.includes(GameTag[GameTag.TAUNT]);\r\n\t\ttarget.divineShield = target.divineShield || modularCard.mechanics?.includes(GameTag[GameTag.DIVINE_SHIELD]);\r\n\t\ttarget.poisonous = target.poisonous || modularCard.mechanics?.includes(GameTag[GameTag.POISONOUS]);\r\n\t\ttarget.venomous = target.venomous || modularCard.mechanics?.includes(GameTag[GameTag.VENOMOUS]);\r\n\t\ttarget.windfury = target.windfury || modularCard.mechanics?.includes(GameTag[GameTag.WINDFURY]);\r\n\t\ttarget.reborn = target.reborn || modularCard.mechanics?.includes(GameTag[GameTag.REBORN]);\r\n\t\ttarget.stealth = target.stealth || modularCard.mechanics?.includes(GameTag[GameTag.STEALTH]);\r\n\r\n\t\tconst magneticEnchantment = modularCard.enchantmentDbfId;\r\n\t\tif (magneticEnchantment) {\r\n\t\t\tconst enchantment = gameState.allCards.getCard(magneticEnchantment).id;\r\n\t\t\ttarget.enchantments.push({\r\n\t\t\t\tcardId: enchantment,\r\n\t\t\t\toriginEntityId: modularCard.dbfId,\r\n\t\t\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\t\t});\r\n\t\t}\r\n\t\tif ([CardIds.DrBoomsMonster_BG31_176, CardIds.DrBoomsMonster_BG31_176_G].includes(cardToMagnetize as CardIds)) {\r\n\t\t\tconst mult = cardToMagnetize === CardIds.DrBoomsMonster_BG31_176 ? 1 : 2;\r\n\t\t\ttarget.attack += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t\ttarget.health += 2 * hero.globalInfo.MagnetizedThisGame * mult;\r\n\t\t}\r\n\r\n\t\t// Dr Boom's Monster?\r\n\t\thero.globalInfo.MagnetizedThisGame = hero.globalInfo.MagnetizedThisGame + 1;\r\n\t\tfor (const entity of board) {\r\n\t\t\tconst drBoomBases =\r\n\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176 ? 1 : 0) +\r\n\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176e,\r\n\t\t\t\t).length;\r\n\t\t\tconst drBoomGoldens =\r\n\t\t\t\t(entity.cardId === CardIds.DrBoomsMonster_BG31_176_G ? 1 : 0) +\r\n\t\t\t\tentity.enchantments.filter(\r\n\t\t\t\t\t(e) => e.cardId === CardIds.DrBoomsMonster_DrBoomsMonsterEnchantment_BG31_176_Ge,\r\n\t\t\t\t).length;\r\n\t\t\tentity.attack += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t\tentity.health += drBoomBases * 2 + drBoomGoldens * 4;\r\n\t\t}\r\n\r\n\t\tconst onAfterMagnetizeImpl = cardMappings[modularCard.id];\r\n\t\tif (hasOnAfterMagnetize(onAfterMagnetizeImpl)) {\r\n\t\t\tonAfterMagnetizeImpl.onAfterMagnetize(target, {\r\n\t\t\t\tboard: board,\r\n\t\t\t\thero: hero,\r\n\t\t\t\totherHero: otherHero,\r\n\t\t\t\totherBoard: otherBoard,\r\n\t\t\t\tmagnetizedCard: modularCard,\r\n\t\t\t\tmagnetizeTarget: target,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface OnBeforeMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizedCard: Mutable<ReferenceCard>;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnBeforeMagnetizeSelfInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\nexport interface OnAfterMagnetizeInput {\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\totherHero: BgsPlayerEntity;\r\n\totherBoard: BoardEntity[];\r\n\tmagnetizedCard: ReferenceCard;\r\n\tmagnetizeTarget: BoardEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
package/dist/utils.d.ts CHANGED
@@ -20,7 +20,7 @@ export declare const getMinionsOfDifferentTypes: (board: BoardEntity[], hero: Bg
20
20
  export declare const hasMechanic: (card: ReferenceCard, mechanic: GameTag) => boolean;
21
21
  export declare const hasEntityMechanic: (entity: BoardEntity | BoardEnchantment, mechanic: GameTag, allCards: AllCardsService) => boolean;
22
22
  export declare const hasCorrectTribe: (entity: BoardEntity, playerEntity: BgsPlayerEntity, targetTribe: Race, anomalies: readonly string[], allCards: AllCardsService) => boolean;
23
- export declare const isVolumizer: (cardId: string, playerEntity: BgsPlayerEntity, anomalies: readonly string[], allCards: AllCardsService) => boolean;
23
+ export declare const isVolumizer: (cardId: string | number, playerEntity: BgsPlayerEntity, anomalies: readonly string[], allCards: AllCardsService) => boolean;
24
24
  export declare const getEffectiveTribesForEntity: (entity: BoardEntity, playerEntity: BgsPlayerEntity, anomalies: readonly string[], allCards: AllCardsService) => readonly Race[];
25
25
  export declare const isCorrectTribe: (cardRaces: readonly string[], targetTribe: Race) => boolean;
26
26
  export declare const getRaceEnum: (race: string) => Race;