@firestone-hs/simulate-bgs-battle 1.1.736 → 1.1.738

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 (60) hide show
  1. package/dist/bgs-player-entity.d.ts +5 -0
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/cards/card.interface.d.ts +4 -0
  4. package/dist/cards/card.interface.js +4 -2
  5. package/dist/cards/card.interface.js.map +1 -1
  6. package/dist/cards/cards-data.d.ts +1 -0
  7. package/dist/cards/cards-data.js +10 -0
  8. package/dist/cards/cards-data.js.map +1 -1
  9. package/dist/cards/impl/_card-mappings.js +4 -0
  10. package/dist/cards/impl/_card-mappings.js.map +1 -1
  11. package/dist/cards/impl/enchantments/demonology.d.ts +2 -0
  12. package/dist/cards/impl/enchantments/demonology.js +14 -0
  13. package/dist/cards/impl/enchantments/demonology.js.map +1 -0
  14. package/dist/cards/impl/enchantments/fresh-perspective.d.ts +2 -0
  15. package/dist/cards/impl/enchantments/fresh-perspective.js +15 -0
  16. package/dist/cards/impl/enchantments/fresh-perspective.js.map +1 -0
  17. package/dist/cards/impl/minion/abyssal-bruiser.js +8 -5
  18. package/dist/cards/impl/minion/abyssal-bruiser.js.map +1 -1
  19. package/dist/cards/impl/minion/beetle.js +2 -1
  20. package/dist/cards/impl/minion/beetle.js.map +1 -1
  21. package/dist/cards/impl/minion/bellowing-tyrant.js +2 -1
  22. package/dist/cards/impl/minion/bellowing-tyrant.js.map +1 -1
  23. package/dist/cards/impl/minion/falling-sky-golem.js +2 -1
  24. package/dist/cards/impl/minion/falling-sky-golem.js.map +1 -1
  25. package/dist/cards/impl/minion/flourishing-frostling.js +4 -5
  26. package/dist/cards/impl/minion/flourishing-frostling.js.map +1 -1
  27. package/dist/cards/impl/minion/malorne.js +2 -1
  28. package/dist/cards/impl/minion/malorne.js.map +1 -1
  29. package/dist/cards/impl/minion/maritime-extortionist.js +2 -1
  30. package/dist/cards/impl/minion/maritime-extortionist.js.map +1 -1
  31. package/dist/cards/impl/minion/raptor-elder.js +2 -1
  32. package/dist/cards/impl/minion/raptor-elder.js.map +1 -1
  33. package/dist/cards/impl/minion/showy-cyclist.d.ts +2 -2
  34. package/dist/cards/impl/minion/showy-cyclist.js +1 -0
  35. package/dist/cards/impl/minion/showy-cyclist.js.map +1 -1
  36. package/dist/cards/impl/minion/spellbound-soul.js +2 -1
  37. package/dist/cards/impl/minion/spellbound-soul.js.map +1 -1
  38. package/dist/cards/impl/minion/timewarped-recycler.js +4 -0
  39. package/dist/cards/impl/minion/timewarped-recycler.js.map +1 -1
  40. package/dist/cards/impl/minion/timewarped-traveler.js +7 -1
  41. package/dist/cards/impl/minion/timewarped-traveler.js.map +1 -1
  42. package/dist/mechanics/rally.js +6 -3
  43. package/dist/mechanics/rally.js.map +1 -1
  44. package/dist/simulate-bgs-battle.d.ts +7 -0
  45. package/dist/simulate-bgs-battle.js +11 -1
  46. package/dist/simulate-bgs-battle.js.map +1 -1
  47. package/dist/simulation/death-effects.js +13 -0
  48. package/dist/simulation/death-effects.js.map +1 -1
  49. package/dist/simulation/reborn.js +9 -0
  50. package/dist/simulation/reborn.js.map +1 -1
  51. package/dist/simulation/simulator.js +73 -16
  52. package/dist/simulation/simulator.js.map +1 -1
  53. package/dist/simulation/utils/entity-utils.d.ts +1 -0
  54. package/dist/simulation/utils/entity-utils.js +5 -1
  55. package/dist/simulation/utils/entity-utils.js.map +1 -1
  56. package/dist/single-simulation-result.d.ts +36 -0
  57. package/dist/single-simulation-result.js.map +1 -1
  58. package/dist/utils.js +5 -0
  59. package/dist/utils.js.map +1 -1
  60. package/package.json +2 -2
@@ -20,7 +20,8 @@ exports.BellowingTyrant = {
20
20
  minion.attack = Math.max(0, minion.attack - bellowingTyrantAttack * mult * input.hero.globalInfo.BeastsSummonedThisGame);
21
21
  }
22
22
  if (input.applyHealthAuras) {
23
- minion.health = Math.max(1, minion.health - bellowingTyrantHealth * mult * input.hero.globalInfo.BeastsSummonedThisGame);
23
+ const minHealth = Math.min(minion.health, 1);
24
+ minion.health = Math.max(minHealth, minion.health - bellowingTyrantHealth * mult * input.hero.globalInfo.BeastsSummonedThisGame);
24
25
  }
25
26
  },
