@firestone-hs/simulate-bgs-battle 1.1.701 → 1.1.702
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/card.interface.d.ts +2 -6
- package/dist/cards/card.interface.js.map +1 -1
- package/dist/cards/impl/_card-mappings.js +6 -0
- package/dist/cards/impl/_card-mappings.js.map +1 -1
- package/dist/cards/impl/minion/auto-assembler-enchantment.js +6 -1
- package/dist/cards/impl/minion/auto-assembler-enchantment.js.map +1 -1
- package/dist/cards/impl/minion/banana-slamma.js +1 -1
- package/dist/cards/impl/minion/banana-slamma.js.map +1 -1
- package/dist/cards/impl/minion/battlecruiser.js +9 -11
- package/dist/cards/impl/minion/battlecruiser.js.map +1 -1
- package/dist/cards/impl/minion/pufferquil.d.ts +2 -2
- package/dist/cards/impl/minion/pufferquil.js +3 -0
- package/dist/cards/impl/minion/pufferquil.js.map +1 -1
- package/dist/cards/impl/minion/scallywag.js.map +1 -1
- package/dist/cards/impl/minion/scarlet-survivor.js +10 -1
- package/dist/cards/impl/minion/scarlet-survivor.js.map +1 -1
- package/dist/cards/impl/minion/skulking-bristlemane.js +1 -1
- package/dist/cards/impl/minion/skulking-bristlemane.js.map +1 -1
- package/dist/cards/impl/minion/timecapn-hooktail.d.ts +2 -0
- package/dist/cards/impl/minion/timecapn-hooktail.js +14 -0
- package/dist/cards/impl/minion/timecapn-hooktail.js.map +1 -0
- package/dist/cards/impl/minion/timewarped-magnanimoose.js +1 -1
- package/dist/cards/impl/minion/timewarped-magnanimoose.js.map +1 -1
- package/dist/cards/impl/trinket/automaton-portrait.d.ts +4 -0
- package/dist/cards/impl/trinket/automaton-portrait.js +12 -6
- package/dist/cards/impl/trinket/automaton-portrait.js.map +1 -1
- package/dist/cards/impl/trinket/fang-anklet.js +2 -17
- package/dist/cards/impl/trinket/fang-anklet.js.map +1 -1
- package/dist/cards/impl/trinket/jar-o-gems.js +1 -1
- package/dist/cards/impl/trinket/jar-o-gems.js.map +1 -1
- package/dist/cards/impl/trinket/mama-bear-sticker.d.ts +2 -0
- package/dist/cards/impl/trinket/mama-bear-sticker.js +18 -0
- package/dist/cards/impl/trinket/mama-bear-sticker.js.map +1 -0
- package/dist/cards/impl/trinket/powder-keg-enchantment.js +5 -5
- package/dist/cards/impl/trinket/powder-keg-enchantment.js.map +1 -1
- package/dist/cards/impl/trinket/powder-keg.js +3 -1
- package/dist/cards/impl/trinket/powder-keg.js.map +1 -1
- package/dist/cards/impl/trinket/slamma-sticker.js +1 -1
- package/dist/cards/impl/trinket/slamma-sticker.js.map +1 -1
- package/dist/mechanics/cast-tavern-spell.js +8 -8
- package/dist/mechanics/cast-tavern-spell.js.map +1 -1
- package/dist/simulation/add-minion-to-board.js +15 -1
- package/dist/simulation/add-minion-to-board.js.map +1 -1
- package/dist/simulation/start-of-combat/soc-action-processor.js +0 -3
- package/dist/simulation/start-of-combat/soc-action-processor.js.map +1 -1
- package/dist/simulation/summon-when-space.js +7 -1
- package/dist/simulation/summon-when-space.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-assembler-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/auto-assembler-enchantment.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,wBAAwB,GAAoC;IACxE,OAAO,EAAE;;;KAGR;IACD,iCAAiC,EAAE,CAClC,
|
|
1
|
+
{"version":3,"file":"auto-assembler-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/auto-assembler-enchantment.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,wBAAwB,GAAoC;IACxE,OAAO,EAAE;;;KAGR;IACD,iCAAiC,EAAE,CAClC,WAA6B,EAC7B,MAAsC,EACtC,KAAgC,EACP,EAAE;;QAC3B,MAAM,aAAa,GAClB,WAAW,CAAC,MAAM,kBAA+D;YAChF,CAAC;YACD,CAAC,aAAmC,CAAC;QA2EvC,MAAM,eAAe,GACpB,WAAW,CAAC,MAAM,kBAA+D;YAChF,CAAC,CAAC,MAAA,MAAA,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,cAAkC,0CAAE,MAAM,mCAAI,CAAC;YACjF,CAAC,CAAC,MAAA,MAAA,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,YAAgC,0CAAE,MAAM,mCAAI,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,iBAAiB,IAAI,eAAe,CAAC,GAAG,eAAe,CAAC,CAAC;QAC/F,OAAO,IAAA,4CAAuB,EAAC,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;CACD,CAAC","sourcesContent":["import { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\n\r\nexport const AutoAssemblerEnchantment: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: [\r\n\t\tCardIds.AutoAssembler_AutoAssemblerEnchantment_BG32_172e,\r\n\t\tCardIds.AutoAssembler_AutoAssemblerEnchantment_BG32_172_Ge,\r\n\t],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t): readonly BoardEntity[] => {\r\n\t\tconst cardIdToSpawn =\r\n\t\t\tenchantment.cardId === CardIds.AutoAssembler_AutoAssemblerEnchantment_BG32_172_Ge\r\n\t\t\t\t? CardIds.AstralAutomaton_BG_TTN_401_G\r\n\t\t\t\t: CardIds.AstralAutomaton_BG_TTN_401;\r\n\t\t// Not sure at all.\r\n\t\t// This is the enchantment that spawned 2 Automatons:\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - SHOW_ENTITY - Updating Entity=6863 CardID=BG32_172e\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=CONTROLLER value=13\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=CARDTYPE value=ENCHANTMENT\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=ATTACHED value=6862\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=ZONE value=SETASIDE\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=ENTITY_ID value=6863\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=CREATOR value=6862\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=MAGNETIC value=1\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=1037 value=5\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=1068 value=0\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=CREATOR_DBID value=108432\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=1489 value=120025\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - tag=SPAWN_TIME_COUNT value=1\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=1068 value=1\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=1068 value=0\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=ZONE value=PLAY\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=CREATOR value=3621\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=CREATOR_DBID value=120025\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=TAG_SCRIPT_DATA_NUM_1 value=4\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=TAG_SCRIPT_DATA_NUM_2 value=4\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=3528 value=1\r\n\t\t// D 11:27:06.4270081 GameState.DebugPrintPower() - TAG_CHANGE Entity=6863 tag=COPIED_FROM_ENTITY_ID value=6655\r\n\t\t// This is the enchantment that spawned 4 Automatons:\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - SHOW_ENTITY - Updating Entity=9342 CardID=BG32_172e\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=CONTROLLER value=12\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=CARDTYPE value=ENCHANTMENT\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=ATTACHED value=9341\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=ZONE value=SETASIDE\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=ENTITY_ID value=9342\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=CREATOR value=9341\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=MAGNETIC value=1\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=1037 value=4\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=1068 value=0\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=CREATOR_DBID value=61930\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=1489 value=120025\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - tag=SPAWN_TIME_COUNT value=1\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=1068 value=1\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=1068 value=0\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=ZONE value=PLAY\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=CREATOR value=3789\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=CREATOR_DBID value=120025\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=TAG_SCRIPT_DATA_NUM_1 value=8\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=TAG_SCRIPT_DATA_NUM_2 value=8\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=3528 value=1\r\n\t\t// D 12:08:39.6751039 GameState.DebugPrintPower() - TAG_CHANGE Entity=9342 tag=COPIED_FROM_ENTITY_ID value=9048\r\n\t\t// This spawns 2 golden:\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - SHOW_ENTITY - Updating Entity=12303 CardID=BG32_172_Ge\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=CONTROLLER value=13\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=CARDTYPE value=ENCHANTMENT\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=ATTACHED value=12299\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=ZONE value=SETASIDE\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=ENTITY_ID value=12303\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=CREATOR value=12299\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=MAGNETIC value=1\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=1037 value=5\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=1068 value=0\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=CREATOR_DBID value=130794\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=1475 value=3\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=1489 value=120025\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - tag=SPAWN_TIME_COUNT value=1\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=1068 value=1\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=1068 value=0\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=ZONE value=PLAY\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=CREATOR value=9141\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=CREATOR_DBID value=120026\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=TAG_SCRIPT_DATA_NUM_1 value=36\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=TAG_SCRIPT_DATA_NUM_2 value=29\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=3528 value=1\r\n\t\t// D 18:11:51.5528186 GameState.DebugPrintPower() - TAG_CHANGE Entity=12303 tag=COPIED_FROM_ENTITY_ID value=12103\r\n\t\t// So the script 1/2 are probably the total attack of the magnetized Auto Assemblers. If some of them got buffed,\r\n\t\t// we can't get back the base attack of the Auto Assemblers.\r\n\t\t// So this doesn't work, but it's the best approximation I can think of right now.\r\n\t\tconst attackPerMinion =\r\n\t\t\tenchantment.cardId === CardIds.AutoAssembler_AutoAssemblerEnchantment_BG32_172_Ge\r\n\t\t\t\t? input.gameState.allCards.getCard(CardIds.AutoAssembler_BG32_172_G)?.attack ?? 0\r\n\t\t\t\t: input.gameState.allCards.getCard(CardIds.AutoAssembler_BG32_172)?.attack ?? 0;\r\n\t\tconst loops = Math.floor((enchantment.tagScriptDataNum1 || attackPerMinion) / attackPerMinion);\r\n\t\treturn simplifiedSpawnEntities(cardIdToSpawn, loops, input);\r\n\t},\r\n};\r\n"]}
|
|
@@ -16,7 +16,7 @@ exports.BananaSlamma = {
|
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
const mult = slam.cardId === "BG26_802_G" ? 3 : 2;
|
|
19
|
-
(0, stats_1.setEntityStats)(spawned, spawned.attack * mult,
|
|
19
|
+
(0, stats_1.setEntityStats)(spawned, spawned.attack * mult, 0, board, hero, gameState);
|
|
20
20
|
gameState.spectator.registerPowerTarget(slam, spawned, board, null, null);
|
|
21
21
|
},
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banana-slamma.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/banana-slamma.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAKpD,qDAA2D;AAC3D,0CAAiD;AAGpC,QAAA,YAAY,GAA0B;IAClD,OAAO,EAAE,0BAAgE;IACzE,iBAAiB,EAAE,CAAC,MAAkC,EAAE,KAAwB,EAAE,EAAE;QACnF,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAClD,MAAM,IAAI,GAAG,MAAqB,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;YACnD,OAAO;SACP;QACD,IAAI,CAAC,IAAA,uBAAe,EAAC,OAAO,EAAE,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YACzF,OAAO;SACP;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAA,sBAAc,EAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"banana-slamma.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/banana-slamma.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAKpD,qDAA2D;AAC3D,0CAAiD;AAGpC,QAAA,YAAY,GAA0B;IAClD,OAAO,EAAE,0BAAgE;IACzE,iBAAiB,EAAE,CAAC,MAAkC,EAAE,KAAwB,EAAE,EAAE;QACnF,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAClD,MAAM,IAAI,GAAG,MAAqB,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;YACnD,OAAO;SACP;QACD,IAAI,CAAC,IAAA,uBAAe,EAAC,OAAO,EAAE,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YACzF,OAAO;SACP;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAA,sBAAc,EAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAuB,EAAE,SAAS,CAAC,CAAC;QAC7F,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnOtherSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterOtherSpawnedCard } from '../../card.interface';\r\n\r\nexport const BananaSlamma: AfterOtherSpawnedCard = {\r\n\tcardIds: [CardIds.BananaSlamma_BG26_802, CardIds.BananaSlamma_BG26_802_G],\r\n\tafterOtherSpawned: (minion: BoardEntity | BoardTrinket, input: OnOtherSpawnInput) => {\r\n\t\tconst { spawned, board, hero, gameState } = input;\r\n\t\tconst slam = minion as BoardEntity;\r\n\t\tif (!spawned || spawned.entityId === slam.entityId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!hasCorrectTribe(spawned, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst mult = slam.cardId === CardIds.BananaSlamma_BG26_802_G ? 3 : 2;\r\n\t\tsetEntityStats(spawned, spawned.attack * mult, 0, board, hero as BgsPlayerEntity, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(slam, spawned, board, null, null);\r\n\t},\r\n};\r\n"]}
|
|
@@ -17,17 +17,15 @@ exports.Battlecruiser = {
|
|
|
17
17
|
const aliveEntities = input.opponentBoard.filter((entity) => entity.health > 0 && !entity.definitelyDead);
|
|
18
18
|
const targetEntityId = (_a = (0, utils_1.getRandomMinionWithHighestHealth)(aliveEntities)) === null || _a === void 0 ? void 0 : _a.entityId;
|
|
19
19
|
const cannonDamage = Math.max(...yamatoCannons.map((e) => e.tagScriptDataNum1));
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
(0, attack_1.dealDamageToMinion)(target, input.opponentBoard, input.opponentEntity, minion, cannonDamage, input.playerBoard, input.playerEntity, input.gameState);
|
|
30
|
-
}
|
|
20
|
+
const loops = ((_b = minion.tags) === null || _b === void 0 ? void 0 : _b[reference_data_1.GameTag.BACON_YAMATO_CANNON]) === 1 ? 2 : 1;
|
|
21
|
+
for (let i = 0; i < loops; i++) {
|
|
22
|
+
let target = input.opponentBoard.find((entity) => entity.entityId === targetEntityId);
|
|
23
|
+
if (!target || target.health <= 0 || target.definitelyDead) {
|
|
24
|
+
target = (0, utils_1.getRandomMinionWithHighestHealth)(input.opponentBoard);
|
|
25
|
+
}
|
|
26
|
+
if (!!target) {
|
|
27
|
+
input.gameState.spectator.registerPowerTarget(minion, target, input.opponentBoard, input.playerEntity, input.opponentEntity);
|
|
28
|
+
(0, attack_1.dealDamageToMinion)(target, input.opponentBoard, input.opponentEntity, minion, cannonDamage, input.playerBoard, input.playerEntity, input.gameState);
|
|
31
29
|
}
|
|
32
30
|
}
|
|
33
31
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"battlecruiser.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/battlecruiser.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { dealDamageToMinion } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getRandomMinionWithHighestHealth } from '../../../utils';\r\nimport { DeathrattleSpawnCard, RallyCard, RebornSelfEffectCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const Battlecruiser: StartOfCombatCard & RebornSelfEffectCard & RallyCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.LiftOff_BattlecruiserToken_BG31_HERO_801pt, CardIds.Battlecruiser_BG31_HERO_801pt_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Enchantments can appear multiple times???\r\n\t\tconst yamatoCannons = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.YamatoCannon_YamatoCannonEnchantment_BG31_HERO_801ptce);\r\n\t\tif (!yamatoCannons?.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Still not sure how these should be processed\r\n\t\t// In some cases, it feels like it takes the sum of the damage, in other cases it runs them one after the other\r\n\t\t// (but maybe that's just the replay aggregating the values)\r\n\t\t// I'm not sure about the BACON_YAMATO_CANNON tag; it seems like it indicates multiple cannons, but I'm not sure\r\n\t\t// Other issues: looks like that if there are multiple cannon enchantments but no divine shield, everything is applied to the same target\r\n\t\t// So it looks as if the target is selected first, then everything targets it\r\n\t\t// https://replays.firestoneapp.com/?reviewId=e8f38ab0-3380-4275-88d8-0715d69d3f08&turn=21&action=1\r\n\t\t// Even more than that: the target is the same between multiple battlecruisers\r\n\t\t// https://replays.firestoneapp.com/?reviewId=cbfd6fe9-1a58-400a-a593-6b8852df5427&turn=9&action=0\r\n\t\t// However I'm pretty sure I've seen another behavior\r\n\r\n\t\t// Get the highest health opponent minion at the start of the phase\r\n\t\t// Update 2025-05-16: it looks like it now takes the highest health current minion\r\n\t\t// https://replays.firestoneapp.com/?reviewId=c2620528-e0de-4862-9b11-cf055440b2b8&turn=19&action=2\r\n\t\tconst aliveEntities = input.opponentBoard.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\tconst targetEntityId = getRandomMinionWithHighestHealth(aliveEntities)?.entityId;\r\n\t\t// const numberOfCannons = yamatoCannons.length;\r\n\t\tconst cannonDamage = Math.max(...yamatoCannons.map((e) => e.tagScriptDataNum1));\r\n\t\tfor (const yamatoCannon of yamatoCannons) {\r\n\t\t\t// const damage = yamatoCannon.tagScriptDataNum1;\r\n\t\t\t// Could this simply be tagScriptDataNum2 on the battlecruiser?\r\n\t\t\t// I don't understand how this relates to the number enchants in the cruiser itself\r\n\t\t\tconst loops = minion.tags?.[GameTag.BACON_YAMATO_CANNON] === 1 ? 2 : 1;\r\n\t\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t\tlet target = input.opponentBoard.find((entity) => entity.entityId === targetEntityId);\r\n\t\t\t\tif (!target || target.health <= 0 || target.definitelyDead) {\r\n\t\t\t\t\ttarget = getRandomMinionWithHighestHealth(input.opponentBoard);\r\n\t\t\t\t}\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\t\tminion,\r\n\t\t\t\t\t\tcannonDamage,\r\n\t\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Since 33.6 we recompute the first attacker\r\n\t\t// https://replays.firestoneapp.com/?reviewId=f7a4a78c-269c-47b5-a0ae-099123290ccd&turn=13&action=0\r\n\t\treturn {\r\n\t\t\thasTriggered: true,\r\n\t\t\tshouldRecomputeCurrentAttacker: true,\r\n\t\t};\r\n\t},\r\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => {\r\n\t\tconst ultraCapacitors = [...input.rebornEntity.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.UltraCapacitor_UltraCapacitorEnchantment_BG31_HERO_801ptje);\r\n\t\tif (!ultraCapacitors?.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tminion.enchantments = input.rebornEntity.enchantments;\r\n\t\tminion.attack = input.rebornEntity.maxAttack;\r\n\t\tminion.maxAttack = input.rebornEntity.maxAttack;\r\n\t\tminion.health = input.rebornEntity.maxHealth;\r\n\t\tminion.maxHealth = input.rebornEntity.maxHealth;\r\n\t\tminion.divineShield = input.rebornEntity.hadDivineShield;\r\n\t\tminion.taunt = input.rebornEntity.taunt;\r\n\t\tminion.windfury = input.rebornEntity.windfury;\r\n\t\tminion.poisonous = input.rebornEntity.poisonous;\r\n\t},\r\n\trally: (\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnAttackInput,\r\n\t): {\r\n\t\tdmgDoneByAttacker: number;\r\n\t\tdmgDoneByDefender: number;\r\n\t} => {\r\n\t\tconst advancedBallistics = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.AdvancedBallistics_AdvancedBallisticsEnchantment_BG31_HERO_801ptde);\r\n\t\tif (!advancedBallistics?.length) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = advancedBallistics.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tconst targets = input.attackingBoard.filter((entity) => entity !== minion);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(target, minion, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst caduceusReactors = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.CaduceusReactor_CaduceusReactorEnchantment_BG31_HERO_801ptee);\r\n\t\tif (!caduceusReactors?.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst target = input.boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!target) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst buff = caduceusReactors.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tmodifyStats(\r\n\t\t\ttarget,\r\n\t\t\tminion,\r\n\t\t\tbuff,\r\n\t\t\tbuff,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"battlecruiser.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/battlecruiser.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { dealDamageToMinion } from '../../../simulation/attack';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { RebornEffectInput } from '../../../simulation/reborn';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { getRandomMinionWithHighestHealth } from '../../../utils';\r\nimport { DeathrattleSpawnCard, RallyCard, RebornSelfEffectCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const Battlecruiser: StartOfCombatCard & RebornSelfEffectCard & RallyCard & DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.LiftOff_BattlecruiserToken_BG31_HERO_801pt, CardIds.Battlecruiser_BG31_HERO_801pt_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\t// Enchantments can appear multiple times???\r\n\t\tconst yamatoCannons = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.YamatoCannon_YamatoCannonEnchantment_BG31_HERO_801ptce);\r\n\t\tif (!yamatoCannons?.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Still not sure how these should be processed\r\n\t\t// In some cases, it feels like it takes the sum of the damage, in other cases it runs them one after the other\r\n\t\t// (but maybe that's just the replay aggregating the values)\r\n\t\t// I'm not sure about the BACON_YAMATO_CANNON tag; it seems like it indicates multiple cannons, but I'm not sure\r\n\t\t// Other issues: looks like that if there are multiple cannon enchantments but no divine shield, everything is applied to the same target\r\n\t\t// So it looks as if the target is selected first, then everything targets it\r\n\t\t// https://replays.firestoneapp.com/?reviewId=e8f38ab0-3380-4275-88d8-0715d69d3f08&turn=21&action=1\r\n\t\t// Even more than that: the target is the same between multiple battlecruisers\r\n\t\t// https://replays.firestoneapp.com/?reviewId=cbfd6fe9-1a58-400a-a593-6b8852df5427&turn=9&action=0\r\n\t\t// However I'm pretty sure I've seen another behavior\r\n\r\n\t\t// Get the highest health opponent minion at the start of the phase\r\n\t\t// Update 2025-05-16: it looks like it now takes the highest health current minion\r\n\t\t// https://replays.firestoneapp.com/?reviewId=c2620528-e0de-4862-9b11-cf055440b2b8&turn=19&action=2\r\n\t\tconst aliveEntities = input.opponentBoard.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\t\tconst targetEntityId = getRandomMinionWithHighestHealth(aliveEntities)?.entityId;\r\n\t\t// const numberOfCannons = yamatoCannons.length;\r\n\t\tconst cannonDamage = Math.max(...yamatoCannons.map((e) => e.tagScriptDataNum1));\r\n\t\t// for (const yamatoCannon of yamatoCannons) {\r\n\t\t// const damage = yamatoCannon.tagScriptDataNum1;\r\n\t\t// Could this simply be tagScriptDataNum2 on the battlecruiser?\r\n\t\t// I don't understand how this relates to the number enchants in the cruiser itself\r\n\t\t// 35.2 now fires a single time?\r\n\t\t// https://replays.firestoneapp.com/?reviewId=96618003-04fa-4e41-9baa-539f0b63fb9f&turn=17&action=2\r\n\t\tconst loops = minion.tags?.[GameTag.BACON_YAMATO_CANNON] === 1 ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\tlet target = input.opponentBoard.find((entity) => entity.entityId === targetEntityId);\r\n\t\t\tif (!target || target.health <= 0 || target.definitelyDead) {\r\n\t\t\t\ttarget = getRandomMinionWithHighestHealth(input.opponentBoard);\r\n\t\t\t}\r\n\t\t\tif (!!target) {\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t);\r\n\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tinput.opponentBoard,\r\n\t\t\t\t\tinput.opponentEntity,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\tcannonDamage,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// }\r\n\t\t// Since 33.6 we recompute the first attacker\r\n\t\t// https://replays.firestoneapp.com/?reviewId=f7a4a78c-269c-47b5-a0ae-099123290ccd&turn=13&action=0\r\n\t\treturn {\r\n\t\t\thasTriggered: true,\r\n\t\t\tshouldRecomputeCurrentAttacker: true,\r\n\t\t};\r\n\t},\r\n\trebornSelfEffect: (minion: BoardEntity, input: RebornEffectInput) => {\r\n\t\tconst ultraCapacitors = [...input.rebornEntity.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.UltraCapacitor_UltraCapacitorEnchantment_BG31_HERO_801ptje);\r\n\t\tif (!ultraCapacitors?.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tminion.enchantments = input.rebornEntity.enchantments;\r\n\t\tminion.attack = input.rebornEntity.maxAttack;\r\n\t\tminion.maxAttack = input.rebornEntity.maxAttack;\r\n\t\tminion.health = input.rebornEntity.maxHealth;\r\n\t\tminion.maxHealth = input.rebornEntity.maxHealth;\r\n\t\tminion.divineShield = input.rebornEntity.hadDivineShield;\r\n\t\tminion.taunt = input.rebornEntity.taunt;\r\n\t\tminion.windfury = input.rebornEntity.windfury;\r\n\t\tminion.poisonous = input.rebornEntity.poisonous;\r\n\t},\r\n\trally: (\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnAttackInput,\r\n\t): {\r\n\t\tdmgDoneByAttacker: number;\r\n\t\tdmgDoneByDefender: number;\r\n\t} => {\r\n\t\tconst advancedBallistics = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.AdvancedBallistics_AdvancedBallisticsEnchantment_BG31_HERO_801ptde);\r\n\t\tif (!advancedBallistics?.length) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = advancedBallistics.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tconst targets = input.attackingBoard.filter((entity) => entity !== minion);\r\n\t\tfor (const target of targets) {\r\n\t\t\tmodifyStats(target, minion, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst caduceusReactors = [...minion.enchantments]\r\n\t\t\t// .reverse()\r\n\t\t\t.filter((e) => e.cardId === CardIds.CaduceusReactor_CaduceusReactorEnchantment_BG31_HERO_801ptee);\r\n\t\tif (!caduceusReactors?.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst target = input.boardWithDeadEntity.filter((e) => e.health > 0 && !e.definitelyDead)[0];\r\n\t\tif (!target) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst buff = caduceusReactors.map((e) => e.tagScriptDataNum1 ?? 0).reduce((a, b) => a + b, 0);\r\n\t\tmodifyStats(\r\n\t\t\ttarget,\r\n\t\t\tminion,\r\n\t\t\tbuff,\r\n\t\t\tbuff,\r\n\t\t\tinput.boardWithDeadEntity,\r\n\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { OnTavernSpellCastCard } from '../../card.interface';
|
|
2
|
-
export declare const Pufferquil: OnTavernSpellCastCard;
|
|
1
|
+
import { OnTavernSpellCastCard, PlayedBloodGemsOnMeCard } from '../../card.interface';
|
|
2
|
+
export declare const Pufferquil: OnTavernSpellCastCard & PlayedBloodGemsOnMeCard;
|
|
@@ -10,5 +10,8 @@ exports.Pufferquil = {
|
|
|
10
10
|
}
|
|
11
11
|
(0, venomous_1.updateVenomous)(minion, true, input.board, input.hero, input.otherHero, input.gameState);
|
|
12
12
|
},
|
|
13
|
+
playedBloodGemsOnMe: (minion, input) => {
|
|
14
|
+
(0, venomous_1.updateVenomous)(minion, true, input.board, input.hero, input.otherHero, input.gameState);
|
|
15
|
+
},
|
|
13
16
|
};
|
|
14
17
|
//# sourceMappingURL=pufferquil.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pufferquil.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/pufferquil.ts"],"names":[],"mappings":";;;AACA,yDAA4D;
|
|
1
|
+
{"version":3,"file":"pufferquil.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/pufferquil.ts"],"names":[],"mappings":";;;AACA,yDAA4D;AAK/C,QAAA,UAAU,GAAoD;IAC1E,OAAO,EAAE,0BAA4D;IACrE,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE;YAC/D,OAAO;SACP;QACD,IAAA,yBAAc,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;IACD,mBAAmB,EAAE,CAAC,MAAmB,EAAE,KAA+B,EAAE,EAAE;QAC7E,IAAA,yBAAc,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { updateVenomous } from '../../../keywords/venomous';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { PlayedBloodGemsOnMeInput } from '../../../simulation/blood-gems';\r\nimport { CastSpellInput, OnTavernSpellCastCard, PlayedBloodGemsOnMeCard } from '../../card.interface';\r\n\r\nexport const Pufferquil: OnTavernSpellCastCard & PlayedBloodGemsOnMeCard = {\r\n\tcardIds: [CardIds.Pufferquil_BG25_039, CardIds.Pufferquil_BG25_039_G],\r\n\tonTavernSpellCast: (minion: BoardEntity, input: CastSpellInput) => {\r\n\t\tif (!input.target || input.target.entityId !== minion.entityId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tupdateVenomous(minion, true, input.board, input.hero, input.otherHero, input.gameState);\r\n\t},\r\n\tplayedBloodGemsOnMe: (minion: BoardEntity, input: PlayedBloodGemsOnMeInput) => {\r\n\t\tupdateVenomous(minion, true, input.board, input.hero, input.otherHero, input.gameState);\r\n\t},\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scallywag.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scallywag.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,8BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,OAAO,IAAA,4CAAuB,EAC7B,MAAM,CAAC,MAAM,sBAAsC;YAClD,CAAC;YACD,CAAC,WAA0C,EAC5C,CAAC,EACD,KAAK,CACL,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"scallywag.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scallywag.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,SAAS,GAAyB;IAC9C,OAAO,EAAE,8BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,OAAO,IAAA,4CAAuB,EAC7B,MAAM,CAAC,MAAM,sBAAsC;YAClD,CAAC;YACD,CAAC,WAA0C,EAC5C,CAAC,EACD,KAAK,CACL,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const Scallywag: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.Scallywag_BGS_061, CardIds.Scallywag_TB_BaconUps_141],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\treturn simplifiedSpawnEntities(\r\n\t\t\tminion.cardId === CardIds.Scallywag_TB_BaconUps_141\r\n\t\t\t\t? CardIds.Scallywag_SkyPirateToken_TB_BaconUps_141t\r\n\t\t\t\t: CardIds.Scallywag_SkyPirateToken_BGS_061t,\r\n\t\t\t1,\r\n\t\t\tinput,\r\n\t\t);\r\n\t},\r\n};\r\n"]}
|
|
@@ -4,11 +4,20 @@ exports.ScarletSurvivor = void 0;
|
|
|
4
4
|
const divine_shield_1 = require("../../../keywords/divine-shield");
|
|
5
5
|
const THRESHOLD = 6;
|
|
6
6
|
const tryGrantDivineShieldOnce = (minion, board, hero, otherHero, gameState) => {
|
|
7
|
-
if (minion.abiityChargesLeft <= 0 ||
|
|
7
|
+
if (minion.abiityChargesLeft <= 0 ||
|
|
8
|
+
minion.attack < THRESHOLD ||
|
|
9
|
+
minion.enchantments.some((e) => e.cardId === "BG35_814e")) {
|
|
8
10
|
return;
|
|
9
11
|
}
|
|
10
12
|
minion.abiityChargesLeft = 0;
|
|
11
13
|
(0, divine_shield_1.updateDivineShield)(minion, board, hero, otherHero, true, gameState);
|
|
14
|
+
minion.enchantments.push({
|
|
15
|
+
cardId: "BG35_814e",
|
|
16
|
+
originEntityId: minion.entityId,
|
|
17
|
+
timing: gameState.sharedState.currentEntityId++,
|
|
18
|
+
tagScriptDataNum1: -1,
|
|
19
|
+
tagScriptDataNum2: -1,
|
|
20
|
+
});
|
|
12
21
|
};
|
|
13
22
|
exports.ScarletSurvivor = {
|
|
14
23
|
cardIds: ["BG35_814", "BG35_814_G"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scarlet-survivor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scarlet-survivor.ts"],"names":[],"mappings":";;;AAEA,mEAAqE;AAOrE,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,wBAAwB,GAAG,CAChC,MAAmB,EACnB,KAAoB,EACpB,IAAqB,EACrB,SAA0B,EAC1B,SAAwB,EACjB,EAAE;IACT,
|
|
1
|
+
{"version":3,"file":"scarlet-survivor.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/scarlet-survivor.ts"],"names":[],"mappings":";;;AAEA,mEAAqE;AAOrE,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,wBAAwB,GAAG,CAChC,MAAmB,EACnB,KAAoB,EACpB,IAAqB,EACrB,SAA0B,EAC1B,SAAwB,EACjB,EAAE;IACT,IACC,MAAM,CAAC,iBAAiB,IAAI,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,SAAS;QACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,gBAA0D,CAAC,EAClG;QACD,OAAO;KACP;IACD,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC7B,IAAA,kCAAkB,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;QACxB,MAAM,aAAuD;QAC7D,cAAc,EAAE,MAAM,CAAC,QAAQ;QAC/B,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QAC/C,iBAAiB,EAAE,CAAC,CAAC;QACrB,iBAAiB,EAAE,CAAC,CAAC;KACrB,CAAC,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,eAAe,GAA4D;IACvF,OAAO,EAAE,0BAAsE;IAC/E,cAAc,EAAE,CAAC,MAAmB,EAAE,EAAE,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAmB,EAAE,EAAE;QACvD,MAAM,SAAS,GACd,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI;YACrD,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM;YAC3C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC;IACD,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE;YAC9C,OAAO;SACP;QACD,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7F,CAAC;CACD,CAAC","sourcesContent":["import { BgsPlayerEntity } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { updateDivineShield } from '../../../keywords/divine-shield';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { FullGameState } from '../../../simulation/internal-game-state';\r\nimport { OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { DefaultChargesCard, OnSpawnedCard, OnStatsChangedCard } from '../../card.interface';\r\n\r\nconst THRESHOLD = 6;\r\n\r\nconst tryGrantDivineShieldOnce = (\r\n\tminion: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (\r\n\t\tminion.abiityChargesLeft <= 0 ||\r\n\t\tminion.attack < THRESHOLD ||\r\n\t\tminion.enchantments.some((e) => e.cardId === CardIds.ScarletSurvivor_SurvivedEnchantment_BG35_814e)\r\n\t) {\r\n\t\treturn;\r\n\t}\r\n\tminion.abiityChargesLeft = 0;\r\n\tupdateDivineShield(minion, board, hero, otherHero, true, gameState);\r\n\tminion.enchantments.push({\r\n\t\tcardId: CardIds.ScarletSurvivor_SurvivedEnchantment_BG35_814e,\r\n\t\toriginEntityId: minion.entityId,\r\n\t\ttiming: gameState.sharedState.currentEntityId++,\r\n\t\ttagScriptDataNum1: -1,\r\n\t\ttagScriptDataNum2: -1,\r\n\t});\r\n};\r\n\r\nexport const ScarletSurvivor: OnSpawnedCard & OnStatsChangedCard & DefaultChargesCard = {\r\n\tcardIds: [CardIds.ScarletSurvivor_BG35_814, CardIds.ScarletSurvivor_BG35_814_G],\r\n\tdefaultCharges: (entity: BoardEntity) => 1,\r\n\tonSpawned: (minion: BoardEntity, input: OnSpawnInput) => {\r\n\t\tconst otherHero =\r\n\t\t\tinput.gameState.gameState.player.player === input.hero\r\n\t\t\t\t? input.gameState.gameState.opponent.player\r\n\t\t\t\t: input.gameState.gameState.player.player;\r\n\t\ttryGrantDivineShieldOnce(minion, input.board, input.hero, otherHero, input.gameState);\r\n\t},\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tif (input.target.entityId !== minion.entityId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttryGrantDivineShieldOnce(minion, input.board, input.hero, input.otherHero, input.gameState);\r\n\t},\r\n};\r\n"]}
|
|
@@ -7,7 +7,7 @@ exports.SkulkingBristlemane = {
|
|
|
7
7
|
cardIds: ["BG32_434", "BG32_434_G"],
|
|
8
8
|
deathrattleSpawn: (minion, input) => {
|
|
9
9
|
const mult = minion.cardId === "BG32_434_G" ? 2 : 1;
|
|
10
|
-
const neighbours = (0, attack_1.getNeighbours)(input.boardWithDeadEntity, minion);
|
|
10
|
+
const neighbours = (0, attack_1.getNeighbours)(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight);
|
|
11
11
|
for (const neighbour of neighbours) {
|
|
12
12
|
(0, blood_gems_1.playBloodGemsOn)(minion, neighbour, 1 * mult, input.boardWithDeadEntity, input.boardWithDeadEntityHero, input.otherBoard, input.otherBoardHero, input.gameState);
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skulking-bristlemane.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/skulking-bristlemane.ts"],"names":[],"mappings":";;;AASA,uDAA2D;AAC3D,+DAAiE;AAIpD,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,0BAA8E;IACvF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA2C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"skulking-bristlemane.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/skulking-bristlemane.ts"],"names":[],"mappings":";;;AASA,uDAA2D;AAC3D,+DAAiE;AAIpD,QAAA,mBAAmB,GAAyB;IACxD,OAAO,EAAE,0BAA8E;IACvF,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAA0B,EAAE;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA2C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YACnC,IAAA,4BAAe,EACd,MAAM,EACN,SAAS,EACT,CAAC,GAAG,IAAI,EACR,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,uBAAuB,EAC7B,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;SACF;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Skulking Bristlemane (Tier 3, 5/2)\r\n * Taunt. Deathrattle: This plays a permanent Blood Gem on adjacent minions.\r\n *\r\n * Golden Skulking Bristlemane (Tier 3, 10/4)\r\n * Taunt. Deathrattle: This plays 2 permanent Blood Gems on adjacent minions.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getNeighbours } from '../../../simulation/attack';\r\nimport { playBloodGemsOn } from '../../../simulation/blood-gems';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const SkulkingBristlemane: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.SkulkingBristlemane_BG32_434, CardIds.SkulkingBristlemane_BG32_434_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput): readonly BoardEntity[] => {\r\n\t\tconst mult = minion.cardId === CardIds.SkulkingBristlemane_BG32_434_G ? 2 : 1;\r\n\t\tconst neighbours = getNeighbours(input.boardWithDeadEntity, minion, input.deadEntityIndexFromRight);\r\n\t\tfor (const neighbour of neighbours) {\r\n\t\t\tplayBloodGemsOn(\r\n\t\t\t\tminion,\r\n\t\t\t\tneighbour,\r\n\t\t\t\t1 * mult,\r\n\t\t\t\tinput.boardWithDeadEntity,\r\n\t\t\t\tinput.boardWithDeadEntityHero,\r\n\t\t\t\tinput.otherBoard,\r\n\t\t\t\tinput.otherBoardHero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn [];\r\n\t},\r\n};\r\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TimecapnHooktail = void 0;
|
|
4
|
+
const utils_1 = require("../../../utils");
|
|
5
|
+
exports.TimecapnHooktail = {
|
|
6
|
+
cardIds: ["BG27_005", "BG27_005_G"],
|
|
7
|
+
onTavernSpellCast: (entity, input) => {
|
|
8
|
+
const loops = entity.cardId === "BG27_005_G" ? 2 : 1;
|
|
9
|
+
for (let i = 0; i < loops; i++) {
|
|
10
|
+
(0, utils_1.addStatsToBoard)(entity, input.board, input.hero, 1, 0, input.gameState);
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=timecapn-hooktail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timecapn-hooktail.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timecapn-hooktail.ts"],"names":[],"mappings":";;;AAEA,0CAAiD;AAGpC,QAAA,gBAAgB,GAA0B;IACtD,OAAO,EAAE,0BAAwE;IACjF,iBAAiB,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACxE;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addStatsToBoard } from '../../../utils';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\n\r\nexport const TimecapnHooktail: OnTavernSpellCastCard = {\r\n\tcardIds: [CardIds.TimecapnHooktail_BG27_005, CardIds.TimecapnHooktail_BG27_005_G],\r\n\tonTavernSpellCast: (entity: BoardEntity, input: CastSpellInput) => {\r\n\t\tconst loops = entity.cardId === CardIds.TimecapnHooktail_BG27_005_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\taddStatsToBoard(entity, input.board, input.hero, 1, 0, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
|
|
@@ -7,7 +7,7 @@ const utils_2 = require("../../../utils");
|
|
|
7
7
|
exports.TimewarpedMagnanimoose = {
|
|
8
8
|
cardIds: ["BG34_Giant_619", "BG34_Giant_619_G"],
|
|
9
9
|
deathrattleSpawn: (minion, input) => {
|
|
10
|
-
const playerInitialState =
|
|
10
|
+
const playerInitialState = input.gameState.gameState.playerInitial;
|
|
11
11
|
const loops = minion.cardId === "BG34_Giant_619_G" ? 2 : 1;
|
|
12
12
|
const spawned = [];
|
|
13
13
|
for (let i = 0; i < loops; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timewarped-magnanimoose.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-magnanimoose.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,+EAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"timewarped-magnanimoose.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/timewarped-magnanimoose.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,+EAAiF;AACjF,0CAA4C;AAG/B,QAAA,sBAAsB,GAAyB;IAC3D,OAAO,EAAE,sCAAgG;IACzG,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAAgC,EAAE,EAAE;QAC3E,MAAM,kBAAkB,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,uBAAoD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAE/B,MAAM,YAAY,GAAG,IAAA,kBAAU,EAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,YAAY,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,4CAAuB,EAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;SACxE;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { copyEntity } from '../../../utils';\r\nimport { DeathrattleSpawnCard } from '../../card.interface';\r\n\r\nexport const TimewarpedMagnanimoose: DeathrattleSpawnCard = {\r\n\tcardIds: [CardIds.TimewarpedMagnanimoose_BG34_Giant_619, CardIds.TimewarpedMagnanimoose_BG34_Giant_619_G],\r\n\tdeathrattleSpawn: (minion: BoardEntity, input: DeathrattleTriggeredInput) => {\r\n\t\tconst playerInitialState = input.gameState.gameState.playerInitial;\r\n\t\tconst loops = minion.cardId === CardIds.TimewarpedMagnanimoose_BG34_Giant_619_G ? 2 : 1;\r\n\t\tconst spawned = [];\r\n\t\tfor (let i = 0; i < loops; i++) {\r\n\t\t\t// We don't know the opponents warbands, so we pick something from our own warband instead, as a proxy\r\n\t\t\tconst randomMinion = pickRandom(playerInitialState.board);\r\n\t\t\tconst clone = copyEntity(randomMinion);\r\n\t\t\tspawned.push(...simplifiedSpawnEntities(clone.cardId, 1, input, clone));\r\n\t\t}\r\n\t\treturn spawned;\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';
|
|
2
|
+
import { BoardEntity } from '../../../board-entity';
|
|
3
|
+
import { FullGameState } from '../../../simulation/internal-game-state';
|
|
1
4
|
import { StartOfCombatCard } from '../../card.interface';
|
|
2
5
|
export declare const AutomatonPortrait: StartOfCombatCard;
|
|
6
|
+
export declare const handleAutomatonPortraitForPlayer: (trinket: BoardTrinket, playerBoard: BoardEntity[], playerEntity: BgsPlayerEntity, opponentBoard: BoardEntity[], opponentEntity: BgsPlayerEntity, gameState: FullGameState) => void;
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AutomatonPortrait = void 0;
|
|
3
|
+
exports.handleAutomatonPortraitForPlayer = exports.AutomatonPortrait = void 0;
|
|
4
4
|
const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
|
|
5
5
|
const spawns_1 = require("../../../simulation/spawns");
|
|
6
6
|
exports.AutomatonPortrait = {
|
|
7
7
|
cardIds: ["BG30_MagicItem_303"],
|
|
8
|
+
startOfCombatTiming: 'start-of-combat',
|
|
8
9
|
startOfCombat: (trinket, input) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
(0, spawns_1.performEntitySpawns)(newMinions, input.playerBoard, input.playerEntity, input.playerEntity, 0, input.opponentBoard, input.opponentEntity, input.gameState);
|
|
12
|
-
return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
|
|
13
|
-
}
|
|
10
|
+
trinket.scriptDataNum1 = 1;
|
|
11
|
+
return { hasTriggered: true, shouldRecomputeCurrentAttacker: true };
|
|
14
12
|
},
|
|
15
13
|
};
|
|
14
|
+
const handleAutomatonPortraitForPlayer = (trinket, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState) => {
|
|
15
|
+
if (playerBoard.length < 7 && trinket.scriptDataNum1 > 0) {
|
|
16
|
+
const newMinions = (0, deathrattle_spawns_1.spawnEntities)("BG_TTN_401", 1, playerBoard, playerEntity, opponentBoard, opponentEntity, gameState, playerEntity.friendly, false);
|
|
17
|
+
(0, spawns_1.performEntitySpawns)(newMinions, playerBoard, playerEntity, playerEntity, 0, opponentBoard, opponentEntity, gameState);
|
|
18
|
+
trinket.scriptDataNum1 = 0;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.handleAutomatonPortraitForPlayer = handleAutomatonPortraitForPlayer;
|
|
16
22
|
//# sourceMappingURL=automaton-portrait.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automaton-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/automaton-portrait.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"automaton-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/automaton-portrait.ts"],"names":[],"mappings":";;;AAGA,+EAAuE;AAEvE,uDAAiE;AAIpD,QAAA,iBAAiB,GAAsB;IACnD,OAAO,EAAE,sBAA8C;IACvD,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;QAC3B,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;CACD,CAAC;AAEK,MAAM,gCAAgC,GAAG,CAC/C,OAAqB,EACrB,WAA0B,EAC1B,YAA6B,EAC7B,aAA4B,EAC5B,cAA+B,EAC/B,SAAwB,EACjB,EAAE;IACT,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE;QACzD,MAAM,UAAU,GAAG,IAAA,kCAAa,gBAE/B,CAAC,EACD,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,CAAC,QAAQ,EACrB,KAAK,CACL,CAAC;QACF,IAAA,4BAAmB,EAClB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,CAAC,EACD,aAAa,EACb,cAAc,EACd,SAAS,CACT,CAAC;QACF,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;KAC3B;AACF,CAAC,CAAC;AAhCW,QAAA,gCAAgC,oCAgC3C","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { spawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { FullGameState } from '../../../simulation/internal-game-state';\r\nimport { performEntitySpawns } from '../../../simulation/spawns';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const AutomatonPortrait: StartOfCombatCard = {\r\n\tcardIds: [CardIds.AutomatonPortrait_BG30_MagicItem_303],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\ttrinket.scriptDataNum1 = 1;\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: true };\r\n\t},\r\n};\r\n\r\nexport const handleAutomatonPortraitForPlayer = (\r\n\ttrinket: BoardTrinket,\r\n\tplayerBoard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\topponentBoard: BoardEntity[],\r\n\topponentEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): void => {\r\n\tif (playerBoard.length < 7 && trinket.scriptDataNum1 > 0) {\r\n\t\tconst newMinions = spawnEntities(\r\n\t\t\tCardIds.AstralAutomaton_BG_TTN_401,\r\n\t\t\t1,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t\tplayerEntity.friendly,\r\n\t\t\tfalse,\r\n\t\t);\r\n\t\tperformEntitySpawns(\r\n\t\t\tnewMinions,\r\n\t\t\tplayerBoard,\r\n\t\t\tplayerEntity,\r\n\t\t\tplayerEntity,\r\n\t\t\t0,\r\n\t\t\topponentBoard,\r\n\t\t\topponentEntity,\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\ttrinket.scriptDataNum1 = 0;\r\n\t}\r\n};\r\n"]}
|
|
@@ -1,30 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FangAnklet = void 0;
|
|
4
|
-
const reference_data_1 = require("@firestone-hs/reference-data");
|
|
5
4
|
const global_info_helpers_1 = require("../../../simulation/global-info-helpers");
|
|
6
|
-
const stats_1 = require("../../../simulation/stats");
|
|
7
|
-
const utils_1 = require("../../../utils");
|
|
8
5
|
exports.FangAnklet = {
|
|
9
6
|
cardIds: ["BG35_MagicItem_701"],
|
|
10
7
|
startOfCombat: (trinket, input) => {
|
|
11
8
|
const buff = trinket.scriptDataNum1 || 1;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if ((0, utils_1.hasCorrectTribe)(entity, input.playerEntity, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
|
|
15
|
-
(0, stats_1.modifyStats)(entity, trinket, buff, buff, input.playerBoard, input.playerEntity, input.gameState);
|
|
16
|
-
triggered = true;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
input.playerEntity.globalInfo.GoldrinnBuffAtk += buff;
|
|
20
|
-
input.playerEntity.globalInfo.GoldrinnBuffHealth += buff;
|
|
21
|
-
return { hasTriggered: triggered, shouldRecomputeCurrentAttacker: false };
|
|
9
|
+
(0, global_info_helpers_1.increaseGoldrinnBuff)(trinket, input.playerBoard, input.playerEntity, buff, buff, input.gameState);
|
|
10
|
+
return { hasTriggered: true, shouldRecomputeCurrentAttacker: false };
|
|
22
11
|
},
|
|
23
12
|
afterOtherSpawned: (trinket, input) => {
|
|
24
|
-
if ((0, utils_1.hasCorrectTribe)(input.spawned, input.hero, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
|
|
25
|
-
(0, global_info_helpers_1.increaseGoldrinnBuff)(trinket, input.board, input.hero, 1, 1, input.gameState);
|
|
26
|
-
trinket.scriptDataNum1 = (trinket.scriptDataNum1 || 1) + 1;
|
|
27
|
-
}
|
|
28
13
|
},
|
|
29
14
|
};
|
|
30
15
|
//# sourceMappingURL=fang-anklet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fang-anklet.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/fang-anklet.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fang-anklet.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/fang-anklet.ts"],"names":[],"mappings":";;;AAGA,iFAA+E;AAIlE,QAAA,UAAU,GAA8C;IACpE,OAAO,EAAE,sBAAuC;IAChD,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QAEzD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;QACzC,IAAA,0CAAoB,EAAC,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClG,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;IACD,iBAAiB,EAAE,CAAC,OAAqB,EAAE,KAAwB,EAAE,EAAE;IAEvE,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnOtherSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { increaseGoldrinnBuff } from '../../../simulation/global-info-helpers';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { AfterOtherSpawnedCard, StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const FangAnklet: StartOfCombatCard & AfterOtherSpawnedCard = {\r\n\tcardIds: [CardIds.FangAnklet_BG35_MagicItem_701],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\t// Can be permanently buffed in previous combats\r\n\t\tconst buff = trinket.scriptDataNum1 || 1;\r\n\t\tincreaseGoldrinnBuff(trinket, input.playerBoard, input.playerEntity, buff, buff, input.gameState);\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n\tafterOtherSpawned: (trinket: BoardTrinket, input: OnOtherSpawnInput) => {\r\n\t\t// The buff only happens at the start of the combat, so there is no point in incrementing anything here\r\n\t},\r\n};\r\n"]}
|
|
@@ -13,7 +13,7 @@ exports.JarOGems = {
|
|
|
13
13
|
if (t.scriptDataNum1 <= 0) {
|
|
14
14
|
for (const entity of input.attackingBoard.filter((e) => (0, utils_1.hasCorrectTribe)(e, input.attackingHero, reference_data_1.Race.QUILBOAR, input.gameState.anomalies, input.gameState.allCards))) {
|
|
15
15
|
(0, blood_gems_1.playBloodGemsOn)(t, entity, 1, input.attackingBoard, input.attackingHero, input.defendingBoard, input.defendingHero, input.gameState);
|
|
16
|
-
input.gameState.spectator.registerPowerTarget(t, entity, input.attackingBoard, input.attackingHero, input.
|
|
16
|
+
input.gameState.spectator.registerPowerTarget(t, entity, input.attackingBoard, input.attackingHero, input.defendingHero);
|
|
17
17
|
}
|
|
18
18
|
t.scriptDataNum1 = input.gameState.cardsData.defaultScriptDataNum(t.cardId);
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jar-o-gems.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/jar-o-gems.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,+DAAiE;AAEjE,0CAAiD;AAGpC,QAAA,QAAQ,GAA6D;IACjF,OAAO,EAAE,sBAAqC;IAC9C,oBAAoB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAC3C,yBAAyB,EAAE,CAAC,OAAsD,EAAE,KAAoB,EAAE,EAAE;QAC3G,MAAM,CAAC,GAAG,OAAuB,CAAC;QAClC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,EAAE;YAC1B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,QAAQ,EACb,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,EAAE;gBACF,IAAA,4BAAe,EACd,CAAC,EACD,MAAM,EACN,CAAC,EACD,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,CAAC,EACD,MAAM,EACN,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,CACnB,CAAC;aACF;YACD,CAAC,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC5E;QACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { playBloodGemsOn } from '../../../simulation/blood-gems';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterAnotherMinionAttacksCard, DefaultScriptDataNumCard } from '../../card.interface';\r\n\r\nexport const JarOGems: AfterAnotherMinionAttacksCard & DefaultScriptDataNumCard = {\r\n\tcardIds: [CardIds.JarOGems_BG30_MagicItem_546],\r\n\tdefaultScriptDataNum: (cardId: string) => 2,\r\n\tafterAnotherMinionAttacks: (trinket: BoardEntity | BoardTrinket | BoardEnchantment, input: OnAttackInput) => {\r\n\t\tconst t = trinket as BoardTrinket;\r\n\t\tt.scriptDataNum1--;\r\n\t\tif (t.scriptDataNum1 <= 0) {\r\n\t\t\tfor (const entity of input.attackingBoard.filter((e) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tRace.QUILBOAR,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t),\r\n\t\t\t)) {\r\n\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.
|
|
1
|
+
{"version":3,"file":"jar-o-gems.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/jar-o-gems.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,+DAAiE;AAEjE,0CAAiD;AAGpC,QAAA,QAAQ,GAA6D;IACjF,OAAO,EAAE,sBAAqC;IAC9C,oBAAoB,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC;IAC3C,yBAAyB,EAAE,CAAC,OAAsD,EAAE,KAAoB,EAAE,EAAE;QAC3G,MAAM,CAAC,GAAG,OAAuB,CAAC;QAClC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,EAAE;YAC1B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,IAAA,uBAAe,EACd,CAAC,EACD,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,QAAQ,EACb,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,CACD,EAAE;gBACF,IAAA,4BAAe,EACd,CAAC,EACD,MAAM,EACN,CAAC,EACD,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,CAAC,EACD,MAAM,EACN,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,CACnB,CAAC;aACF;YACD,CAAC,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC5E;QACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { playBloodGemsOn } from '../../../simulation/blood-gems';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterAnotherMinionAttacksCard, DefaultScriptDataNumCard } from '../../card.interface';\r\n\r\nexport const JarOGems: AfterAnotherMinionAttacksCard & DefaultScriptDataNumCard = {\r\n\tcardIds: [CardIds.JarOGems_BG30_MagicItem_546],\r\n\tdefaultScriptDataNum: (cardId: string) => 2,\r\n\tafterAnotherMinionAttacks: (trinket: BoardEntity | BoardTrinket | BoardEnchantment, input: OnAttackInput) => {\r\n\t\tconst t = trinket as BoardTrinket;\r\n\t\tt.scriptDataNum1--;\r\n\t\tif (t.scriptDataNum1 <= 0) {\r\n\t\t\tfor (const entity of input.attackingBoard.filter((e) =>\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tRace.QUILBOAR,\r\n\t\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\t\tinput.gameState.allCards,\r\n\t\t\t\t),\r\n\t\t\t)) {\r\n\t\t\t\tplayBloodGemsOn(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tt,\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tt.scriptDataNum1 = input.gameState.cardsData.defaultScriptDataNum(t.cardId);\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MamaBearSticker = void 0;
|
|
4
|
+
const reference_data_1 = require("@firestone-hs/reference-data");
|
|
5
|
+
const stats_1 = require("../../../simulation/stats");
|
|
6
|
+
const utils_1 = require("../../../utils");
|
|
7
|
+
exports.MamaBearSticker = {
|
|
8
|
+
cardIds: ["BG35_MagicItem_871"],
|
|
9
|
+
onOtherSpawned: (_trinket, input) => {
|
|
10
|
+
const { spawned, board, hero, gameState } = input;
|
|
11
|
+
if (!(0, utils_1.hasCorrectTribe)(spawned, hero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
(0, stats_1.modifyStats)(spawned, _trinket, 4, 4, board, hero, gameState);
|
|
15
|
+
gameState.spectator.registerPowerTarget(_trinket, spawned, board, null, null);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=mama-bear-sticker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mama-bear-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/mama-bear-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,eAAe,GAAuB;IAClD,OAAO,EAAE,sBAA4C;IACrD,cAAc,EAAE,CAAC,QAAsB,EAAE,KAAwB,EAAE,EAAE;QACpE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAClD,IAAI,CAAC,IAAA,uBAAe,EAAC,OAAO,EAAE,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YACzF,OAAO;SACP;QACD,IAAA,mBAAW,EAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7D,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnOtherSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnOtherSpawnedCard } from '../../card.interface';\r\n\r\nexport const MamaBearSticker: OnOtherSpawnedCard = {\r\n\tcardIds: [CardIds.MamaBearSticker_BG35_MagicItem_871],\r\n\tonOtherSpawned: (_trinket: BoardTrinket, input: OnOtherSpawnInput) => {\r\n\t\tconst { spawned, board, hero, gameState } = input;\r\n\t\tif (!hasCorrectTribe(spawned, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tmodifyStats(spawned, _trinket, 4, 4, board, hero, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(_trinket, spawned, board, null, null);\r\n\t},\r\n};\r\n"]}
|
|
@@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PowderKegEnchantment = void 0;
|
|
4
4
|
const deathrattle_spawns_1 = require("../../../simulation/deathrattle-spawns");
|
|
5
5
|
exports.PowderKegEnchantment = {
|
|
6
|
-
cardIds: [
|
|
6
|
+
cardIds: ['PowderKegEnchantment'],
|
|
7
7
|
deathrattleSpawnEnchantmentEffect: (enchantment, minion, input) => {
|
|
8
8
|
const spawns = (0, deathrattle_spawns_1.simplifiedSpawnEntities)("BGS_061t", 1, input);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
9
|
+
spawns.forEach((spawn) => {
|
|
10
|
+
spawn.attack += minion.attack;
|
|
11
|
+
spawn.attackImmediately = true;
|
|
12
|
+
});
|
|
13
13
|
return spawns;
|
|
14
14
|
},
|
|
15
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"powder-keg-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/powder-keg-enchantment.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,oBAAoB,GAAoC;IACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"powder-keg-enchantment.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/powder-keg-enchantment.ts"],"names":[],"mappings":";;;AAGA,+EAAiF;AAGpE,QAAA,oBAAoB,GAAoC;IACpE,OAAO,EAAE,CAAC,sBAAsB,CAAC;IACjC,iCAAiC,EAAE,CAClC,WAA6B,EAC7B,MAAsC,EACtC,KAAgC,EAC/B,EAAE;QACH,MAAM,MAAM,GAAG,IAAA,4CAAuB,cAA4C,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5F,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACxB,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;YAC9B,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAC","sourcesContent":["import { BoardEnchantment, BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { DeathrattleTriggeredInput } from '../../../simulation/deathrattle-on-trigger';\r\nimport { simplifiedSpawnEntities } from '../../../simulation/deathrattle-spawns';\r\nimport { DeathrattleSpawnEnchantmentCard } from '../../card.interface';\r\n\r\nexport const PowderKegEnchantment: DeathrattleSpawnEnchantmentCard = {\r\n\tcardIds: ['PowderKegEnchantment'],\r\n\tdeathrattleSpawnEnchantmentEffect: (\r\n\t\tenchantment: BoardEnchantment,\r\n\t\tminion: BoardEntity | null | undefined,\r\n\t\tinput: DeathrattleTriggeredInput,\r\n\t) => {\r\n\t\tconst spawns = simplifiedSpawnEntities(CardIds.Scallywag_SkyPirateToken_BGS_061t, 1, input);\r\n\t\tspawns.forEach((spawn) => {\r\n\t\t\tspawn.attack += minion.attack;\r\n\t\t\tspawn.attackImmediately = true;\r\n\t\t});\r\n\t\treturn spawns;\r\n\t},\r\n};\r\n"]}
|
|
@@ -6,16 +6,18 @@ const utils_1 = require("../../../services/utils");
|
|
|
6
6
|
const utils_2 = require("../../../utils");
|
|
7
7
|
exports.PowderKeg = {
|
|
8
8
|
cardIds: ["BG35_MagicItem_714"],
|
|
9
|
+
startOfCombatTiming: 'start-of-combat',
|
|
9
10
|
startOfCombat: (trinket, input) => {
|
|
10
11
|
const pirates = input.playerBoard.filter((e) => (0, utils_2.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.PIRATE, input.gameState.anomalies, input.gameState.allCards));
|
|
11
12
|
const targets = (0, utils_1.pickMultipleRandomAlive)(pirates, 2);
|
|
12
13
|
for (const target of targets) {
|
|
13
14
|
target.enchantments.push({
|
|
14
|
-
cardId:
|
|
15
|
+
cardId: 'PowderKegEnchantment',
|
|
15
16
|
originEntityId: trinket.entityId,
|
|
16
17
|
repeats: 1,
|
|
17
18
|
timing: input.gameState.sharedState.currentEntityId++,
|
|
18
19
|
});
|
|
20
|
+
input.gameState.spectator.registerPowerTarget(trinket, target, input.playerBoard, input.playerEntity, input.opponentEntity);
|
|
19
21
|
}
|
|
20
22
|
return { hasTriggered: true, shouldRecomputeCurrentAttacker: false };
|
|
21
23
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"powder-keg.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/powder-keg.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,mDAAkE;AAElE,0CAAiD;AAGpC,QAAA,SAAS,GAAsB;IAC3C,OAAO,EAAE,sBAAsC;IAC/C,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9C,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,MAAM,OAAO,GAAG,IAAA,+BAAuB,EAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"powder-keg.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/powder-keg.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,mDAAkE;AAElE,0CAAiD;AAGpC,QAAA,SAAS,GAAsB;IAC3C,OAAO,EAAE,sBAAsC;IAC/C,mBAAmB,EAAE,iBAAiB;IACtC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9C,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,MAAM,OAAO,GAAG,IAAA,+BAAuB,EAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC7B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxB,MAAM,EAAE,sBAAsB;gBAC9B,cAAc,EAAE,OAAO,CAAC,QAAQ;gBAChC,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;aACrD,CAAC,CAAC;YACH,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,OAAO,EACP,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,CACpB,CAAC;SACF;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickMultipleRandomAlive } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const PowderKeg: StartOfCombatCard = {\r\n\tcardIds: [CardIds.PowderKeg_BG35_MagicItem_714],\r\n\tstartOfCombatTiming: 'start-of-combat',\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst pirates = input.playerBoard.filter((e) =>\r\n\t\t\thasCorrectTribe(e, input.playerEntity, Race.PIRATE, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tconst targets = pickMultipleRandomAlive(pirates, 2);\r\n\t\tfor (const target of targets) {\r\n\t\t\ttarget.enchantments.push({\r\n\t\t\t\tcardId: 'PowderKegEnchantment',\r\n\t\t\t\toriginEntityId: trinket.entityId,\r\n\t\t\t\trepeats: 1,\r\n\t\t\t\ttiming: input.gameState.sharedState.currentEntityId++,\r\n\t\t\t});\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(\r\n\t\t\t\ttrinket,\r\n\t\t\t\ttarget,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.opponentEntity,\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
|
|
@@ -11,7 +11,7 @@ exports.SlammaSticker = {
|
|
|
11
11
|
if (!(0, utils_1.hasCorrectTribe)(spawned, hero, reference_data_1.Race.BEAST, gameState.anomalies, gameState.allCards)) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
|
-
(0, stats_1.setEntityStats)(spawned, spawned.attack * 2,
|
|
14
|
+
(0, stats_1.setEntityStats)(spawned, spawned.attack * 2, 0, board, hero, gameState);
|
|
15
15
|
gameState.spectator.registerPowerTarget(hero, spawned, board, null, null);
|
|
16
16
|
},
|
|
17
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slamma-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/slamma-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAA2D;AAC3D,0CAAiD;AAGpC,QAAA,aAAa,GAA0B;IACnD,OAAO,EAAE,sBAA0C;IACnD,iBAAiB,EAAE,CAAC,QAAsB,EAAE,KAAwB,EAAE,EAAE;QACvE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAClD,IAAI,CAAC,IAAA,uBAAe,EAAC,OAAO,EAAE,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YACzF,OAAO;SACP;QACD,IAAA,sBAAc,EAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"slamma-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/slamma-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAA2D;AAC3D,0CAAiD;AAGpC,QAAA,aAAa,GAA0B;IACnD,OAAO,EAAE,sBAA0C;IACnD,iBAAiB,EAAE,CAAC,QAAsB,EAAE,KAAwB,EAAE,EAAE;QACvE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAClD,IAAI,CAAC,IAAA,uBAAe,EAAC,OAAO,EAAE,IAAI,EAAE,qBAAI,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YACzF,OAAO;SACP;QACD,IAAA,sBAAc,EAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACvE,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnOtherSpawnInput } from '../../../simulation/add-minion-to-board';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterOtherSpawnedCard } from '../../card.interface';\r\n\r\nexport const SlammaSticker: AfterOtherSpawnedCard = {\r\n\tcardIds: [CardIds.SlammaSticker_BG30_MagicItem_540],\r\n\tafterOtherSpawned: (_trinket: BoardTrinket, input: OnOtherSpawnInput) => {\r\n\t\tconst { spawned, board, hero, gameState } = input;\r\n\t\tif (!hasCorrectTribe(spawned, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetEntityStats(spawned, spawned.attack * 2, 0, board, hero, gameState);\r\n\t\tgameState.spectator.registerPowerTarget(hero, spawned, board, null, null);\r\n\t},\r\n};\r\n"]}
|