@firestone-hs/simulate-bgs-battle 1.1.750 → 1.1.752

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 (133) hide show
  1. package/dist/bgs-player-entity.d.ts +1 -0
  2. package/dist/bgs-player-entity.js.map +1 -1
  3. package/dist/board-secret.d.ts +5 -0
  4. package/dist/board-secret.js.map +1 -1
  5. package/dist/cards/card.interface.d.ts +34 -0
  6. package/dist/cards/card.interface.js +10 -2
  7. package/dist/cards/card.interface.js.map +1 -1
  8. package/dist/cards/impl/_card-mappings.js +66 -0
  9. package/dist/cards/impl/_card-mappings.js.map +1 -1
  10. package/dist/cards/impl/bg-spell/energizing-chamber.d.ts +2 -0
  11. package/dist/cards/impl/bg-spell/energizing-chamber.js +27 -0
  12. package/dist/cards/impl/bg-spell/energizing-chamber.js.map +1 -0
  13. package/dist/cards/impl/bg-spell/sludge-corrosion.d.ts +2 -0
  14. package/dist/cards/impl/bg-spell/sludge-corrosion.js +28 -0
  15. package/dist/cards/impl/bg-spell/sludge-corrosion.js.map +1 -0
  16. package/dist/cards/impl/minion/boom-in-a-box.js +4 -1
  17. package/dist/cards/impl/minion/boom-in-a-box.js.map +1 -1
  18. package/dist/cards/impl/minion/cthrax-wrecker.d.ts +2 -0
  19. package/dist/cards/impl/minion/cthrax-wrecker.js +25 -0
  20. package/dist/cards/impl/minion/cthrax-wrecker.js.map +1 -0
  21. package/dist/cards/impl/minion/cthun.d.ts +2 -0
  22. package/dist/cards/impl/minion/cthun.js +29 -0
  23. package/dist/cards/impl/minion/cthun.js.map +1 -0
  24. package/dist/cards/impl/minion/cutthroat-kthir.d.ts +2 -0
  25. package/dist/cards/impl/minion/cutthroat-kthir.js +16 -0
  26. package/dist/cards/impl/minion/cutthroat-kthir.js.map +1 -0
  27. package/dist/cards/impl/minion/dark-paradox.d.ts +4 -0
  28. package/dist/cards/impl/minion/dark-paradox.js +109 -0
  29. package/dist/cards/impl/minion/dark-paradox.js.map +1 -0
  30. package/dist/cards/impl/minion/dark-puppeteer.d.ts +2 -0
  31. package/dist/cards/impl/minion/dark-puppeteer.js +13 -0
  32. package/dist/cards/impl/minion/dark-puppeteer.js.map +1 -0
  33. package/dist/cards/impl/minion/de-volition-ist.d.ts +2 -0
  34. package/dist/cards/impl/minion/de-volition-ist.js +23 -0
  35. package/dist/cards/impl/minion/de-volition-ist.js.map +1 -0
  36. package/dist/cards/impl/minion/drifting-sacrifice.d.ts +2 -0
  37. package/dist/cards/impl/minion/drifting-sacrifice.js +14 -0
  38. package/dist/cards/impl/minion/drifting-sacrifice.js.map +1 -0
  39. package/dist/cards/impl/minion/faceless-converter.d.ts +2 -0
  40. package/dist/cards/impl/minion/faceless-converter.js +14 -0
  41. package/dist/cards/impl/minion/faceless-converter.js.map +1 -0
  42. package/dist/cards/impl/minion/fetid-corroder.d.ts +2 -0
  43. package/dist/cards/impl/minion/fetid-corroder.js +13 -0
  44. package/dist/cards/impl/minion/fetid-corroder.js.map +1 -0
  45. package/dist/cards/impl/minion/hackerfin.js +4 -3
  46. package/dist/cards/impl/minion/hackerfin.js.map +1 -1
  47. package/dist/cards/impl/minion/harbinger-aphlass.d.ts +2 -0
  48. package/dist/cards/impl/minion/harbinger-aphlass.js +17 -0
  49. package/dist/cards/impl/minion/harbinger-aphlass.js.map +1 -0
  50. package/dist/cards/impl/minion/heroic-broodmother.d.ts +2 -0
  51. package/dist/cards/impl/minion/heroic-broodmother.js +27 -0
  52. package/dist/cards/impl/minion/heroic-broodmother.js.map +1 -0
  53. package/dist/cards/impl/minion/hopebringer.d.ts +2 -0
  54. package/dist/cards/impl/minion/hopebringer.js +26 -0
  55. package/dist/cards/impl/minion/hopebringer.js.map +1 -0
  56. package/dist/cards/impl/minion/iron-groundskeeper.d.ts +2 -0
  57. package/dist/cards/impl/minion/iron-groundskeeper.js +13 -0
  58. package/dist/cards/impl/minion/iron-groundskeeper.js.map +1 -0
  59. package/dist/cards/impl/minion/joyous.d.ts +2 -0
  60. package/dist/cards/impl/minion/joyous.js +15 -0
  61. package/dist/cards/impl/minion/joyous.js.map +1 -0
  62. package/dist/cards/impl/minion/lichling-hoarder.d.ts +2 -0
  63. package/dist/cards/impl/minion/lichling-hoarder.js +26 -0
  64. package/dist/cards/impl/minion/lichling-hoarder.js.map +1 -0
  65. package/dist/cards/impl/minion/mindbender-ghursha.d.ts +2 -0
  66. package/dist/cards/impl/minion/mindbender-ghursha.js +19 -0
  67. package/dist/cards/impl/minion/mindbender-ghursha.js.map +1 -0
  68. package/dist/cards/impl/minion/mysterious-kthir.d.ts +2 -0
  69. package/dist/cards/impl/minion/mysterious-kthir.js +25 -0
  70. package/dist/cards/impl/minion/mysterious-kthir.js.map +1 -0
  71. package/dist/cards/impl/minion/nightmare-corroder.d.ts +2 -0
  72. package/dist/cards/impl/minion/nightmare-corroder.js +13 -0
  73. package/dist/cards/impl/minion/nightmare-corroder.js.map +1 -0
  74. package/dist/cards/impl/minion/nraqi-sapper.d.ts +2 -0
  75. package/dist/cards/impl/minion/nraqi-sapper.js +20 -0
  76. package/dist/cards/impl/minion/nraqi-sapper.js.map +1 -0
  77. package/dist/cards/impl/minion/parasitic-fleshling.d.ts +2 -0
  78. package/dist/cards/impl/minion/parasitic-fleshling.js +18 -0
  79. package/dist/cards/impl/minion/parasitic-fleshling.js.map +1 -0
  80. package/dist/cards/impl/minion/resourceful-robot.d.ts +2 -0
  81. package/dist/cards/impl/minion/resourceful-robot.js +21 -0
  82. package/dist/cards/impl/minion/resourceful-robot.js.map +1 -0
  83. package/dist/cards/impl/minion/sha-of-fear.d.ts +2 -0
  84. package/dist/cards/impl/minion/sha-of-fear.js +18 -0
  85. package/dist/cards/impl/minion/sha-of-fear.js.map +1 -0
  86. package/dist/cards/impl/minion/the-shadow-of-doubt.d.ts +2 -0
  87. package/dist/cards/impl/minion/the-shadow-of-doubt.js +14 -0
  88. package/dist/cards/impl/minion/the-shadow-of-doubt.js.map +1 -0
  89. package/dist/cards/impl/minion/underrot-spawn.d.ts +2 -0
  90. package/dist/cards/impl/minion/underrot-spawn.js +22 -0
  91. package/dist/cards/impl/minion/underrot-spawn.js.map +1 -0
  92. package/dist/cards/impl/minion/unwilling-slacker.d.ts +2 -0
  93. package/dist/cards/impl/minion/unwilling-slacker.js +14 -0
  94. package/dist/cards/impl/minion/unwilling-slacker.js.map +1 -0
  95. package/dist/cards/impl/minion/vicious-mindslasher.d.ts +2 -0
  96. package/dist/cards/impl/minion/vicious-mindslasher.js +22 -0
  97. package/dist/cards/impl/minion/vicious-mindslasher.js.map +1 -0
  98. package/dist/cards/impl/minion/yshaarj.d.ts +2 -0
  99. package/dist/cards/impl/minion/yshaarj.js +30 -0
  100. package/dist/cards/impl/minion/yshaarj.js.map +1 -0
  101. package/dist/cards/impl/trinket/converter-portrait.d.ts +2 -0
  102. package/dist/cards/impl/trinket/converter-portrait.js +19 -0
  103. package/dist/cards/impl/trinket/converter-portrait.js.map +1 -0
  104. package/dist/cards/impl/trinket/corrupted-baton.d.ts +2 -0
  105. package/dist/cards/impl/trinket/corrupted-baton.js +12 -0
  106. package/dist/cards/impl/trinket/corrupted-baton.js.map +1 -0
  107. package/dist/cards/impl/trinket/snarky-portrait.d.ts +2 -0
  108. package/dist/cards/impl/trinket/snarky-portrait.js +24 -0
  109. package/dist/cards/impl/trinket/snarky-portrait.js.map +1 -0
  110. package/dist/mechanics/player-global-effects.d.ts +1 -0
  111. package/dist/mechanics/player-global-effects.js +24 -1
  112. package/dist/mechanics/player-global-effects.js.map +1 -1
  113. package/dist/services/card-ids.d.ts +314 -5
  114. package/dist/services/card-ids.js.map +1 -1
  115. package/dist/simulation/after-attack.js +13 -0
  116. package/dist/simulation/after-attack.js.map +1 -1
  117. package/dist/simulation/auras.js +31 -30
  118. package/dist/simulation/auras.js.map +1 -1
  119. package/dist/simulation/battlecries.js +2 -0
  120. package/dist/simulation/battlecries.js.map +1 -1
  121. package/dist/simulation/death-effects.js +2 -0
  122. package/dist/simulation/death-effects.js.map +1 -1
  123. package/dist/simulation/deity.d.ts +13 -0
  124. package/dist/simulation/deity.js +125 -0
  125. package/dist/simulation/deity.js.map +1 -0
  126. package/dist/simulation/discard.d.ts +5 -0
  127. package/dist/simulation/discard.js +49 -0
  128. package/dist/simulation/discard.js.map +1 -0
  129. package/dist/temp-card-ids.js.map +1 -1
  130. package/dist/utils.d.ts +1 -0
  131. package/dist/utils.js +13 -2
  132. package/dist/utils.js.map +1 -1
  133. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"death-effects.js","sourceRoot":"","sources":["../../src/simulation/death-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnAfterFriendlyMinionDeath, hasRebornSelfAttributeTransfer } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandomAlive } from '../services/utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\nimport { copyAttribute } from './utils/entity-utils';\r\n\r\nexport const applyAfterDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\r\n\tconst spawnsFromSecrets = handleAfterMinionDeathEffects(\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tallSpawns.push(...spawnsFromSecrets);\r\n\tperformEntitySpawns(\r\n\t\tallSpawns,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\treturn allSpawns;\r\n};\r\n\r\nconst handleAfterMinionDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\r\n\t// TODO: move this to an \"after minion dies\" phase, instead of \"whenever minion dies\"\r\n\tconst boardBeforeProcs = [...boardWithDeadEntity];\r\n\tfor (const entity of boardWithDeadEntity) {\r\n\t\tconst impl = cardMappings[entity.cardId];\r\n\t\tif (hasOnAfterFriendlyMinionDeath(impl)) {\r\n\t\t\timpl.onAfterFriendlyMinionDeath(entity, {\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\tboard: boardWithDeadEntity,\r\n\t\t\t\tboardBeforeProcs,\r\n\t\t\t\thero: boardWithDeadEntityHero,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherHero: otherBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardWithDeadEntityHero.trinkets ?? []) {\r\n\t\tconst trinketImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnAfterFriendlyMinionDeath(trinketImpl)) {\r\n\t\t\ttrinketImpl.onAfterFriendlyMinionDeath(trinket, {\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\tboard: boardWithDeadEntity,\r\n\t\t\t\tboardBeforeProcs,\r\n\t\t\t\thero: boardWithDeadEntityHero,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherHero: otherBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const secret of (boardWithDeadEntityHero.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.Avenge_TB_Bacon_Secrets_08:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst avengeTarget = pickRandomAlive(boardWithDeadEntity);\r\n\t\t\t\tmodifyStats(avengeTarget, secret, 3, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_TB_Bacon_Secrets_10:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst redemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\t// { ...newSpawn } as BoardEntity,\r\n\t\t\t\t);\r\n\t\t\t\tredemptionSpawns[0].health = 1;\r\n\t\t\t\t// I don't like duplicating this logic\r\n\t\t\t\tconst rebornImpl = cardMappings[redemptionSpawns[0].cardId];\r\n\t\t\t\tif (hasRebornSelfAttributeTransfer(rebornImpl)) {\r\n\t\t\t\t\trebornImpl.rebornSelfAttributeTransfer.forEach((attribute: keyof BoardEntity) => {\r\n\t\t\t\t\t\tcopyAttribute(redemptionSpawns[0], deadEntity, attribute);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tallSpawns.push(...redemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, redemptionSpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_BetterRedemption_TB_Bacon_Secrets_10b:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst betterRedemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tfor (const spawn of betterRedemptionSpawns) {\r\n\t\t\t\t\tspawn.health = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.maxHealth = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.attack = deadEntity.attack;\r\n\t\t\t\t\tspawn.maxAttack = deadEntity.maxAttack;\r\n\t\t\t\t\tspawn.enchantments = deadEntity.enchantments;\r\n\t\t\t\t\tspawn.divineShield = deadEntity.hadDivineShield;\r\n\t\t\t\t\tconst rebornImpl = cardMappings[spawn.cardId];\r\n\t\t\t\t\tif (hasRebornSelfAttributeTransfer(rebornImpl)) {\r\n\t\t\t\t\t\trebornImpl.rebornSelfAttributeTransfer.forEach((attribute: keyof BoardEntity) => {\r\n\t\t\t\t\t\t\tcopyAttribute(spawn, deadEntity, attribute);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tallSpawns.push(...betterRedemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tsecret,\r\n\t\t\t\t\tbetterRedemptionSpawns[0],\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Effigy_TB_Bacon_Secrets_05:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst minionTier = gameState.cardsData.getTavernLevel(deadEntity.cardId);\r\n\t\t\t\tconst newMinion = gameState.cardsData.getRandomMinionForTavernTier(minionTier);\r\n\t\t\t\tconst effigySpawns = spawnEntities(\r\n\t\t\t\t\tnewMinion,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tallSpawns.push(...effigySpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, effigySpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn allSpawns;\r\n};\r\n\r\nexport const applyOnDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// Nothing yet\r\n\treturn [];\r\n};\r\n"]}