26
27
  onOtherSpawned: (minion, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"bellowing-tyrant.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/bellowing-tyrant.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGjD,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEnB,QAAA,eAAe,GAAyD;IACpF,OAAO,EAAE,0BAAsE;IAC/E,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;QACvE,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAC/D,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAC/D,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,MAAM,CAAC,MAAM,GAAG,qBAAqB,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAC3F,CAAC;SACF;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,MAAM,CAAC,MAAM,GAAG,qBAAqB,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAC3F,CAAC;SACF;IACF,CAAC;IACD,cAAc,EAAE,CAAC,MAAmB,EAAE,KAAwB,EAAE,EAAE;QACjE,IACC,CAAC,IAAA,uBAAe,EAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC3G;YACD,OAAO;SACP;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC;QAC5B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,qBAAqB,GAAG,UAAU,EAClC,qBAAqB,GAAG,UAAU,EAClC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnOtherSpawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnDespawnedCard, OnOtherSpawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nconst bellowingTyrantAttack = 4;\r\nconst bellowingTyrantHealth = 3;\r\n\r\nexport const BellowingTyrant: OnSpawnedCard & OnOtherSpawnedCard & OnDespawnedCard = {\r\n\tcardIds: [CardIds.BellowingTyrant_BG31_361, CardIds.BellowingTyrant_BG31_361_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tinput.hero.globalInfo.BeastsSummonedThisGame += 1;\r\n\t\tconst mult = minion.cardId === CardIds.BellowingTyrant_BG31_361_G ? 2 : 1;\r\n\t\tconst statsBonus = mult * input.hero.globalInfo.BeastsSummonedThisGame;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tinput.applyAttackAuras ? bellowingTyrantAttack * statsBonus : 0,\r\n\t\t\tinput.applyHealthAuras ? bellowingTyrantHealth * statsBonus : 0,\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\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.BellowingTyrant_BG31_361_G ? 2 : 1;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tminion.attack - bellowingTyrantAttack * mult * input.hero.globalInfo.BeastsSummonedThisGame,\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(\r\n\t\t\t\t1,\r\n\t\t\t\tminion.health - bellowingTyrantHealth * mult * input.hero.globalInfo.BeastsSummonedThisGame,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(input.spawned, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tinput.hero.globalInfo.BeastsSummonedThisGame += 1;\r\n\t\tconst mult = minion.cardId === CardIds.BellowingTyrant_BG31_361_G ? 2 : 1;\r\n\t\tconst statsBonus = mult * 1;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tbellowingTyrantAttack * statsBonus,\r\n\t\t\tbellowingTyrantHealth * statsBonus,\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
+ {"version":3,"file":"bellowing-tyrant.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/bellowing-tyrant.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGjD,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEnB,QAAA,eAAe,GAAyD;IACpF,OAAO,EAAE,0BAAsE;IAC/E,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;QACvE,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAC/D,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAC/D,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,MAAM,CAAC,MAAM,GAAG,qBAAqB,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAC3F,CAAC;SACF;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,SAAS,EACT,MAAM,CAAC,MAAM,GAAG,qBAAqB,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAC3F,CAAC;SACF;IACF,CAAC;IACD,cAAc,EAAE,CAAC,MAAmB,EAAE,KAAwB,EAAE,EAAE;QACjE,IACC,CAAC,IAAA,uBAAe,EAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC3G;YACD,OAAO;SACP;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC;QAC5B,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,qBAAqB,GAAG,UAAU,EAClC,qBAAqB,GAAG,UAAU,EAClC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnOtherSpawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnDespawnedCard, OnOtherSpawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nconst bellowingTyrantAttack = 4;\r\nconst bellowingTyrantHealth = 3;\r\n\r\nexport const BellowingTyrant: OnSpawnedCard & OnOtherSpawnedCard & OnDespawnedCard = {\r\n\tcardIds: [CardIds.BellowingTyrant_BG31_361, CardIds.BellowingTyrant_BG31_361_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tinput.hero.globalInfo.BeastsSummonedThisGame += 1;\r\n\t\tconst mult = minion.cardId === CardIds.BellowingTyrant_BG31_361_G ? 2 : 1;\r\n\t\tconst statsBonus = mult * input.hero.globalInfo.BeastsSummonedThisGame;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tinput.applyAttackAuras ? bellowingTyrantAttack * statsBonus : 0,\r\n\t\t\tinput.applyHealthAuras ? bellowingTyrantHealth * statsBonus : 0,\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\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.BellowingTyrant_BG31_361_G ? 2 : 1;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tminion.attack - bellowingTyrantAttack * mult * input.hero.globalInfo.BeastsSummonedThisGame,\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tconst minHealth = Math.min(minion.health, 1);\r\n\t\t\tminion.health = Math.max(\r\n\t\t\t\tminHealth,\r\n\t\t\t\tminion.health - bellowingTyrantHealth * mult * input.hero.globalInfo.BeastsSummonedThisGame,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(input.spawned, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tinput.hero.globalInfo.BeastsSummonedThisGame += 1;\r\n\t\tconst mult = minion.cardId === CardIds.BellowingTyrant_BG31_361_G ? 2 : 1;\r\n\t\tconst statsBonus = mult * 1;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tminion,\r\n\t\t\tbellowingTyrantAttack * statsBonus,\r\n\t\t\tbellowingTyrantHealth * statsBonus,\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"]}
@@ -33,7 +33,8 @@ exports.FallingSkyGolem = {
33
33
  minion.attack = Math.max(0, minion.attack - atk);
34
34
  }
35
35
  if (input.applyHealthAuras) {
36
- minion.health = Math.max(1, minion.health - hp);
36
+ const minHealth = Math.min(minion.health, 1);
37
+ minion.health = Math.max(minHealth, minion.health - hp);
37
38
  }
38
39
  },
