@firestone-hs/simulate-bgs-battle 1.1.732 → 1.1.733
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 +4 -4
- package/dist/cards/card.interface.js.map +1 -1
- package/dist/cards/impl/_card-mappings.js +2 -0
- package/dist/cards/impl/_card-mappings.js.map +1 -1
- package/dist/cards/impl/bg-spell/sharing-is-caring.js.map +1 -1
- package/dist/cards/impl/bg-spell/toxic-tumbleweed.js.map +1 -1
- package/dist/cards/impl/hero-power/aim-high.js.map +1 -1
- package/dist/cards/impl/hero-power/aim-left.js.map +1 -1
- package/dist/cards/impl/hero-power/aim-low.js.map +1 -1
- package/dist/cards/impl/hero-power/aim-right.js.map +1 -1
- package/dist/cards/impl/hero-power/avatar-of-nzoth.js +2 -13
- package/dist/cards/impl/hero-power/avatar-of-nzoth.js.map +1 -1
- package/dist/cards/impl/hero-power/earth-invocation.js.map +1 -1
- package/dist/cards/impl/hero-power/embrace-your-rage.js.map +1 -1
- package/dist/cards/impl/hero-power/fire-invocation.js.map +1 -1
- package/dist/cards/impl/hero-power/reborn-rites.js.map +1 -1
- package/dist/cards/impl/hero-power/water-invocation.js.map +1 -1
- package/dist/cards/impl/minion/all-seeing-elder.js.map +1 -1
- package/dist/cards/impl/minion/alleycat.js.map +1 -1
- package/dist/cards/impl/minion/amber-guardian.js.map +1 -1
- package/dist/cards/impl/minion/amplifying-lightspawn.js.map +1 -1
- package/dist/cards/impl/minion/archimonde.js.map +1 -1
- package/dist/cards/impl/minion/arid-atrocity.js.map +1 -1
- package/dist/cards/impl/minion/ashen-corruptor.js.map +1 -1
- package/dist/cards/impl/minion/assistant-guard.js.map +1 -1
- package/dist/cards/impl/minion/audacious-anchor.js.map +1 -1
- package/dist/cards/impl/minion/auto-assembler.js.map +1 -1
- package/dist/cards/impl/minion/avalanche-caller.js.map +1 -1
- package/dist/cards/impl/minion/baneling.js.map +1 -1
- package/dist/cards/impl/minion/bigwig-bandit.js.map +1 -1
- package/dist/cards/impl/minion/bird-buddy.js.map +1 -1
- package/dist/cards/impl/minion/blazing-skyfin.js.map +1 -1
- package/dist/cards/impl/minion/blue-whelp.js.map +1 -1
- package/dist/cards/impl/minion/boar-gamer.js.map +1 -1
- package/dist/cards/impl/minion/briarback-bookie.js.map +1 -1
- package/dist/cards/impl/minion/bronze-steward.js.map +1 -1
- package/dist/cards/impl/minion/bubble-gunner.js.map +1 -1
- package/dist/cards/impl/minion/buzzing-vermin.js.map +1 -1
- package/dist/cards/impl/minion/cadaver-caretaker.js.map +1 -1
- package/dist/cards/impl/minion/captain-bonerender.js.map +1 -1
- package/dist/cards/impl/minion/carapace-raiser.js.map +1 -1
- package/dist/cards/impl/minion/carbonic-copy.js.map +1 -1
- package/dist/cards/impl/minion/coilskar-sapper.js.map +1 -1
- package/dist/cards/impl/minion/coldlight-diver.js.map +1 -1
- package/dist/cards/impl/minion/crystal-infuser-enchantment.js.map +1 -1
- package/dist/cards/impl/minion/cupcake-peddler.js.map +1 -1
- package/dist/cards/impl/minion/deadstomper.js.map +1 -1
- package/dist/cards/impl/minion/deathly-striker.js.map +1 -1
- package/dist/cards/impl/minion/deflecto-bot.js.map +1 -1
- package/dist/cards/impl/minion/devout-hellcaller.js.map +1 -1
- package/dist/cards/impl/minion/drakkari-embalmer.js.map +1 -1
- package/dist/cards/impl/minion/electric-synthesizer.js.map +1 -1
- package/dist/cards/impl/minion/elite-navigator.js.map +1 -1
- package/dist/cards/impl/minion/fairy-gillmother.js.map +1 -1
- package/dist/cards/impl/minion/falling-sky-golem.d.ts +1 -1
- package/dist/cards/impl/minion/falling-sky-golem.js +11 -7
- package/dist/cards/impl/minion/falling-sky-golem.js.map +1 -1
- package/dist/cards/impl/minion/firescale-hoarder.js.map +1 -1
- package/dist/cards/impl/minion/fireworks-fanatic.js.map +1 -1
- package/dist/cards/impl/minion/flotsam-flinger.js.map +1 -1
- package/dist/cards/impl/minion/flourishing-frostling.d.ts +2 -0
- package/dist/cards/impl/minion/flourishing-frostling.js +47 -0
- package/dist/cards/impl/minion/flourishing-frostling.js.map +1 -0
- package/dist/cards/impl/minion/fountain-chiller.js.map +1 -1
- package/dist/cards/impl/minion/friendly-geist.js.map +1 -1
- package/dist/cards/impl/minion/gem-rat.js.map +1 -1
- package/dist/cards/impl/minion/general-drakkisath.js.map +1 -1
- package/dist/cards/impl/minion/gentle-djinni.js.map +1 -1
- package/dist/cards/impl/minion/gentle-stag.js.map +1 -1
- package/dist/cards/impl/minion/glowing-cinder.js +2 -1
- package/dist/cards/impl/minion/glowing-cinder.js.map +1 -1
- package/dist/cards/impl/minion/gormling-gourmet.js.map +1 -1
- package/dist/cards/impl/minion/greedy-snaketongue.js.map +1 -1
- package/dist/cards/impl/minion/grimscale-elegist.js.map +1 -1
- package/dist/cards/impl/minion/gritty-headhunter.js.map +1 -1
- package/dist/cards/impl/minion/hackerfin.js.map +1 -1
- package/dist/cards/impl/minion/handless-forsaken.js.map +1 -1
- package/dist/cards/impl/minion/harmless-bonehead.js.map +1 -1
- package/dist/cards/impl/minion/hawkstrider-herald.js.map +1 -1
- package/dist/cards/impl/minion/holo-rover.js.map +1 -1
- package/dist/cards/impl/minion/humongozz.js.map +1 -1
- package/dist/cards/impl/minion/hungry-snapjaw.js.map +1 -1
- package/dist/cards/impl/minion/hunter-of-gatherers.js.map +1 -1
- package/dist/cards/impl/minion/ignition-specialist.js.map +1 -1
- package/dist/cards/impl/minion/immortal.js.map +1 -1
- package/dist/cards/impl/minion/implant-subject.js.map +1 -1
- package/dist/cards/impl/minion/imposing-percussionist.js.map +1 -1
- package/dist/cards/impl/minion/inspiring-underdog.js.map +1 -1
- package/dist/cards/impl/minion/interrogator-whitemane.js.map +1 -1
- package/dist/cards/impl/minion/kangors-apprentice.js.map +1 -1
- package/dist/cards/impl/minion/leeroy-the-reckless.js.map +1 -1
- package/dist/cards/impl/minion/lightfang-enforcer.js.map +1 -1
- package/dist/cards/impl/minion/lightfeather-screecher.js.map +1 -1
- package/dist/cards/impl/minion/living-azerite.js.map +1 -1
- package/dist/cards/impl/minion/lokholar-frostforger.js.map +1 -1
- package/dist/cards/impl/minion/lovesick-balladist.js.map +1 -1
- package/dist/cards/impl/minion/low-flier.js.map +1 -1
- package/dist/cards/impl/minion/lurker.js.map +1 -1
- package/dist/cards/impl/minion/manasaber.js.map +1 -1
- package/dist/cards/impl/minion/mantid-queen.js.map +1 -1
- package/dist/cards/impl/minion/marquee-ticker.js.map +1 -1
- package/dist/cards/impl/minion/maw-caster.js.map +1 -1
- package/dist/cards/impl/minion/mecha-jaraxxus.js.map +1 -1
- package/dist/cards/impl/minion/mechanized-gift-horse.js.map +1 -1
- package/dist/cards/impl/minion/mechorse.js.map +1 -1
- package/dist/cards/impl/minion/menagerie-jug.js.map +1 -1
- package/dist/cards/impl/minion/metallic-hunter.js.map +1 -1
- package/dist/cards/impl/minion/misfit-dragonling.js.map +1 -1
- package/dist/cards/impl/minion/moat-custodian.js +2 -2
- package/dist/cards/impl/minion/moat-custodian.js.map +1 -1
- package/dist/cards/impl/minion/murkbrine-expeditioner.js.map +1 -1
- package/dist/cards/impl/minion/murky.js.map +1 -1
- package/dist/cards/impl/minion/mutated-lasher.js.map +1 -1
- package/dist/cards/impl/minion/mythrax.js.map +1 -1
- package/dist/cards/impl/minion/neon-agent.js.map +1 -1
- package/dist/cards/impl/minion/nest-swarmer.js.map +1 -1
- package/dist/cards/impl/minion/nether-drake.js.map +1 -1
- package/dist/cards/impl/minion/nightmare-par-tea-guest.js.map +1 -1
- package/dist/cards/impl/minion/nimble-hatchling.js.map +1 -1
- package/dist/cards/impl/minion/operatic-belcher.js.map +1 -1
- package/dist/cards/impl/minion/outback-smolderer.js.map +1 -1
- package/dist/cards/impl/minion/parched-wanderer.js.map +1 -1
- package/dist/cards/impl/minion/primalfin-lookout.js.map +1 -1
- package/dist/cards/impl/minion/rapscallion-recruiter.js.map +1 -1
- package/dist/cards/impl/minion/razorgore-the-untamed.js.map +1 -1
- package/dist/cards/impl/minion/roach.js.map +1 -1
- package/dist/cards/impl/minion/roadboar.js.map +1 -1
- package/dist/cards/impl/minion/rodeo-performer.js.map +1 -1
- package/dist/cards/impl/minion/ruins-renovator.js.map +1 -1
- package/dist/cards/impl/minion/rylak-metalhead.js.map +1 -1
- package/dist/cards/impl/minion/salty-hog.js.map +1 -1
- package/dist/cards/impl/minion/sand-swirler.js +2 -1
- package/dist/cards/impl/minion/sand-swirler.js.map +1 -1
- package/dist/cards/impl/minion/sandy.js.map +1 -1
- package/dist/cards/impl/minion/scourge-harvester.js.map +1 -1
- package/dist/cards/impl/minion/selfless-hero.js.map +1 -1
- package/dist/cards/impl/minion/shadowdancer.js.map +1 -1
- package/dist/cards/impl/minion/sharp-eyed-sabretooth.js.map +1 -1
- package/dist/cards/impl/minion/sharptooth-snapper.js.map +1 -1
- package/dist/cards/impl/minion/ship-master-eudora.js.map +1 -1
- package/dist/cards/impl/minion/shipwrecked-rascal.js.map +1 -1
- package/dist/cards/impl/minion/shore-marauder.js +3 -4
- package/dist/cards/impl/minion/shore-marauder.js.map +1 -1
- package/dist/cards/impl/minion/silver-handed-recruit.js.map +1 -1
- package/dist/cards/impl/minion/slumber-sorcerer.js.map +1 -1
- package/dist/cards/impl/minion/smolderwing.js.map +1 -1
- package/dist/cards/impl/minion/soul-rewinder.js.map +1 -1
- package/dist/cards/impl/minion/spacefarer.js.map +1 -1
- package/dist/cards/impl/minion/spirited-whimsydrake.js.map +1 -1
- package/dist/cards/impl/minion/springy-spriggan.js.map +1 -1
- package/dist/cards/impl/minion/stitched-salvager.js.map +1 -1
- package/dist/cards/impl/minion/stray-satyr.js.map +1 -1
- package/dist/cards/impl/minion/sun-screener.js.map +1 -1
- package/dist/cards/impl/minion/surfing-slyvar.js.map +1 -1
- package/dist/cards/impl/minion/thorncaller.js.map +1 -1
- package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -1
- package/dist/cards/impl/minion/thundering-abomination.js.map +1 -1
- package/dist/cards/impl/minion/timewarped-swirler.js +3 -4
- package/dist/cards/impl/minion/timewarped-swirler.js.map +1 -1
- package/dist/cards/impl/minion/timewarped-warghoul.js.map +1 -1
- package/dist/cards/impl/minion/tunnel-blaster.js.map +1 -1
- package/dist/cards/impl/minion/twilight-primordium.js.map +1 -1
- package/dist/cards/impl/minion/ultralisk.js.map +1 -1
- package/dist/cards/impl/minion/valiant-tiger.js.map +1 -1
- package/dist/cards/impl/minion/void-earl.js.map +1 -1
- package/dist/cards/impl/minion/vorkai-guardian.js.map +1 -1
- package/dist/cards/impl/minion/wandering-wight.js.map +1 -1
- package/dist/cards/impl/minion/whelp-smuggler.js.map +1 -1
- package/dist/cards/impl/minion/whirring-protector-enchantment.js.map +1 -1
- package/dist/cards/impl/minion/wildfire-elemental.js.map +1 -1
- package/dist/cards/impl/minion/wisp-in-the-shell.js.map +1 -1
- package/dist/cards/impl/minion/yorik-smite.js.map +1 -1
- package/dist/cards/impl/minion/yrel.js.map +1 -1
- package/dist/cards/impl/minion/yulon-fortune-granter.js.map +1 -1
- package/dist/cards/impl/quest-reward/righteous-charge.js.map +1 -1
- package/dist/cards/impl/trinket/all-purpose-kibble.js.map +1 -1
- package/dist/cards/impl/trinket/arm-of-the-empire.js.map +1 -1
- package/dist/cards/impl/trinket/bassgill-portrait.js.map +1 -1
- package/dist/cards/impl/trinket/battle-horn.js.map +1 -1
- package/dist/cards/impl/trinket/bird-feeder.js.map +1 -1
- package/dist/cards/impl/trinket/crocheted-sungill.js.map +1 -1
- package/dist/cards/impl/trinket/eclectic-shrine.js.map +1 -1
- package/dist/cards/impl/trinket/faerie-dragon-scale.js.map +1 -1
- package/dist/cards/impl/trinket/fishy-sticker.js.map +1 -1
- package/dist/cards/impl/trinket/herald-sticker.js.map +1 -1
- package/dist/cards/impl/trinket/karazhan-chess-set.js.map +1 -1
- package/dist/cards/impl/trinket/rivendare-portrait.js.map +1 -1
- package/dist/cards/impl/trinket/sthara-sticker.js.map +1 -1
- package/dist/cards/impl/trinket/valorous-medaillion.js.map +1 -1
- package/dist/cards/impl/trinket/vashjir-anemone.js.map +1 -1
- package/dist/cards/impl/trinket/yulon-sticker.js.map +1 -1
- package/dist/debug-state.js.map +1 -1
- package/dist/keywords/venomous.js.map +1 -1
- package/dist/mechanics/player-global-effects.d.ts +6 -4
- package/dist/mechanics/player-global-effects.js +7 -3
- package/dist/mechanics/player-global-effects.js.map +1 -1
- package/dist/simulation/add-minion-to-board.js +0 -19
- package/dist/simulation/add-minion-to-board.js.map +1 -1
- package/dist/simulation/deathrattle-on-trigger.js.map +1 -1
- package/dist/simulation/discover.js.map +1 -1
- package/dist/simulation/frenzy.js.map +1 -1
- package/dist/simulation/global-info-helpers.d.ts +1 -0
- package/dist/simulation/global-info-helpers.js +39 -1
- package/dist/simulation/global-info-helpers.js.map +1 -1
- package/dist/simulation/on-attack.js +1 -5
- package/dist/simulation/on-attack.js.map +1 -1
- package/dist/simulation/quest.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on-attack.js","sourceRoot":"","sources":["../../src/simulation/on-attack.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnWheneverAnotherMinionAttacks } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { triggerRally } from '../mechanics/rally';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\n// Whenever it attacks\r\nexport const applyOnAttackEffects = (\r\n\tattacker: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): { damageDoneByAttacker: number; damageDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets ?? []) {\r\n\t\tconst onAttackImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(trinket, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\t// \"Whenever friendly minion attacks\" triggers before the rally itself?\r\n\t// https://replays.firestoneapp.com/?reviewId=04e6a624-ccd5-4068-9420-884843f3685f&turn=25&action=1\r\n\t// (slice() gives us a snapshot in case a handler mutates the board mid-iteration)\r\n\tfor (const boardEntity of attackingBoard.slice()) {\r\n\t\tif (boardEntity === attacker) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tconst onAttackImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(boardEntity, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = boardEntity.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// This assumes that only \"Rally\" effects trigger on attack\r\n\t// 2025-08-20: this is false. \"Whenever a friendly minion attacks\" is not a rally effect\r\n\tconst { dmgDoneByAttacker: dmgDoneByRally, dmgDoneByDefender: dmgDoneByRallyDefender } = triggerRally(\r\n\t\tattackingBoard,\r\n\t\tattackingBoardHero,\r\n\t\tattacker,\r\n\t\tdefendingBoard,\r\n\t\tdefendingBoardHero,\r\n\t\tdefendingEntity,\r\n\t\tgameState,\r\n\t);\r\n\tdamageDoneByAttacker += dmgDoneByRally;\r\n\tdamageDoneByDefender += dmgDoneByRallyDefender;\r\n\r\n\t// if (attacker.cardId === CardIds.GlyphGuardian_BGS_045) {\r\n\t// \t// For now the utility method only works additively, so we hack around it\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t2 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else if (attacker.cardId === CardIds.GlyphGuardian_TB_BaconUps_115) {\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t3 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else\r\n\tif (attacker.cardId === CardIds.GlimGuardian_BG29_888 || attacker.cardId === CardIds.GlimGuardian_BG29_888_G) {\r\n\t\tconst multiplier = attacker.cardId === CardIds.GlimGuardian_BG29_888_G ? 2 : 1;\r\n\t\tmodifyStats(attacker, attacker, 2 * multiplier, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t} else if (\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708 ||\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G\r\n\t) {\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, attackingBoardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t} else if (attacker.cardId === CardIds.HatefulHag_BG29_120 || attacker.cardId === CardIds.HatefulHag_BG29_120_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.HatefulHag_BG29_120_G ? 2 : 1;\r\n\t\tconst attackerIndex = attackingBoard.indexOf(attacker);\r\n\t\tfor (let i = 1; i <= loops; i++) {\r\n\t\t\tconst target = attackingBoard[attackerIndex + i];\r\n\t\t\tif (!!target) {\r\n\t\t\t\tupdateReborn(target, true, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tdefendingBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst eclipsion = attackingBoard.find(\r\n\t\t(e) =>\r\n\t\t\t(e.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G) &&\r\n\t\t\te.abiityChargesLeft > 0,\r\n\t);\r\n\t// Only once per minion\r\n\tif (!!eclipsion && attacker.immuneWhenAttackCharges == null) {\r\n\t\tattacker.immuneWhenAttackCharges = 1;\r\n\t\t// If we have 2 eclipsions, the first minion that attacks eats both charges\r\n\t\tfor (const e of attackingBoard) {\r\n\t\t\tif (\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G\r\n\t\t\t) {\r\n\t\t\t\te.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.CeremonialSword_BG30_MagicItem_925:\r\n\t\t\t\tmodifyStats(attacker, trinket, 4, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { damageDoneByAttacker, damageDoneByDefender };\r\n};\r\n\r\nexport interface OnAttackInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n\tplayerIsFriendly: boolean;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"on-attack.js","sourceRoot":"","sources":["../../src/simulation/on-attack.ts"],"names":[],"mappings":"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","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BgsPlayerEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnWheneverAnotherMinionAttacks } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateReborn } from '../keywords/reborn';\r\nimport { triggerRally } from '../mechanics/rally';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { hasCorrectTribe } from '../utils';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { modifyStats } from './stats';\r\n\r\n// Whenever it attacks\r\nexport const applyOnAttackEffects = (\r\n\tattacker: BoardEntity,\r\n\tattackingBoard: BoardEntity[],\r\n\tattackingBoardHero: BgsPlayerEntity,\r\n\tdefendingEntity: BoardEntity,\r\n\tdefendingBoard: BoardEntity[],\r\n\tdefendingBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n): { damageDoneByAttacker: number; damageDoneByDefender: number } => {\r\n\tlet damageDoneByAttacker = 0;\r\n\tlet damageDoneByDefender = 0;\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets ?? []) {\r\n\t\tconst onAttackImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(trinket, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t}\r\n\r\n\t// \"Whenever friendly minion attacks\" triggers before the rally itself?\r\n\t// https://replays.firestoneapp.com/?reviewId=04e6a624-ccd5-4068-9420-884843f3685f&turn=25&action=1\r\n\t// (slice() gives us a snapshot in case a handler mutates the board mid-iteration)\r\n\tfor (const boardEntity of attackingBoard.slice()) {\r\n\t\tif (boardEntity === attacker) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tconst onAttackImpl = cardMappings[boardEntity.cardId];\r\n\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(boardEntity, {\r\n\t\t\t\tattacker: attacker,\r\n\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\tgameState,\r\n\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t});\r\n\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t}\r\n\t\tconst enchantments = boardEntity.enchantments;\r\n\t\tfor (const enchantment of enchantments) {\r\n\t\t\tconst onAttackImpl = cardMappings[enchantment.cardId];\r\n\t\t\tif (hasOnWheneverAnotherMinionAttacks(onAttackImpl)) {\r\n\t\t\t\tconst { dmgDoneByAttacker, dmgDoneByDefender } = onAttackImpl.onWheneverAnotherMinionAttacks(\r\n\t\t\t\t\tenchantment,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattacker: attacker,\r\n\t\t\t\t\t\tattackingHero: attackingBoardHero,\r\n\t\t\t\t\t\tattackingBoard: attackingBoard,\r\n\t\t\t\t\t\tdefendingEntity: defendingEntity,\r\n\t\t\t\t\t\tdefendingHero: defendingBoardHero,\r\n\t\t\t\t\t\tdefendingBoard: defendingBoard,\r\n\t\t\t\t\t\tgameState,\r\n\t\t\t\t\t\tplayerIsFriendly: attackingBoardHero.friendly,\r\n\t\t\t\t\t},\r\n\t\t\t\t);\r\n\t\t\t\tdamageDoneByAttacker += dmgDoneByAttacker;\r\n\t\t\t\tdamageDoneByDefender += dmgDoneByDefender;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// This assumes that only \"Rally\" effects trigger on attack\r\n\t// 2025-08-20: this is false. \"Whenever a friendly minion attacks\" is not a rally effect\r\n\tconst { dmgDoneByAttacker: dmgDoneByRally, dmgDoneByDefender: dmgDoneByRallyDefender } = triggerRally(\r\n\t\tattackingBoard,\r\n\t\tattackingBoardHero,\r\n\t\tattacker,\r\n\t\tdefendingBoard,\r\n\t\tdefendingBoardHero,\r\n\t\tdefendingEntity,\r\n\t\tgameState,\r\n\t);\r\n\tdamageDoneByAttacker += dmgDoneByRally;\r\n\tdamageDoneByDefender += dmgDoneByRallyDefender;\r\n\r\n\t// if (attacker.cardId === CardIds.GlyphGuardian_BGS_045) {\r\n\t// \t// For now the utility method only works additively, so we hack around it\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t2 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else if (attacker.cardId === CardIds.GlyphGuardian_TB_BaconUps_115) {\r\n\t// \tmodifyStats(\r\n\t// \t\tattacker,\r\n\t// \t\tnull,\r\n\t// \t\t3 * attacker.attack - attacker.attack,\r\n\t// \t\t0,\r\n\t// \t\tattackingBoard,\r\n\t// \t\tattackingBoardHero,\r\n\t// \t\tgameState,\r\n\t// \t);\r\n\t// } else\r\n\tif (\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708 ||\r\n\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G\r\n\t) {\r\n\t\tattackingBoard\r\n\t\t\t.filter((e) => hasCorrectTribe(e, attackingBoardHero, Race.PIRATE, gameState.anomalies, gameState.allCards))\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\te,\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattacker.cardId === CardIds.VanessaVancleef_BG24_708_G ? 4 : 2,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t} else if (attacker.cardId === CardIds.HatefulHag_BG29_120 || attacker.cardId === CardIds.HatefulHag_BG29_120_G) {\r\n\t\tconst loops = attacker.cardId === CardIds.HatefulHag_BG29_120_G ? 2 : 1;\r\n\t\tconst attackerIndex = attackingBoard.indexOf(attacker);\r\n\t\tfor (let i = 1; i <= loops; i++) {\r\n\t\t\tconst target = attackingBoard[attackerIndex + i];\r\n\t\t\tif (!!target) {\r\n\t\t\t\tupdateReborn(target, true, attackingBoard, attackingBoardHero, defendingBoardHero, gameState);\r\n\t\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\t\tattacker,\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tattackingBoard,\r\n\t\t\t\t\tattackingBoardHero,\r\n\t\t\t\t\tdefendingBoardHero,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst eclipsion = attackingBoard.find(\r\n\t\t(e) =>\r\n\t\t\t(e.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G) &&\r\n\t\t\te.abiityChargesLeft > 0,\r\n\t);\r\n\t// Only once per minion\r\n\tif (!!eclipsion && attacker.immuneWhenAttackCharges == null) {\r\n\t\tattacker.immuneWhenAttackCharges = 1;\r\n\t\t// If we have 2 eclipsions, the first minion that attacks eats both charges\r\n\t\tfor (const e of attackingBoard) {\r\n\t\t\tif (\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy ||\r\n\t\t\t\te.cardId === CardIds.EclipsionIllidari_TB_BaconShop_HERO_08_Buddy_G\r\n\t\t\t) {\r\n\t\t\t\te.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const trinket of attackingBoardHero.trinkets) {\r\n\t\tswitch (trinket.cardId) {\r\n\t\t\tcase CardIds.CeremonialSword_BG30_MagicItem_925:\r\n\t\t\t\tmodifyStats(attacker, trinket, 4, 0, attackingBoard, attackingBoardHero, gameState);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { damageDoneByAttacker, damageDoneByDefender };\r\n};\r\n\r\nexport interface OnAttackInput {\r\n\tattacker: BoardEntity;\r\n\tattackingHero: BgsPlayerEntity;\r\n\tattackingBoard: BoardEntity[];\r\n\tdefendingEntity: BoardEntity;\r\n\tdefendingHero: BgsPlayerEntity;\r\n\tdefendingBoard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n\tplayerIsFriendly: boolean;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quest.js","sourceRoot":"","sources":["../../src/simulation/quest.ts"],"names":[],"mappings":";;;AAKO,MAAM,sBAAsB,GAAG,CACrC,YAA6B,EAC7B,KAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;IACH,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;QAChD,OAAO;KACP;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACtE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QACjD,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC;KACtE,CAAC,CAAC;IAGH,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjG,4BAA4B,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC;AAEF,MAAM,4BAA4B,GAAG,CACpC,YAAoB,EACpB,KAAoB,EACpB,YAA6B,EAC7B,SAAwB,EACvB,EAAE;IACH,QAAQ,YAAY,EAAE;QACrB;YACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM;QACP;YACC,MAAM;KACP;AACF,CAAC,CAAC","sourcesContent":["import { CardIds } from '../services/card-ids';\nimport { BgsPlayerEntity, BgsQuestEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const onQuestProgressUpdated = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tquest: BgsQuestEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tquest.ProgressCurrent++;\r\n\tif (quest.ProgressCurrent < quest.ProgressTotal) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst rewardCardId = gameState.allCards.getCard(quest.RewardDbfId).id;\r\n\tplayerEntity.questRewards.push(rewardCardId);\r\n\tplayerEntity.questRewardEntities.push({\r\n\t\tcardId: rewardCardId,\r\n\t\tentityId: gameState.sharedState.currentEntityId++,\r\n\t\tavengeDefault: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tavengeCurrent: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tscriptDataNum1: gameState.cardsData.defaultScriptDataNum(rewardCardId),\r\n\t});\r\n\r\n\t// Remove the quest from the list of quests\r\n\tplayerEntity.questEntities = playerEntity.questEntities.filter((q) => q.CardId !== quest.CardId);\r\n\r\n\tupdateStateAfterQuestCreated(rewardCardId, board, playerEntity, gameState);\r\n};\r\n\r\nconst updateStateAfterQuestCreated = (\r\n\trewardCardId: string,\r\n\tboard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tswitch (rewardCardId) {\r\n\t\tcase CardIds.TheSmokingGun:\r\n\t\t\tboard.forEach((e) => {\r\n\t\t\t\te.attack += 4;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"quest.js","sourceRoot":"","sources":["../../src/simulation/quest.ts"],"names":[],"mappings":";;;AAKO,MAAM,sBAAsB,GAAG,CACrC,YAA6B,EAC7B,KAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;IACH,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;QAChD,OAAO;KACP;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACtE,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;QACjD,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;QAC5D,cAAc,EAAE,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC;KACtE,CAAC,CAAC;IAGH,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjG,4BAA4B,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC5E,CAAC,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC;AAEF,MAAM,4BAA4B,GAAG,CACpC,YAAoB,EACpB,KAAoB,EACpB,YAA6B,EAC7B,SAAwB,EACvB,EAAE;IACH,QAAQ,YAAY,EAAE;QACrB;YACC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,MAAM;QACP;YACC,MAAM;KACP;AACF,CAAC,CAAC","sourcesContent":["import { CardIds } from '../services/card-ids';\r\nimport { BgsPlayerEntity, BgsQuestEntity } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { FullGameState } from './internal-game-state';\r\n\r\nexport const onQuestProgressUpdated = (\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tquest: BgsQuestEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tquest.ProgressCurrent++;\r\n\tif (quest.ProgressCurrent < quest.ProgressTotal) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst rewardCardId = gameState.allCards.getCard(quest.RewardDbfId).id;\r\n\tplayerEntity.questRewards.push(rewardCardId);\r\n\tplayerEntity.questRewardEntities.push({\r\n\t\tcardId: rewardCardId,\r\n\t\tentityId: gameState.sharedState.currentEntityId++,\r\n\t\tavengeDefault: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tavengeCurrent: gameState.cardsData.avengeValue(rewardCardId),\r\n\t\tscriptDataNum1: gameState.cardsData.defaultScriptDataNum(rewardCardId),\r\n\t});\r\n\r\n\t// Remove the quest from the list of quests\r\n\tplayerEntity.questEntities = playerEntity.questEntities.filter((q) => q.CardId !== quest.CardId);\r\n\r\n\tupdateStateAfterQuestCreated(rewardCardId, board, playerEntity, gameState);\r\n};\r\n\r\nconst updateStateAfterQuestCreated = (\r\n\trewardCardId: string,\r\n\tboard: BoardEntity[],\r\n\tplayerEntity: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n) => {\r\n\tswitch (rewardCardId) {\r\n\t\tcase CardIds.TheSmokingGun:\r\n\t\t\tboard.forEach((e) => {\r\n\t\t\t\te.attack += 4;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n};\r\n"]}
|