1
+ {"version":3,"file":"death-effects.js","sourceRoot":"","sources":["../../src/simulation/death-effects.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnAfterFriendlyMinionDeath, hasRebornSelfAttributeTransfer } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandomAlive } from '../services/utils';\r\nimport { onFriendlyAberrationDied } from './deity';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\nimport { copyAttribute } from './utils/entity-utils';\r\n\r\nexport const applyAfterDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\r\n\tconst spawnsFromSecrets = handleAfterMinionDeathEffects(\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tallSpawns.push(...spawnsFromSecrets);\r\n\tperformEntitySpawns(\r\n\t\tallSpawns,\r\n\t\tboardWithDeadEntity,\r\n\t\tboardWithDeadEntityHero,\r\n\t\tdeadEntity,\r\n\t\tdeadEntityIndexFromRight,\r\n\t\totherBoard,\r\n\t\totherBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\treturn allSpawns;\r\n};\r\n\r\nconst handleAfterMinionDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tconst allSpawns = [];\r\n\r\n\t// TODO: move this to an \"after minion dies\" phase, instead of \"whenever minion dies\"\r\n\tconst boardBeforeProcs = [...boardWithDeadEntity];\r\n\tfor (const entity of boardWithDeadEntity) {\r\n\t\tconst impl = cardMappings[entity.cardId];\r\n\t\tif (hasOnAfterFriendlyMinionDeath(impl)) {\r\n\t\t\timpl.onAfterFriendlyMinionDeath(entity, {\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\tboard: boardWithDeadEntity,\r\n\t\t\t\tboardBeforeProcs,\r\n\t\t\t\thero: boardWithDeadEntityHero,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherHero: otherBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of boardWithDeadEntityHero.trinkets ?? []) {\r\n\t\tconst trinketImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnAfterFriendlyMinionDeath(trinketImpl)) {\r\n\t\t\ttrinketImpl.onAfterFriendlyMinionDeath(trinket, {\r\n\t\t\t\tdeadEntity,\r\n\t\t\t\tboard: boardWithDeadEntity,\r\n\t\t\t\tboardBeforeProcs,\r\n\t\t\t\thero: boardWithDeadEntityHero,\r\n\t\t\t\totherBoard,\r\n\t\t\t\totherHero: otherBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tallSpawns.push(\r\n\t\t...onFriendlyAberrationDied(\r\n\t\t\tdeadEntity,\r\n\t\t\tdeadEntityIndexFromRight,\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t),\r\n\t);\r\n\r\n\tfor (const secret of (boardWithDeadEntityHero.secrets ?? []).filter((s) => !s.triggered)) {\r\n\t\tswitch (secret.cardId) {\r\n\t\t\tcase CardIds.Avenge_TB_Bacon_Secrets_08:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst avengeTarget = pickRandomAlive(boardWithDeadEntity);\r\n\t\t\t\tmodifyStats(avengeTarget, secret, 3, 2, boardWithDeadEntity, boardWithDeadEntityHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_TB_Bacon_Secrets_10:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst redemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\t// { ...newSpawn } as BoardEntity,\r\n\t\t\t\t);\r\n\t\t\t\tredemptionSpawns[0].health = 1;\r\n\t\t\t\t// I don't like duplicating this logic\r\n\t\t\t\tconst rebornImpl = cardMappings[redemptionSpawns[0].cardId];\r\n\t\t\t\tif (hasRebornSelfAttributeTransfer(rebornImpl)) {\r\n\t\t\t\t\trebornImpl.rebornSelfAttributeTransfer.forEach((attribute: keyof BoardEntity) => {\r\n\t\t\t\t\t\tcopyAttribute(redemptionSpawns[0], deadEntity, attribute);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tallSpawns.push(...redemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, redemptionSpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Redemption_BetterRedemption_TB_Bacon_Secrets_10b:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst betterRedemptionSpawns = spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tfor (const spawn of betterRedemptionSpawns) {\r\n\t\t\t\t\tspawn.health = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.maxHealth = deadEntity.maxHealth;\r\n\t\t\t\t\tspawn.attack = deadEntity.attack;\r\n\t\t\t\t\tspawn.maxAttack = deadEntity.maxAttack;\r\n\t\t\t\t\tspawn.enchantments = deadEntity.enchantments;\r\n\t\t\t\t\tspawn.divineShield = deadEntity.hadDivineShield;\r\n\t\t\t\t\tconst rebornImpl = cardMappings[spawn.cardId];\r\n\t\t\t\t\tif (hasRebornSelfAttributeTransfer(rebornImpl)) {\r\n\t\t\t\t\t\trebornImpl.rebornSelfAttributeTransfer.forEach((attribute: keyof BoardEntity) => {\r\n\t\t\t\t\t\t\tcopyAttribute(spawn, deadEntity, attribute);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tallSpawns.push(...betterRedemptionSpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tsecret,\r\n\t\t\t\t\tbetterRedemptionSpawns[0],\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\tcase CardIds.Effigy_TB_Bacon_Secrets_05:\r\n\t\t\t\tsecret.triggered = true;\r\n\t\t\t\tconst minionTier = gameState.cardsData.getTavernLevel(deadEntity.cardId);\r\n\t\t\t\tconst newMinion = gameState.cardsData.getRandomMinionForTavernTier(minionTier);\r\n\t\t\t\tconst effigySpawns = spawnEntities(\r\n\t\t\t\t\tnewMinion,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tboardWithDeadEntity,\r\n\t\t\t\t\tboardWithDeadEntityHero,\r\n\t\t\t\t\totherBoard,\r\n\t\t\t\t\totherBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdeadEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t);\r\n\t\t\t\tallSpawns.push(...effigySpawns);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(secret, effigySpawns[0], boardWithDeadEntity, null, null);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn allSpawns;\r\n};\r\n\r\nexport const applyOnDeathEffects = (\r\n\tdeadEntity: BoardEntity,\r\n\tdeadEntityIndexFromRight: number,\r\n\tboardWithDeadEntity: BoardEntity[],\r\n\tboardWithDeadEntityHero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\t// Nothing yet\r\n\treturn [];\r\n};\r\n"]}
@@ -0,0 +1,13 @@
1
+ import { AllCardsService } from '@firestone-hs/reference-data';
2
+ import { BgsPlayerEntity } from '../bgs-player-entity';
3
+ import { BoardEntity } from '../board-entity';
4
+ import { BoardSecret } from '../board-secret';
5
+ import { FullGameState } from './internal-game-state';
6
+ export declare const isDeityCard: (cardId: string, allCards: AllCardsService) => boolean;
7
+ export declare const isAberration: (entity: BoardEntity, hero: BgsPlayerEntity, gameState: FullGameState) => boolean;
8
+ export declare const getDeitySecret: (hero: BgsPlayerEntity) => BoardSecret | undefined;
9
+ export declare const getOnBoardDeity: (board: BoardEntity[], allCards: AllCardsService) => BoardEntity | undefined;
10
+ export declare const buffYourDeity: (hero: BgsPlayerEntity, board: BoardEntity[], source: BoardEntity | BoardSecret | BgsPlayerEntity, attack: number, health: number, gameState: FullGameState) => void;
11
+ export declare const incrementDeitySecretStats: (hero: BgsPlayerEntity, attack: number, health: number) => void;
12
+ export declare const buffTeamDeities: (hero: BgsPlayerEntity, board: BoardEntity[], source: BoardEntity, attack: number, health: number, gameState: FullGameState) => void;
13
+ export declare const onFriendlyAberrationDied: (deadEntity: BoardEntity, _deadEntityIndexFromRight: number, board: BoardEntity[], hero: BgsPlayerEntity, otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState) => BoardEntity[];
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onFriendlyAberrationDied = exports.buffTeamDeities = exports.incrementDeitySecretStats = exports.buffYourDeity = exports.getOnBoardDeity = exports.getDeitySecret = exports.isAberration = exports.isDeityCard = void 0;
4
+ const reference_data_1 = require("@firestone-hs/reference-data");
5
+ const card_interface_1 = require("../cards/card.interface");
6
+ const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
+ const utils_1 = require("../utils");
8
+ const deathrattle_spawns_1 = require("./deathrattle-spawns");
9
+ const stats_1 = require("./stats");
10
+ const isDeityCard = (cardId, allCards) => {
11
+ return (0, utils_1.hasMechanic)(allCards.getCard(cardId), reference_data_1.GameTag.BACON_OLD_GOD);
12
+ };
13
+ exports.isDeityCard = isDeityCard;
14
+ const isAberration = (entity, hero, gameState) => {
15
+ return (0, utils_1.hasCorrectTribe)(entity, hero, reference_data_1.Race.ABERRATION, gameState.anomalies, gameState.allCards);
16
+ };
17
+ exports.isAberration = isAberration;
18
+ const getDeitySecret = (hero) => {
19
+ var _a;
20
+ return (_a = hero.secrets) === null || _a === void 0 ? void 0 : _a.find((s) => s.cardId === "BG_OldGod");
21
+ };
22
+ exports.getDeitySecret = getDeitySecret;
23
+ const getOnBoardDeity = (board, allCards) => {
24
+ return board.find((e) => (0, utils_1.hasEntityMechanic)(e, reference_data_1.GameTag.BACON_OLD_GOD, allCards) && e.health > 0 && !e.definitelyDead);
25
+ };
26
+ exports.getOnBoardDeity = getOnBoardDeity;
27
+ const readSecretAttack = (secret) => {
28
+ var _a, _b, _c;
29
+ return (_c = (_b = (_a = secret.tags) === null || _a === void 0 ? void 0 : _a[reference_data_1.GameTag.BACON_OLD_GOD_ATTACK]) !== null && _b !== void 0 ? _b : secret.scriptDataNum2) !== null && _c !== void 0 ? _c : 1;
30
+ };
31
+ const readSecretHealth = (secret) => {
32
+ var _a, _b, _c;
33
+ return (_c = (_b = (_a = secret.tags) === null || _a === void 0 ? void 0 : _a[reference_data_1.GameTag.BACON_OLD_GOD_HEALTH]) !== null && _b !== void 0 ? _b : secret.scriptDataNum3) !== null && _c !== void 0 ? _c : 1;
34
+ };
35
+ const writeSecretStats = (secret, attack, health) => {
36
+ var _a;
37
+ secret.scriptDataNum2 = attack;
38
+ secret.scriptDataNum3 = health;
39
+ secret.tags = (_a = secret.tags) !== null && _a !== void 0 ? _a : {};
40
+ secret.tags[reference_data_1.GameTag.BACON_OLD_GOD_ATTACK] = attack;
41
+ secret.tags[reference_data_1.GameTag.BACON_OLD_GOD_HEALTH] = health;
42
+ };
43
+ const buffYourDeity = (hero, board, source, attack, health, gameState) => {
44
+ const onBoard = (0, exports.getOnBoardDeity)(board, gameState.allCards);
45
+ if (onBoard) {
46
+ (0, stats_1.modifyStats)(onBoard, source, attack, health, board, hero, gameState);
47
+ }
48
+ (0, exports.incrementDeitySecretStats)(hero, attack, health);
49
+ };
50
+ exports.buffYourDeity = buffYourDeity;
51
+ const incrementDeitySecretStats = (hero, attack, health) => {
52
+ const secret = (0, exports.getDeitySecret)(hero);
53
+ if (secret) {
54
+ writeSecretStats(secret, readSecretAttack(secret) + attack, readSecretHealth(secret) + health);
55
+ }
56
+ };
57
+ exports.incrementDeitySecretStats = incrementDeitySecretStats;
58
+ const buffTeamDeities = (hero, board, source, attack, health, gameState) => {
59
+ var _a;
60
+ (0, exports.buffYourDeity)(hero, board, source, attack, health, gameState);
61
+ const playerState = (0, utils_1.getPlayerState)(gameState.gameState, hero);
62
+ const teammate = playerState === null || playerState === void 0 ? void 0 : playerState.teammate;
63
+ if (teammate === null || teammate === void 0 ? void 0 : teammate.player) {
64
+ (0, exports.buffYourDeity)(teammate.player, (_a = teammate.board) !== null && _a !== void 0 ? _a : [], source, attack, health, gameState);
65
+ }
66
+ };
67
+ exports.buffTeamDeities = buffTeamDeities;
68
+ const resolveDeityCardId = (secret, gameState) => {
69
+ var _a, _b;
70
+ const dbfId = (_a = secret.scriptDataNum6) !== null && _a !== void 0 ? _a : (_b = secret.tags) === null || _b === void 0 ? void 0 : _b[reference_data_1.GameTag.BACON_GLOBAL_OLD_GOD_DBID];
71
+ if (dbfId) {
72
+ const fromDbf = gameState.allCards.getCardFromDbfId(dbfId);
73
+ if (fromDbf === null || fromDbf === void 0 ? void 0 : fromDbf.id) {
74
+ return fromDbf.id;
75
+ }
76
+ }
77
+ return "BGFYM_000";
78
+ };
79
+ const onFriendlyAberrationDied = (deadEntity, _deadEntityIndexFromRight, board, hero, otherBoard, otherHero, gameState) => {
80
+ var _a, _b;
81
+ if (!(0, exports.isAberration)(deadEntity, hero, gameState)) {
82
+ return [];
83
+ }
84
+ const secret = (0, exports.getDeitySecret)(hero);
85
+ if (!secret || secret.triggered) {
86
+ return [];
87
+ }
88
+ const remaining = ((_a = secret.scriptDataNum1) !== null && _a !== void 0 ? _a : 3) - 1;
89
+ secret.scriptDataNum1 = remaining;
90
+ if (remaining > 0) {
91
+ return [];
92
+ }
93
+ secret.triggered = true;
94
+ const cardId = resolveDeityCardId(secret, gameState);
95
+ const attack = readSecretAttack(secret);
96
+ const health = Math.max(1, readSecretHealth(secret));
97
+ const spawns = (0, deathrattle_spawns_1.spawnEntities)(cardId, 1, board, hero, otherBoard, otherHero, gameState, deadEntity.friendly, false, false, true);
98
+ for (const spawn of spawns) {
99
+ spawn.attack = attack;
100
+ spawn.maxAttack = attack;
101
+ spawn.health = health;
102
+ spawn.maxHealth = health;
103
+ if ((_b = hero.trinkets) === null || _b === void 0 ? void 0 : _b.some((t) => t.cardId === "BG36_MagicItem_416")) {
104
+ spawn.reborn = true;
105
+ }
106
+ }
107
+ if (spawns[0]) {
108
+ gameState.spectator.registerPowerTarget(secret, spawns[0], board, hero, otherHero);
109
+ }
110
+ for (const spawn of spawns) {
111
+ const impl = _card_mappings_1.cardMappings[spawn.cardId];
112
+ if ((0, card_interface_1.hasOnAwaken)(impl)) {
113
+ impl.onAwaken(spawn, {
114
+ hero,
115
+ board,
116
+ otherHero,
117
+ otherBoard,
118
+ gameState,
119
+ });
120
+ }
121
+ }
122
+ return [...spawns];
123
+ };
124
+ exports.onFriendlyAberrationDied = onFriendlyAberrationDied;
125
+ //# sourceMappingURL=deity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deity.js","sourceRoot":"","sources":["../../src/simulation/deity.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Deity / BG_OldGod secret.\r\n * After 3 friendly Aberrations die each combat, awaken C'Thun or Y'Shaarj with stored stats.\r\n * scriptDataNum1 = deaths remaining, tags BACON_OLD_GOD_ATTACK/HEALTH = atk/hp, scriptDataNum6 = deity dbfId.\r\n */\r\nimport { AllCardsService, GameTag, Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { BoardSecret } from '../board-secret';\r\nimport { hasOnAwaken } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { getPlayerState, hasCorrectTribe, hasEntityMechanic, hasMechanic } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const isDeityCard = (cardId: string, allCards: AllCardsService): boolean => {\r\n\treturn hasMechanic(allCards.getCard(cardId), GameTag.BACON_OLD_GOD);\r\n};\r\n\r\nexport const isAberration = (entity: BoardEntity, hero: BgsPlayerEntity, gameState: FullGameState): boolean => {\r\n\treturn hasCorrectTribe(entity, hero, Race.ABERRATION, gameState.anomalies, gameState.allCards);\r\n};\r\n\r\nexport const getDeitySecret = (hero: BgsPlayerEntity): BoardSecret | undefined => {\r\n\treturn hero.secrets?.find((s) => s.cardId === CardIds.SecretDeityDnt_BG_OldGod);\r\n};\r\n\r\nexport const getOnBoardDeity = (board: BoardEntity[], allCards: AllCardsService): BoardEntity | undefined => {\r\n\treturn board.find(\r\n\t\t(e) => hasEntityMechanic(e, GameTag.BACON_OLD_GOD, allCards) && e.health > 0 && !e.definitelyDead,\r\n\t);\r\n};\r\n\r\nconst readSecretAttack = (secret: BoardSecret): number => {\r\n\treturn secret.tags?.[GameTag.BACON_OLD_GOD_ATTACK] ?? secret.scriptDataNum2 ?? 1;\r\n};\r\n\r\nconst readSecretHealth = (secret: BoardSecret): number => {\r\n\treturn secret.tags?.[GameTag.BACON_OLD_GOD_HEALTH] ?? secret.scriptDataNum3 ?? 1;\r\n};\r\n\r\nconst writeSecretStats = (secret: BoardSecret, attack: number, health: number): void => {\r\n\tsecret.scriptDataNum2 = attack;\r\n\tsecret.scriptDataNum3 = health;\r\n\tsecret.tags = secret.tags ?? {};\r\n\tsecret.tags[GameTag.BACON_OLD_GOD_ATTACK] = attack;\r\n\tsecret.tags[GameTag.BACON_OLD_GOD_HEALTH] = health;\r\n};\r\n\r\nexport const buffYourDeity = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tsource: BoardEntity | BoardSecret | BgsPlayerEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst onBoard = getOnBoardDeity(board, gameState.allCards);\r\n\tif (onBoard) {\r\n\t\tmodifyStats(onBoard, source as BoardEntity, attack, health, board, hero, gameState);\r\n\t}\r\n\tincrementDeitySecretStats(hero, attack, health);\r\n};\r\n\r\nexport const incrementDeitySecretStats = (hero: BgsPlayerEntity, attack: number, health: number): void => {\r\n\tconst secret = getDeitySecret(hero);\r\n\tif (secret) {\r\n\t\twriteSecretStats(secret, readSecretAttack(secret) + attack, readSecretHealth(secret) + health);\r\n\t}\r\n};\r\n\r\nexport const buffTeamDeities = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tsource: BoardEntity,\r\n\tattack: number,\r\n\thealth: number,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tbuffYourDeity(hero, board, source, attack, health, gameState);\r\n\tconst playerState = getPlayerState(gameState.gameState, hero);\r\n\tconst teammate = playerState?.teammate;\r\n\tif (teammate?.player) {\r\n\t\tbuffYourDeity(teammate.player, teammate.board ?? [], source, attack, health, gameState);\r\n\t}\r\n};\r\n\r\nconst resolveDeityCardId = (secret: BoardSecret, gameState: FullGameState): string => {\r\n\tconst dbfId = secret.scriptDataNum6 ?? secret.tags?.[GameTag.BACON_GLOBAL_OLD_GOD_DBID];\r\n\tif (dbfId) {\r\n\t\tconst fromDbf = gameState.allCards.getCardFromDbfId(dbfId);\r\n\t\tif (fromDbf?.id) {\r\n\t\t\treturn fromDbf.id;\r\n\t\t}\r\n\t}\r\n\treturn CardIds.Cthun_BGFYM_000;\r\n};\r\n\r\nexport const onFriendlyAberrationDied = (\r\n\tdeadEntity: BoardEntity,\r\n\t_deadEntityIndexFromRight: number,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): BoardEntity[] => {\r\n\tif (!isAberration(deadEntity, hero, gameState)) {\r\n\t\treturn [];\r\n\t}\r\n\tconst secret = getDeitySecret(hero);\r\n\tif (!secret || secret.triggered) {\r\n\t\treturn [];\r\n\t}\r\n\tconst remaining = (secret.scriptDataNum1 ?? 3) - 1;\r\n\tsecret.scriptDataNum1 = remaining;\r\n\tif (remaining > 0) {\r\n\t\treturn [];\r\n\t}\r\n\tsecret.triggered = true;\r\n\tconst cardId = resolveDeityCardId(secret, gameState);\r\n\tconst attack = readSecretAttack(secret);\r\n\tconst health = Math.max(1, readSecretHealth(secret));\r\n\tconst spawns = spawnEntities(\r\n\t\tcardId,\r\n\t\t1,\r\n\t\tboard,\r\n\t\thero,\r\n\t\totherBoard,\r\n\t\totherHero,\r\n\t\tgameState,\r\n\t\tdeadEntity.friendly,\r\n\t\tfalse,\r\n\t\tfalse,\r\n\t\ttrue,\r\n\t);\r\n\tfor (const spawn of spawns) {\r\n\t\tspawn.attack = attack;\r\n\t\tspawn.maxAttack = attack;\r\n\t\tspawn.health = health;\r\n\t\tspawn.maxHealth = health;\r\n\t\tif (hero.trinkets?.some((t) => t.cardId === CardIds.EvilExperiment_BG36_MagicItem_416)) {\r\n\t\t\tspawn.reborn = true;\r\n\t\t}\r\n\t}\r\n\tif (spawns[0]) {\r\n\t\tgameState.spectator.registerPowerTarget(secret, spawns[0], board, hero, otherHero);\r\n\t}\r\n\tfor (const spawn of spawns) {\r\n\t\tconst impl = cardMappings[spawn.cardId];\r\n\t\tif (hasOnAwaken(impl)) {\r\n\t\t\timpl.onAwaken(spawn, {\r\n\t\t\t\thero,\r\n\t\t\t\tboard,\r\n\t\t\t\totherHero,\r\n\t\t\t\totherBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\treturn [...spawns];\r\n};\r\n"]}
@@ -0,0 +1,5 @@
1
+ import { BgsPlayerEntity } from '../bgs-player-entity';
2
+ import { BoardEntity } from '../board-entity';
3
+ import { FullGameState } from './internal-game-state';
4
+ export declare const discardCards: (cards: readonly BoardEntity[], hero: BgsPlayerEntity, board: BoardEntity[], otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState) => number;
5
+ export declare const discardCard: (card: BoardEntity, hero: BgsPlayerEntity, board: BoardEntity[], otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState) => boolean;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.discardCard = exports.discardCards = void 0;
4
+ const card_interface_1 = require("../cards/card.interface");
5
+ const _card_mappings_1 = require("../cards/impl/_card-mappings");
6
+ const discardCards = (cards, hero, board, otherBoard, otherHero, gameState) => {
7
+ let discarded = 0;
8
+ for (const card of cards) {
9
+ if ((0, exports.discardCard)(card, hero, board, otherBoard, otherHero, gameState)) {
10
+ discarded++;
11
+ }
12
+ }
13
+ return discarded;
14
+ };
15
+ exports.discardCards = discardCards;
16
+ const discardCard = (card, hero, board, otherBoard, otherHero, gameState) => {
17
+ var _a, _b;
18
+ const hand = (_a = hero.hand) !== null && _a !== void 0 ? _a : [];
19
+ const index = hand.indexOf(card);
20
+ if (index === -1) {
21
+ return false;
22
+ }
23
+ hand.splice(index, 1);
24
+ hero.globalInfo.CardsDiscardedThisGame = ((_b = hero.globalInfo.CardsDiscardedThisGame) !== null && _b !== void 0 ? _b : 0) + 1;
25
+ const input = {
26
+ discarded: card,
27
+ hero,
28
+ board,
29
+ otherHero,
30
+ otherBoard,
31
+ gameState,
32
+ };
33
+ const discardedImpl = _card_mappings_1.cardMappings[card.cardId];
34
+ if ((0, card_interface_1.hasOnThisDiscarded)(discardedImpl)) {
35
+ discardedImpl.onThisDiscarded(card, input);
36
+ }
37
+ for (const entity of board) {
38
+ if (entity.health <= 0 || entity.definitelyDead) {
39
+ continue;
40
+ }
41
+ const impl = _card_mappings_1.cardMappings[entity.cardId];
42
+ if ((0, card_interface_1.hasOnDiscard)(impl)) {
43
+ impl.onDiscard(entity, input);
44
+ }
45
+ }
46
+ return true;
47
+ };
48
+ exports.discardCard = discardCard;
49
+ //# sourceMappingURL=discard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discard.js","sourceRoot":"","sources":["../../src/simulation/discard.ts"],"names":[],"mappings":";;;AAEA,4DAAyF;AACzF,iEAA4D;AAGrD,MAAM,YAAY,GAAG,CAC3B,KAA6B,EAC7B,IAAqB,EACrB,KAAoB,EACpB,UAAyB,EACzB,SAA0B,EAC1B,SAAwB,EACf,EAAE;IACX,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACzB,IAAI,IAAA,mBAAW,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;YACrE,SAAS,EAAE,CAAC;SACZ;KACD;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AAfW,QAAA,YAAY,gBAevB;AAEK,MAAM,WAAW,GAAG,CAC1B,IAAiB,EACjB,IAAqB,EACrB,KAAoB,EACpB,UAAyB,EACzB,SAA0B,EAC1B,SAAwB,EACd,EAAE;;IACZ,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;QACjB,OAAO,KAAK,CAAC;KACb;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,UAAU,CAAC,sBAAsB,GAAG,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,sBAAsB,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAE3F,MAAM,KAAK,GAAiB;QAC3B,SAAS,EAAE,IAAI;QACf,IAAI;QACJ,KAAK;QACL,SAAS;QACT,UAAU;QACV,SAAS;KACT,CAAC;IAEF,MAAM,aAAa,GAAG,6BAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,IAAA,mCAAkB,EAAC,aAAa,CAAC,EAAE;QACtC,aAAa,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC3C;IAED,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE;YAChD,SAAS;SACT;QACD,MAAM,IAAI,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,IAAA,6BAAY,EAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC9B;KACD;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAxCW,QAAA,WAAW,eAwCtB","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { DiscardInput, hasOnDiscard, hasOnThisDiscarded } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const discardCards = (\r\n\tcards: readonly BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): number => {\r\n\tlet discarded = 0;\r\n\tfor (const card of cards) {\r\n\t\tif (discardCard(card, hero, board, otherBoard, otherHero, gameState)) {\r\n\t\t\tdiscarded++;\r\n\t\t}\r\n\t}\r\n\treturn discarded;\r\n};\r\n\r\nexport const discardCard = (\r\n\tcard: BoardEntity,\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): boolean => {\r\n\tconst hand = hero.hand ?? [];\r\n\tconst index = hand.indexOf(card);\r\n\tif (index === -1) {\r\n\t\treturn false;\r\n\t}\r\n\thand.splice(index, 1);\r\n\thero.globalInfo.CardsDiscardedThisGame = (hero.globalInfo.CardsDiscardedThisGame ?? 0) + 1;\r\n\r\n\tconst input: DiscardInput = {\r\n\t\tdiscarded: card,\r\n\t\thero,\r\n\t\tboard,\r\n\t\totherHero,\r\n\t\totherBoard,\r\n\t\tgameState,\r\n\t};\r\n\r\n\tconst discardedImpl = cardMappings[card.cardId];\r\n\tif (hasOnThisDiscarded(discardedImpl)) {\r\n\t\tdiscardedImpl.onThisDiscarded(card, input);\r\n\t}\r\n\r\n\tfor (const entity of board) {\r\n\t\tif (entity.health <= 0 || entity.definitelyDead) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tconst impl = cardMappings[entity.cardId];\r\n\t\tif (hasOnDiscard(impl)) {\r\n\t\t\timpl.onDiscard(entity, input);\r\n\t\t}\r\n\t}\r\n\treturn true;\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"temp-card-ids.js","sourceRoot":"","sources":["../src/temp-card-ids.ts"],"names":[],"mappings":";;;AAIa,QAAA,WAAW,GAAG,EAAW,CAAC","sourcesContent":["/**\r\n * Placeholder card IDs for Battlegrounds cards not yet in @firestone-hs/reference-data.\r\n * Add fake temporary ids here when needed; migrate to CardIds in card-ids.ts once available.\r\n */\r\nexport const TempCardIds = {} as const;\r\n\r\nexport type TempCardId = (typeof TempCardIds)[keyof typeof TempCardIds];\r\n"]}
1
+ {"version":3,"file":"temp-card-ids.js","sourceRoot":"","sources":["../src/temp-card-ids.ts"],"names":[],"mappings":";;;AAIa,QAAA,WAAW,GAAG,EAAW,CAAC","sourcesContent":["/**\r\n * Placeholder card IDs for Battlegrounds cards not yet in card-ids.ts.\r\n * Migrate to CardIds with a find/replace of `TempCardIds.` → `CardIds.` once the extract lands.\r\n */\r\nexport const TempCardIds = {} as const;\r\n\r\nexport type TempCardId = (typeof TempCardIds)[keyof typeof TempCardIds];\r\n"]}
package/dist/utils.d.ts CHANGED
@@ -27,6 +27,7 @@ export declare const getMinionsOfDifferentTypes: (board: BoardEntity[], hero: Bg
27
27
  export declare const hasMechanic: (card: ReferenceCard, mechanic: GameTag) => boolean;
28
28
  export declare const hasEntityMechanic: (entity: BoardEntity | BoardEnchantment, mechanic: GameTag, allCards: AllCardsService) => boolean;
29
29
  export declare const hasCorrectTribe: (entity: BoardEntity, playerEntity: BgsPlayerEntity, targetTribe: Race, anomalies: readonly string[], allCards: AllCardsService) => boolean;
30
+ export declare const isBattlegroundsSpell: (cardId: string, allCards: AllCardsService) => boolean;
30
31
  export declare const isVolumizer: (cardId: string | number, playerEntity: BgsPlayerEntity, anomalies: readonly string[], allCards: AllCardsService) => boolean;
31
32
  export declare const alreadyHasVolumizerBuff: (entity: BoardEntity, playerEntity: BgsPlayerEntity, gameState: FullGameState) => boolean;
32
33
  export declare const getEffectiveTribesForEntity: (entity: BoardEntity, playerEntity: BgsPlayerEntity, anomalies: readonly string[], allCards: AllCardsService) => readonly Race[];
package/dist/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isDead = exports.copyEntity = exports.getPlayerInitialState = exports.getTeamInitialStates = exports.getTeammateInitialState = exports.getPlayerState = exports.isBoardEntity = exports.isGolden = exports.isPilotedWhirlOTron = exports.isFish = exports.stringifySimpleCard = exports.stringifySimple = exports.normalizeCardIdForSkin = exports.addImpliedMechanics = exports.getRaceEnum = exports.isCorrectTribe = exports.getEffectiveTribesForEntity = exports.alreadyHasVolumizerBuff = exports.isVolumizer = exports.hasCorrectTribe = exports.hasEntityMechanic = exports.hasMechanic = exports.getMinionsOfDifferentTypes = exports.grantStatsToMinionsOfEachType = exports.addStatsToAliveBoard = exports.addStatsToBoard = exports.withTavernSpellStatBuff = exports.getRandomMinionWithHighestHealth = exports.getRandomRevivableMinion = exports.getRandomAliveMinion = exports.grantRandomStats = exports.grantRandomHealth = exports.grantRandomAttack = exports.buildRandomUndeadCreation = exports.buildSingleBoardEntity = void 0;
3
+ exports.isDead = exports.copyEntity = exports.getPlayerInitialState = exports.getTeamInitialStates = exports.getTeammateInitialState = exports.getPlayerState = exports.isBoardEntity = exports.isGolden = exports.isPilotedWhirlOTron = exports.isFish = exports.stringifySimpleCard = exports.stringifySimple = exports.normalizeCardIdForSkin = exports.addImpliedMechanics = exports.getRaceEnum = exports.isCorrectTribe = exports.getEffectiveTribesForEntity = exports.alreadyHasVolumizerBuff = exports.isVolumizer = exports.isBattlegroundsSpell = exports.hasCorrectTribe = exports.hasEntityMechanic = exports.hasMechanic = exports.getMinionsOfDifferentTypes = exports.grantStatsToMinionsOfEachType = exports.addStatsToAliveBoard = exports.addStatsToBoard = exports.withTavernSpellStatBuff = exports.getRandomMinionWithHighestHealth = exports.getRandomRevivableMinion = exports.getRandomAliveMinion = exports.grantRandomStats = exports.grantRandomHealth = exports.grantRandomAttack = exports.buildRandomUndeadCreation = exports.buildSingleBoardEntity = 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");
@@ -373,6 +373,11 @@ const hasCorrectTribe = (entity, playerEntity, targetTribe, anomalies, allCards)
373
373
  (effectiveTribesForEntity.includes(targetTribe) || effectiveTribesForEntity.includes(reference_data_1.Race.ALL)));