39
40
  onGlobalInfoUpdated: (minion, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"falling-sky-golem.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/falling-sky-golem.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { OnGlobalInfoUpdatedInput } from '../../../mechanics/player-global-effects';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnGlobalInfoUpdatedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const FallingSkyGolem: OnDespawnedCard & OnSpawnedCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.FallingSkyGolem_BG35_342, CardIds.FallingSkyGolem_BG35_342_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FallingSkyGolem_BG35_342_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.DeathrattlesTriggeredThisGame ?? 0;\r\n\t\tconst atk = 4 * mult * n;\r\n\t\tconst hp = 2 * mult * n;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += atk;\r\n\t\t\tminion.maxAttack = minion.attack;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += hp;\r\n\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t}\r\n\t\tconst otherHero =\r\n\t\t\tinput.gameState.gameState.player.player === input.hero\r\n\t\t\t\t? input.gameState.gameState.opponent.player\r\n\t\t\t\t: input.gameState.gameState.player.player;\r\n\t\tupdateDivineShield(minion, input.board, input.hero, otherHero, true, input.gameState);\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FallingSkyGolem_BG35_342_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.DeathrattlesTriggeredThisGame ?? 0;\r\n\t\tconst atk = 4 * mult * n;\r\n\t\tconst hp = 2 * mult * n;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - atk);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(1, minion.health - hp);\r\n\t\t}\r\n\t},\r\n\tonGlobalInfoUpdated: (minion: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'DeathrattlesTriggeredThisGame') {\r\n\t\t\t\tconst mult = minion.cardId === CardIds.FallingSkyGolem_BG35_342_G ? 2 : 1;\r\n\t\t\t\tconst atk = 4 * mult;\r\n\t\t\t\tconst hp = 2 * mult;\r\n\t\t\t\tminion.attack += atk;\r\n\t\t\t\tminion.maxAttack = minion.attack;\r\n\t\t\t\tminion.health += hp;\r\n\t\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"falling-sky-golem.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/falling-sky-golem.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { OnGlobalInfoUpdatedInput } from '../../../mechanics/player-global-effects';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnGlobalInfoUpdatedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const FallingSkyGolem: OnDespawnedCard & OnSpawnedCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.FallingSkyGolem_BG35_342, CardIds.FallingSkyGolem_BG35_342_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FallingSkyGolem_BG35_342_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.DeathrattlesTriggeredThisGame ?? 0;\r\n\t\tconst atk = 4 * mult * n;\r\n\t\tconst hp = 2 * mult * n;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += atk;\r\n\t\t\tminion.maxAttack = minion.attack;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += hp;\r\n\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t}\r\n\t\tconst otherHero =\r\n\t\t\tinput.gameState.gameState.player.player === input.hero\r\n\t\t\t\t? input.gameState.gameState.opponent.player\r\n\t\t\t\t: input.gameState.gameState.player.player;\r\n\t\tupdateDivineShield(minion, input.board, input.hero, otherHero, true, input.gameState);\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FallingSkyGolem_BG35_342_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.DeathrattlesTriggeredThisGame ?? 0;\r\n\t\tconst atk = 4 * mult * n;\r\n\t\tconst hp = 2 * mult * n;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - atk);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tconst minHealth = Math.min(minion.health, 1);\r\n\t\t\tminion.health = Math.max(minHealth, minion.health - hp);\r\n\t\t}\r\n\t},\r\n\tonGlobalInfoUpdated: (minion: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'DeathrattlesTriggeredThisGame') {\r\n\t\t\t\tconst mult = minion.cardId === CardIds.FallingSkyGolem_BG35_342_G ? 2 : 1;\r\n\t\t\t\tconst atk = 4 * mult;\r\n\t\t\t\tconst hp = 2 * mult;\r\n\t\t\t\tminion.attack += atk;\r\n\t\t\t\tminion.maxAttack = minion.attack;\r\n\t\t\t\tminion.health += hp;\r\n\t\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -10,11 +10,9 @@ exports.FlourishingFrostling = {
10
10
  const multiplierFrostling = minion.cardId === "BG26_537_G" ? 2 : 1;
11
11
  const frostlingBonus = input.hero.globalInfo.FrostlingBonus;
12
12
  (0, stats_1.modifyStats)(minion, null, input.applyAttackAuras
13
- ? (attackBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalAttackBuff) *
14
- frostlingBonus
13
+ ? (attackBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalAttackBuff) * frostlingBonus
15
14
  : 0, input.applyHealthAuras
16
- ? (healthBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalHealthBuff) *
17
- frostlingBonus
15
+ ? (healthBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalHealthBuff) * frostlingBonus
18
16
  : 0, input.board, input.hero, input.gameState, false);
19
17
  },
20
18
  onDespawned: (minion, input) => {
@@ -26,7 +24,8 @@ exports.FlourishingFrostling = {
26
24
  frostlingBonus);
27
25
  }
28
26
  if (input.applyHealthAuras) {
29
- minion.health = Math.max(1, minion.health -
27
+ const minHealth = Math.min(minion.health, 1);
28
+ minion.health = Math.max(minHealth, minion.health -
30
29
  (healthBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalHealthBuff) *
31
30
  frostlingBonus);
32
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flourishing-frostling.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/flourishing-frostling.ts"],"names":[],"mappings":";;;AAcA,qDAAwD;AAGxD,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,eAAe,GAAG,CAAC,CAAC;AAEb,QAAA,oBAAoB,GAA8D;IAC9F,OAAO,EAAE,0BAAgF;IACzF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC5D,IAAA,mBAAW,EACV,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,gBAAgB;YACrB,CAAC,CAAC,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBACnF,cAAc;YAChB,CAAC,CAAC,CAAC,EACJ,KAAK,CAAC,gBAAgB;YACrB,CAAC,CAAC,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBACnF,cAAc;YAChB,CAAC,CAAC,CAAC,EACJ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,EACf,KAAK,CACL,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC5D,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,MAAM,CAAC,MAAM;gBACZ,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;oBAClF,cAAc,CAChB,CAAC;SAMF;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,MAAM,CAAC,MAAM;gBACZ,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;oBAClF,cAAc,CAChB,CAAC;SAKF;IACF,CAAC;IACD,mBAAmB,EAAE,CAAC,MAAmB,EAAE,KAA+B,EAAE,EAAE;QAE7E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC9C,MAAM,CAAC,MAAM,IAAI,KAAK,GAAG,cAAc,CAAC;gBACxC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;aACjC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC9C,MAAM,CAAC,MAAM,IAAI,KAAK,GAAG,cAAc,CAAC;gBACxC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;aAC7D;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Flourishing Frostling (Tier 5, 2/1)\r\n * Has +2/+1 for each Elemental you played this game (wherever this is).\r\n *\r\n * Golden Flourishing Frostling (Tier 5, 4/2)\r\n * Has +4/+2 for each Elemental you played this game (wherever this is).\r\n *\r\n * Elemental \"give an extra\" buffs add to the base, then multiply by FrostlingBonus.\r\n * Golden doubles only the base +2/+1, not ElementalAttackBuff / ElementalHealthBuff.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { OnGlobalInfoUpdatedInput } from '../../../mechanics/player-global-effects';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnDespawnedCard, OnGlobalInfoUpdatedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nconst attackBaseValue = 2;\r\nconst healthBaseValue = 1;\r\n\r\nexport const FlourishingFrostling: OnSpawnedCard & OnDespawnedCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.FlourishingFrostling_BG26_537, CardIds.FlourishingFrostling_BG26_537_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst multiplierFrostling = minion.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\r\n\t\tconst frostlingBonus = input.hero.globalInfo.FrostlingBonus;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tnull,\r\n\t\t\tinput.applyAttackAuras\r\n\t\t\t\t? (attackBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalAttackBuff) *\r\n\t\t\t\t\t\tfrostlingBonus\r\n\t\t\t\t: 0,\r\n\t\t\tinput.applyHealthAuras\r\n\t\t\t\t? (healthBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalHealthBuff) *\r\n\t\t\t\t\t\tfrostlingBonus\r\n\t\t\t\t: 0,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.gameState,\r\n\t\t\tfalse,\r\n\t\t);\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst multiplierFrostling = minion.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\r\n\t\tconst frostlingBonus = input.hero.globalInfo.FrostlingBonus;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tminion.attack -\r\n\t\t\t\t\t(attackBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalAttackBuff) *\r\n\t\t\t\t\t\tfrostlingBonus,\r\n\t\t\t);\r\n\t\t\t// We need to keep track of the max attack even after death, in case stats need to be given\r\n\t\t\t// minion.maxAttack = Math.max(\r\n\t\t\t// \t0,\r\n\t\t\t// \tminion.maxAttack - (attackBaseValue + input.hero.globalInfo.ElementalAttackBuff) * statsBonusFrostling,\r\n\t\t\t// );\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(\r\n\t\t\t\t1,\r\n\t\t\t\tminion.health -\r\n\t\t\t\t\t(healthBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalHealthBuff) *\r\n\t\t\t\t\t\tfrostlingBonus,\r\n\t\t\t);\r\n\t\t\t// minion.maxHealth = Math.max(\r\n\t\t\t// \t1,\r\n\t\t\t// \tminion.maxHealth - (healthBaseValue + input.hero.globalInfo.ElementalHealthBuff) * statsBonusFrostling,\r\n\t\t\t// );\r\n\t\t}\r\n\t},\r\n\tonGlobalInfoUpdated: (minion: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\t// Elemental buffs are not doubled by golden — only the card's base +2/+1 is.\r\n\t\tconst frostlingBonus = input.hero.globalInfo.FrostlingBonus;\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'ElementalAttackBuff') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tminion.attack += delta * frostlingBonus;\r\n\t\t\t\tminion.maxAttack = minion.attack;\r\n\t\t\t}\r\n\t\t\tif (value.type === 'ElementalHealthBuff') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tminion.health += delta * frostlingBonus;\r\n\t\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"flourishing-frostling.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/flourishing-frostling.ts"],"names":[],"mappings":";;;AAcA,qDAAwD;AAGxD,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,eAAe,GAAG,CAAC,CAAC;AAEb,QAAA,oBAAoB,GAA8D;IAC9F,OAAO,EAAE,0BAAgF;IACzF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC5D,IAAA,mBAAW,EACV,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,gBAAgB;YACrB,CAAC,CAAC,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,cAAc;YACtG,CAAC,CAAC,CAAC,EACJ,KAAK,CAAC,gBAAgB;YACrB,CAAC,CAAC,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,cAAc;YACtG,CAAC,CAAC,CAAC,EACJ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,EACf,KAAK,CACL,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC5D,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,MAAM,CAAC,MAAM;gBACZ,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;oBAClF,cAAc,CAChB,CAAC;SAMF;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACvB,SAAS,EACT,MAAM,CAAC,MAAM;gBACZ,CAAC,eAAe,GAAG,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;oBAClF,cAAc,CAChB,CAAC;SAKF;IACF,CAAC;IACD,mBAAmB,EAAE,CAAC,MAAmB,EAAE,KAA+B,EAAE,EAAE;QAE7E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC9C,MAAM,CAAC,MAAM,IAAI,KAAK,GAAG,cAAc,CAAC;gBACxC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;aACjC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC9C,MAAM,CAAC,MAAM,IAAI,KAAK,GAAG,cAAc,CAAC;gBACxC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;aAC7D;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Flourishing Frostling (Tier 5, 2/1)\r\n * Has +2/+1 for each Elemental you played this game (wherever this is).\r\n *\r\n * Golden Flourishing Frostling (Tier 5, 4/2)\r\n * Has +4/+2 for each Elemental you played this game (wherever this is).\r\n *\r\n * Elemental \"give an extra\" buffs add to the base, then multiply by FrostlingBonus.\r\n * Golden doubles only the base +2/+1, not ElementalAttackBuff / ElementalHealthBuff.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { OnGlobalInfoUpdatedInput } from '../../../mechanics/player-global-effects';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnDespawnedCard, OnGlobalInfoUpdatedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nconst attackBaseValue = 2;\r\nconst healthBaseValue = 1;\r\n\r\nexport const FlourishingFrostling: OnSpawnedCard & OnDespawnedCard & OnGlobalInfoUpdatedCard = {\r\n\tcardIds: [CardIds.FlourishingFrostling_BG26_537, CardIds.FlourishingFrostling_BG26_537_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst multiplierFrostling = minion.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\r\n\t\tconst frostlingBonus = input.hero.globalInfo.FrostlingBonus;\r\n\t\tmodifyStats(\r\n\t\t\tminion,\r\n\t\t\tnull,\r\n\t\t\tinput.applyAttackAuras\r\n\t\t\t\t? (attackBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalAttackBuff) * frostlingBonus\r\n\t\t\t\t: 0,\r\n\t\t\tinput.applyHealthAuras\r\n\t\t\t\t? (healthBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalHealthBuff) * frostlingBonus\r\n\t\t\t\t: 0,\r\n\t\t\tinput.board,\r\n\t\t\tinput.hero,\r\n\t\t\tinput.gameState,\r\n\t\t\tfalse,\r\n\t\t);\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst multiplierFrostling = minion.cardId === CardIds.FlourishingFrostling_BG26_537_G ? 2 : 1;\r\n\t\tconst frostlingBonus = input.hero.globalInfo.FrostlingBonus;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tminion.attack -\r\n\t\t\t\t\t(attackBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalAttackBuff) *\r\n\t\t\t\t\t\tfrostlingBonus,\r\n\t\t\t);\r\n\t\t\t// We need to keep track of the max attack even after death, in case stats need to be given\r\n\t\t\t// minion.maxAttack = Math.max(\r\n\t\t\t// \t0,\r\n\t\t\t// \tminion.maxAttack - (attackBaseValue + input.hero.globalInfo.ElementalAttackBuff) * statsBonusFrostling,\r\n\t\t\t// );\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tconst minHealth = Math.min(minion.health, 1);\r\n\t\t\tminion.health = Math.max(\r\n\t\t\t\tminHealth,\r\n\t\t\t\tminion.health -\r\n\t\t\t\t\t(healthBaseValue * multiplierFrostling + input.hero.globalInfo.ElementalHealthBuff) *\r\n\t\t\t\t\t\tfrostlingBonus,\r\n\t\t\t);\r\n\t\t\t// minion.maxHealth = Math.max(\r\n\t\t\t// \t1,\r\n\t\t\t// \tminion.maxHealth - (healthBaseValue + input.hero.globalInfo.ElementalHealthBuff) * statsBonusFrostling,\r\n\t\t\t// );\r\n\t\t}\r\n\t},\r\n\tonGlobalInfoUpdated: (minion: BoardEntity, input: OnGlobalInfoUpdatedInput) => {\r\n\t\t// Elemental buffs are not doubled by golden — only the card's base +2/+1 is.\r\n\t\tconst frostlingBonus = input.hero.globalInfo.FrostlingBonus;\r\n\t\tfor (const value of input.values) {\r\n\t\t\tif (value.type === 'ElementalAttackBuff') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tminion.attack += delta * frostlingBonus;\r\n\t\t\t\tminion.maxAttack = minion.attack;\r\n\t\t\t}\r\n\t\t\tif (value.type === 'ElementalHealthBuff') {\r\n\t\t\t\tconst delta = value.newValue - value.oldValue;\r\n\t\t\t\tminion.health += delta * frostlingBonus;\r\n\t\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -22,7 +22,8 @@ exports.Malorne = {
22
22
  minion.attack = Math.max(0, minion.attack - baseBuff * mult);
23
23
  }
24
24
  if (input.applyHealthAuras) {
25
- minion.health = Math.max(1, minion.health - baseBuff * mult);
25
+ const minHealth = Math.min(minion.health, 1);
26
+ minion.health = Math.max(minHealth, minion.health - baseBuff * mult);
26
27
  }
27
28
  },
28
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"malorne.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/malorne.ts"],"names":[],"mappings":";;;AAKa,QAAA,OAAO,GAAoC;IACvD,OAAO,EAAE,gDAA4E;IACrF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;SACjC;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;SACjC;IACF,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;SAC7D;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;SAC7D;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const Malorne: OnDespawnedCard & OnSpawnedCard = {\r\n\tcardIds: [CardIds.Malorne_BG32_HERO_001_Buddy, CardIds.Malorne_BG32_HERO_001_Buddy_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Malorne_BG32_HERO_001_Buddy_G ? 2 : 1;\r\n\t\tconst totalGoldSpent = input.hero.globalInfo.GoldSpentThisGame;\r\n\t\tconst baseBuff = Math.floor(totalGoldSpent / 3);\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += baseBuff * mult;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += baseBuff * mult;\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Malorne_BG32_HERO_001_Buddy_G ? 2 : 1;\r\n\t\tconst totalGoldSpent = input.hero.globalInfo.GoldSpentThisGame;\r\n\t\tconst baseBuff = Math.floor(totalGoldSpent / 3);\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - baseBuff * mult);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(1, minion.health - baseBuff * mult);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"malorne.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/malorne.ts"],"names":[],"mappings":";;;AAKa,QAAA,OAAO,GAAoC;IACvD,OAAO,EAAE,gDAA4E;IACrF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;SACjC;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;SACjC;IACF,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,4BAA0C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;SAC7D;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;SACrE;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const Malorne: OnDespawnedCard & OnSpawnedCard = {\r\n\tcardIds: [CardIds.Malorne_BG32_HERO_001_Buddy, CardIds.Malorne_BG32_HERO_001_Buddy_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Malorne_BG32_HERO_001_Buddy_G ? 2 : 1;\r\n\t\tconst totalGoldSpent = input.hero.globalInfo.GoldSpentThisGame;\r\n\t\tconst baseBuff = Math.floor(totalGoldSpent / 3);\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += baseBuff * mult;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += baseBuff * mult;\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.Malorne_BG32_HERO_001_Buddy_G ? 2 : 1;\r\n\t\tconst totalGoldSpent = input.hero.globalInfo.GoldSpentThisGame;\r\n\t\tconst baseBuff = Math.floor(totalGoldSpent / 3);\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - baseBuff * mult);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tconst minHealth = Math.min(minion.health, 1);\r\n\t\t\tminion.health = Math.max(minHealth, minion.health - baseBuff * mult);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -25,7 +25,8 @@ exports.MaritimeExtortionist = {
25
25
  minion.maxAttack = Math.max(minion.maxAttack, minion.attack);
26
26
  }
27
27
  if (input.applyHealthAuras) {
28
- minion.health = Math.max(1, minion.health - n * mult * 8);
28
+ const minHealth = Math.min(minion.health, 1);
29
+ minion.health = Math.max(minHealth, minion.health - n * mult * 8);
29
30
  minion.maxHealth = Math.max(minion.maxHealth, minion.health);
30
31
  }
31
32
  },
