@firestone-hs/simulate-bgs-battle 1.1.707 → 1.1.709
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bgs-player-entity.d.ts +4 -0
- package/dist/bgs-player-entity.js.map +1 -1
- package/dist/cards/card.interface.d.ts +6 -1
- package/dist/cards/card.interface.js +3 -1
- 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/back-to-back.js +14 -9
- package/dist/cards/impl/bg-spell/back-to-back.js.map +1 -1
- package/dist/cards/impl/bg-spell/ophidian-staff.js +1 -1
- package/dist/cards/impl/bg-spell/ophidian-staff.js.map +1 -1
- package/dist/cards/impl/bg-spell/queens-command.js +1 -1
- package/dist/cards/impl/bg-spell/queens-command.js.map +1 -1
- package/dist/cards/impl/hero-power/lock-and-load.js +1 -1
- package/dist/cards/impl/hero-power/lock-and-load.js.map +1 -1
- package/dist/cards/impl/minion/bronze-chromadrake.js +1 -2
- package/dist/cards/impl/minion/bronze-chromadrake.js.map +1 -1
- package/dist/cards/impl/minion/choral-mrrrglr.js +2 -2
- package/dist/cards/impl/minion/choral-mrrrglr.js.map +1 -1
- package/dist/cards/impl/minion/diremuck-forager.js +5 -2
- package/dist/cards/impl/minion/diremuck-forager.js.map +1 -1
- package/dist/cards/impl/minion/falling-sky-golem.d.ts +2 -2
- package/dist/cards/impl/minion/falling-sky-golem.js +9 -0
- package/dist/cards/impl/minion/falling-sky-golem.js.map +1 -1
- package/dist/cards/impl/minion/forsaken-weaver.js +1 -1
- package/dist/cards/impl/minion/forsaken-weaver.js.map +1 -1
- package/dist/cards/impl/minion/green-chromadrake.js +1 -2
- package/dist/cards/impl/minion/green-chromadrake.js.map +1 -1
- package/dist/cards/impl/minion/mama-mrrglton.js +5 -6
- package/dist/cards/impl/minion/mama-mrrglton.js.map +1 -1
- package/dist/cards/impl/minion/moonsteel-juggernaut.js +0 -1
- package/dist/cards/impl/minion/moonsteel-juggernaut.js.map +1 -1
- package/dist/cards/impl/minion/papa-mrrglton.js +5 -6
- package/dist/cards/impl/minion/papa-mrrglton.js.map +1 -1
- package/dist/cards/impl/minion/ring-bearer.d.ts +2 -2
- package/dist/cards/impl/minion/ring-bearer.js +11 -16
- package/dist/cards/impl/minion/ring-bearer.js.map +1 -1
- package/dist/cards/impl/minion/ship-jumper.d.ts +2 -2
- package/dist/cards/impl/minion/ship-jumper.js +25 -6
- package/dist/cards/impl/minion/ship-jumper.js.map +1 -1
- package/dist/cards/impl/minion/timewarped-mrrrglr.js +2 -2
- package/dist/cards/impl/minion/timewarped-mrrrglr.js.map +1 -1
- package/dist/cards/impl/spellcraft/deep-blues.js +1 -1
- package/dist/cards/impl/spellcraft/deep-blues.js.map +1 -1
- package/dist/cards/impl/trinket/bewitched-ribbon.js +1 -2
- package/dist/cards/impl/trinket/bewitched-ribbon.js.map +1 -1
- package/dist/cards/impl/trinket/bluegill-flippers.js +2 -2
- package/dist/cards/impl/trinket/bluegill-flippers.js.map +1 -1
- package/dist/cards/impl/trinket/bubble-crown.js +2 -2
- package/dist/cards/impl/trinket/bubble-crown.js.map +1 -1
- package/dist/cards/impl/trinket/copper-coil.js +1 -1
- package/dist/cards/impl/trinket/copper-coil.js.map +1 -1
- package/dist/cards/impl/trinket/dramaloc-sticker.js +1 -2
- package/dist/cards/impl/trinket/dramaloc-sticker.js.map +1 -1
- package/dist/cards/impl/trinket/eternal-portrait.d.ts +1 -1
- package/dist/cards/impl/trinket/eternal-portrait.js +1 -1
- package/dist/cards/impl/trinket/eternal-portrait.js.map +1 -1
- package/dist/cards/impl/trinket/lorewalker-scroll.js +3 -3
- package/dist/cards/impl/trinket/lorewalker-scroll.js.map +1 -1
- package/dist/cards/impl/trinket/miniature-ship.js +1 -1
- package/dist/cards/impl/trinket/miniature-ship.js.map +1 -1
- package/dist/cards/impl/trinket/mishmash.d.ts +2 -0
- package/dist/cards/impl/trinket/mishmash.js +24 -0
- package/dist/cards/impl/trinket/mishmash.js.map +1 -0
- package/dist/mechanics/player-global-effects.d.ts +10 -1
- package/dist/mechanics/player-global-effects.js +22 -1
- package/dist/mechanics/player-global-effects.js.map +1 -1
- package/dist/mechanics/tavern-spell-repeat.js +10 -3
- package/dist/mechanics/tavern-spell-repeat.js.map +1 -1
- package/dist/simulation/avenge.js +3 -1
- package/dist/simulation/avenge.js.map +1 -1
- package/dist/simulation/damage-effects.js +1 -1
- package/dist/simulation/damage-effects.js.map +1 -1
- package/dist/simulation/deathrattle-spawns.js +6 -6
- package/dist/simulation/deathrattle-spawns.js.map +1 -1
- package/dist/simulation/global-info-helpers.js +1 -1
- package/dist/simulation/global-info-helpers.js.map +1 -1
- package/dist/simulation/spawn-fail.js +1 -1
- package/dist/simulation/spawn-fail.js.map +1 -1
- package/dist/simulation/stats.js +0 -12
- package/dist/simulation/stats.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dramaloc-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/dramaloc-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;
|
|
1
|
+
{"version":3,"file":"dramaloc-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/dramaloc-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,eAAe,GAAsB;IACjD,OAAO,EAAE,sBAA4C;IACrD,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,IAAI,mCAAI,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;SACtE;QACD,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACxB,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,MAAM,mCAAI,CAAC,CAAC;YAChC,IAAI,MAAM,GAAG,aAAa,EAAE;gBAC3B,aAAa,GAAG,MAAM,CAAC;aACvB;SACD;QACD,IAAI,aAAa,KAAK,CAAC,EAAE;YACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;SACtE;QACD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;YACvC,IACC,IAAA,uBAAe,EACd,MAAM,EACN,KAAK,CAAC,YAAY,EAClB,qBAAI,CAAC,MAAM,EACX,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;gBACD,IAAA,mBAAW,EAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACvG,SAAS,GAAG,IAAI,CAAC;aACjB;SACD;QACD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,8BAA8B,EAAE,KAAK,EAAE,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 { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { StartOfCombatCard } from '../../card.interface';\r\n\r\nexport const DramalocSticker: StartOfCombatCard = {\r\n\tcardIds: [CardIds.DramalocSticker_BG35_MagicItem_754],\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst hand = input.playerEntity.hand ?? [];\r\n\t\tif (hand.length === 0) {\r\n\t\t\treturn { hasTriggered: false, shouldRecomputeCurrentAttacker: false };\r\n\t\t}\r\n\t\tlet highestAttack = 0;\r\n\t\tfor (const card of hand) {\r\n\t\t\tconst attack = card.attack ?? 0;\r\n\t\t\tif (attack > highestAttack) {\r\n\t\t\t\thighestAttack = attack;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (highestAttack === 0) {\r\n\t\t\treturn { hasTriggered: false, shouldRecomputeCurrentAttacker: false };\r\n\t\t}\r\n\t\tlet triggered = false;\r\n\t\tfor (const entity of input.playerBoard) {\r\n\t\t\tif (\r\n\t\t\t\thasCorrectTribe(\r\n\t\t\t\t\tentity,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tRace.MURLOC,\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\tmodifyStats(entity, trinket, highestAttack, 0, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t\t\ttriggered = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { hasTriggered: triggered, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BoardTrinket } from '../../../bgs-player-entity';
|
|
2
2
|
import { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';
|
|
3
3
|
export declare const eternalKnightAttack = 4;
|
|
4
|
-
export declare const eternalKnightHealth =
|
|
4
|
+
export declare const eternalKnightHealth = 2;
|
|
5
5
|
export declare const EternalPortrait: {
|
|
6
6
|
startOfCombat: (trinket: BoardTrinket, input: SoCInput) => boolean;
|
|
7
7
|
};
|
|
@@ -4,7 +4,7 @@ exports.EternalPortrait = exports.eternalKnightHealth = exports.eternalKnightAtt
|
|
|
4
4
|
const reborn_1 = require("../../../keywords/reborn");
|
|
5
5
|
const taunt_1 = require("../../../keywords/taunt");
|
|
6
6
|
exports.eternalKnightAttack = 4;
|
|
7
|
-
exports.eternalKnightHealth =
|
|
7
|
+
exports.eternalKnightHealth = 2;
|
|
8
8
|
exports.EternalPortrait = {
|
|
9
9
|
startOfCombat: (trinket, input) => {
|
|
10
10
|
const candidates = input.playerBoard
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eternal-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/eternal-portrait.ts"],"names":[],"mappings":";;;AACA,qDAAwD;AACxD,mDAAsD;AAIzC,QAAA,mBAAmB,GAAG,CAAC,CAAC;AACxB,QAAA,mBAAmB,GAAG,CAAC,CAAC;AAExB,QAAA,eAAe,GAAG;IAC9B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAmC,IAAI,CAAC,CAAC,MAAM,iBAAqC,CAAC;aAC3G,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE;YACvB,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxG,IAAA,qBAAY,EACX,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,YAAY,EAClB,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,IAAI,EACJ,IAAI,CACJ,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { updateReborn } from '../../../keywords/reborn';\r\nimport { updateTaunt } from '../../../keywords/taunt';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\n\r\nexport const eternalKnightAttack = 4;\r\nexport const eternalKnightHealth =
|
|
1
|
+
{"version":3,"file":"eternal-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/eternal-portrait.ts"],"names":[],"mappings":";;;AACA,qDAAwD;AACxD,mDAAsD;AAIzC,QAAA,mBAAmB,GAAG,CAAC,CAAC;AACxB,QAAA,mBAAmB,GAAG,CAAC,CAAC;AAExB,QAAA,eAAe,GAAG;IAC9B,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAmC,IAAI,CAAC,CAAC,MAAM,iBAAqC,CAAC;aAC3G,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE;YACvB,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC7B,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxG,IAAA,qBAAY,EACX,MAAM,EACN,IAAI,EACJ,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAC5C,KAAK,CAAC,YAAY,EAClB,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,IAAI,EACJ,IAAI,CACJ,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { updateReborn } from '../../../keywords/reborn';\r\nimport { updateTaunt } from '../../../keywords/taunt';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\n\r\nexport const eternalKnightAttack = 4;\r\nexport const eternalKnightHealth = 2;\r\n\r\nexport const EternalPortrait = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tconst candidates = input.playerBoard\r\n\t\t\t.filter((e) => e.cardId === CardIds.EternalKnight_BG25_008 || e.cardId === CardIds.EternalKnight_BG25_008_G)\r\n\t\t\t.filter((e) => !e.taunt || !e.reborn);\r\n\t\tif (candidates?.length) {\r\n\t\t\tcandidates.forEach((knight) => {\r\n\t\t\t\tupdateTaunt(knight, true, input.playerBoard, input.playerEntity, input.opponentEntity, input.gameState);\r\n\t\t\t\tupdateReborn(\r\n\t\t\t\t\tknight,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.opponentEntity,\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\tinput.playerEntity,\r\n\t\t\t\t\tknight,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t\tnull,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
|
|
@@ -13,9 +13,9 @@ exports.LorewalkerScroll = {
|
|
|
13
13
|
}
|
|
14
14
|
if (!input.target || input.target.health <= 0 || input.target.definitelyDead)
|
|
15
15
|
return;
|
|
16
|
-
const
|
|
17
|
-
const attack =
|
|
18
|
-
const health =
|
|
16
|
+
const isGreater = trinket.cardId === "BG30_MagicItem_422t";
|
|
17
|
+
const attack = isGreater ? 8 : 2;
|
|
18
|
+
const health = isGreater ? 8 : 2;
|
|
19
19
|
(0, stats_1.modifyStats)(input.target, trinket, attack, health, input.board, input.hero, input.gameState);
|
|
20
20
|
},
|
|
21
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lorewalker-scroll.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/lorewalker-scroll.ts"],"names":[],"mappings":";;;AAEA,qDAAwD;AAG3C,QAAA,gBAAgB,GAA0B;IACtD,OAAO,EAAE;;;KAGR;IACD,iBAAiB,EAAE,CAAC,OAAqB,EAAE,KAAqB,EAAE,EAAE;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;YAChC,OAAO;SACP;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO;QACrF,MAAM,
|
|
1
|
+
{"version":3,"file":"lorewalker-scroll.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/lorewalker-scroll.ts"],"names":[],"mappings":";;;AAEA,qDAAwD;AAG3C,QAAA,gBAAgB,GAA0B;IACtD,OAAO,EAAE;;;KAGR;IACD,iBAAiB,EAAE,CAAC,OAAqB,EAAE,KAAqB,EAAE,EAAE;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;YAChC,OAAO;SACP;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO;QACrF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,0BAAuE,CAAC;QACxG,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAA,mBAAW,EAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9F,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { CastSpellInput, OnTavernSpellCastCard } from '../../card.interface';\r\n\r\nexport const LorewalkerScroll: OnTavernSpellCastCard = {\r\n\tcardIds: [\r\n\t\tCardIds.LorewalkerScroll_BG30_MagicItem_422,\r\n\t\tCardIds.LorewalkerScroll_LorewalkerScrollToken_BG30_MagicItem_422t,\r\n\t],\r\n\tonTavernSpellCast: (trinket: BoardTrinket, input: CastSpellInput) => {\r\n\t\tif (input.source !== input.hero) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!input.target || input.target.health <= 0 || input.target.definitelyDead) return;\r\n\t\tconst isGreater = trinket.cardId === CardIds.LorewalkerScroll_LorewalkerScrollToken_BG30_MagicItem_422t;\r\n\t\tconst attack = isGreater ? 8 : 2;\r\n\t\tconst health = isGreater ? 8 : 2;\r\n\t\tmodifyStats(input.target, trinket, attack, health, input.board, input.hero, input.gameState);\r\n\t},\r\n};\r\n"]}
|
|
@@ -11,7 +11,7 @@ exports.MiniatureShip = {
|
|
|
11
11
|
if (entity.health <= 0 || entity.definitelyDead)
|
|
12
12
|
continue;
|
|
13
13
|
if ((0, utils_1.hasCorrectTribe)(entity, input.hero, reference_data_1.Race.PIRATE, input.gameState.anomalies, input.gameState.allCards)) {
|
|
14
|
-
(0, stats_1.modifyStats)(entity, trinket, 2,
|
|
14
|
+
(0, stats_1.modifyStats)(entity, trinket, 2, 2, input.board, input.hero, input.gameState);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"miniature-ship.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/miniature-ship.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,aAAa,GAA6B;IACtD,OAAO,EAAE,sBAA0C;IACnD,oBAAoB,EAAE,CAAC,OAAqB,EAAE,KAAqB,EAAE,EAAE;QACtE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc;gBAAE,SAAS;YAC1D,IAAI,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBAC1G,IAAA,mBAAW,EAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC7E;SACD;IACF,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 { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nexport const MiniatureShip: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.MiniatureShip_BG35_MagicItem_710],\r\n\tafterTavernSpellCast: (trinket: BoardTrinket, input: CastSpellInput) => {\r\n\t\tfor (const entity of input.board) {\r\n\t\t\tif (entity.health <= 0 || entity.definitelyDead) continue;\r\n\t\t\tif (hasCorrectTribe(entity, input.hero, Race.PIRATE, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\tmodifyStats(entity, trinket, 2,
|
|
1
|
+
{"version":3,"file":"miniature-ship.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/miniature-ship.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAGpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,aAAa,GAA6B;IACtD,OAAO,EAAE,sBAA0C;IACnD,oBAAoB,EAAE,CAAC,OAAqB,EAAE,KAAqB,EAAE,EAAE;QACtE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc;gBAAE,SAAS;YAC1D,IAAI,IAAA,uBAAe,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBAC1G,IAAA,mBAAW,EAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC7E;SACD;IACF,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 { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nexport const MiniatureShip: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.MiniatureShip_BG35_MagicItem_710],\r\n\tafterTavernSpellCast: (trinket: BoardTrinket, input: CastSpellInput) => {\r\n\t\tfor (const entity of input.board) {\r\n\t\t\tif (entity.health <= 0 || entity.definitelyDead) continue;\r\n\t\t\tif (hasCorrectTribe(entity, input.hero, Race.PIRATE, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\tmodifyStats(entity, trinket, 2, 2, input.board, input.hero, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Mishmash = void 0;
|
|
4
|
+
const stats_1 = require("../../../simulation/stats");
|
|
5
|
+
exports.Mishmash = {
|
|
6
|
+
cardIds: ["TB_BaconShop_HERO_33_Buddy", "TB_BaconShop_HERO_33_Buddy_G"],
|
|
7
|
+
onStatsChanged: (minion, input) => {
|
|
8
|
+
if (isAmalgam(input.target)) {
|
|
9
|
+
const mult = input.target.cardId === "TB_BaconShop_HERO_33_Buddy_G" ? 2 : 1;
|
|
10
|
+
(0, stats_1.modifyStats)(minion, minion, input.attackAmount * mult, input.healthAmount * mult, input.board, input.hero, input.gameState);
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
const isAmalgam = (entity) => {
|
|
15
|
+
return [
|
|
16
|
+
"TB_BaconShop_HP_033t",
|
|
17
|
+
"TB_BaconShop_HP_033t_G",
|
|
18
|
+
"TB_BaconShop_HP_033t_SKIN_A",
|
|
19
|
+
"TB_BaconShop_HP_033t_SKIN_A_G",
|
|
20
|
+
"TB_BaconShop_HP_033t_SKIN_D",
|
|
21
|
+
"TB_BaconShop_HP_033t_SKIN_D_G",
|
|
22
|
+
].includes(entity.cardId);
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=mishmash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mishmash.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/mishmash.ts"],"names":[],"mappings":";;;AAEA,qDAA6E;AAGhE,QAAA,QAAQ,GAAuB;IAC3C,OAAO,EAAE,8DAA4F;IACrG,cAAc,EAAE,CAAC,MAAmB,EAAE,KAA0B,EAAE,EAAE;QACnE,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,mCAAkD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,YAAY,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;SACF;IACF,CAAC;CACD,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAE,EAAE;IACzC,OAAO;;;;;;;KAON,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAiB,CAAC,CAAC;AACtC,CAAC,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { modifyStats, OnStatsChangedInput } from '../../../simulation/stats';\r\nimport { OnStatsChangedCard } from '../../card.interface';\r\n\r\nexport const Mishmash: OnStatsChangedCard = {\r\n\tcardIds: [CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy, CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G],\r\n\tonStatsChanged: (minion: BoardEntity, input: OnStatsChangedInput) => {\r\n\t\tif (isAmalgam(input.target)) {\r\n\t\t\tconst mult = input.target.cardId === CardIds.Mishmash_TB_BaconShop_HERO_33_Buddy_G ? 2 : 1;\r\n\t\t\tmodifyStats(\r\n\t\t\t\tminion,\r\n\t\t\t\tminion,\r\n\t\t\t\tinput.attackAmount * mult,\r\n\t\t\t\tinput.healthAmount * mult,\r\n\t\t\t\tinput.board,\r\n\t\t\t\tinput.hero,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t}\r\n\t},\r\n};\r\n\r\nconst isAmalgam = (entity: BoardEntity) => {\r\n\treturn [\r\n\t\tCardIds.Menagerist_AmalgamToken,\r\n\t\tCardIds.Amalgam,\r\n\t\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A,\r\n\t\tCardIds.Cuddlgam_TB_BaconShop_HP_033t_SKIN_A_G,\r\n\t\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D,\r\n\t\tCardIds.AbominableAmalgam_TB_BaconShop_HP_033t_SKIN_D_G,\r\n\t].includes(entity.cardId as CardIds);\r\n};\r\n"]}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import { BgsPlayerEntity } from '../bgs-player-entity';
|
|
1
|
+
import { BgsPlayerEntity, BgsPlayerGlobalInfo } from '../bgs-player-entity';
|
|
2
2
|
import { BoardEntity } from '../board-entity';
|
|
3
3
|
import { FullGameState } from '../simulation/internal-game-state';
|
|
4
4
|
export declare const updateVolumizerBuffs: (hero: BgsPlayerEntity, board: BoardEntity[], attackBuff: number, healthBuff: number, gameState: FullGameState) => void;
|
|
5
|
+
export declare const incrementDeathrattlesTriggeredThisGame: (hero: BgsPlayerEntity, board: BoardEntity[], gameState: FullGameState) => void;
|
|
6
|
+
export interface OnGlobalInfoUpdatedInput<T extends keyof BgsPlayerGlobalInfo> {
|
|
7
|
+
type: T;
|
|
8
|
+
oldValue: number;
|
|
9
|
+
newValue: number;
|
|
10
|
+
hero: BgsPlayerEntity;
|
|
11
|
+
board: BoardEntity[];
|
|
12
|
+
gameState: FullGameState;
|
|
13
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateVolumizerBuffs = void 0;
|
|
3
|
+
exports.incrementDeathrattlesTriggeredThisGame = exports.updateVolumizerBuffs = void 0;
|
|
4
|
+
const card_interface_1 = require("../cards/card.interface");
|
|
5
|
+
const _card_mappings_1 = require("../cards/impl/_card-mappings");
|
|
4
6
|
const stats_1 = require("../simulation/stats");
|
|
5
7
|
const utils_1 = require("../utils");
|
|
6
8
|
const updateVolumizerBuffs = (hero, board, attackBuff, healthBuff, gameState) => {
|
|
@@ -13,4 +15,23 @@ const updateVolumizerBuffs = (hero, board, attackBuff, healthBuff, gameState) =>
|
|
|
13
15
|
}
|
|
14
16
|
};
|
|
15
17
|
exports.updateVolumizerBuffs = updateVolumizerBuffs;
|
|
18
|
+
const incrementDeathrattlesTriggeredThisGame = (hero, board, gameState) => {
|
|
19
|
+
var _a;
|
|
20
|
+
const previousValue = (_a = hero.globalInfo.DeathrattlesTriggeredThisGame) !== null && _a !== void 0 ? _a : 0;
|
|
21
|
+
hero.globalInfo.DeathrattlesTriggeredThisGame = previousValue + 1;
|
|
22
|
+
for (const entity of board) {
|
|
23
|
+
const cardImpl = _card_mappings_1.cardMappings[entity.cardId];
|
|
24
|
+
if ((0, card_interface_1.hasOnGlobalInfoUpdated)(cardImpl)) {
|
|
25
|
+
cardImpl.onGlobalInfoUpdated(entity, {
|
|
26
|
+
type: 'DeathrattlesTriggeredThisGame',
|
|
27
|
+
oldValue: previousValue,
|
|
28
|
+
newValue: hero.globalInfo.DeathrattlesTriggeredThisGame,
|
|
29
|
+
hero: hero,
|
|
30
|
+
board: board,
|
|
31
|
+
gameState: gameState,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.incrementDeathrattlesTriggeredThisGame = incrementDeathrattlesTriggeredThisGame;
|
|
16
37
|
//# sourceMappingURL=player-global-effects.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player-global-effects.js","sourceRoot":"","sources":["../../src/mechanics/player-global-effects.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"player-global-effects.js","sourceRoot":"","sources":["../../src/mechanics/player-global-effects.ts"],"names":[],"mappings":";;;AAEA,4DAAiE;AACjE,iEAA4D;AAE5D,+CAAkD;AAClD,oCAAuC;AAEhC,MAAM,oBAAoB,GAAG,CACnC,IAAqB,EACrB,KAAoB,EACpB,UAAkB,EAClB,UAAkB,EAClB,SAAwB,EACvB,EAAE;IACH,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,IAAI,IAAA,mBAAW,EAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9E,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SAC1E;KAOD;AACF,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B;AAEK,MAAM,sCAAsC,GAAG,CACrD,IAAqB,EACrB,KAAoB,EACpB,SAAwB,EACvB,EAAE;;IACH,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,6BAA6B,mCAAI,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,6BAA6B,GAAG,aAAa,GAAG,CAAC,CAAC;IAClE,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;QAC3B,MAAM,QAAQ,GAAG,6BAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,IAAA,uCAAsB,EAAC,QAAQ,CAAC,EAAE;YACrC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE;gBACpC,IAAI,EAAE,+BAA+B;gBACrC,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,6BAA6B;gBACvD,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,SAAS;aACpB,CAAC,CAAC;SACH;KACD;AACF,CAAC,CAAC;AApBW,QAAA,sCAAsC,0CAoBjD","sourcesContent":["import { BgsPlayerEntity, BgsPlayerGlobalInfo } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { hasOnGlobalInfoUpdated } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { FullGameState } from '../simulation/internal-game-state';\r\nimport { modifyStats } from '../simulation/stats';\r\nimport { isVolumizer } from '../utils';\r\n\r\nexport const updateVolumizerBuffs = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tattackBuff: number,\r\n\thealthBuff: number,\r\n\tgameState: FullGameState,\r\n) => {\r\n\thero.globalInfo.VolumizerAttackBuff += attackBuff;\r\n\thero.globalInfo.VolumizerHealthBuff += healthBuff;\r\n\tfor (const entity of board) {\r\n\t\tif (isVolumizer(entity.cardId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t}\r\n\t\t// for (const enchantment of entity.enchantments) {\r\n\t\t// \tconst rootDbfId = gameState.allCards.getCard(enchantment.cardId).entityDbfIf;\r\n\t\t// \tif (isVolumizer(rootDbfId, hero, gameState.anomalies, gameState.allCards)) {\r\n\t\t// \t\tmodifyStats(entity, hero, attackBuff, healthBuff, board, hero, gameState);\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n};\r\n\r\nexport const incrementDeathrattlesTriggeredThisGame = (\r\n\thero: BgsPlayerEntity,\r\n\tboard: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tconst previousValue = hero.globalInfo.DeathrattlesTriggeredThisGame ?? 0;\r\n\thero.globalInfo.DeathrattlesTriggeredThisGame = previousValue + 1;\r\n\tfor (const entity of board) {\r\n\t\tconst cardImpl = cardMappings[entity.cardId];\r\n\t\tif (hasOnGlobalInfoUpdated(cardImpl)) {\r\n\t\t\tcardImpl.onGlobalInfoUpdated(entity, {\r\n\t\t\t\ttype: 'DeathrattlesTriggeredThisGame',\r\n\t\t\t\toldValue: previousValue,\r\n\t\t\t\tnewValue: hero.globalInfo.DeathrattlesTriggeredThisGame,\r\n\t\t\t\thero: hero,\r\n\t\t\t\tboard: board,\r\n\t\t\t\tgameState: gameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface OnGlobalInfoUpdatedInput<T extends keyof BgsPlayerGlobalInfo> {\r\n\ttype: T;\r\n\toldValue: number;\r\n\tnewValue: number;\r\n\thero: BgsPlayerEntity;\r\n\tboard: BoardEntity[];\r\n\tgameState: FullGameState;\r\n}\r\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getTavernSpellEffectRepeatCount = void 0;
|
|
4
|
+
const reference_data_1 = require("@firestone-hs/reference-data");
|
|
4
5
|
const getTavernSpellEffectRepeatCount = (input) => {
|
|
5
|
-
var _a;
|
|
6
|
+
var _a, _b;
|
|
6
7
|
if (input.source !== input.hero) {
|
|
7
8
|
return 1;
|
|
8
9
|
}
|
|
@@ -24,10 +25,16 @@ const getTavernSpellEffectRepeatCount = (input) => {
|
|
|
24
25
|
2 * input.board.filter((e) => e.cardId === "BG33_825_G").length;
|
|
25
26
|
repeats += proudPrivateerExtra;
|
|
26
27
|
}
|
|
27
|
-
const cathedrals = input.hero.trinkets.filter((t) =>
|
|
28
|
+
const cathedrals = input.hero.trinkets.filter((t) => {
|
|
29
|
+
var _a, _b;
|
|
30
|
+
return t.cardId === "BG30_MagicItem_434" &&
|
|
31
|
+
t.scriptDataNum1 > 0 &&
|
|
32
|
+
((_b = (_a = t.tags) === null || _a === void 0 ? void 0 : _a[reference_data_1.GameTag.TRIGGER_VISUAL]) !== null && _b !== void 0 ? _b : 0) > 0;
|
|
33
|
+
});
|
|
28
34
|
repeats += cathedrals.length;
|
|
29
35
|
for (const cathedral of cathedrals) {
|
|
30
|
-
cathedral.
|
|
36
|
+
cathedral.tags = (_b = cathedral.tags) !== null && _b !== void 0 ? _b : {};
|
|
37
|
+
cathedral.tags[reference_data_1.GameTag.TRIGGER_VISUAL] = 0;
|
|
31
38
|
}
|
|
32
39
|
return repeats;
|
|
33
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tavern-spell-repeat.js","sourceRoot":"","sources":["../../src/mechanics/tavern-spell-repeat.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tavern-spell-repeat.js","sourceRoot":"","sources":["../../src/mechanics/tavern-spell-repeat.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAQhD,MAAM,+BAA+B,GAAG,CAAC,KAAqB,EAAU,EAAE;;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QAChC,OAAO,CAAC,CAAC;KACT;IACD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAA0C,CAAC,CAAC;IACrG,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAwC,CAAC,CAAC;IACnG,IACC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;QACtC,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC5D;QACD,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC;IACD,MAAM,cAAc,GACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAuC,CAAC,CAAC,MAAM;QACjF,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAyC,CAAC,CAAC,MAAM,CAAC;IACzF,OAAO,IAAI,cAAc,CAAC;IAE1B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,0CAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAErE,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE;QACjD,MAAM,mBAAmB,GACxB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,eAAoC,CAAC,CAAC,MAAM;YAC9E,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAsC,CAAC,CAAC,MAAM,CAAC;QACtF,OAAO,IAAI,mBAAmB,CAAC;KAC/B;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE;;QACL,OAAA,CAAC,CAAC,MAAM,yBAAgD;YAExD,CAAC,CAAC,cAAc,GAAG,CAAC;YAapB,CAAC,MAAA,MAAA,CAAC,CAAC,IAAI,0CAAG,wBAAO,CAAC,cAAc,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAA;KAAA,CAC5C,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QACnC,SAAS,CAAC,IAAI,GAAG,MAAA,SAAS,CAAC,IAAI,mCAAI,EAAE,CAAC;QACtC,SAAS,CAAC,IAAI,CAAC,wBAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KAC3C;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAvDW,QAAA,+BAA+B,mCAuD1C","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { CastSpellInput } from '../cards/card.interface';\r\nimport { CardIds } from '../services/card-ids';\r\n\r\n/**\r\n * Balinda Stonehearth: extra spell effect resolutions for spells you cast that target a friendly board minion.\r\n * Maelstrom Emergent: each copy adds +1 extra resolution (golden +2) for tavern spells you cast; stacks additively with Balinda.\r\n */\r\nexport const getTavernSpellEffectRepeatCount = (input: CastSpellInput): number => {\r\n\tif (input.source !== input.hero) {\r\n\t\treturn 1;\r\n\t}\r\n\tlet repeats = 1;\r\n\tconst hasGoldenBalinda = input.board.some((e) => e.cardId === CardIds.BalindaStonehearth_BG35_883_G);\r\n\tconst hasNormalBalinda = input.board.some((e) => e.cardId === CardIds.BalindaStonehearth_BG35_883);\r\n\tif (\r\n\t\t(hasGoldenBalinda || hasNormalBalinda) &&\r\n\t\tinput.target &&\r\n\t\tinput.board.some((e) => e.entityId === input.target.entityId)\r\n\t) {\r\n\t\trepeats = hasGoldenBalinda ? 3 : 2;\r\n\t}\r\n\tconst maelstromExtra =\r\n\t\tinput.board.filter((e) => e.cardId === CardIds.MaelstromEmergent_BG34_922).length +\r\n\t\t2 * input.board.filter((e) => e.cardId === CardIds.MaelstromEmergent_BG34_922_G).length;\r\n\trepeats += maelstromExtra;\r\n\r\n\tconst spellCard = input.gameState.allCards.getCard(input.spellCardId);\r\n\tconst isBountySpell = spellCard?.mechanics?.includes('BACON_BOUNTY');\r\n\t// Proud Privateer only affects bounties *you* (the hero) cast — same as Balinda / onTavernSpellCast.\r\n\tif (isBountySpell && input.source === input.hero) {\r\n\t\tconst proudPrivateerExtra =\r\n\t\t\tinput.board.filter((e) => e.cardId === CardIds.ProudPrivateer_BG33_825).length +\r\n\t\t\t2 * input.board.filter((e) => e.cardId === CardIds.ProudPrivateer_BG33_825_G).length;\r\n\t\trepeats += proudPrivateerExtra;\r\n\t}\r\n\r\n\tconst cathedrals = input.hero.trinkets.filter(\r\n\t\t(t) =>\r\n\t\t\tt.cardId === CardIds.ReplicaCathedral_BG30_MagicItem_434 &&\r\n\t\t\t// Total number of times it can trigger\r\n\t\t\tt.scriptDataNum1 > 0 &&\r\n\t\t\t// Total number of times it can still trigger (recruit + combat)\r\n\t\t\t// 2026-04-25:https://replays.firestoneapp.com/?reviewId=f7d1d5ec-b83d-49f5-9669-b063a3debc79&turn=15&action=1\r\n\t\t\t// It triggered during shop, and doesn't re-trigger during combat\r\n\t\t\t/**\r\n\t\t\t * \t{\r\n\t\t\t\t\t\"cardId\": \"BG30_MagicItem_434\",\r\n\t\t\t\t\t\"entityId\": 306,\r\n\t\t\t\t\t\"scriptDataNum1\": 1,\r\n\t\t\t\t\t\"scriptDataNum2\": 0,\r\n\t\t\t\t\t\"scriptDataNum6\": 1\r\n\t\t\t\t},\r\n\t\t\t */\r\n\t\t\t(t.tags?.[GameTag.TRIGGER_VISUAL] ?? 0) > 0,\r\n\t);\r\n\trepeats += cathedrals.length;\r\n\tfor (const cathedral of cathedrals) {\r\n\t\tcathedral.tags = cathedral.tags ?? {};\r\n\t\tcathedral.tags[GameTag.TRIGGER_VISUAL] = 0;\r\n\t}\r\n\r\n\treturn repeats;\r\n};\r\n"]}
|
|
@@ -201,7 +201,9 @@ const handleAvenge = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity,
|
|
|
201
201
|
break;
|
|
202
202
|
case "BG30_MagicItem_437":
|
|
203
203
|
if (boardWithDeadEntity.length > 0) {
|
|
204
|
-
const
|
|
204
|
+
const candidates = boardWithDeadEntity.filter((e) => !e.reborn &&
|
|
205
|
+
(0, utils_2.hasCorrectTribe)(e, boardWithDeadEntityHero, reference_data_1.Race.UNDEAD, gameState.anomalies, gameState.allCards));
|
|
206
|
+
const target = (0, utils_1.pickRandom)(candidates);
|
|
205
207
|
if (!!target) {
|
|
206
208
|
(0, reborn_1.updateReborn)(target, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);
|
|
207
209
|
gameState.spectator.registerPowerTarget(avenger, target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avenge.js","sourceRoot":"","sources":["../../src/simulation/avenge.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag, Race } from '@firestone-hs/reference-data';\nimport { BgsHeroPower, BgsPlayerEntity } from '../bgs-player-entity';\nimport { BoardEntity } from '../board-entity';\nimport { hasAvenge } from '../cards/card.interface';\nimport { cardMappings } from '../cards/impl/_card-mappings';\nimport { grantRandomDivineShield } from '../keywords/divine-shield';\nimport { updateReborn } from '../keywords/reborn';\nimport { updateTaunt } from '../keywords/taunt';\nimport { CardIds } from '../services/card-ids';\nimport { pickRandom } from '../services/utils';\nimport { isValidDeathrattleEnchantment } from '../simulate-bgs-battle';\nimport {\n\taddStatsToBoard,\n\tgetRandomMinionWithHighestHealth,\n\tgrantRandomStats,\n\thasCorrectTribe,\n\thasEntityMechanic,\n} from '../utils';\nimport { dealDamageToMinion } from './attack';\nimport { playBloodGemsOn } from './blood-gems';\nimport { addCardsInHand } from './cards-in-hand';\nimport { spawnEntities } from './deathrattle-spawns';\nimport { FullGameState } from './internal-game-state';\nimport { performEntitySpawns } from './spawns';\nimport { modifyStats } from './stats';\n\nexport const applyAvengeEffects = (\n\tdeadEntity: BoardEntity,\n\tdeadEntityIndexFromRight: number,\n\tboardWithDeadEntity: BoardEntity[],\n\tboardWithDeadEntityHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherBoardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n\tentitiesSpawnedFromMinionDeath: BoardEntity[],\n): BoardEntity[] => {\n\tconst candidatesEntitiesSpawnedFromAvenge: BoardEntity[] = [];\n\t// updateAvengeCounters(boardWithDeadEntity, boardWithDeadEntityHero);\n\tconst avengers = boardWithDeadEntity\n\t\t.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0)\n\t\t// Get Tony to be processed first, because of the \"when turned golden, the minion ignores the death for the avenge counter\"\n\t\t// behavior\n\t\t.sort((a, b) => {\n\t\t\t// if (a.cardId === CardIds.TonyTwoTusk_BG21_031 || a.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\n\t\t\t// \treturn -1;\n\t\t\t// }\n\t\t\t// if (b.cardId === CardIds.TonyTwoTusk_BG21_031 || b.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\n\t\t\t// \treturn 1;\n\t\t\t// }\n\t\t\treturn 0;\n\t\t});\n\tfor (const avenger of avengers) {\n\t\thandleAvenge(\n\t\t\tboardWithDeadEntity,\n\t\t\tboardWithDeadEntityHero,\n\t\t\tdeadEntity,\n\t\t\tdeadEntityIndexFromRight,\n\t\t\tavenger,\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\totherBoard,\n\t\t\totherBoardHero,\n\t\t\tgameState,\n\t\t);\n\t}\n\t// console.log('updating dead entity avenge counter', boardWithDeadEntityHero.avengeCurrent, stringifySimpleCard(deadEntity, allCards));\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\n\t\tconst heroAvenger = !!heroPower.avengeDefault && heroPower.avengeCurrent <= 0;\n\t\tif (heroAvenger) {\n\t\t\thandleHeroAvenge(\n\t\t\t\tdeadEntity,\n\t\t\t\theroPower,\n\t\t\t\tboardWithDeadEntity,\n\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\totherBoard,\n\t\t\t\totherBoardHero,\n\t\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\t\tgameState,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst questRewardAvengers = boardWithDeadEntityHero.questRewardEntities.filter(\n\t\t(e) => !!e.avengeDefault && e.avengeCurrent <= 0,\n\t);\n\tfor (const avenger of questRewardAvengers) {\n\t\thandleAvenge(\n\t\t\tboardWithDeadEntity,\n\t\t\tboardWithDeadEntityHero,\n\t\t\tdeadEntity,\n\t\t\tdeadEntityIndexFromRight,\n\t\t\tavenger as BoardEntity,\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\totherBoard,\n\t\t\totherBoardHero,\n\t\t\tgameState,\n\t\t);\n\t}\n\n\tconst trinketAvengers = boardWithDeadEntityHero.trinkets.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0);\n\tfor (const avenger of trinketAvengers) {\n\t\thandleAvenge(\n\t\t\tboardWithDeadEntity,\n\t\t\tboardWithDeadEntityHero,\n\t\t\tdeadEntity,\n\t\t\tdeadEntityIndexFromRight,\n\t\t\tavenger as BoardEntity,\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\totherBoard,\n\t\t\totherBoardHero,\n\t\t\tgameState,\n\t\t);\n\t}\n\n\tperformEntitySpawns(\n\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\tboardWithDeadEntity,\n\t\tboardWithDeadEntityHero,\n\t\tdeadEntity,\n\t\tdeadEntityIndexFromRight,\n\t\totherBoard,\n\t\totherBoardHero,\n\t\tgameState,\n\t);\n\n\t// Not an avenge, but with Avenge timing\n\tconst hasDeathrattle =\n\t\thasEntityMechanic(deadEntity, GameTag.DEATHRATTLE, gameState.allCards) ||\n\t\tdeadEntity.enchantments.some((e) => isValidDeathrattleEnchantment(e.cardId));\n\tif (hasDeathrattle) {\n\t\t// These are apparently processed after Reborn is triggered\n\t\t// http://replays.firestoneapp.com/?reviewId=5db9a191-ae9b-43a5-a072-0d460631d7a9&turn=23&action=12\n\t\t// UPDATE 2024-06-24: Multiple counterexamples of this, so I'm not sure exactly what is the right approach\n\t\t// I'm implementing the one that makes more sense to me; triggering after reborn is just too different\n\t\t// from what happens usually\n\t\t// However, we want to trigger it after all the spawns have been processed, so more or less an \"avenge\" timing?\n\t\t// Maybe even after that?\n\t\t// Update 2024-06-27 29.6.2: timing should stay the same\n\t\tboardWithDeadEntity\n\t\t\t.filter((e) => e.cardId === CardIds.GhoulAcabra_BG29_863 || e.cardId === CardIds.GhoulAcabra_BG29_863_G)\n\t\t\t.forEach((ghoul) => {\n\t\t\t\tconst buff = ghoul.cardId === CardIds.GhoulAcabra_BG29_863_G ? 2 : 1;\n\t\t\t\taddStatsToBoard(ghoul, boardWithDeadEntity, boardWithDeadEntityHero, 2 * buff, 2 * buff, gameState);\n\t\t\t});\n\t}\n\n\treturn candidatesEntitiesSpawnedFromAvenge;\n};\n\nexport const updateAvengeCounters = (board: readonly BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity) => {\n\tfor (const entity of board) {\n\t\tif (!!entity.avengeDefault) {\n\t\t\tentity.avengeCurrent -= 1;\n\t\t}\n\t}\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\n\t\tif (!!heroPower.avengeDefault) {\n\t\t\theroPower.avengeCurrent -= 1;\n\t\t}\n\t}\n\n\tfor (const reward of boardWithDeadEntityHero.questRewardEntities) {\n\t\tif (!!reward.avengeDefault) {\n\t\t\treward.avengeCurrent -= 1;\n\t\t}\n\t}\n\n\tfor (const trinket of boardWithDeadEntityHero.trinkets) {\n\t\tif (!!trinket.avengeDefault) {\n\t\t\ttrinket.avengeCurrent -= 1;\n\t\t}\n\t}\n};\n\nconst handleAvenge = (\n\tboardWithDeadEntity: BoardEntity[],\n\tboardWithDeadEntityHero: BgsPlayerEntity,\n\tdeadEntity: BoardEntity,\n\tdeadEntityIndexFromRight: number,\n\tavenger: BoardEntity,\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\n\totherBoard: BoardEntity[],\n\totherBoardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n) => {\n\tconst avengeImpl = cardMappings[avenger.cardId];\n\tif (hasAvenge(avengeImpl)) {\n\t\tconst newSpawns = avengeImpl.avenge(avenger, {\n\t\t\tboard: boardWithDeadEntity,\n\t\t\thero: boardWithDeadEntityHero,\n\t\t\totherBoard: otherBoard,\n\t\t\totherHero: otherBoardHero,\n\t\t\tdeadEntity: deadEntity,\n\t\t\tgameState,\n\t\t});\n\t\tif (Array.isArray(newSpawns) && newSpawns?.length) {\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(...newSpawns);\n\t\t}\n\t} else {\n\t\t// Don't forget to update the avenge data in cards-data\n\t\tswitch (avenger.cardId) {\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\n\t\t\t\t// Only for Tavern\n\t\t\t\t// addStatsToBoard(\n\t\t\t\t// \tavenger,\n\t\t\t\t// \tboardWithDeadEntity,\n\t\t\t\t// \t0,\n\t\t\t\t// \tavenger.cardId === CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G ? 2 : 1,\n\t\t\t\t// \tgameState.allCards,\n\t\t\t\t// \tgameState.spectator,\n\t\t\t\t// );\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\n\t\t\t\tconst target1 = grantRandomStats(\n\t\t\t\t\tavenger,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t6,\n\t\t\t\t\t6,\n\t\t\t\t\tRace.BEAST,\n\t\t\t\t\ttrue,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tif (!!target1) {\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\ttarget1,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\n\t\t\t\tconst target2 = grantRandomStats(\n\t\t\t\t\tavenger,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t12,\n\t\t\t\t\t12,\n\t\t\t\t\tRace.BEAST,\n\t\t\t\t\ttrue,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tif (!!target2) {\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\ttarget2,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\n\t\t\t\tconst doomsayerCardsToAddQuantity = avenger.cardId === CardIds.ImpatientDoomsayer_BG21_007_G ? 2 : 1;\n\t\t\t\tconst doomsayerCardsToAdd = [];\n\t\t\t\tfor (let i = 0; i < doomsayerCardsToAddQuantity; i++) {\n\t\t\t\t\tdoomsayerCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\n\t\t\t\t}\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, doomsayerCardsToAdd, gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014:\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\n\t\t\t\tbreak;\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.Thorncaller_BG20_105:\n\t\t\tcase CardIds.Thorncaller_BG20_105_G:\n\t\t\t\tconst thorncallerToAddQuantity = avenger.cardId === CardIds.Thorncaller_BG20_105_G ? 2 : 1;\n\t\t\t\tconst thorncallerCardsToAdd = Array(thorncallerToAddQuantity).fill(CardIds.BloodGem);\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, thorncallerCardsToAdd, gameState);\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Sisefin_BG21_009:\n\t\t\t// case CardIds.Sisefin_BG21_009_G:\n\t\t\t// \tconst poisonousIterations = avenger.cardId === CardIds.Sisefin_BG21_009_G ? 2 : 1;\n\t\t\t// \tfor (let i = 0; i < poisonousIterations; i++) {\n\t\t\t// \t\tconst validTargets = boardWithDeadEntity.filter((e) => !e.poisonous && !e.venomous);\n\t\t\t// \t\tconst murloc = getRandomAliveMinion(validTargets, boardWithDeadEntityHero, Race.MURLOC, gameState);\n\t\t\t// \t\tif (murloc) {\n\t\t\t// \t\t\tupdateVenomous(\n\t\t\t// \t\t\t\tmurloc,\n\t\t\t// \t\t\t\ttrue,\n\t\t\t// \t\t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\t\totherBoardHero,\n\t\t\t// \t\t\t\tgameState,\n\t\t\t// \t\t\t);\n\t\t\t// \t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t// \t\t\t\tavenger,\n\t\t\t// \t\t\t\tmurloc,\n\t\t\t// \t\t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\t\totherBoardHero,\n\t\t\t// \t\t\t);\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.MechanoTank_BG21_023:\n\t\t\t\t// This can be null if the avenge triggers when the last enemy minion dies as well\n\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\n\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\tavenger,\n\t\t\t\t\ttarget,\n\t\t\t\t\totherBoard,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t);\n\t\t\t\tdealDamageToMinion(\n\t\t\t\t\ttarget,\n\t\t\t\t\totherBoard,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t\tavenger,\n\t\t\t\t\t5,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\n\t\t\t\tfor (let i = 0; i < 2; i++) {\n\t\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\totherBoard,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t);\n\t\t\t\t\tdealDamageToMinion(\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\totherBoard,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\t5,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\tgameState,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031:\n\t\t\t// \tconst nonGoldenMinions = boardWithDeadEntity\n\t\t\t// \t\t.filter((e) => e.entityId !== avenger.entityId)\n\t\t\t// \t\t.filter((e) => {\n\t\t\t// \t\t\tconst ref = gameState.allCards.getCard(e.cardId);\n\t\t\t// \t\t\treturn (\n\t\t\t// \t\t\t\t!!ref.battlegroundsPremiumDbfId &&\n\t\t\t// \t\t\t\t!!gameState.allCards.getCardFromDbfId(ref.battlegroundsPremiumDbfId).id\n\t\t\t// \t\t\t);\n\t\t\t// \t\t});\n\t\t\t// \tconst pirate = getRandomAliveMinion(nonGoldenMinions, boardWithDeadEntityHero, Race.PIRATE, gameState);\n\t\t\t// \tif (pirate) {\n\t\t\t// \t\tmakeMinionGolden(\n\t\t\t// \t\t\tpirate,\n\t\t\t// \t\t\tavenger,\n\t\t\t// \t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\totherBoard,\n\t\t\t// \t\t\totherBoardHero,\n\t\t\t// \t\t\tgameState,\n\t\t\t// \t\t);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031_G:\n\t\t\t// \tfor (let i = 0; i < 2; i++) {\n\t\t\t// \t\tconst nonGoldenMinions = boardWithDeadEntity.filter((e) => !isMinionGolden(e, gameState.allCards));\n\t\t\t// \t\tconst pirate = getRandomAliveMinion(\n\t\t\t// \t\t\tnonGoldenMinions,\n\t\t\t// \t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\tRace.PIRATE,\n\t\t\t// \t\t\tgameState,\n\t\t\t// \t\t);\n\t\t\t// \t\tif (pirate) {\n\t\t\t// \t\t\tmakeMinionGolden(\n\t\t\t// \t\t\t\tpirate,\n\t\t\t// \t\t\t\tavenger,\n\t\t\t// \t\t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\t\totherBoard,\n\t\t\t// \t\t\t\totherBoardHero,\n\t\t\t// \t\t\t\tgameState,\n\t\t\t// \t\t\t);\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\n\t\t\t\tconst abominationMultiplier = avenger.cardId === CardIds.HungeringAbomination_BG25_014_G ? 2 : 1;\n\t\t\t\tmodifyStats(\n\t\t\t\t\tavenger,\n\t\t\t\t\tavenger,\n\t\t\t\t\tabominationMultiplier * 1,\n\t\t\t\t\tabominationMultiplier * 2,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t// case CardIds.IceSickle:\n\t\t\t// \tgrantRandomStats(\n\t\t\t// \t\tavenger,\n\t\t\t// \t\tboardWithDeadEntityHero.hand.filter(\n\t\t\t// \t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\n\t\t\t// \t\t),\n\t\t\t// \t\tboardWithDeadEntityHero,\n\t\t\t// \t\t4,\n\t\t\t// \t\t0,\n\t\t\t// \t\tnull,\n\t\t\t// \t\ttrue,\n\t\t\t// \t\tgameState,\n\t\t\t// \t);\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\n\t\t\t\tconst highestHealthMinion = [...otherBoard].sort((a, b) => b.health - a.health)[0];\n\t\t\t\tdealDamageToMinion(\n\t\t\t\t\thighestHealthMinion,\n\t\t\t\t\totherBoard,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t\tavenger,\n\t\t\t\t\t10,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\tavenger,\n\t\t\t\t\thighestHealthMinion,\n\t\t\t\t\totherBoard,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\n\t\t\t\tconst phaerixLoops = avenger.cardId === CardIds.PhaerixWrathOfTheSun_BG28_403_G ? 2 : 1;\n\t\t\t\tfor (let i = 0; i < phaerixLoops; i++) {\n\t\t\t\t\tgrantRandomDivineShield(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\tgameState,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\n\t\t\t\tconst AugmentedLaborerLoops = avenger.cardId === CardIds.AugmentedLaborer_BG28_740_G ? 2 : 1;\n\t\t\t\tfor (let i = 0; i < AugmentedLaborerLoops; i++) {\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\n\t\t\t\tconst tumblingDisasterEntity = boardWithDeadEntityHero.questRewardEntities?.find(\n\t\t\t\t\t(e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505,\n\t\t\t\t);\n\t\t\t\tif (tumblingDisasterEntity) {\n\t\t\t\t\ttumblingDisasterEntity.scriptDataNum1 = (tumblingDisasterEntity.scriptDataNum1 ?? 0) + 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\n\t\t\t\tavenger.scriptDataNum1 = (avenger.scriptDataNum1 ?? 0) + 1;\n\t\t\t\tbreak;\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\n\t\t\t\tconst murglMkStats = avenger.cardId === CardIds.MurglMkIi_BG29_991_G ? 2 : 1;\n\t\t\t\taddStatsToBoard(\n\t\t\t\t\tavenger,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tmurglMkStats,\n\t\t\t\t\tmurglMkStats,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\t// Don't use utility methods, as we don't want triggers to proc\n\t\t\t\tfor (const e of boardWithDeadEntityHero.hand ?? []) {\n\t\t\t\t\te.attack += murglMkStats;\n\t\t\t\t\te.health += murglMkStats;\n\t\t\t\t\te.maxHealth += murglMkStats;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\n\t\t\t\tif (boardWithDeadEntity.length > 0) {\n\t\t\t\t\tconst target = pickRandom(boardWithDeadEntity.filter((e) => !e.reborn));\n\t\t\t\t\tif (!!target) {\n\t\t\t\t\t\tupdateReborn(\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\t\tgameState,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\t\tavenger,\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\n\t\t\t\tconst randomUndead = gameState.cardsData.getRandomMinionForTribe(\n\t\t\t\t\tRace.UNDEAD,\n\t\t\t\t\tboardWithDeadEntityHero.tavernTier,\n\t\t\t\t);\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomUndead], gameState);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tavenger.avengeCurrent += avenger.avengeDefault;\n};\n\nconst handleHeroAvenge = (\n\tdeadEntity: BoardEntity,\n\theroPower: BgsHeroPower,\n\tboardWithDeadEntity: BoardEntity[],\n\tboardWithDeadEntityHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherBoardHero: BgsPlayerEntity,\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\n\tgameState: FullGameState,\n) => {\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\n\t// Not affected by Khadgar\n\tswitch (heroPower.cardId) {\n\t\tcase CardIds.Onyxia_Broodmother:\n\t\t\tconst broodmotherTokens = spawnEntities(\n\t\t\t\tCardIds.Onyxia_OnyxianWhelpToken,\n\t\t\t\t1,\n\t\t\t\tboardWithDeadEntity,\n\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\totherBoard,\n\t\t\t\totherBoardHero,\n\t\t\t\tgameState,\n\t\t\t\tdeadEntity.friendly,\n\t\t\t\tfalse,\n\t\t\t\tfalse,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbroodmotherTokens.forEach((token) => {\n\t\t\t\ttoken.attack = +heroPower.info;\n\t\t\t\ttoken.health = +heroPower.info;\n\t\t\t\ttoken.maxAttack = +heroPower.info;\n\t\t\t\ttoken.maxHealth = +heroPower.info;\n\t\t\t});\n\t\t\theroPower.info = +heroPower.info + 1;\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(...broodmotherTokens);\n\t\t\tbreak;\n\t}\n\theroPower.avengeCurrent += heroPower.avengeDefault;\n};\n\nexport interface AvengeInput {\n\treadonly board: BoardEntity[];\n\treadonly deadEntity: BoardEntity;\n\treadonly hero: BgsPlayerEntity;\n\treadonly otherBoard: BoardEntity[];\n\treadonly otherHero: BgsPlayerEntity;\n\treadonly gameState: FullGameState;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"avenge.js","sourceRoot":"","sources":["../../src/simulation/avenge.ts"],"names":[],"mappings":"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","sourcesContent":["import { GameTag, Race } from '@firestone-hs/reference-data';\nimport { BgsHeroPower, BgsPlayerEntity } from '../bgs-player-entity';\nimport { BoardEntity } from '../board-entity';\nimport { hasAvenge } from '../cards/card.interface';\nimport { cardMappings } from '../cards/impl/_card-mappings';\nimport { grantRandomDivineShield } from '../keywords/divine-shield';\nimport { updateReborn } from '../keywords/reborn';\nimport { updateTaunt } from '../keywords/taunt';\nimport { CardIds } from '../services/card-ids';\nimport { pickRandom } from '../services/utils';\nimport { isValidDeathrattleEnchantment } from '../simulate-bgs-battle';\nimport {\n\taddStatsToBoard,\n\tgetRandomMinionWithHighestHealth,\n\tgrantRandomStats,\n\thasCorrectTribe,\n\thasEntityMechanic,\n} from '../utils';\nimport { dealDamageToMinion } from './attack';\nimport { addCardsInHand } from './cards-in-hand';\nimport { spawnEntities } from './deathrattle-spawns';\nimport { FullGameState } from './internal-game-state';\nimport { performEntitySpawns } from './spawns';\nimport { modifyStats } from './stats';\n\nexport const applyAvengeEffects = (\n\tdeadEntity: BoardEntity,\n\tdeadEntityIndexFromRight: number,\n\tboardWithDeadEntity: BoardEntity[],\n\tboardWithDeadEntityHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherBoardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n\tentitiesSpawnedFromMinionDeath: BoardEntity[],\n): BoardEntity[] => {\n\tconst candidatesEntitiesSpawnedFromAvenge: BoardEntity[] = [];\n\t// updateAvengeCounters(boardWithDeadEntity, boardWithDeadEntityHero);\n\tconst avengers = boardWithDeadEntity\n\t\t.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0)\n\t\t// Get Tony to be processed first, because of the \"when turned golden, the minion ignores the death for the avenge counter\"\n\t\t// behavior\n\t\t.sort((a, b) => {\n\t\t\t// if (a.cardId === CardIds.TonyTwoTusk_BG21_031 || a.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\n\t\t\t// \treturn -1;\n\t\t\t// }\n\t\t\t// if (b.cardId === CardIds.TonyTwoTusk_BG21_031 || b.cardId === CardIds.TonyTwoTusk_BG21_031_G) {\n\t\t\t// \treturn 1;\n\t\t\t// }\n\t\t\treturn 0;\n\t\t});\n\tfor (const avenger of avengers) {\n\t\thandleAvenge(\n\t\t\tboardWithDeadEntity,\n\t\t\tboardWithDeadEntityHero,\n\t\t\tdeadEntity,\n\t\t\tdeadEntityIndexFromRight,\n\t\t\tavenger,\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\totherBoard,\n\t\t\totherBoardHero,\n\t\t\tgameState,\n\t\t);\n\t}\n\t// console.log('updating dead entity avenge counter', boardWithDeadEntityHero.avengeCurrent, stringifySimpleCard(deadEntity, allCards));\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\n\t\tconst heroAvenger = !!heroPower.avengeDefault && heroPower.avengeCurrent <= 0;\n\t\tif (heroAvenger) {\n\t\t\thandleHeroAvenge(\n\t\t\t\tdeadEntity,\n\t\t\t\theroPower,\n\t\t\t\tboardWithDeadEntity,\n\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\totherBoard,\n\t\t\t\totherBoardHero,\n\t\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\t\tgameState,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst questRewardAvengers = boardWithDeadEntityHero.questRewardEntities.filter(\n\t\t(e) => !!e.avengeDefault && e.avengeCurrent <= 0,\n\t);\n\tfor (const avenger of questRewardAvengers) {\n\t\thandleAvenge(\n\t\t\tboardWithDeadEntity,\n\t\t\tboardWithDeadEntityHero,\n\t\t\tdeadEntity,\n\t\t\tdeadEntityIndexFromRight,\n\t\t\tavenger as BoardEntity,\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\totherBoard,\n\t\t\totherBoardHero,\n\t\t\tgameState,\n\t\t);\n\t}\n\n\tconst trinketAvengers = boardWithDeadEntityHero.trinkets.filter((e) => !!e.avengeDefault && e.avengeCurrent <= 0);\n\tfor (const avenger of trinketAvengers) {\n\t\thandleAvenge(\n\t\t\tboardWithDeadEntity,\n\t\t\tboardWithDeadEntityHero,\n\t\t\tdeadEntity,\n\t\t\tdeadEntityIndexFromRight,\n\t\t\tavenger as BoardEntity,\n\t\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\t\totherBoard,\n\t\t\totherBoardHero,\n\t\t\tgameState,\n\t\t);\n\t}\n\n\tperformEntitySpawns(\n\t\tcandidatesEntitiesSpawnedFromAvenge,\n\t\tboardWithDeadEntity,\n\t\tboardWithDeadEntityHero,\n\t\tdeadEntity,\n\t\tdeadEntityIndexFromRight,\n\t\totherBoard,\n\t\totherBoardHero,\n\t\tgameState,\n\t);\n\n\t// Not an avenge, but with Avenge timing\n\tconst hasDeathrattle =\n\t\thasEntityMechanic(deadEntity, GameTag.DEATHRATTLE, gameState.allCards) ||\n\t\tdeadEntity.enchantments.some((e) => isValidDeathrattleEnchantment(e.cardId));\n\tif (hasDeathrattle) {\n\t\t// These are apparently processed after Reborn is triggered\n\t\t// http://replays.firestoneapp.com/?reviewId=5db9a191-ae9b-43a5-a072-0d460631d7a9&turn=23&action=12\n\t\t// UPDATE 2024-06-24: Multiple counterexamples of this, so I'm not sure exactly what is the right approach\n\t\t// I'm implementing the one that makes more sense to me; triggering after reborn is just too different\n\t\t// from what happens usually\n\t\t// However, we want to trigger it after all the spawns have been processed, so more or less an \"avenge\" timing?\n\t\t// Maybe even after that?\n\t\t// Update 2024-06-27 29.6.2: timing should stay the same\n\t\tboardWithDeadEntity\n\t\t\t.filter((e) => e.cardId === CardIds.GhoulAcabra_BG29_863 || e.cardId === CardIds.GhoulAcabra_BG29_863_G)\n\t\t\t.forEach((ghoul) => {\n\t\t\t\tconst buff = ghoul.cardId === CardIds.GhoulAcabra_BG29_863_G ? 2 : 1;\n\t\t\t\taddStatsToBoard(ghoul, boardWithDeadEntity, boardWithDeadEntityHero, 2 * buff, 2 * buff, gameState);\n\t\t\t});\n\t}\n\n\treturn candidatesEntitiesSpawnedFromAvenge;\n};\n\nexport const updateAvengeCounters = (board: readonly BoardEntity[], boardWithDeadEntityHero: BgsPlayerEntity) => {\n\tfor (const entity of board) {\n\t\tif (!!entity.avengeDefault) {\n\t\t\tentity.avengeCurrent -= 1;\n\t\t}\n\t}\n\tfor (const heroPower of boardWithDeadEntityHero.heroPowers) {\n\t\tif (!!heroPower.avengeDefault) {\n\t\t\theroPower.avengeCurrent -= 1;\n\t\t}\n\t}\n\n\tfor (const reward of boardWithDeadEntityHero.questRewardEntities) {\n\t\tif (!!reward.avengeDefault) {\n\t\t\treward.avengeCurrent -= 1;\n\t\t}\n\t}\n\n\tfor (const trinket of boardWithDeadEntityHero.trinkets) {\n\t\tif (!!trinket.avengeDefault) {\n\t\t\ttrinket.avengeCurrent -= 1;\n\t\t}\n\t}\n};\n\nconst handleAvenge = (\n\tboardWithDeadEntity: BoardEntity[],\n\tboardWithDeadEntityHero: BgsPlayerEntity,\n\tdeadEntity: BoardEntity,\n\tdeadEntityIndexFromRight: number,\n\tavenger: BoardEntity,\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\n\totherBoard: BoardEntity[],\n\totherBoardHero: BgsPlayerEntity,\n\tgameState: FullGameState,\n) => {\n\tconst avengeImpl = cardMappings[avenger.cardId];\n\tif (hasAvenge(avengeImpl)) {\n\t\tconst newSpawns = avengeImpl.avenge(avenger, {\n\t\t\tboard: boardWithDeadEntity,\n\t\t\thero: boardWithDeadEntityHero,\n\t\t\totherBoard: otherBoard,\n\t\t\totherHero: otherBoardHero,\n\t\t\tdeadEntity: deadEntity,\n\t\t\tgameState,\n\t\t});\n\t\tif (Array.isArray(newSpawns) && newSpawns?.length) {\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(...newSpawns);\n\t\t}\n\t} else {\n\t\t// Don't forget to update the avenge data in cards-data\n\t\tswitch (avenger.cardId) {\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy:\n\t\t\tcase CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G:\n\t\t\t\t// Only for Tavern\n\t\t\t\t// addStatsToBoard(\n\t\t\t\t// \tavenger,\n\t\t\t\t// \tboardWithDeadEntity,\n\t\t\t\t// \t0,\n\t\t\t\t// \tavenger.cardId === CardIds.StormpikeLieutenant_BG22_HERO_003_Buddy_G ? 2 : 1,\n\t\t\t\t// \tgameState.allCards,\n\t\t\t\t// \tgameState.spectator,\n\t\t\t\t// );\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001:\n\t\t\t\tconst target1 = grantRandomStats(\n\t\t\t\t\tavenger,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t6,\n\t\t\t\t\t6,\n\t\t\t\t\tRace.BEAST,\n\t\t\t\t\ttrue,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tif (!!target1) {\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\ttarget1,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PalescaleCrocolisk_BG21_001_G:\n\t\t\t\tconst target2 = grantRandomStats(\n\t\t\t\t\tavenger,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t12,\n\t\t\t\t\t12,\n\t\t\t\t\tRace.BEAST,\n\t\t\t\t\ttrue,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tif (!!target2) {\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\ttarget2,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007:\n\t\t\tcase CardIds.ImpatientDoomsayer_BG21_007_G:\n\t\t\t\tconst doomsayerCardsToAddQuantity = avenger.cardId === CardIds.ImpatientDoomsayer_BG21_007_G ? 2 : 1;\n\t\t\t\tconst doomsayerCardsToAdd = [];\n\t\t\t\tfor (let i = 0; i < doomsayerCardsToAddQuantity; i++) {\n\t\t\t\t\tdoomsayerCardsToAdd.push(pickRandom(gameState.cardsData.demonSpawns));\n\t\t\t\t}\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, doomsayerCardsToAdd, gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014:\n\t\t\tcase CardIds.PashmarTheVengeful_BG23_014_G:\n\t\t\t\tbreak;\n\t\t\tcase CardIds.TremblingTrolley_BG28_967:\n\t\t\tcase CardIds.TremblingTrolley_BG28_967_G:\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.Thorncaller_BG20_105:\n\t\t\tcase CardIds.Thorncaller_BG20_105_G:\n\t\t\t\tconst thorncallerToAddQuantity = avenger.cardId === CardIds.Thorncaller_BG20_105_G ? 2 : 1;\n\t\t\t\tconst thorncallerCardsToAdd = Array(thorncallerToAddQuantity).fill(CardIds.BloodGem);\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, thorncallerCardsToAdd, gameState);\n\t\t\t\tbreak;\n\t\t\t// case CardIds.Sisefin_BG21_009:\n\t\t\t// case CardIds.Sisefin_BG21_009_G:\n\t\t\t// \tconst poisonousIterations = avenger.cardId === CardIds.Sisefin_BG21_009_G ? 2 : 1;\n\t\t\t// \tfor (let i = 0; i < poisonousIterations; i++) {\n\t\t\t// \t\tconst validTargets = boardWithDeadEntity.filter((e) => !e.poisonous && !e.venomous);\n\t\t\t// \t\tconst murloc = getRandomAliveMinion(validTargets, boardWithDeadEntityHero, Race.MURLOC, gameState);\n\t\t\t// \t\tif (murloc) {\n\t\t\t// \t\t\tupdateVenomous(\n\t\t\t// \t\t\t\tmurloc,\n\t\t\t// \t\t\t\ttrue,\n\t\t\t// \t\t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\t\totherBoardHero,\n\t\t\t// \t\t\t\tgameState,\n\t\t\t// \t\t\t);\n\t\t\t// \t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t// \t\t\t\tavenger,\n\t\t\t// \t\t\t\tmurloc,\n\t\t\t// \t\t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\t\totherBoardHero,\n\t\t\t// \t\t\t);\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.MechanoTank_BG21_023:\n\t\t\t\t// This can be null if the avenge triggers when the last enemy minion dies as well\n\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\n\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\tavenger,\n\t\t\t\t\ttarget,\n\t\t\t\t\totherBoard,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t);\n\t\t\t\tdealDamageToMinion(\n\t\t\t\t\ttarget,\n\t\t\t\t\totherBoard,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t\tavenger,\n\t\t\t\t\t5,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.MechanoTank_BG21_023_G:\n\t\t\t\tfor (let i = 0; i < 2; i++) {\n\t\t\t\t\tconst target = getRandomMinionWithHighestHealth(otherBoard);\n\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\totherBoard,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t);\n\t\t\t\t\tdealDamageToMinion(\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\totherBoard,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\t5,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\tgameState,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031:\n\t\t\t// \tconst nonGoldenMinions = boardWithDeadEntity\n\t\t\t// \t\t.filter((e) => e.entityId !== avenger.entityId)\n\t\t\t// \t\t.filter((e) => {\n\t\t\t// \t\t\tconst ref = gameState.allCards.getCard(e.cardId);\n\t\t\t// \t\t\treturn (\n\t\t\t// \t\t\t\t!!ref.battlegroundsPremiumDbfId &&\n\t\t\t// \t\t\t\t!!gameState.allCards.getCardFromDbfId(ref.battlegroundsPremiumDbfId).id\n\t\t\t// \t\t\t);\n\t\t\t// \t\t});\n\t\t\t// \tconst pirate = getRandomAliveMinion(nonGoldenMinions, boardWithDeadEntityHero, Race.PIRATE, gameState);\n\t\t\t// \tif (pirate) {\n\t\t\t// \t\tmakeMinionGolden(\n\t\t\t// \t\t\tpirate,\n\t\t\t// \t\t\tavenger,\n\t\t\t// \t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\totherBoard,\n\t\t\t// \t\t\totherBoardHero,\n\t\t\t// \t\t\tgameState,\n\t\t\t// \t\t);\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\t// case CardIds.TonyTwoTusk_BG21_031_G:\n\t\t\t// \tfor (let i = 0; i < 2; i++) {\n\t\t\t// \t\tconst nonGoldenMinions = boardWithDeadEntity.filter((e) => !isMinionGolden(e, gameState.allCards));\n\t\t\t// \t\tconst pirate = getRandomAliveMinion(\n\t\t\t// \t\t\tnonGoldenMinions,\n\t\t\t// \t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\tRace.PIRATE,\n\t\t\t// \t\t\tgameState,\n\t\t\t// \t\t);\n\t\t\t// \t\tif (pirate) {\n\t\t\t// \t\t\tmakeMinionGolden(\n\t\t\t// \t\t\t\tpirate,\n\t\t\t// \t\t\t\tavenger,\n\t\t\t// \t\t\t\tboardWithDeadEntity,\n\t\t\t// \t\t\t\tboardWithDeadEntityHero,\n\t\t\t// \t\t\t\totherBoard,\n\t\t\t// \t\t\t\totherBoardHero,\n\t\t\t// \t\t\t\tgameState,\n\t\t\t// \t\t\t);\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.HungeringAbomination_BG25_014:\n\t\t\tcase CardIds.HungeringAbomination_BG25_014_G:\n\t\t\t\tconst abominationMultiplier = avenger.cardId === CardIds.HungeringAbomination_BG25_014_G ? 2 : 1;\n\t\t\t\tmodifyStats(\n\t\t\t\t\tavenger,\n\t\t\t\t\tavenger,\n\t\t\t\t\tabominationMultiplier * 1,\n\t\t\t\t\tabominationMultiplier * 2,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t// case CardIds.IceSickle:\n\t\t\t// \tgrantRandomStats(\n\t\t\t// \t\tavenger,\n\t\t\t// \t\tboardWithDeadEntityHero.hand.filter(\n\t\t\t// \t\t\t(e) => gameState.allCards.getCard(e.cardId).type?.toUpperCase() === CardType[CardType.MINION],\n\t\t\t// \t\t),\n\t\t\t// \t\tboardWithDeadEntityHero,\n\t\t\t// \t\t4,\n\t\t\t// \t\t0,\n\t\t\t// \t\tnull,\n\t\t\t// \t\ttrue,\n\t\t\t// \t\tgameState,\n\t\t\t// \t);\n\t\t\t// \tbreak;\n\t\t\tcase CardIds.BoomSquad_BG27_Reward_502:\n\t\t\t\tconst highestHealthMinion = [...otherBoard].sort((a, b) => b.health - a.health)[0];\n\t\t\t\tdealDamageToMinion(\n\t\t\t\t\thighestHealthMinion,\n\t\t\t\t\totherBoard,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t\tavenger,\n\t\t\t\t\t10,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\tavenger,\n\t\t\t\t\thighestHealthMinion,\n\t\t\t\t\totherBoard,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\totherBoardHero,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.RelentlessSentry_BG25_003:\n\t\t\tcase CardIds.RelentlessSentry_BG25_003_G:\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010:\n\t\t\tcase CardIds.RelentlessMurghoul_BG27_010_G:\n\t\t\t\tupdateReborn(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tupdateTaunt(avenger, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403:\n\t\t\tcase CardIds.PhaerixWrathOfTheSun_BG28_403_G:\n\t\t\t\tconst phaerixLoops = avenger.cardId === CardIds.PhaerixWrathOfTheSun_BG28_403_G ? 2 : 1;\n\t\t\t\tfor (let i = 0; i < phaerixLoops; i++) {\n\t\t\t\t\tgrantRandomDivineShield(\n\t\t\t\t\t\tavenger,\n\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\tgameState,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740:\n\t\t\tcase CardIds.AugmentedLaborer_BG28_740_G:\n\t\t\t\tconst AugmentedLaborerLoops = avenger.cardId === CardIds.AugmentedLaborer_BG28_740_G ? 2 : 1;\n\t\t\t\tfor (let i = 0; i < AugmentedLaborerLoops; i++) {\n\t\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.TumblingDisaster_BG28_Reward_505:\n\t\t\t\tconst tumblingDisasterEntity = boardWithDeadEntityHero.questRewardEntities?.find(\n\t\t\t\t\t(e) => e.cardId === CardIds.TumblingDisaster_BG28_Reward_505,\n\t\t\t\t);\n\t\t\t\tif (tumblingDisasterEntity) {\n\t\t\t\t\ttumblingDisasterEntity.scriptDataNum1 = (tumblingDisasterEntity.scriptDataNum1 ?? 0) + 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.CycleOfEnergy_BG28_Reward_504:\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);\n\t\t\t\tbreak;\n\t\t\tcase CardIds.StableAmalgamation_BG28_Reward_518:\n\t\t\t\tavenger.scriptDataNum1 = (avenger.scriptDataNum1 ?? 0) + 1;\n\t\t\t\tbreak;\n\t\t\tcase CardIds.MurglMkIi_BG29_991:\n\t\t\tcase CardIds.MurglMkIi_BG29_991_G:\n\t\t\t\tconst murglMkStats = avenger.cardId === CardIds.MurglMkIi_BG29_991_G ? 2 : 1;\n\t\t\t\taddStatsToBoard(\n\t\t\t\t\tavenger,\n\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\tmurglMkStats,\n\t\t\t\t\tmurglMkStats,\n\t\t\t\t\tgameState,\n\t\t\t\t);\n\t\t\t\t// Don't use utility methods, as we don't want triggers to proc\n\t\t\t\tfor (const e of boardWithDeadEntityHero.hand ?? []) {\n\t\t\t\t\te.attack += murglMkStats;\n\t\t\t\t\te.health += murglMkStats;\n\t\t\t\t\te.maxHealth += murglMkStats;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.StaffOfTheScourge_BG30_MagicItem_437:\n\t\t\t\tif (boardWithDeadEntity.length > 0) {\n\t\t\t\t\tconst candidates = boardWithDeadEntity.filter(\n\t\t\t\t\t\t(e) =>\n\t\t\t\t\t\t\t!e.reborn &&\n\t\t\t\t\t\t\thasCorrectTribe(\n\t\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\t\t\tRace.UNDEAD,\n\t\t\t\t\t\t\t\tgameState.anomalies,\n\t\t\t\t\t\t\t\tgameState.allCards,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tconst target = pickRandom(candidates);\n\t\t\t\t\tif (!!target) {\n\t\t\t\t\t\tupdateReborn(\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\t\tgameState,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tgameState.spectator.registerPowerTarget(\n\t\t\t\t\t\t\tavenger,\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\tboardWithDeadEntity,\n\t\t\t\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\t\t\t\totherBoardHero,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase CardIds.BleedingHeart_BG30_MagicItem_713:\n\t\t\t\tconst randomUndead = gameState.cardsData.getRandomMinionForTribe(\n\t\t\t\t\tRace.UNDEAD,\n\t\t\t\t\tboardWithDeadEntityHero.tavernTier,\n\t\t\t\t);\n\t\t\t\taddCardsInHand(boardWithDeadEntityHero, boardWithDeadEntity, [randomUndead], gameState);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tavenger.avengeCurrent += avenger.avengeDefault;\n};\n\nconst handleHeroAvenge = (\n\tdeadEntity: BoardEntity,\n\theroPower: BgsHeroPower,\n\tboardWithDeadEntity: BoardEntity[],\n\tboardWithDeadEntityHero: BgsPlayerEntity,\n\totherBoard: BoardEntity[],\n\totherBoardHero: BgsPlayerEntity,\n\tcandidatesEntitiesSpawnedFromAvenge: BoardEntity[],\n\tgameState: FullGameState,\n) => {\n\t// https://twitter.com/LoewenMitchell/status/1491879869457879040\n\t// Not affected by Khadgar\n\tswitch (heroPower.cardId) {\n\t\tcase CardIds.Onyxia_Broodmother:\n\t\t\tconst broodmotherTokens = spawnEntities(\n\t\t\t\tCardIds.Onyxia_OnyxianWhelpToken,\n\t\t\t\t1,\n\t\t\t\tboardWithDeadEntity,\n\t\t\t\tboardWithDeadEntityHero,\n\t\t\t\totherBoard,\n\t\t\t\totherBoardHero,\n\t\t\t\tgameState,\n\t\t\t\tdeadEntity.friendly,\n\t\t\t\tfalse,\n\t\t\t\tfalse,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tbroodmotherTokens.forEach((token) => {\n\t\t\t\ttoken.attack = +heroPower.info;\n\t\t\t\ttoken.health = +heroPower.info;\n\t\t\t\ttoken.maxAttack = +heroPower.info;\n\t\t\t\ttoken.maxHealth = +heroPower.info;\n\t\t\t});\n\t\t\theroPower.info = +heroPower.info + 1;\n\t\t\tcandidatesEntitiesSpawnedFromAvenge.push(...broodmotherTokens);\n\t\t\tbreak;\n\t}\n\theroPower.avengeCurrent += heroPower.avengeDefault;\n};\n\nexport interface AvengeInput {\n\treadonly board: BoardEntity[];\n\treadonly deadEntity: BoardEntity;\n\treadonly hero: BgsPlayerEntity;\n\treadonly otherBoard: BoardEntity[];\n\treadonly otherHero: BgsPlayerEntity;\n\treadonly gameState: FullGameState;\n}\n"]}
|
|
@@ -116,7 +116,7 @@ const handleOtherEntityEffects = (entity, board, hero, otherBoard, otherHero, sp
|
|
|
116
116
|
const stats = e.cardId === "BG29_806_G" ? 2 : 1;
|
|
117
117
|
const target = (0, utils_1.pickRandom)(board.filter((e) => e.entityId !== entity.entityId));
|
|
118
118
|
if (!!target) {
|
|
119
|
-
(0, stats_1.modifyStats)(target, e, 3 * stats,
|
|
119
|
+
(0, stats_1.modifyStats)(target, e, 3 * stats, 2 * stats, board, hero, gameState);
|
|
120
120
|
}
|
|
121
121
|
});
|
|
122
122
|
board
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"damage-effects.js","sourceRoot":"","sources":["../../src/simulation/damage-effects.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 { hasAfterDealDamage, hasAfterFriendlyMinionDamagedTrinket, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: friendlyBoard,\r\n\t\t\thero: friendlyHero,\r\n\t\t\totherHero: enemyHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, friendlyBoard, friendlyHero, enemyHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyHero,\r\n\t\t\t\tenemyHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, friendlyBoard, friendlyHero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\tenemyBoard,\r\n\t\t\t\t\tenemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tspawnedEntities,\r\n\t\tgameState,\r\n\t);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard.length - (friendlyBoard.indexOf(damagedEntity) + 1),\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = friendlyBoard[friendlyBoard.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? undefined;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of friendlyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: friendlyBoard,\r\n\t\t\t\t\thero: friendlyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of enemyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: enemyBoard,\r\n\t\t\t\t\thero: enemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 3 * stats, 1 * stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfor (const trinket of hero.trinkets ?? []) {\r\n\t\tconst trinketImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasAfterFriendlyMinionDamagedTrinket(trinketImpl)) {\r\n\t\t\ttrinketImpl.afterFriendlyMinionDamaged(trinket, {\r\n\t\t\t\tdamagedEntity: entity,\r\n\t\t\t\tboard,\r\n\t\t\t\thero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\n/** Fired from the friendly hero’s perspective when any friendly board minion takes damage. */\r\nexport interface AfterFriendlyMinionDamagedInput {\r\n\tdamagedEntity: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"damage-effects.js","sourceRoot":"","sources":["../../src/simulation/damage-effects.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 { hasAfterDealDamage, hasAfterFriendlyMinionDamagedTrinket, hasOnDamaged } from '../cards/card.interface';\r\nimport { cardMappings } from '../cards/impl/_card-mappings';\r\nimport { updateDivineShield } from '../keywords/divine-shield';\r\nimport { CardIds } from '../services/card-ids';\r\nimport { pickRandom } from '../services/utils';\r\nimport { grantStatsToMinionsOfEachType, hasCorrectTribe } from '../utils';\r\nimport { spawnEntities } from './deathrattle-spawns';\r\nimport { applyFrenzy } from './frenzy';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { performEntitySpawns } from './spawns';\r\nimport { modifyStats } from './stats';\r\n\r\nexport const onEntityDamaged = (\r\n\tdamagedEntity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tdamageSource: BoardEntity | BgsPlayerEntity,\r\n\tdamage: number,\r\n\tgameState: FullGameState,\r\n): readonly BoardEntity[] => {\r\n\tconst spawnedEntities: BoardEntity[] = [];\r\n\tconst friendlyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: otherBoard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: [];\r\n\tconst enemyBoard =\r\n\t\tboard?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? otherBoard\r\n\t\t\t: board?.[0]?.friendly === damagedEntity.friendly\r\n\t\t\t? board\r\n\t\t\t: [];\r\n\tconst friendlyHero = friendlyBoard === board ? hero : otherHero;\r\n\tconst enemyHero = friendlyBoard === board ? otherHero : hero;\r\n\r\n\tif (damagedEntity.frenzyChargesLeft > 0 && damagedEntity.health > 0 && !damagedEntity.definitelyDead) {\r\n\t\tapplyFrenzy(damagedEntity, friendlyBoard, friendlyHero, gameState);\r\n\t\tdamagedEntity.frenzyChargesLeft--;\r\n\t}\r\n\r\n\tconst wheneverDamagedImpl = cardMappings[damagedEntity.cardId];\r\n\tif (hasOnDamaged(wheneverDamagedImpl)) {\r\n\t\twheneverDamagedImpl.onDamaged(damagedEntity, {\r\n\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\tdamageDealer: damageSource,\r\n\t\t\tdamage: damage,\r\n\t\t\tboard: friendlyBoard,\r\n\t\t\thero: friendlyHero,\r\n\t\t\totherHero: enemyHero,\r\n\t\t\tgameState,\r\n\t\t});\r\n\t}\r\n\r\n\tswitch (damagedEntity.cardId) {\r\n\t\tcase CardIds.WingedChimera_BG29_844:\r\n\t\tcase CardIds.WingedChimera_BG29_844_G:\r\n\t\t\tif (damagedEntity.abiityChargesLeft > 0) {\r\n\t\t\t\tconst wingedChimeraModifier = damagedEntity.cardId === CardIds.WingedChimera_BG29_844_G ? 2 : 1;\r\n\t\t\t\tgrantStatsToMinionsOfEachType(\r\n\t\t\t\t\tdamagedEntity,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\twingedChimeraModifier * 1,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t);\r\n\t\t\t\tdamagedEntity.abiityChargesLeft--;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase CardIds.Untameabull_BG29_878:\r\n\t\tcase CardIds.Untameabull_BG29_878_G:\r\n\t\t\tupdateDivineShield(damagedEntity, friendlyBoard, friendlyHero, enemyHero, true, gameState);\r\n\t\t\tgameState.spectator.registerPowerTarget(\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tdamagedEntity,\r\n\t\t\t\tfriendlyBoard,\r\n\t\t\t\tfriendlyHero,\r\n\t\t\t\tenemyHero,\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.TrustyPup_BG29_800:\r\n\t\tcase CardIds.TrustyPup_BG29_800_G:\r\n\t\t\tconst trustyPupStats = damagedEntity.cardId === CardIds.TrustyPup_BG29_800_G ? 2 : 1;\r\n\t\t\tmodifyStats(damagedEntity, damagedEntity, trustyPupStats, 0, friendlyBoard, friendlyHero, gameState);\r\n\t\t\tbreak;\r\n\t\tcase CardIds.SilverGoose_BG29_801:\r\n\t\tcase CardIds.SilverGoose_BG29_801_G:\r\n\t\t\tspawnedEntities.push(\r\n\t\t\t\t...spawnEntities(\r\n\t\t\t\t\tdamagedEntity.cardId === CardIds.SilverGoose_BG29_801_G\r\n\t\t\t\t\t\t? CardIds.SilverGoose_SilverFledglingToken_BG29_801_Gt\r\n\t\t\t\t\t\t: CardIds.SilverGoose_SilverFledglingToken_BG29_801t,\r\n\t\t\t\t\t1,\r\n\t\t\t\t\tfriendlyBoard,\r\n\t\t\t\t\tfriendlyHero,\r\n\t\t\t\t\tenemyBoard,\r\n\t\t\t\t\tenemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t\tdamagedEntity.friendly,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\thandleOtherEntityEffects(\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tspawnedEntities,\r\n\t\tgameState,\r\n\t);\r\n\tconst finalSpawns = performEntitySpawns(\r\n\t\tspawnedEntities,\r\n\t\tfriendlyBoard,\r\n\t\tfriendlyHero,\r\n\t\tdamagedEntity,\r\n\t\tfriendlyBoard.length - (friendlyBoard.indexOf(damagedEntity) + 1),\r\n\t\tenemyBoard,\r\n\t\tenemyHero,\r\n\t\tgameState,\r\n\t);\r\n\r\n\tconst entityRightToSpawns = friendlyBoard[friendlyBoard.indexOf(damagedEntity) + 1];\r\n\tfinalSpawns.forEach((e) => {\r\n\t\te.hasAttacked = damagedEntity.hasAttacked > 1 ? 1 : entityRightToSpawns?.hasAttacked ?? undefined;\r\n\t});\r\n\r\n\tif (damage > 0) {\r\n\t\tfor (const entity of friendlyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: friendlyBoard,\r\n\t\t\t\t\thero: friendlyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (const entity of enemyBoard) {\r\n\t\t\tconst afterDealDamageImpl = cardMappings[entity.cardId];\r\n\t\t\tif (hasAfterDealDamage(afterDealDamageImpl)) {\r\n\t\t\t\tafterDealDamageImpl.afterDealDamage(entity, {\r\n\t\t\t\t\tdamagedEntity: damagedEntity,\r\n\t\t\t\t\tdamageDealer: damageSource,\r\n\t\t\t\t\tdamage: damage,\r\n\t\t\t\t\tboard: enemyBoard,\r\n\t\t\t\t\thero: enemyHero,\r\n\t\t\t\t\tgameState,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn finalSpawns;\r\n};\r\n\r\nconst handleOtherEntityEffects = (\r\n\tentity: BoardEntity,\r\n\tboard: BoardEntity[],\r\n\thero: BgsPlayerEntity,\r\n\totherBoard: BoardEntity[],\r\n\totherHero: BgsPlayerEntity,\r\n\tspawnedEntities: BoardEntity[],\r\n\tgameState: FullGameState,\r\n) => {\r\n\tif (hasCorrectTribe(entity, hero, Race.BEAST, gameState.anomalies, gameState.allCards)) {\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806 ||\r\n\t\t\t\t\te.cardId === CardIds.IridescentSkyblazer_BG29_806_G,\r\n\t\t\t)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.IridescentSkyblazer_BG29_806_G ? 2 : 1;\r\n\t\t\t\tconst target = pickRandom(board.filter((e) => e.entityId !== entity.entityId));\r\n\t\t\t\tif (!!target) {\r\n\t\t\t\t\tmodifyStats(target, e, 3 * stats, 2 * stats, board, hero, gameState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\tboard\r\n\t\t\t.filter(\r\n\t\t\t\t(e) =>\r\n\t\t\t\t\te.cardId === CardIds.TrigoreTheLasher_BG29_807 || e.cardId === CardIds.TrigoreTheLasher_BG29_807_G,\r\n\t\t\t)\r\n\t\t\t.filter((e) => e.entityId !== entity.entityId)\r\n\t\t\t.forEach((e) => {\r\n\t\t\t\tconst stats = e.cardId === CardIds.TrigoreTheLasher_BG29_807_G ? 2 : 1;\r\n\t\t\t\tmodifyStats(e, e, 0, 2 * stats, board, hero, gameState);\r\n\t\t\t});\r\n\t}\r\n\r\n\tfor (const trinket of hero.trinkets ?? []) {\r\n\t\tconst trinketImpl = cardMappings[trinket.cardId];\r\n\t\tif (hasAfterFriendlyMinionDamagedTrinket(trinketImpl)) {\r\n\t\t\ttrinketImpl.afterFriendlyMinionDamaged(trinket, {\r\n\t\t\t\tdamagedEntity: entity,\r\n\t\t\t\tboard,\r\n\t\t\t\thero,\r\n\t\t\t\tgameState,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport interface AfterDealDamageInput {\r\n\tdamagedEntity: BoardEntity | BgsPlayerEntity;\r\n\tdamageDealer: BoardEntity | BgsPlayerEntity;\r\n\tdamage: number;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n\r\n/** Fired from the friendly hero’s perspective when any friendly board minion takes damage. */\r\nexport interface AfterFriendlyMinionDamagedInput {\r\n\tdamagedEntity: BoardEntity;\r\n\tboard: BoardEntity[];\r\n\thero: BgsPlayerEntity;\r\n\tgameState: FullGameState;\r\n}\r\n"]}
|
|
@@ -5,6 +5,7 @@ const reference_data_1 = require("@firestone-hs/reference-data");
|
|
|
5
5
|
const card_interface_1 = require("../cards/card.interface");
|
|
6
6
|
const _card_mappings_1 = require("../cards/impl/_card-mappings");
|
|
7
7
|
const divine_shield_1 = require("../keywords/divine-shield");
|
|
8
|
+
const player_global_effects_1 = require("../mechanics/player-global-effects");
|
|
8
9
|
const utils_1 = require("../services/utils");
|
|
9
10
|
const utils_2 = require("../utils");
|
|
10
11
|
const attack_1 = require("./attack");
|
|
@@ -55,7 +56,7 @@ const spawnEntities = (cardId, quantity, boardToSpawnInto, boardToSpawnIntoHero,
|
|
|
55
56
|
};
|
|
56
57
|
exports.spawnEntities = spawnEntities;
|
|
57
58
|
const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, entitiesDeadThisAttack, gameState) => {
|
|
58
|
-
var _a, _b, _c, _d, _e, _f
|
|
59
|
+
var _a, _b, _c, _d, _e, _f;
|
|
59
60
|
const finalSpawns = [];
|
|
60
61
|
const multiplier = (0, deathrattle_effects_1.computeDeathrattleMultiplier)([...boardWithDeadEntity], boardWithDeadEntityHero, deadEntity, gameState.sharedState);
|
|
61
62
|
const deathrattleTriggeredInput = {
|
|
@@ -76,8 +77,8 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
|
|
|
76
77
|
return ((_b = (_a = a.entityId) !== null && _a !== void 0 ? _a : a.timing) !== null && _b !== void 0 ? _b : 0) -
|
|
77
78
|
((_d = (_c = b.entityId) !== null && _c !== void 0 ? _c : b.timing) !== null && _d !== void 0 ? _d : 0);
|
|
78
79
|
});
|
|
79
|
-
for (
|
|
80
|
-
for (
|
|
80
|
+
for (const card of cards) {
|
|
81
|
+
for (let i = 0; i < multiplier; i++) {
|
|
81
82
|
let hasTriggered = false;
|
|
82
83
|
const spawnedEntities = [];
|
|
83
84
|
const refCard = gameState.allCards.getCard(card.cardId);
|
|
@@ -560,7 +561,7 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
|
|
|
560
561
|
(0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);
|
|
561
562
|
break;
|
|
562
563
|
case "BG30_MagicItem_411e":
|
|
563
|
-
(0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, ["BG20_GEM"], gameState);
|
|
564
|
+
(0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, ["BG20_GEM", "BG20_GEM"], gameState);
|
|
564
565
|
break;
|
|
565
566
|
case "BG21_000e":
|
|
566
567
|
case "BG21_000_Ge":
|
|
@@ -578,8 +579,7 @@ const spawnEntitiesFromDeathrattle = (deadEntity, deadEntityIndexFromRight, boar
|
|
|
578
579
|
}
|
|
579
580
|
}
|
|
580
581
|
if (hasTriggered) {
|
|
581
|
-
boardWithDeadEntityHero
|
|
582
|
-
((_g = boardWithDeadEntityHero.globalInfo.DeathrattlesTriggeredThisGame) !== null && _g !== void 0 ? _g : 0) + 1;
|
|
582
|
+
(0, player_global_effects_1.incrementDeathrattlesTriggeredThisGame)(boardWithDeadEntityHero, boardWithDeadEntity, gameState);
|
|
583
583
|
(0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
|
|
584
584
|
}
|
|
585
585
|
}
|