374
374
  };
375
375
  exports.hasCorrectTribe = hasCorrectTribe;
376
+ const isBattlegroundsSpell = (cardId, allCards) => {
377
+ var _a, _b;
378
+ return ((_b = (_a = allCards.getCard(cardId)) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.toUpperCase()) === reference_data_1.CardType[reference_data_1.CardType.BATTLEGROUND_SPELL];
379
+ };
380
+ exports.isBattlegroundsSpell = isBattlegroundsSpell;
376
381
  const isVolumizer = (cardId, playerEntity, anomalies, allCards) => {
377
382
  var _a;
378
383
  if (cardId == null) {
@@ -480,7 +485,7 @@ const TWO_CHARGES_IDS = new Set([
480
485
  "BG30_111_G",
481
486
  ]);
482
487
  const addImpliedMechanics = (entity, cardsData) => {
483
- var _a, _b;
488
+ var _a, _b, _c, _d;
484
489
  entity.cleave = CLEAVE_IDS.has(entity.cardId);
485
490
  entity.cantAttack = CANT_ATTACK_IDS.has(entity.cardId);
486
491
  entity.divineShield = entity.divineShield || entity.hadDivineShield;
@@ -488,6 +493,12 @@ const addImpliedMechanics = (entity, cardsData) => {
488
493
  entity.divineShield = true;
489
494
  entity.extraDivineShieldCharges = ((_b = entity.extraDivineShieldCharges) !== null && _b !== void 0 ? _b : 0) + toreths_blessing_1.extraHits;
490
495
  }
496
+ if (entity.cardId === "BG36_360t4" ||
497
+ entity.cardId === "BG36_360_Gt4") {
498
+ const hitsToBreak = (_c = entity.scriptDataNum1) !== null && _c !== void 0 ? _c : (entity.cardId === "BG36_360_Gt4" ? 4 : 3);
499
+ entity.divineShield = true;
500
+ entity.extraDivineShieldCharges = ((_d = entity.extraDivineShieldCharges) !== null && _d !== void 0 ? _d : 0) + Math.max(0, hitsToBreak - 1);
501
+ }
491
502
  entity.immuneWhenAttackCharges = IMMUNE_WHEN_ATTACK_IDS.has(entity.cardId) ? 99999 : null;
492
503
  entity.frenzyChargesLeft =
493
504
  entity.cardId === "BG20_204_G"