@@ -1 +1 @@
1
- {"version":3,"file":"maritime-extortionist.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/maritime-extortionist.ts"],"names":[],"mappings":";;;AAKa,QAAA,oBAAoB,GAAoC;IACpE,OAAO,EAAE,0BAAgF;IACzF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,mCAAI,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;SACjC;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7D;IACF,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,mCAAI,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7D;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7D;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const MaritimeExtortionist: OnDespawnedCard & OnSpawnedCard = {\r\n\tcardIds: [CardIds.MaritimeExtortionist_BG36_524, CardIds.MaritimeExtortionist_BG36_524_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MaritimeExtortionist_BG36_524_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.GoldenMinionsPlayedThisGame ?? 0;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += n * mult * 8;\r\n\t\t\tminion.maxAttack = minion.attack;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += n * mult * 8;\r\n\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MaritimeExtortionist_BG36_524_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.GoldenMinionsPlayedThisGame ?? 0;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - n * mult * 8);\r\n\t\t\tminion.maxAttack = Math.max(minion.maxAttack, minion.attack);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(1, minion.health - n * mult * 8);\r\n\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"maritime-extortionist.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/maritime-extortionist.ts"],"names":[],"mappings":";;;AAKa,QAAA,oBAAoB,GAAoC;IACpE,OAAO,EAAE,0BAAgF;IACzF,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,mCAAI,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;SACjC;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7D;IACF,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,mCAAI,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7D;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SAC7D;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const MaritimeExtortionist: OnDespawnedCard & OnSpawnedCard = {\r\n\tcardIds: [CardIds.MaritimeExtortionist_BG36_524, CardIds.MaritimeExtortionist_BG36_524_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MaritimeExtortionist_BG36_524_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.GoldenMinionsPlayedThisGame ?? 0;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += n * mult * 8;\r\n\t\t\tminion.maxAttack = minion.attack;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += n * mult * 8;\r\n\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MaritimeExtortionist_BG36_524_G ? 2 : 1;\r\n\t\tconst n = input.hero.globalInfo.GoldenMinionsPlayedThisGame ?? 0;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - n * mult * 8);\r\n\t\t\tminion.maxAttack = Math.max(minion.maxAttack, minion.attack);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tconst minHealth = Math.min(minion.health, 1);\r\n\t\t\tminion.health = Math.max(minHealth, minion.health - n * mult * 8);\r\n\t\t\tminion.maxHealth = Math.max(minion.maxHealth, minion.health);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -32,7 +32,8 @@ exports.RaptorElder = {
32
32
  target.attack = Math.max(0, target.attack - attackBuff * baseBuff);
33
33
  }
34
34
  if (input.applyHealthAuras) {
35
- target.health = Math.max(1, target.health - healthBuff * baseBuff);
35
+ const minHealth = Math.min(target.health, 1);
36
+ target.health = Math.max(minHealth, target.health - healthBuff * baseBuff);
36
37
  }
37
38
  }
