@firestone-hs/simulate-bgs-battle 1.1.751 → 1.1.753
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.
- package/dist/bgs-player-entity.d.ts +1 -0
- package/dist/bgs-player-entity.js.map +1 -1
- package/dist/board-secret.d.ts +5 -0
- package/dist/board-secret.js.map +1 -1
- package/dist/cards/card.interface.d.ts +34 -0
- package/dist/cards/card.interface.js +10 -2
- package/dist/cards/card.interface.js.map +1 -1
- package/dist/cards/impl/_card-mappings.js +66 -0
- package/dist/cards/impl/_card-mappings.js.map +1 -1
- package/dist/cards/impl/bg-spell/energizing-chamber.d.ts +2 -0
- package/dist/cards/impl/bg-spell/energizing-chamber.js +27 -0
- package/dist/cards/impl/bg-spell/energizing-chamber.js.map +1 -0
- package/dist/cards/impl/bg-spell/sludge-corrosion.d.ts +2 -0
- package/dist/cards/impl/bg-spell/sludge-corrosion.js +28 -0
- package/dist/cards/impl/bg-spell/sludge-corrosion.js.map +1 -0
- package/dist/cards/impl/minion/cthrax-wrecker.d.ts +2 -0
- package/dist/cards/impl/minion/cthrax-wrecker.js +25 -0
- package/dist/cards/impl/minion/cthrax-wrecker.js.map +1 -0
- package/dist/cards/impl/minion/cthun.d.ts +2 -0
- package/dist/cards/impl/minion/cthun.js +29 -0
- package/dist/cards/impl/minion/cthun.js.map +1 -0
- package/dist/cards/impl/minion/cutthroat-kthir.d.ts +2 -0
- package/dist/cards/impl/minion/cutthroat-kthir.js +16 -0
- package/dist/cards/impl/minion/cutthroat-kthir.js.map +1 -0
- package/dist/cards/impl/minion/dark-paradox.d.ts +4 -0
- package/dist/cards/impl/minion/dark-paradox.js +109 -0
- package/dist/cards/impl/minion/dark-paradox.js.map +1 -0
- package/dist/cards/impl/minion/dark-puppeteer.d.ts +2 -0
- package/dist/cards/impl/minion/dark-puppeteer.js +13 -0
- package/dist/cards/impl/minion/dark-puppeteer.js.map +1 -0
- package/dist/cards/impl/minion/de-volition-ist.d.ts +2 -0
- package/dist/cards/impl/minion/de-volition-ist.js +23 -0
- package/dist/cards/impl/minion/de-volition-ist.js.map +1 -0
- package/dist/cards/impl/minion/drifting-sacrifice.d.ts +2 -0
- package/dist/cards/impl/minion/drifting-sacrifice.js +14 -0
- package/dist/cards/impl/minion/drifting-sacrifice.js.map +1 -0
- package/dist/cards/impl/minion/faceless-converter.d.ts +2 -0
- package/dist/cards/impl/minion/faceless-converter.js +14 -0
- package/dist/cards/impl/minion/faceless-converter.js.map +1 -0
- package/dist/cards/impl/minion/fetid-corroder.d.ts +2 -0
- package/dist/cards/impl/minion/fetid-corroder.js +13 -0
- package/dist/cards/impl/minion/fetid-corroder.js.map +1 -0
- package/dist/cards/impl/minion/hackerfin.js +4 -3
- package/dist/cards/impl/minion/hackerfin.js.map +1 -1
- package/dist/cards/impl/minion/harbinger-aphlass.d.ts +2 -0
- package/dist/cards/impl/minion/harbinger-aphlass.js +17 -0
- package/dist/cards/impl/minion/harbinger-aphlass.js.map +1 -0
- package/dist/cards/impl/minion/heroic-broodmother.d.ts +2 -0
- package/dist/cards/impl/minion/heroic-broodmother.js +27 -0
- package/dist/cards/impl/minion/heroic-broodmother.js.map +1 -0
- package/dist/cards/impl/minion/hopebringer.d.ts +2 -0
- package/dist/cards/impl/minion/hopebringer.js +26 -0
- package/dist/cards/impl/minion/hopebringer.js.map +1 -0
- package/dist/cards/impl/minion/iron-groundskeeper.d.ts +2 -0
- package/dist/cards/impl/minion/iron-groundskeeper.js +13 -0
- package/dist/cards/impl/minion/iron-groundskeeper.js.map +1 -0
- package/dist/cards/impl/minion/joyous.d.ts +2 -0
- package/dist/cards/impl/minion/joyous.js +15 -0
- package/dist/cards/impl/minion/joyous.js.map +1 -0
- package/dist/cards/impl/minion/lichling-hoarder.d.ts +2 -0
- package/dist/cards/impl/minion/lichling-hoarder.js +26 -0
- package/dist/cards/impl/minion/lichling-hoarder.js.map +1 -0
- package/dist/cards/impl/minion/mindbender-ghursha.d.ts +2 -0
- package/dist/cards/impl/minion/mindbender-ghursha.js +19 -0
- package/dist/cards/impl/minion/mindbender-ghursha.js.map +1 -0
- package/dist/cards/impl/minion/mysterious-kthir.d.ts +2 -0
- package/dist/cards/impl/minion/mysterious-kthir.js +25 -0
- package/dist/cards/impl/minion/mysterious-kthir.js.map +1 -0
- package/dist/cards/impl/minion/nightmare-corroder.d.ts +2 -0
- package/dist/cards/impl/minion/nightmare-corroder.js +13 -0
- package/dist/cards/impl/minion/nightmare-corroder.js.map +1 -0
- package/dist/cards/impl/minion/nraqi-sapper.d.ts +2 -0
- package/dist/cards/impl/minion/nraqi-sapper.js +20 -0
- package/dist/cards/impl/minion/nraqi-sapper.js.map +1 -0
- package/dist/cards/impl/minion/parasitic-fleshling.d.ts +2 -0
- package/dist/cards/impl/minion/parasitic-fleshling.js +18 -0
- package/dist/cards/impl/minion/parasitic-fleshling.js.map +1 -0
- package/dist/cards/impl/minion/resourceful-robot.d.ts +2 -0
- package/dist/cards/impl/minion/resourceful-robot.js +21 -0
- package/dist/cards/impl/minion/resourceful-robot.js.map +1 -0
- package/dist/cards/impl/minion/sha-of-fear.d.ts +2 -0
- package/dist/cards/impl/minion/sha-of-fear.js +18 -0
- package/dist/cards/impl/minion/sha-of-fear.js.map +1 -0
- package/dist/cards/impl/minion/the-shadow-of-doubt.d.ts +2 -0
- package/dist/cards/impl/minion/the-shadow-of-doubt.js +14 -0
- package/dist/cards/impl/minion/the-shadow-of-doubt.js.map +1 -0
- package/dist/cards/impl/minion/underrot-spawn.d.ts +2 -0
- package/dist/cards/impl/minion/underrot-spawn.js +21 -0
- package/dist/cards/impl/minion/underrot-spawn.js.map +1 -0
- package/dist/cards/impl/minion/unwilling-slacker.d.ts +2 -0
- package/dist/cards/impl/minion/unwilling-slacker.js +14 -0
- package/dist/cards/impl/minion/unwilling-slacker.js.map +1 -0
- package/dist/cards/impl/minion/vicious-mindslasher.d.ts +2 -0
- package/dist/cards/impl/minion/vicious-mindslasher.js +22 -0
- package/dist/cards/impl/minion/vicious-mindslasher.js.map +1 -0
- package/dist/cards/impl/minion/yshaarj.d.ts +2 -0
- package/dist/cards/impl/minion/yshaarj.js +30 -0
- package/dist/cards/impl/minion/yshaarj.js.map +1 -0
- package/dist/cards/impl/trinket/converter-portrait.d.ts +2 -0
- package/dist/cards/impl/trinket/converter-portrait.js +19 -0
- package/dist/cards/impl/trinket/converter-portrait.js.map +1 -0
- package/dist/cards/impl/trinket/corrupted-baton.d.ts +2 -0
- package/dist/cards/impl/trinket/corrupted-baton.js +12 -0
- package/dist/cards/impl/trinket/corrupted-baton.js.map +1 -0
- package/dist/cards/impl/trinket/snarky-portrait.d.ts +2 -0
- package/dist/cards/impl/trinket/snarky-portrait.js +24 -0
- package/dist/cards/impl/trinket/snarky-portrait.js.map +1 -0
- package/dist/mechanics/player-global-effects.d.ts +1 -0
- package/dist/mechanics/player-global-effects.js +24 -1
- package/dist/mechanics/player-global-effects.js.map +1 -1
- package/dist/services/card-ids.d.ts +314 -5
- package/dist/services/card-ids.js.map +1 -1
- package/dist/simulation/after-attack.js +13 -0
- package/dist/simulation/after-attack.js.map +1 -1
- package/dist/simulation/auras.js +31 -30
- package/dist/simulation/auras.js.map +1 -1
- package/dist/simulation/battlecries.js +2 -0
- package/dist/simulation/battlecries.js.map +1 -1
- package/dist/simulation/death-effects.js +2 -0
- package/dist/simulation/death-effects.js.map +1 -1
- package/dist/simulation/deity.d.ts +13 -0
- package/dist/simulation/deity.js +125 -0
- package/dist/simulation/deity.js.map +1 -0
- package/dist/simulation/discard.d.ts +5 -0
- package/dist/simulation/discard.js +49 -0
- package/dist/simulation/discard.js.map +1 -0
- package/dist/temp-card-ids.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +13 -2
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
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"
|