@firestone-hs/simulate-bgs-battle 1.1.753 → 1.1.754
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/cards/impl/minion/cthrax-wrecker.js +2 -3
- package/dist/cards/impl/minion/cthrax-wrecker.js.map +1 -1
- package/dist/cards/impl/minion/cutthroat-kthir.js +2 -3
- package/dist/cards/impl/minion/cutthroat-kthir.js.map +1 -1
- package/dist/cards/impl/minion/dark-paradox.js +2 -3
- package/dist/cards/impl/minion/dark-paradox.js.map +1 -1
- package/dist/cards/impl/minion/dark-puppeteer.js +3 -3
- package/dist/cards/impl/minion/dark-puppeteer.js.map +1 -1
- package/dist/cards/impl/minion/drifting-sacrifice.js +2 -3
- package/dist/cards/impl/minion/drifting-sacrifice.js.map +1 -1
- package/dist/cards/impl/minion/drustfallen-butcher.js +1 -1
- package/dist/cards/impl/minion/drustfallen-butcher.js.map +1 -1
- package/dist/cards/impl/minion/echoing-roar.js +1 -2
- package/dist/cards/impl/minion/echoing-roar.js.map +1 -1
- package/dist/cards/impl/minion/faceless-converter.js +2 -3
- package/dist/cards/impl/minion/faceless-converter.js.map +1 -1
- package/dist/cards/impl/minion/harbinger-aphlass.js +3 -4
- package/dist/cards/impl/minion/harbinger-aphlass.js.map +1 -1
- package/dist/cards/impl/minion/hopebringer.js +4 -6
- package/dist/cards/impl/minion/hopebringer.js.map +1 -1
- package/dist/cards/impl/minion/joyous.js +2 -3
- package/dist/cards/impl/minion/joyous.js.map +1 -1
- package/dist/cards/impl/minion/lurking-leviathan.js +1 -2
- package/dist/cards/impl/minion/lurking-leviathan.js.map +1 -1
- package/dist/cards/impl/minion/mindbender-ghursha.js +2 -3
- package/dist/cards/impl/minion/mindbender-ghursha.js.map +1 -1
- package/dist/cards/impl/minion/mysterious-kthir.js +4 -4
- package/dist/cards/impl/minion/mysterious-kthir.js.map +1 -1
- package/dist/cards/impl/minion/ravaging-scorpid.js +1 -1
- package/dist/cards/impl/minion/ravaging-scorpid.js.map +1 -1
- package/dist/cards/impl/minion/sha-of-fear.js +2 -3
- package/dist/cards/impl/minion/sha-of-fear.js.map +1 -1
- package/dist/cards/impl/minion/skeletal-strafer.js +4 -6
- package/dist/cards/impl/minion/skeletal-strafer.js.map +1 -1
- package/dist/cards/impl/minion/the-shadow-of-doubt.js +2 -3
- package/dist/cards/impl/minion/the-shadow-of-doubt.js.map +1 -1
- package/dist/cards/impl/minion/twilight-primordium.js +1 -2
- package/dist/cards/impl/minion/twilight-primordium.js.map +1 -1
- package/dist/cards/impl/minion/vicious-mindslasher.js +4 -4
- package/dist/cards/impl/minion/vicious-mindslasher.js.map +1 -1
- package/dist/cards/impl/trinket/archaic-scroll.js +3 -3
- package/dist/cards/impl/trinket/archaic-scroll.js.map +1 -1
- package/dist/cards/impl/trinket/bloodbound-earrings.js +1 -2
- package/dist/cards/impl/trinket/bloodbound-earrings.js.map +1 -1
- package/dist/cards/impl/trinket/copper-coil.js +5 -5
- package/dist/cards/impl/trinket/copper-coil.js.map +1 -1
- package/dist/cards/impl/trinket/eclectic-shrine.js +2 -3
- package/dist/cards/impl/trinket/eclectic-shrine.js.map +1 -1
- package/dist/cards/impl/trinket/tide-raiser-portrait.js +1 -2
- package/dist/cards/impl/trinket/tide-raiser-portrait.js.map +1 -1
- package/dist/simulation/battlecries.js +9 -9
- package/dist/simulation/battlecries.js.map +1 -1
- package/dist/simulation/death-effects.js +6 -2
- package/dist/simulation/death-effects.js.map +1 -1
- package/dist/simulation/deity.d.ts +5 -0
- package/dist/simulation/deity.js +25 -10
- package/dist/simulation/deity.js.map +1 -1
- package/dist/simulation/reborn.js +7 -0
- package/dist/simulation/reborn.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,8 +4,8 @@ exports.applyOnDeathEffects = exports.applyAfterDeathEffects = void 0;
|
|
|
4
4
|
const card_interface_1 = require("../cards/card.interface");
|
|
5
5
|
const _card_mappings_1 = require("../cards/impl/_card-mappings");
|
|
6
6
|
const utils_1 = require("../services/utils");
|
|
7
|
-
const deity_1 = require("./deity");
|
|
8
7
|
const deathrattle_spawns_1 = require("./deathrattle-spawns");
|
|
8
|
+
const deity_1 = require("./deity");
|
|
9
9
|
const spawns_1 = require("./spawns");
|
|
10
10
|
const stats_1 = require("./stats");
|
|
11
11
|
const entity_utils_1 = require("./utils/entity-utils");
|
|
@@ -14,6 +14,11 @@ const applyAfterDeathEffects = (deadEntity, deadEntityIndexFromRight, boardWithD
|
|
|
14
14
|
const spawnsFromSecrets = handleAfterMinionDeathEffects(deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);
|
|
15
15
|
allSpawns.push(...spawnsFromSecrets);
|
|
16
16
|
(0, spawns_1.performEntitySpawns)(allSpawns, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, deadEntityIndexFromRight, otherBoard, otherBoardHero, gameState);
|
|
17
|
+
const deitySpawns = (0, deity_1.onFriendlyAberrationDied)(deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);
|
|
18
|
+
if (deitySpawns.length > 0) {
|
|
19
|
+
(0, spawns_1.performEntitySpawns)(deitySpawns, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, 0, otherBoard, otherBoardHero, gameState);
|
|
20
|
+
allSpawns.push(...deitySpawns);
|
|
21
|
+
}
|
|
17
22
|
return allSpawns;
|
|
18
23
|
};
|
|
19
24
|
exports.applyAfterDeathEffects = applyAfterDeathEffects;
|
|
@@ -49,7 +54,6 @@ const handleAfterMinionDeathEffects = (deadEntity, deadEntityIndexFromRight, boa
|
|
|
49
54
|
});
|
|
50
55
|
}
|
|
51
56
|
}
|
|
52
|
-
allSpawns.push(...(0, deity_1.onFriendlyAberrationDied)(deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState));
|
|
53
57
|
for (const secret of ((_b = boardWithDeadEntityHero.secrets) !== null && _b !== void 0 ? _b : []).filter((s) => !s.triggered)) {
|
|
54
58
|
switch (secret.cardId) {
|
|
55
59
|
case "TB_Bacon_Secrets_08":
|
|
@@ -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 { 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"]}
|
|
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 { onFriendlyAberrationDied } from './deity';\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\tconst deitySpawns = onFriendlyAberrationDied(\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\tif (deitySpawns.length > 0) {\r\n\t\tperformEntitySpawns(\r\n\t\t\tdeitySpawns,\r\n\t\t\tboardWithDeadEntity,\r\n\t\t\tboardWithDeadEntityHero,\r\n\t\t\tdeadEntity,\r\n\t\t\t0,\r\n\t\t\totherBoard,\r\n\t\t\totherBoardHero,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tallSpawns.push(...deitySpawns);\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"]}
|
|
@@ -7,6 +7,11 @@ export declare const isDeityCard: (cardId: string, allCards: AllCardsService) =>
|
|
|
7
7
|
export declare const isAberration: (entity: BoardEntity, hero: BgsPlayerEntity, gameState: FullGameState) => boolean;
|
|
8
8
|
export declare const getDeitySecret: (hero: BgsPlayerEntity) => BoardSecret | undefined;
|
|
9
9
|
export declare const getOnBoardDeity: (board: BoardEntity[], allCards: AllCardsService) => BoardEntity | undefined;
|
|
10
|
+
export declare const getDeityBaseStats: (hero: BgsPlayerEntity, entity?: BoardEntity) => {
|
|
11
|
+
attack: number;
|
|
12
|
+
health: number;
|
|
13
|
+
};
|
|
14
|
+
export declare const applyDeityBaseStats: (entity: BoardEntity, hero: BgsPlayerEntity) => void;
|
|
10
15
|
export declare const buffYourDeity: (hero: BgsPlayerEntity, board: BoardEntity[], source: BoardEntity | BoardSecret | BgsPlayerEntity, attack: number, health: number, gameState: FullGameState) => void;
|
|
11
16
|
export declare const incrementDeitySecretStats: (hero: BgsPlayerEntity, attack: number, health: number) => void;
|
|
12
17
|
export declare const buffTeamDeities: (hero: BgsPlayerEntity, board: BoardEntity[], source: BoardEntity, attack: number, health: number, gameState: FullGameState) => void;
|
package/dist/simulation/deity.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
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;
|
|
3
|
+
exports.onFriendlyAberrationDied = exports.buffTeamDeities = exports.incrementDeitySecretStats = exports.buffYourDeity = exports.applyDeityBaseStats = exports.getDeityBaseStats = exports.getOnBoardDeity = exports.getDeitySecret = exports.isAberration = exports.isDeityCard = 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");
|
|
@@ -40,6 +40,26 @@ const writeSecretStats = (secret, attack, health) => {
|
|
|
40
40
|
secret.tags[reference_data_1.GameTag.BACON_OLD_GOD_ATTACK] = attack;
|
|
41
41
|
secret.tags[reference_data_1.GameTag.BACON_OLD_GOD_HEALTH] = health;
|
|
42
42
|
};
|
|
43
|
+
const getDeityBaseStats = (hero, entity) => {
|
|
44
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
45
|
+
const secret = (0, exports.getDeitySecret)(hero);
|
|
46
|
+
const attack = (_e = (_d = (_b = (_a = secret === null || secret === void 0 ? void 0 : secret.tags) === null || _a === void 0 ? void 0 : _a[reference_data_1.GameTag.BACON_OLD_GOD_ATTACK]) !== null && _b !== void 0 ? _b : (_c = entity === null || entity === void 0 ? void 0 : entity.tags) === null || _c === void 0 ? void 0 : _c[reference_data_1.GameTag.BACON_OLD_GOD_ATTACK]) !== null && _d !== void 0 ? _d : secret === null || secret === void 0 ? void 0 : secret.scriptDataNum2) !== null && _e !== void 0 ? _e : 1;
|
|
47
|
+
const health = Math.max(1, (_k = (_j = (_g = (_f = secret === null || secret === void 0 ? void 0 : secret.tags) === null || _f === void 0 ? void 0 : _f[reference_data_1.GameTag.BACON_OLD_GOD_HEALTH]) !== null && _g !== void 0 ? _g : (_h = entity === null || entity === void 0 ? void 0 : entity.tags) === null || _h === void 0 ? void 0 : _h[reference_data_1.GameTag.BACON_OLD_GOD_HEALTH]) !== null && _j !== void 0 ? _j : secret === null || secret === void 0 ? void 0 : secret.scriptDataNum3) !== null && _k !== void 0 ? _k : 1);
|
|
48
|
+
return { attack, health };
|
|
49
|
+
};
|
|
50
|
+
exports.getDeityBaseStats = getDeityBaseStats;
|
|
51
|
+
const applyDeityBaseStats = (entity, hero) => {
|
|
52
|
+
var _a;
|
|
53
|
+
const { attack, health } = (0, exports.getDeityBaseStats)(hero, entity);
|
|
54
|
+
entity.attack = attack;
|
|
55
|
+
entity.maxAttack = attack;
|
|
56
|
+
entity.health = health;
|
|
57
|
+
entity.maxHealth = health;
|
|
58
|
+
entity.tags = (_a = entity.tags) !== null && _a !== void 0 ? _a : {};
|
|
59
|
+
entity.tags[reference_data_1.GameTag.BACON_OLD_GOD_ATTACK] = attack;
|
|
60
|
+
entity.tags[reference_data_1.GameTag.BACON_OLD_GOD_HEALTH] = health;
|
|
61
|
+
};
|
|
62
|
+
exports.applyDeityBaseStats = applyDeityBaseStats;
|
|
43
63
|
const buffYourDeity = (hero, board, source, attack, health, gameState) => {
|
|
44
64
|
const onBoard = (0, exports.getOnBoardDeity)(board, gameState.allCards);
|
|
45
65
|
if (onBoard) {
|
|
@@ -77,7 +97,7 @@ const resolveDeityCardId = (secret, gameState) => {
|
|
|
77
97
|
return "BGFYM_000";
|
|
78
98
|
};
|
|
79
99
|
const onFriendlyAberrationDied = (deadEntity, _deadEntityIndexFromRight, board, hero, otherBoard, otherHero, gameState) => {
|
|
80
|
-
var _a
|
|
100
|
+
var _a;
|
|
81
101
|
if (!(0, exports.isAberration)(deadEntity, hero, gameState)) {
|
|
82
102
|
return [];
|
|
83
103
|
}
|
|
@@ -85,22 +105,17 @@ const onFriendlyAberrationDied = (deadEntity, _deadEntityIndexFromRight, board,
|
|
|
85
105
|
if (!secret || secret.triggered) {
|
|
86
106
|
return [];
|
|
87
107
|
}
|
|
88
|
-
const remaining = (
|
|
108
|
+
const remaining = (secret.scriptDataNum1 || 3) - 1;
|
|
89
109
|
secret.scriptDataNum1 = remaining;
|
|
90
110
|
if (remaining > 0) {
|
|
91
111
|
return [];
|
|
92
112
|
}
|
|
93
113
|
secret.triggered = true;
|
|
94
114
|
const cardId = resolveDeityCardId(secret, gameState);
|
|
95
|
-
const attack = readSecretAttack(secret);
|
|
96
|
-
const health = Math.max(1, readSecretHealth(secret));
|
|
97
115
|
const spawns = (0, deathrattle_spawns_1.spawnEntities)(cardId, 1, board, hero, otherBoard, otherHero, gameState, deadEntity.friendly, false, false, true);
|
|
98
116
|
for (const spawn of spawns) {
|
|
99
|
-
spawn
|
|
100
|
-
|
|
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")) {
|
|
117
|
+
(0, exports.applyDeityBaseStats)(spawn, hero);
|
|
118
|
+
if ((_a = hero.trinkets) === null || _a === void 0 ? void 0 : _a.some((t) => t.cardId === "BG36_MagicItem_416")) {
|
|
104
119
|
spawn.reborn = true;
|
|
105
120
|
}
|
|
106
121
|
}
|
|
@@ -1 +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"]}
|
|
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 getDeityBaseStats = (\r\n\thero: BgsPlayerEntity,\r\n\tentity?: BoardEntity,\r\n): { attack: number; health: number } => {\r\n\tconst secret = getDeitySecret(hero);\r\n\tconst attack =\r\n\t\tsecret?.tags?.[GameTag.BACON_OLD_GOD_ATTACK] ??\r\n\t\tentity?.tags?.[GameTag.BACON_OLD_GOD_ATTACK] ??\r\n\t\tsecret?.scriptDataNum2 ??\r\n\t\t1;\r\n\tconst health = Math.max(\r\n\t\t1,\r\n\t\tsecret?.tags?.[GameTag.BACON_OLD_GOD_HEALTH] ??\r\n\t\t\tentity?.tags?.[GameTag.BACON_OLD_GOD_HEALTH] ??\r\n\t\t\tsecret?.scriptDataNum3 ??\r\n\t\t\t1,\r\n\t);\r\n\treturn { attack, health };\r\n};\r\n\r\nexport const applyDeityBaseStats = (entity: BoardEntity, hero: BgsPlayerEntity): void => {\r\n\tconst { attack, health } = getDeityBaseStats(hero, entity);\r\n\tentity.attack = attack;\r\n\tentity.maxAttack = attack;\r\n\tentity.health = health;\r\n\tentity.maxHealth = health;\r\n\tentity.tags = entity.tags ?? {};\r\n\tentity.tags[GameTag.BACON_OLD_GOD_ATTACK] = attack;\r\n\tentity.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 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\tapplyDeityBaseStats(spawn, hero);\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"]}
|
|
@@ -7,6 +7,7 @@ const persisting_horror_1 = require("../cards/impl/enchantments/persisting-horro
|
|
|
7
7
|
const sinrunner_blanchy_1 = require("../cards/impl/minion/sinrunner-blanchy");
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
9
|
const deathrattle_spawns_1 = require("./deathrattle-spawns");
|
|
10
|
+
const deity_1 = require("./deity");
|
|
10
11
|
const spawns_1 = require("./spawns");
|
|
11
12
|
const entity_utils_1 = require("./utils/entity-utils");
|
|
12
13
|
const handleRebornForEntity = (boardWithKilledMinion, boardWithKilledMinionHero, deadEntity, deadMinionIndexFromRight, opponentBoard, opponentBoardHero, gameState) => {
|
|
@@ -35,6 +36,12 @@ const handleRebornForEntity = (boardWithKilledMinion, boardWithKilledMinionHero,
|
|
|
35
36
|
if (!entitiesFromReborn.length) {
|
|
36
37
|
return;
|
|
37
38
|
}
|
|
39
|
+
if ((0, deity_1.isDeityCard)(deadEntity.cardId, gameState.allCards)) {
|
|
40
|
+
for (const entity of entitiesFromReborn) {
|
|
41
|
+
(0, deity_1.applyDeityBaseStats)(entity, boardWithKilledMinionHero);
|
|
42
|
+
entity.health = 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
38
45
|
if (deadEntity.cardId === "BG30_109" ||
|
|
39
46
|
deadEntity.cardId === "BG30_109_G") {
|
|
40
47
|
entitiesFromReborn.forEach((e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reborn.js","sourceRoot":"","sources":["../../src/simulation/reborn.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport {\r\n\thasAfterReborn,\r\n\thasBeforeRebornSelfEffect,\r\n\thasRebornEffect,\r\n\thasRebornSelfAttributeTransfer,\r\n\thasRebornSelfEffect,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { hasPersistingHorror } from '../cards/impl/enchantments/persisting-horror';\r\nimport { buildSinrunnerBlanchyRebornEntity, isSinrunnerBlanchy } from '../cards/impl/minion/sinrunner-blanchy';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { addStatsToBoard } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { copyAttribute } from './utils/entity-utils';\r\n\r\nexport const handleRebornForEntity = (\r\n\tboardWithKilledMinion: BoardEntity[],\r\n\tboardWithKilledMinionHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadMinionIndexFromRight: number,\r\n\topponentBoard: BoardEntity[],\r\n\topponentBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst numberOfReborns = 1;\r\n\tlet entityToSpawn: BoardEntity = null;\r\n\tif (\r\n\t\tisSinrunnerBlanchy(deadEntity.cardId) ||\r\n\t\thasPersistingHorror(deadEntity) ||\r\n\t\tdeadEntity.enchantments?.some(\r\n\t\t\t(e) => e.cardId === CardIds.UltraCapacitor_UltraCapacitorEnchantment_BG31_HERO_801ptje,\r\n\t\t)\r\n\t) {\r\n\t\tentityToSpawn = buildSinrunnerBlanchyRebornEntity(deadEntity);\r\n\t}\r\n\r\n\tconst rebornImpl = cardMappings[deadEntity.cardId];\r\n\tif (hasBeforeRebornSelfEffect(rebornImpl)) {\r\n\t\trebornImpl.beforeRebornSelfEffect(deadEntity, {\r\n\t\t\trebornEntity: deadEntity,\r\n\t\t\tboardWithKilledMinion,\r\n\t\t\tboardWithKilledMinionHero,\r\n\t\t\topponentBoard,\r\n\t\t\topponentBoardHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tconst entitiesFromReborn: readonly BoardEntity[] =\r\n\t\tdeadEntity.reborn && deadMinionIndexFromRight >= 0\r\n\t\t\t? spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\tnumberOfReborns,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\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\ttrue,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tentityToSpawn,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t )\r\n\t\t\t: [];\r\n\tif (!entitiesFromReborn.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109 ||\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G\r\n\t) {\r\n\t\tentitiesFromReborn.forEach((e) => {\r\n\t\t\tconst attack = deadEntity.maxAttack;\r\n\t\t\tconst health = deadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G ? deadEntity.maxHealth : 1;\r\n\t\t\te.attack = attack;\r\n\t\t\te.health = health;\r\n\t\t});\r\n\t}\r\n\r\n\tfor (const entity of entitiesFromReborn) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornSelfAttributeTransfer(rebornImpl)) {\r\n\t\t\trebornImpl.rebornSelfAttributeTransfer.forEach((attribute: keyof BoardEntity) => {\r\n\t\t\t\tcopyAttribute(entity, deadEntity, attribute);\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (hasRebornSelfEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornSelfEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const entity of boardWithKilledMinion) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tconst entitiesThatWereReborn = performEntitySpawns(\r\n\t\tentitiesFromReborn,\r\n\t\tboardWithKilledMinion,\r\n\t\tboardWithKilledMinionHero,\r\n\t\tdeadEntity,\r\n\t\tdeadMinionIndexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tentitiesThatWereReborn.forEach((e) => (e.rebornFromEntityId = deadEntity.entityId));\r\n\tconst entityRightToSpawns =\r\n\t\tdeadMinionIndexFromRight === 0\r\n\t\t\t? null\r\n\t\t\t: boardWithKilledMinion[boardWithKilledMinion.length - deadMinionIndexFromRight];\r\n\tentitiesThatWereReborn.forEach((entity) => {\r\n\t\tentity.hasAttacked = deadEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? undefined;\r\n\t});\r\n\r\n\tfor (const rebornEntity of entitiesThatWereReborn) {\r\n\t\tfor (const entity of boardWithKilledMinion) {\r\n\t\t\t// The entity was not there when the minion died, so we don't trigger its effect\r\n\t\t\tif (entitiesThatWereReborn.includes(entity)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterReborn(rebornImpl)) {\r\n\t\t\t\trebornImpl.afterReborn(entity, {\r\n\t\t\t\t\trebornEntity: rebornEntity,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const trinket of boardWithKilledMinionHero.trinkets ?? []) {\r\n\t\t\tconst rebornImpl = cardMappings[trinket.cardId];\r\n\t\t\tif (hasAfterReborn(rebornImpl)) {\r\n\t\t\t\trebornImpl.afterReborn(trinket, {\r\n\t\t\t\t\trebornEntity: rebornEntity,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst numberOfTriggersForDeathwhisper = Math.min(entitiesThatWereReborn.length, 1);\r\n\tfor (let i = 0; i < numberOfTriggersForDeathwhisper; i++) {\r\n\t\tboardWithKilledMinion\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020 ||\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst multiplier = e.cardId === CardIds.SisterDeathwhisper_BG25_020_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\tmultiplier * 1,\r\n\t\t\t\t\tmultiplier * 3,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\nexport interface RebornEffectInput {\r\n\treadonly rebornEntity: BoardEntity;\r\n\treadonly boardWithKilledMinion: BoardEntity[];\r\n\treadonly boardWithKilledMinionHero: BgsPlayerEntity;\r\n\treadonly opponentBoard: BoardEntity[];\r\n\treadonly opponentBoardHero: BgsPlayerEntity;\r\n\treadonly gameState: FullGameState;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"reborn.js","sourceRoot":"","sources":["../../src/simulation/reborn.ts"],"names":[],"mappings":"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","sourcesContent":["import { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport {\r\n\thasAfterReborn,\r\n\thasBeforeRebornSelfEffect,\r\n\thasRebornEffect,\r\n\thasRebornSelfAttributeTransfer,\r\n\thasRebornSelfEffect,\r\n} from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { hasPersistingHorror } from '../cards/impl/enchantments/persisting-horror';\r\nimport { buildSinrunnerBlanchyRebornEntity, isSinrunnerBlanchy } from '../cards/impl/minion/sinrunner-blanchy';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { addStatsToBoard } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyDeityBaseStats, isDeityCard } from './deity';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { copyAttribute } from './utils/entity-utils';\r\n\r\nexport const handleRebornForEntity = (\r\n\tboardWithKilledMinion: BoardEntity[],\r\n\tboardWithKilledMinionHero: BgsPlayerEntity,\r\n\tdeadEntity: BoardEntity,\r\n\tdeadMinionIndexFromRight: number,\r\n\topponentBoard: BoardEntity[],\r\n\topponentBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tconst numberOfReborns = 1;\r\n\tlet entityToSpawn: BoardEntity = null;\r\n\tif (\r\n\t\tisSinrunnerBlanchy(deadEntity.cardId) ||\r\n\t\thasPersistingHorror(deadEntity) ||\r\n\t\tdeadEntity.enchantments?.some(\r\n\t\t\t(e) => e.cardId === CardIds.UltraCapacitor_UltraCapacitorEnchantment_BG31_HERO_801ptje,\r\n\t\t)\r\n\t) {\r\n\t\tentityToSpawn = buildSinrunnerBlanchyRebornEntity(deadEntity);\r\n\t}\r\n\r\n\tconst rebornImpl = cardMappings[deadEntity.cardId];\r\n\tif (hasBeforeRebornSelfEffect(rebornImpl)) {\r\n\t\trebornImpl.beforeRebornSelfEffect(deadEntity, {\r\n\t\t\trebornEntity: deadEntity,\r\n\t\t\tboardWithKilledMinion,\r\n\t\t\tboardWithKilledMinionHero,\r\n\t\t\topponentBoard,\r\n\t\t\topponentBoardHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tconst entitiesFromReborn: readonly BoardEntity[] =\r\n\t\tdeadEntity.reborn && deadMinionIndexFromRight >= 0\r\n\t\t\t? spawnEntities(\r\n\t\t\t\t\tdeadEntity.cardId,\r\n\t\t\t\t\tnumberOfReborns,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\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\ttrue,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tentityToSpawn,\r\n\t\t\t\t\tdeadEntity,\r\n\t\t\t )\r\n\t\t\t: [];\r\n\tif (!entitiesFromReborn.length) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (isDeityCard(deadEntity.cardId, gameState.allCards)) {\r\n\t\tfor (const entity of entitiesFromReborn) {\r\n\t\t\tapplyDeityBaseStats(entity, boardWithKilledMinionHero);\r\n\t\t\tentity.health = 1;\r\n\t\t}\r\n\t}\r\n\r\n\tif (\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109 ||\r\n\t\tdeadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G\r\n\t) {\r\n\t\tentitiesFromReborn.forEach((e) => {\r\n\t\t\tconst attack = deadEntity.maxAttack;\r\n\t\t\tconst health = deadEntity.cardId === CardIds.WannabeGargoyle_BG30_109_G ? deadEntity.maxHealth : 1;\r\n\t\t\te.attack = attack;\r\n\t\t\te.health = health;\r\n\t\t});\r\n\t}\r\n\r\n\tfor (const entity of entitiesFromReborn) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornSelfAttributeTransfer(rebornImpl)) {\r\n\t\t\trebornImpl.rebornSelfAttributeTransfer.forEach((attribute: keyof BoardEntity) => {\r\n\t\t\t\tcopyAttribute(entity, deadEntity, attribute);\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (hasRebornSelfEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornSelfEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const entity of boardWithKilledMinion) {\r\n\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\tif (hasRebornEffect(rebornImpl)) {\r\n\t\t\trebornImpl.rebornEffect(entity, {\r\n\t\t\t\trebornEntity: deadEntity,\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tconst entitiesThatWereReborn = performEntitySpawns(\r\n\t\tentitiesFromReborn,\r\n\t\tboardWithKilledMinion,\r\n\t\tboardWithKilledMinionHero,\r\n\t\tdeadEntity,\r\n\t\tdeadMinionIndexFromRight,\r\n\t\topponentBoard,\r\n\t\topponentBoardHero,\r\n\t\tgameState,\r\n\t);\r\n\tentitiesThatWereReborn.forEach((e) => (e.rebornFromEntityId = deadEntity.entityId));\r\n\tconst entityRightToSpawns =\r\n\t\tdeadMinionIndexFromRight === 0\r\n\t\t\t? null\r\n\t\t\t: boardWithKilledMinion[boardWithKilledMinion.length - deadMinionIndexFromRight];\r\n\tentitiesThatWereReborn.forEach((entity) => {\r\n\t\tentity.hasAttacked = deadEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? undefined;\r\n\t});\r\n\r\n\tfor (const rebornEntity of entitiesThatWereReborn) {\r\n\t\tfor (const entity of boardWithKilledMinion) {\r\n\t\t\t// The entity was not there when the minion died, so we don't trigger its effect\r\n\t\t\tif (entitiesThatWereReborn.includes(entity)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tconst rebornImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterReborn(rebornImpl)) {\r\n\t\t\t\trebornImpl.afterReborn(entity, {\r\n\t\t\t\t\trebornEntity: rebornEntity,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const trinket of boardWithKilledMinionHero.trinkets ?? []) {\r\n\t\t\tconst rebornImpl = cardMappings[trinket.cardId];\r\n\t\t\tif (hasAfterReborn(rebornImpl)) {\r\n\t\t\t\trebornImpl.afterReborn(trinket, {\r\n\t\t\t\t\trebornEntity: rebornEntity,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\topponentBoard,\r\n\t\t\t\t\topponentBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst numberOfTriggersForDeathwhisper = Math.min(entitiesThatWereReborn.length, 1);\r\n\tfor (let i = 0; i < numberOfTriggersForDeathwhisper; i++) {\r\n\t\tboardWithKilledMinion\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020 ||\r\n\t\t\t\t\te.cardId === CardIds.SisterDeathwhisper_BG25_020_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst multiplier = e.cardId === CardIds.SisterDeathwhisper_BG25_020_G ? 2 : 1;\r\n\t\t\t\taddStatsToBoard(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\t\tmultiplier * 1,\r\n\t\t\t\t\tmultiplier * 3,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n};\r\n\r\nexport interface RebornEffectInput {\r\n\treadonly rebornEntity: BoardEntity;\r\n\treadonly boardWithKilledMinion: BoardEntity[];\r\n\treadonly boardWithKilledMinionHero: BgsPlayerEntity;\r\n\treadonly opponentBoard: BoardEntity[];\r\n\treadonly opponentBoardHero: BgsPlayerEntity;\r\n\treadonly gameState: FullGameState;\r\n}\r\n"]}
|