38
39
  },
@@ -1 +1 @@
1
- {"version":3,"file":"raptor-elder.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/raptor-elder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnOtherSpawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnDespawnedCard, OnOtherSpawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nconst attackBuff = 3;\r\nconst healthBuff = 2;\r\n\r\nexport const RaptorElder: OnSpawnedCard & OnOtherSpawnedCard & OnDespawnedCard = {\r\n\tcardIds: [CardIds.RaptorElder_BG33_842, CardIds.RaptorElder_BG33_842_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RaptorElder_BG33_842_G ? 2 : 1;\r\n\t\tconst baseBuff = input.hero.globalInfo.BeastsSummonedThisCombat * mult;\r\n\t\tconst targets = input.board\r\n\t\t\t// .filter((e) => e !== minion)\r\n\t\t\t.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tif (input.applyAttackAuras) {\r\n\t\t\t\ttarget.attack += attackBuff * baseBuff;\r\n\t\t\t}\r\n\t\t\tif (input.applyHealthAuras) {\r\n\t\t\t\ttarget.health += healthBuff * baseBuff;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RaptorElder_BG33_842_G ? 2 : 1;\r\n\t\tconst baseBuff = input.hero.globalInfo.BeastsSummonedThisCombat * mult;\r\n\t\tconst targets = input.board\r\n\t\t\t.filter((e) => e !== minion)\r\n\t\t\t.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tif (input.applyAttackAuras) {\r\n\t\t\t\ttarget.attack = Math.max(0, target.attack - attackBuff * baseBuff);\r\n\t\t\t}\r\n\t\t\tif (input.applyHealthAuras) {\r\n\t\t\t\ttarget.health = Math.max(1, target.health - healthBuff * baseBuff);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RaptorElder_BG33_842_G ? 2 : 1;\r\n\t\tconst baseBuff = input.hero.globalInfo.BeastsSummonedThisCombat * mult;\r\n\t\t// First put the minion itself in the aura\r\n\t\tif (\r\n\t\t\tinput.applySelfAuras &&\r\n\t\t\thasCorrectTribe(input.spawned, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\tinput.spawned.attack += attackBuff * baseBuff;\r\n\t\t\tinput.spawned.health += healthBuff * baseBuff;\r\n\t\t}\r\n\r\n\t\t// Then update the aura\r\n\t\tif (\r\n\t\t\thasCorrectTribe(input.spawned, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\tconst allTargets = input.board.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t\t);\r\n\t\t\tfor (const target of allTargets) {\r\n\t\t\t\t// Only the new spawn should increase the data, as we've already applied the aura before\r\n\t\t\t\ttarget.attack += attackBuff * mult;\r\n\t\t\t\ttarget.health += healthBuff * mult;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"raptor-elder.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/raptor-elder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnOtherSpawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnDespawnedCard, OnOtherSpawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nconst attackBuff = 3;\r\nconst healthBuff = 2;\r\n\r\nexport const RaptorElder: OnSpawnedCard & OnOtherSpawnedCard & OnDespawnedCard = {\r\n\tcardIds: [CardIds.RaptorElder_BG33_842, CardIds.RaptorElder_BG33_842_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RaptorElder_BG33_842_G ? 2 : 1;\r\n\t\tconst baseBuff = input.hero.globalInfo.BeastsSummonedThisCombat * mult;\r\n\t\tconst targets = input.board\r\n\t\t\t// .filter((e) => e !== minion)\r\n\t\t\t.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tif (input.applyAttackAuras) {\r\n\t\t\t\ttarget.attack += attackBuff * baseBuff;\r\n\t\t\t}\r\n\t\t\tif (input.applyHealthAuras) {\r\n\t\t\t\ttarget.health += healthBuff * baseBuff;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RaptorElder_BG33_842_G ? 2 : 1;\r\n\t\tconst baseBuff = input.hero.globalInfo.BeastsSummonedThisCombat * mult;\r\n\t\tconst targets = input.board\r\n\t\t\t.filter((e) => e !== minion)\r\n\t\t\t.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t\t);\r\n\t\tfor (const target of targets) {\r\n\t\t\tif (input.applyAttackAuras) {\r\n\t\t\t\ttarget.attack = Math.max(0, target.attack - attackBuff * baseBuff);\r\n\t\t\t}\r\n\t\t\tif (input.applyHealthAuras) {\r\n\t\t\t\tconst minHealth = Math.min(target.health, 1);\r\n\t\t\t\ttarget.health = Math.max(minHealth, target.health - healthBuff * baseBuff);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tonOtherSpawned: (minion: BoardEntity, input: OnOtherSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.RaptorElder_BG33_842_G ? 2 : 1;\r\n\t\tconst baseBuff = input.hero.globalInfo.BeastsSummonedThisCombat * mult;\r\n\t\t// First put the minion itself in the aura\r\n\t\tif (\r\n\t\t\tinput.applySelfAuras &&\r\n\t\t\thasCorrectTribe(input.spawned, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\tinput.spawned.attack += attackBuff * baseBuff;\r\n\t\t\tinput.spawned.health += healthBuff * baseBuff;\r\n\t\t}\r\n\r\n\t\t// Then update the aura\r\n\t\tif (\r\n\t\t\thasCorrectTribe(input.spawned, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards)\r\n\t\t) {\r\n\t\t\tconst allTargets = input.board.filter((e) =>\r\n\t\t\t\thasCorrectTribe(e, input.hero, Race.BEAST, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t\t);\r\n\t\t\tfor (const target of allTargets) {\r\n\t\t\t\t// Only the new spawn should increase the data, as we've already applied the aura before\r\n\t\t\t\ttarget.attack += attackBuff * mult;\r\n\t\t\t\ttarget.health += healthBuff * mult;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -1,2 +1,2 @@
1
- import { DeathrattleSpawnCard } from '../../card.interface';
2
- export declare const ShowyCyclist: DeathrattleSpawnCard;
1
+ import { DeathrattleSpawnCard, RebornSelfAttributeTransferCard } from '../../card.interface';
2
+ export declare const ShowyCyclist: DeathrattleSpawnCard & RebornSelfAttributeTransferCard;
@@ -5,6 +5,7 @@ const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const utils_1 = require("../../../utils");
6
6
  exports.ShowyCyclist = {
7
7
  cardIds: ["BG31_925", "BG31_925_G"],
8
+ rebornSelfAttributeTransfer: ['scriptDataNum2'],
8
9
  deathrattleSpawn: (minion, input) => {
9
10
  var _a;
10
11
  const base = minion.cardId === "BG31_925_G" ? 4 : 2;
@@ -1 +1 @@
1
- {"version":3,"file":"showy-cyclist.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/showy-cyclist.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,0CAAiD;AAGpC,QAAA,YAAY,GAAyB;IACjD,OAAO,EAAE,0BAAgE;IACzE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAIvE,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,CAAC;QAE/C,MAAM,IAAI,GAAG,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;QAC7B,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,IAAI,EACJ,IAAI,EACJ,KAAK,CAAC,SAAS,EACf,qBAAI,CAAC,qBAAI,CAAC,IAAI,CAAC,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const ShowyCyclist: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.ShowyCyclist_BG31_925, CardIds.ShowyCyclist_BG31_925_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst base = minion.cardId === CardIds.ShowyCyclist_BG31_925_G ? 4 : 2;\r\n\t\t// Can be null when created in game\r\n\t\t// This is not exact, and the actual info should somehow come from the game state, but at least we\r\n\t\t// prevent issues\r\n\t\tconst baseBuff = minion.scriptDataNum2 ?? base;\r\n\t\t// The info is already included in the scriptDataNum2\r\n\t\tconst mult = 1;\r\n\t\tconst buff = baseBuff * mult;\r\n\t\taddStatsToBoard(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tbuff,\r\n\t\t\tbuff,\r\n\t\t\tinput.gameState,\r\n\t\t\tRace[Race.NAGA],\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"showy-cyclist.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/showy-cyclist.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,0CAAiD;AAGpC,QAAA,YAAY,GAA2D;IACnF,OAAO,EAAE,0BAAgE;IAEzE,2BAA2B,EAAE,CAAC,gBAAgB,CAAC;IAC/C,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;;QAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAIvE,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,CAAC;QAE/C,MAAM,IAAI,GAAG,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;QAC7B,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,IAAI,EACJ,IAAI,EACJ,KAAK,CAAC,SAAS,EACf,qBAAI,CAAC,qBAAI,CAAC,IAAI,CAAC,CACf,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { DeathrattleSpawnCard, RebornSelfAttributeTransferCard } from '../../card.interface';\r\n\r\nexport const ShowyCyclist: DeathrattleSpawnCard & RebornSelfAttributeTransferCard = {\r\n\tcardIds: [CardIds.ShowyCyclist_BG31_925, CardIds.ShowyCyclist_BG31_925_G],\r\n\t// https://replays.firestoneapp.com/?reviewId=58840660-bc38-41f3-8aee-9986e145c1aa&turn=23&action=14\r\n\trebornSelfAttributeTransfer: ['scriptDataNum2'],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst base = minion.cardId === CardIds.ShowyCyclist_BG31_925_G ? 4 : 2;\r\n\t\t// Can be null when created in game\r\n\t\t// This is not exact, and the actual info should somehow come from the game state, but at least we\r\n\t\t// prevent issues\r\n\t\tconst baseBuff = minion.scriptDataNum2 ?? base;\r\n\t\t// The info is already included in the scriptDataNum2\r\n\t\tconst mult = 1;\r\n\t\tconst buff = baseBuff * mult;\r\n\t\taddStatsToBoard(\r\n\t\t\tminion,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tbuff,\r\n\t\t\tbuff,\r\n\t\t\tinput.gameState,\r\n\t\t\tRace[Race.NAGA],\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
@@ -20,7 +20,8 @@ exports.SpellboundSoul = {
20
20
  minion.attack = Math.max(0, minion.attack - 2 * totalSpellsCast * mult);
21
21
  }
22
22
  if (input.applyHealthAuras) {
23
- minion.health = Math.max(1, minion.health - 1 * totalSpellsCast * mult);
23
+ const minHealth = Math.min(minion.health, 1);
24
+ minion.health = Math.max(minHealth, minion.health - 1 * totalSpellsCast * mult);
24
25
  }
25
26
  },
26
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"spellbound-soul.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/spellbound-soul.ts"],"names":[],"mappings":";;;AAKa,QAAA,cAAc,GAAoC;IAC9D,OAAO,EAAE,0BAAoE;IAC7E,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACvE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;SAC5C;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;SAC5C;IACF,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACvE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,CAAC;SACxE;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,CAAC;SACxE;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const SpellboundSoul: OnDespawnedCard & OnSpawnedCard = {\r\n\tcardIds: [CardIds.SpellboundSoul_BG34_110, CardIds.SpellboundSoul_BG34_110_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SpellboundSoul_BG34_110_G ? 2 : 1;\r\n\t\tconst totalSpellsCast = input.hero.globalInfo.TavernSpellsCastThisGame;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += 2 * totalSpellsCast * mult;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += 1 * totalSpellsCast * mult;\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SpellboundSoul_BG34_110_G ? 2 : 1;\r\n\t\tconst totalSpellsCast = input.hero.globalInfo.TavernSpellsCastThisGame;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - 2 * totalSpellsCast * mult);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health = Math.max(1, minion.health - 1 * totalSpellsCast * mult);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"spellbound-soul.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/spellbound-soul.ts"],"names":[],"mappings":";;;AAKa,QAAA,cAAc,GAAoC;IAC9D,OAAO,EAAE,0BAAoE;IAC7E,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACvE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;SAC5C;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;SAC5C;IACF,CAAC;IACD,WAAW,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACvE,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,CAAC;SACxE;QACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,CAAC;SAChF;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnDespawnInput, OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { OnDespawnedCard, OnSpawnedCard } from '../../card.interface';\r\n\r\nexport const SpellboundSoul: OnDespawnedCard & OnSpawnedCard = {\r\n\tcardIds: [CardIds.SpellboundSoul_BG34_110, CardIds.SpellboundSoul_BG34_110_G],\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SpellboundSoul_BG34_110_G ? 2 : 1;\r\n\t\tconst totalSpellsCast = input.hero.globalInfo.TavernSpellsCastThisGame;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack += 2 * totalSpellsCast * mult;\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tminion.health += 1 * totalSpellsCast * mult;\r\n\t\t}\r\n\t},\r\n\tonDespawned: (minion: BoardEntity, input: OnDespawnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.SpellboundSoul_BG34_110_G ? 2 : 1;\r\n\t\tconst totalSpellsCast = input.hero.globalInfo.TavernSpellsCastThisGame;\r\n\t\tif (input.applyAttackAuras) {\r\n\t\t\tminion.attack = Math.max(0, minion.attack - 2 * totalSpellsCast * mult);\r\n\t\t}\r\n\t\tif (input.applyHealthAuras) {\r\n\t\t\tconst minHealth = Math.min(minion.health, 1);\r\n\t\t\tminion.health = Math.max(minHealth, minion.health - 1 * totalSpellsCast * mult);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -5,6 +5,10 @@ exports.TimewarpedRecycler = {
5
5
  cardIds: ["BG34_Giant_082", "BG34_Giant_082_G"],
6
6
  baseAvengeValue: (cardId) => 4,
7
7
  avenge: (minion, input) => {
8
+ var _a, _b;
9
+ const amount = minion.cardId === "BG34_Giant_082_G" ? 2 : 1;
10
+ const gi = (_a = input.hero.globalInfo) !== null && _a !== void 0 ? _a : (input.hero.globalInfo = {});
11
+ gi.maxGoldBonus = ((_b = gi.maxGoldBonus) !== null && _b !== void 0 ? _b : 0) + amount;
8
12
  },
9
13
  };
10
14
  //# sourceMappingURL=timewarped-recycler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timewarped-recycler.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-recycler.ts"],"names":[],"mappings":";;;AAKa,QAAA,kBAAkB,GAAe;IAC7C,OAAO,EAAE,sCAAwF;IACjG,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;IAEpD,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { AvengeCard } from '../../card.interface';\r\n\r\nexport const TimewarpedRecycler: AvengeCard = {\r\n\tcardIds: [CardIds.TimewarpedRecycler_BG34_Giant_082, CardIds.TimewarpedRecycler_BG34_Giant_082_G],\r\n\tbaseAvengeValue: (cardId: string) => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\t// Do nothing in combat\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"timewarped-recycler.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-recycler.ts"],"names":[],"mappings":";;;AAYa,QAAA,kBAAkB,GAAe;IAC7C,OAAO,EAAE,sCAAwF;IACjG,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;;QACnD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,uBAAgD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,EAAE,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACjE,EAAE,CAAC,YAAY,GAAG,CAAC,MAAA,EAAE,CAAC,YAAY,mCAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IACnD,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { AvengeCard } from '../../card.interface';\r\n\r\n/**\r\n * Timewarped Recycler\r\n * BG34_Giant_082: Avenge (4): Increase your maximum Gold by (1).\r\n * BG34_Giant_082_G: Avenge (4): Increase your maximum Gold by (2).\r\n *\r\n * Combat cannot spend gold; the bonus is stored on globalInfo.maxGoldBonus for tavern writeback.\r\n */\r\nexport const TimewarpedRecycler: AvengeCard = {\r\n\tcardIds: [CardIds.TimewarpedRecycler_BG34_Giant_082, CardIds.TimewarpedRecycler_BG34_Giant_082_G],\r\n\tbaseAvengeValue: (cardId: string) => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst amount = minion.cardId === CardIds.TimewarpedRecycler_BG34_Giant_082_G ? 2 : 1;\r\n\t\tconst gi = input.hero.globalInfo ?? (input.hero.globalInfo = {});\r\n\t\tgi.maxGoldBonus = (gi.maxGoldBonus ?? 0) + amount;\r\n\t},\r\n};\r\n"]}
@@ -7,7 +7,13 @@ exports.TimewarpedTraveler = {
7
7
  baseAvengeValue: (cardId) => 4,
8
8
  avenge: (minion, input) => {
9
9
  const mult = minion.cardId === "BG34_Giant_605_G" ? 2 : 1;
10
- const cardsToAdd = Array(mult).fill(null);
10
+ const cardsToAdd = [];
11
+ for (let i = 0; i < mult; i++) {
12
+ const cardToAdd = input.gameState.cardsData.getRandomMinorTimewarpCard(1);
13
+ if (cardToAdd) {
14
+ cardsToAdd.push(cardToAdd);
15
+ }
16
+ }
11
17
  (0, cards_in_hand_1.addCardsInHand)(input.hero, input.board, cardsToAdd, input.gameState);
12
18
  },
13
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"timewarped-traveler.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-traveler.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAGtD,QAAA,kBAAkB,GAAe;IAC7C,OAAO,EAAE,sCAAwF;IACjG,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAAgD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AvengeCard } from '../../card.interface';\r\n\r\nexport const TimewarpedTraveler: AvengeCard = {\r\n\tcardIds: [CardIds.TimewarpedTraveler_BG34_Giant_605, CardIds.TimewarpedTraveler_BG34_Giant_605_G],\r\n\tbaseAvengeValue: (cardId: string) => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedTraveler_BG34_Giant_605_G ? 2 : 1;\r\n\t\tconst cardsToAdd = Array(mult).fill(null);\r\n\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"timewarped-traveler.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-traveler.ts"],"names":[],"mappings":";;;AAGA,qEAAmE;AAQtD,QAAA,kBAAkB,GAAe;IAC7C,OAAO,EAAE,sCAAwF;IACjG,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,uBAAgD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,SAAS,EAAE;gBACd,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC3B;SACD;QACD,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AvengeCard } from '../../card.interface';\r\n\r\n/**\r\n * Timewarped Traveler\r\n * BG34_Giant_605: Avenge (4): Get a random 1-Cost card from the Minor Timewarp.\r\n * BG34_Giant_605_G: Avenge (4): Get two random 1-Cost cards from the Minor Timewarp.\r\n */\r\nexport const TimewarpedTraveler: AvengeCard = {\r\n\tcardIds: [CardIds.TimewarpedTraveler_BG34_Giant_605, CardIds.TimewarpedTraveler_BG34_Giant_605_G],\r\n\tbaseAvengeValue: (cardId: string) => 4,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.TimewarpedTraveler_BG34_Giant_605_G ? 2 : 1;\r\n\t\tconst cardsToAdd: string[] = [];\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tconst cardToAdd = input.gameState.cardsData.getRandomMinorTimewarpCard(1);\r\n\t\t\tif (cardToAdd) {\r\n\t\t\t\tcardsToAdd.push(cardToAdd);\r\n\t\t\t}\r\n\t\t}\r\n\t\taddCardsInHand(input.hero, input.board, cardsToAdd, input.gameState);\r\n\t},\r\n};\r\n"]}
@@ -9,22 +9,25 @@ const utils_1 = require("../utils");
9
9
  const DOUBLE_RALLY_CARD_IDS = ["BG34_Giant_376"];
10
10
  const TRIPLE_RALLY_CARD_IDS = ["BG34_Giant_376_G"];
11
11
  const triggerRally = (attackingBoard, attackingBoardHero, attacker, defendingBoard, defendingBoardHero, defendingEntity, gameState) => {
12
- var _a, _b, _c, _d;
12
+ var _a, _b, _c, _d, _e, _f;
13
13
  let damageDoneByAttacker = 0;
14
14
  let damageDoneByDefender = 0;
15
15
  const isAttackerRallying = (0, utils_1.hasEntityMechanic)(attacker, reference_data_1.GameTag.BACON_RALLY, gameState.allCards);
16
16
  let rallyLoops = 1;
17
17
  if (isAttackerRallying) {
18
+ attackingBoardHero.globalInfo = (_a = attackingBoardHero.globalInfo) !== null && _a !== void 0 ? _a : {};
19
+ attackingBoardHero.globalInfo.RallyMinionAttacksThisCombat =
20
+ ((_b = attackingBoardHero.globalInfo.RallyMinionAttacksThisCombat) !== null && _b !== void 0 ? _b : 0) + 1;
18
21
  const cardIds = [
19
22
  ...attackingBoard.map((e) => e.cardId),
20
- ...((_b = (_a = attackingBoardHero.secrets) === null || _a === void 0 ? void 0 : _a.map((e) => e.cardId)) !== null && _b !== void 0 ? _b : []),
23
+ ...((_d = (_c = attackingBoardHero.secrets) === null || _c === void 0 ? void 0 : _c.map((e) => e.cardId)) !== null && _d !== void 0 ? _d : []),
21
24
  ];
22
25
  const triggerMult = cardIds.some((cardId) => TRIPLE_RALLY_CARD_IDS.includes(cardId))
23
26
  ? 3
24
27
  : cardIds.some((cardId) => DOUBLE_RALLY_CARD_IDS.includes(cardId))
25
28
  ? 2
26
29
  : 1;
27
- 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;
30
+ const numberOfRallyingCries = (_f = (_e = attackingBoardHero.questRewardEntities) === null || _e === void 0 ? void 0 : _e.filter((r) => r.cardId === "BG33_Reward_021").length) !== null && _f !== void 0 ? _f : 0;
28
31
  rallyLoops = triggerMult + numberOfRallyingCries;
29
32
  }
30
33
  for (let i = 0; i < rallyLoops; i++) {
@@ -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\t// Only compute the multiplier when the attacker actually rallies, as this is a hot path\r\n\tlet rallyLoops = 1;\r\n\tif (isAttackerRallying) {\r\n\t\tconst cardIds = [\r\n\t\t\t...attackingBoard.map((e) => e.cardId),\r\n\t\t\t...(attackingBoardHero.secrets?.map((e) => e.cardId) ?? []),\r\n\t\t];\r\n\t\tconst triggerMult = cardIds.some((cardId) => TRIPLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t\t? 3\r\n\t\t\t: cardIds.some((cardId) => DOUBLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t\t? 2\r\n\t\t\t: 1;\r\n\t\tconst numberOfRallyingCries =\r\n\t\t\tattackingBoardHero.questRewardEntities?.filter((r) => r.cardId === CardIds.RallyingCry_BG33_Reward_021)\r\n\t\t\t\t.length ?? 0;\r\n\t\trallyLoops = triggerMult + numberOfRallyingCries;\r\n\t}\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\t// Only compute the multiplier when the attacker actually rallies, as this is a hot path\r\n\tlet rallyLoops = 1;\r\n\tif (isAttackerRallying) {\r\n\t\tattackingBoardHero.globalInfo = attackingBoardHero.globalInfo ?? {};\r\n\t\tattackingBoardHero.globalInfo.RallyMinionAttacksThisCombat =\r\n\t\t\t(attackingBoardHero.globalInfo.RallyMinionAttacksThisCombat ?? 0) + 1;\r\n\t\tconst cardIds = [\r\n\t\t\t...attackingBoard.map((e) => e.cardId),\r\n\t\t\t...(attackingBoardHero.secrets?.map((e) => e.cardId) ?? []),\r\n\t\t];\r\n\t\tconst triggerMult = cardIds.some((cardId) => TRIPLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t\t? 3\r\n\t\t\t: cardIds.some((cardId) => DOUBLE_RALLY_CARD_IDS.includes(cardId))\r\n\t\t\t? 2\r\n\t\t\t: 1;\r\n\t\tconst numberOfRallyingCries =\r\n\t\t\tattackingBoardHero.questRewardEntities?.filter((r) => r.cardId === CardIds.RallyingCry_BG33_Reward_021)\r\n\t\t\t\t.length ?? 0;\r\n\t\trallyLoops = triggerMult + numberOfRallyingCries;\r\n\t}\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"]}
@@ -7,6 +7,13 @@ import { SingleSimulationResult } from './single-simulation-result';
7
7
  export { isValidDeathrattleEnchantment } from './simulation/deathrattle-utils';
8
8
  export { createSeededRng, defaultRng, getActiveRng, random, withRng } from './services/rng';
9
9
  export type { Rng } from './services/rng';
10
+ export { triggerRally } from './mechanics/rally';
11
+ export { hasRally } from './cards/card.interface';
12
+ export type { RallyCard } from './cards/card.interface';
13
+ export type { OnAttackInput } from './simulation/on-attack';
14
+ export { triggerBattlecry } from './simulation/battlecries';
15
+ export { doFullAttack } from './simulation/attack';
16
+ export { applyOnAttackEffects } from './simulation/on-attack';
10
17
  export declare const assignCards: (cards: AllCardsService) => void;
11
18
  export interface SimulateSingleCombatOptions {
12
19
  readonly seed?: number;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.simulateBattle = exports.simulateSingleCombat = exports.assignCards = exports.withRng = exports.random = exports.getActiveRng = exports.defaultRng = exports.createSeededRng = exports.isValidDeathrattleEnchantment = void 0;
3
+ exports.simulateBattle = exports.simulateSingleCombat = exports.assignCards = exports.applyOnAttackEffects = exports.doFullAttack = exports.triggerBattlecry = exports.hasRally = exports.triggerRally = exports.withRng = exports.random = exports.getActiveRng = exports.defaultRng = exports.createSeededRng = exports.isValidDeathrattleEnchantment = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const cards_data_1 = require("./cards/cards-data");
6
6
  const debug_state_1 = require("./debug-state");
@@ -18,6 +18,16 @@ Object.defineProperty(exports, "defaultRng", { enumerable: true, get: function (
18
18
  Object.defineProperty(exports, "getActiveRng", { enumerable: true, get: function () { return rng_2.getActiveRng; } });
19
19
  Object.defineProperty(exports, "random", { enumerable: true, get: function () { return rng_2.random; } });
20
20
  Object.defineProperty(exports, "withRng", { enumerable: true, get: function () { return rng_2.withRng; } });
21
+ var rally_1 = require("./mechanics/rally");
22
+ Object.defineProperty(exports, "triggerRally", { enumerable: true, get: function () { return rally_1.triggerRally; } });
23
+ var card_interface_1 = require("./cards/card.interface");
24
+ Object.defineProperty(exports, "hasRally", { enumerable: true, get: function () { return card_interface_1.hasRally; } });
25
+ var battlecries_1 = require("./simulation/battlecries");
26
+ Object.defineProperty(exports, "triggerBattlecry", { enumerable: true, get: function () { return battlecries_1.triggerBattlecry; } });
27
+ var attack_1 = require("./simulation/attack");
28
+ Object.defineProperty(exports, "doFullAttack", { enumerable: true, get: function () { return attack_1.doFullAttack; } });
29
+ var on_attack_1 = require("./simulation/on-attack");
30
+ Object.defineProperty(exports, "applyOnAttackEffects", { enumerable: true, get: function () { return on_attack_1.applyOnAttackEffects; } });
21
31
  const MAX_SAMPLE_RESIMS = 500;
22
32
  let globalCards = new reference_data_1.AllCardsService();
23
33
  const assignCards = (cards) => {