@firestone-hs/simulate-bgs-battle 1.1.706 → 1.1.707
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cards/impl/minion/fire-forged-evoker.js +1 -1
- package/dist/cards/impl/minion/fire-forged-evoker.js.map +1 -1
- package/dist/cards/impl/minion/incubation-researcher.js +1 -1
- package/dist/cards/impl/minion/incubation-researcher.js.map +1 -1
- package/dist/cards/impl/minion/junk-jouster.js +1 -1
- package/dist/cards/impl/minion/junk-jouster.js.map +1 -1
- package/dist/cards/impl/minion/mama-mrrglton.js +1 -1
- package/dist/cards/impl/minion/mama-mrrglton.js.map +1 -1
- package/dist/cards/impl/minion/papa-mrrglton.js +1 -1
- package/dist/cards/impl/minion/papa-mrrglton.js.map +1 -1
- package/dist/services/hand-minion-priority.js +6 -6
- package/dist/services/hand-minion-priority.js.map +1 -1
- package/dist/simulation/spawns.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ exports.FireForgedEvoker = {
|
|
|
10
10
|
var _a, _b, _c;
|
|
11
11
|
const mult = minion.cardId === "BG32_822_G" ? 2 : 1;
|
|
12
12
|
const spells = (_a = input.playerEntity.globalInfo.SpellsCastThisGame) !== null && _a !== void 0 ? _a : 0;
|
|
13
|
-
const atk = (_b = minion.scriptDataNum1) !== null && _b !== void 0 ? _b : mult * (
|
|
13
|
+
const atk = (_b = minion.scriptDataNum1) !== null && _b !== void 0 ? _b : mult * (2 + spells);
|
|
14
14
|
const health = (_c = minion.scriptDataNum2) !== null && _c !== void 0 ? _c : mult * (1 + spells);
|
|
15
15
|
const targetBoard = input.playerBoard.filter((e) => (0, utils_1.hasCorrectTribe)(e, input.playerEntity, reference_data_1.Race.DRAGON, input.gameState.anomalies, input.gameState.allCards));
|
|
16
16
|
for (const target of targetBoard) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fire-forged-evoker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fire-forged-evoker.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAsB;IAClD,OAAO,EAAE,0BAAwE;IACjF,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;YACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjG;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fire-forged Evoker (Tier 6, 8/5)\r\n * Start of Combat: Give your Dragons +1/+1. Improves permanently after you cast a Tavern spell.\r\n * (Spells during combat should count — see REVIEW_QUEUE_BG_35_2.md if any spell path skips SpellsCastThisGame.)\r\n *\r\n * Golden Fire-forged Evoker (Tier 6, 16/10)\r\n * Start of Combat: Give your Dragons +2/+2. Improves permanently after you cast a Tavern spell.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-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 FireForgedEvoker: StartOfCombatCard = {\r\n\tcardIds: [CardIds.FireForgedEvoker_BG32_822, CardIds.FireForgedEvoker_BG32_822_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\tconst spells = input.playerEntity.globalInfo.SpellsCastThisGame ?? 0;\r\n\t\tconst atk = minion.scriptDataNum1 ?? mult * (
|
|
1
|
+
{"version":3,"file":"fire-forged-evoker.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/fire-forged-evoker.ts"],"names":[],"mappings":";;;AAQA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAsB;IAClD,OAAO,EAAE,0BAAwE;IACjF,aAAa,EAAE,CAAC,MAAmB,EAAE,KAAe,EAAE,EAAE;;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAA,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,mCAAI,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,cAAc,mCAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CACxG,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE;YACjC,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjG;QACD,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Fire-forged Evoker (Tier 6, 8/5)\r\n * Start of Combat: Give your Dragons +1/+1. Improves permanently after you cast a Tavern spell.\r\n * (Spells during combat should count — see REVIEW_QUEUE_BG_35_2.md if any spell path skips SpellsCastThisGame.)\r\n *\r\n * Golden Fire-forged Evoker (Tier 6, 16/10)\r\n * Start of Combat: Give your Dragons +2/+2. Improves permanently after you cast a Tavern spell.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-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 FireForgedEvoker: StartOfCombatCard = {\r\n\tcardIds: [CardIds.FireForgedEvoker_BG32_822, CardIds.FireForgedEvoker_BG32_822_G],\r\n\tstartOfCombat: (minion: BoardEntity, input: SoCInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.FireForgedEvoker_BG32_822_G ? 2 : 1;\r\n\t\tconst spells = input.playerEntity.globalInfo.SpellsCastThisGame ?? 0;\r\n\t\tconst atk = minion.scriptDataNum1 ?? mult * (2 + spells);\r\n\t\tconst health = minion.scriptDataNum2 ?? mult * (1 + spells);\r\n\t\tconst targetBoard = input.playerBoard.filter((e) =>\r\n\t\t\thasCorrectTribe(e, input.playerEntity, Race.DRAGON, input.gameState.anomalies, input.gameState.allCards),\r\n\t\t);\r\n\t\tfor (const target of targetBoard) {\r\n\t\t\tmodifyStats(target, minion, atk, health, input.playerBoard, input.playerEntity, input.gameState);\r\n\t\t}\r\n\t\treturn { hasTriggered: true, shouldRecomputeCurrentAttacker: false };\r\n\t},\r\n};\r\n"]}
|
|
@@ -6,7 +6,7 @@ const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
|
|
|
6
6
|
const chromadrake_pool_1 = require("./chromadrake-pool");
|
|
7
7
|
exports.IncubationResearcher = {
|
|
8
8
|
cardIds: ["BG34_632", "BG34_632_G"],
|
|
9
|
-
baseAvengeValue: () =>
|
|
9
|
+
baseAvengeValue: () => 3,
|
|
10
10
|
avenge: (minion, input) => {
|
|
11
11
|
const mult = minion.cardId === "BG34_632_G" ? 2 : 1;
|
|
12
12
|
for (let i = 0; i < mult; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incubation-researcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/incubation-researcher.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"incubation-researcher.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/incubation-researcher.ts"],"names":[],"mappings":";;;AAEA,mDAAqD;AAErD,qEAAmE;AAEnE,yDAAwD;AAE3C,QAAA,oBAAoB,GAAe;IAC/C,OAAO,EAAE,0BAAgF;IACzF,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,MAAmB,EAAE,KAAkB,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,IAAA,kBAAU,EAAC,qCAAkB,CAAC,CAAC;YAC1C,IAAI,EAAE,EAAE;gBACP,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC/D;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { pickRandom } from '../../../services/utils';\r\nimport { AvengeInput } from '../../../simulation/avenge';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AvengeCard } from '../../card.interface';\r\nimport { chromadrakeCardIds } from './chromadrake-pool';\r\n\r\nexport const IncubationResearcher: AvengeCard = {\r\n\tcardIds: [CardIds.IncubationResearcher_BG34_632, CardIds.IncubationResearcher_BG34_632_G],\r\n\tbaseAvengeValue: () => 3,\r\n\tavenge: (minion: BoardEntity, input: AvengeInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.IncubationResearcher_BG34_632_G ? 2 : 1;\r\n\t\tfor (let i = 0; i < mult; i++) {\r\n\t\t\tconst id = pickRandom(chromadrakeCardIds);\r\n\t\t\tif (id) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [id], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
|
|
@@ -7,7 +7,7 @@ exports.JunkJouster = {
|
|
|
7
7
|
onAfterMagnetize: (entity, input) => {
|
|
8
8
|
const mult = entity.cardId === "BG34_175_G" ? 2 : 1;
|
|
9
9
|
for (const m of input.board) {
|
|
10
|
-
(0, stats_1.modifyStats)(m, entity,
|
|
10
|
+
(0, stats_1.modifyStats)(m, entity, 5 * mult, 5 * mult, input.board, input.hero, input.gameState);
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"junk-jouster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/junk-jouster.ts"],"names":[],"mappings":";;;AAUA,qDAAwD;AAG3C,QAAA,WAAW,GAAyB;IAChD,OAAO,EAAE,0BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACrF;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Junk Jouster (Tier 6, 8/7)\r\n * After you Magnetize a minion, give your minions +6/+6.\r\n *\r\n * Golden Junk Jouster (Tier 6, 16/14)\r\n * After you Magnetize a minion, give your minions +12/+12.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterMagnetizeInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnAfterMagnetizeCard } from '../../card.interface';\r\n\r\nexport const JunkJouster: OnAfterMagnetizeCard = {\r\n\tcardIds: [CardIds.JunkJouster_BG34_175, CardIds.JunkJouster_BG34_175_G],\r\n\tonAfterMagnetize: (entity: BoardEntity, input: OnAfterMagnetizeInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.JunkJouster_BG34_175_G ? 2 : 1;\r\n\t\tfor (const m of input.board) {\r\n\t\t\tmodifyStats(m, entity,
|
|
1
|
+
{"version":3,"file":"junk-jouster.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/junk-jouster.ts"],"names":[],"mappings":";;;AAUA,qDAAwD;AAG3C,QAAA,WAAW,GAAyB;IAChD,OAAO,EAAE,0BAA8D;IACvE,gBAAgB,EAAE,CAAC,MAAmB,EAAE,KAA4B,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAmC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACrF;IACF,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Junk Jouster (Tier 6, 8/7)\r\n * After you Magnetize a minion, give your minions +6/+6.\r\n *\r\n * Golden Junk Jouster (Tier 6, 16/14)\r\n * After you Magnetize a minion, give your minions +12/+12.\r\n */\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterMagnetizeInput } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { OnAfterMagnetizeCard } from '../../card.interface';\r\n\r\nexport const JunkJouster: OnAfterMagnetizeCard = {\r\n\tcardIds: [CardIds.JunkJouster_BG34_175, CardIds.JunkJouster_BG34_175_G],\r\n\tonAfterMagnetize: (entity: BoardEntity, input: OnAfterMagnetizeInput) => {\r\n\t\tconst mult = entity.cardId === CardIds.JunkJouster_BG34_175_G ? 2 : 1;\r\n\t\tfor (const m of input.board) {\r\n\t\t\tmodifyStats(m, entity, 5 * mult, 5 * mult, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
|
|
@@ -10,7 +10,7 @@ exports.MamaMrrglton = {
|
|
|
10
10
|
var _a;
|
|
11
11
|
const mult = minion.cardId === "BG35_140_G" ? 2 : 1;
|
|
12
12
|
const mrrg = (_a = input.hero.globalInfo.MrrgltonsPlayedThisGame) !== null && _a !== void 0 ? _a : 0;
|
|
13
|
-
const atk =
|
|
13
|
+
const atk = 2 * mult + mrrg;
|
|
14
14
|
for (const e of input.board) {
|
|
15
15
|
if ((0, utils_1.hasCorrectTribe)(e, input.hero, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {
|
|
16
16
|
(0, stats_1.modifyStats)(e, minion, atk, 0, input.board, input.hero, input.gameState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mama-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/mama-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;
|
|
1
|
+
{"version":3,"file":"mama-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/mama-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAI,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACrG,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACzE;SACD;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const MamaMrrglton: BattlecryCard = {\r\n\tcardIds: [CardIds.MamaMrrglton_BG35_140, CardIds.MamaMrrglton_BG35_140_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.MamaMrrglton_BG35_140_G ? 2 : 1;\r\n\t\tconst mrrg = input.hero.globalInfo.MrrgltonsPlayedThisGame ?? 0;\r\n\t\tconst atk = 2 * mult + mrrg;\r\n\t\tfor (const e of input.board) {\r\n\t\t\tif (hasCorrectTribe(e, input.hero, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\tmodifyStats(e, minion, atk, 0, input.board, input.hero, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t\tinput.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
|
|
@@ -10,7 +10,7 @@ exports.PapaMrrglton = {
|
|
|
10
10
|
var _a;
|
|
11
11
|
const mult = minion.cardId === "BG35_141_G" ? 2 : 1;
|
|
12
12
|
const mrrg = (_a = input.hero.globalInfo.MrrgltonsPlayedThisGame) !== null && _a !== void 0 ? _a : 0;
|
|
13
|
-
const hp =
|
|
13
|
+
const hp = 2 * mult + mrrg;
|
|
14
14
|
for (const e of input.board) {
|
|
15
15
|
if ((0, utils_1.hasCorrectTribe)(e, input.hero, reference_data_1.Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {
|
|
16
16
|
(0, stats_1.modifyStats)(e, minion, 0, hp, input.board, input.hero, input.gameState);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"papa-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/papa-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;
|
|
1
|
+
{"version":3,"file":"papa-mrrglton.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/papa-mrrglton.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,YAAY,GAAkB;IAC1C,OAAO,EAAE,0BAAgE;IACzE,SAAS,EAAE,CAAC,MAAmB,EAAE,KAAqB,EAAE,EAAE;;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,iBAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,mCAAI,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE;YAC5B,IAAI,IAAA,uBAAe,EAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAI,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACrG,IAAA,mBAAW,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACxE;SACD;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { BattlecryInput } from '../../../simulation/battlecries';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { BattlecryCard } from '../../card.interface';\r\n\r\nexport const PapaMrrglton: BattlecryCard = {\r\n\tcardIds: [CardIds.PapaMrrglton_BG35_141, CardIds.PapaMrrglton_BG35_141_G],\r\n\tbattlecry: (minion: BoardEntity, input: BattlecryInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.PapaMrrglton_BG35_141_G ? 2 : 1;\r\n\t\tconst mrrg = input.hero.globalInfo.MrrgltonsPlayedThisGame ?? 0;\r\n\t\tconst hp = 2 * mult + mrrg;\r\n\t\tfor (const e of input.board) {\r\n\t\t\tif (hasCorrectTribe(e, input.hero, Race.MURLOC, input.gameState.anomalies, input.gameState.allCards)) {\r\n\t\t\t\tmodifyStats(e, minion, 0, hp, input.board, input.hero, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t\tinput.hero.globalInfo.MrrgltonsPlayedThisGame = mrrg + 1;\r\n\t\treturn true;\r\n\t},\r\n};\r\n"]}
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isHandMinionCandidate = exports.getHighestAttackHandMinions = void 0;
|
|
4
4
|
const reference_data_1 = require("@firestone-hs/reference-data");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
5
6
|
const getHighestAttackHandMinions = (hand, count, isMinionInHand) => {
|
|
6
7
|
if (!(hand === null || hand === void 0 ? void 0 : hand.length) || count <= 0) {
|
|
7
8
|
return [];
|
|
8
9
|
}
|
|
9
|
-
const scored = hand
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
scored.sort((a, b) => {
|
|
10
|
+
const scored = hand.map((entity, index) => ({ entity, index })).filter(({ entity }) => isMinionInHand(entity));
|
|
11
|
+
const randomized = (0, utils_1.shuffleArray)(scored);
|
|
12
|
+
randomized.sort((a, b) => {
|
|
13
13
|
var _a, _b;
|
|
14
14
|
const atkDiff = ((_a = b.entity.attack) !== null && _a !== void 0 ? _a : 0) - ((_b = a.entity.attack) !== null && _b !== void 0 ? _b : 0);
|
|
15
15
|
if (atkDiff !== 0) {
|
|
16
16
|
return atkDiff;
|
|
17
17
|
}
|
|
18
|
-
return
|
|
18
|
+
return 0;
|
|
19
19
|
});
|
|
20
|
-
return
|
|
20
|
+
return randomized.slice(0, count).map((s) => s.entity);
|
|
21
21
|
};
|
|
22
22
|
exports.getHighestAttackHandMinions = getHighestAttackHandMinions;
|
|
23
23
|
const isHandMinionCandidate = (entity, cardTypeUpper) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hand-minion-priority.js","sourceRoot":"","sources":["../../src/services/hand-minion-priority.ts"],"names":[],"mappings":";;;AAAA,iEAAwD;
|
|
1
|
+
{"version":3,"file":"hand-minion-priority.js","sourceRoot":"","sources":["../../src/services/hand-minion-priority.ts"],"names":[],"mappings":";;;AAAA,iEAAwD;AAExD,mCAAuC;AAMhC,MAAM,2BAA2B,GAAG,CAC1C,IAAwC,EACxC,KAAa,EACb,cAA2C,EAC3B,EAAE;IAClB,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,IAAI,KAAK,IAAI,CAAC,EAAE;QAChC,OAAO,EAAE,CAAC;KACV;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/G,MAAM,UAAU,GAAG,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC;IACxC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;QACxB,MAAM,OAAO,GAAG,CAAC,MAAA,CAAC,CAAC,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,MAAM,CAAC,MAAM,mCAAI,CAAC,CAAC,CAAC;QAChE,IAAI,OAAO,KAAK,CAAC,EAAE;YAClB,OAAO,OAAO,CAAC;SACf;QAED,OAAO,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC,CAAC;AAnBW,QAAA,2BAA2B,+BAmBtC;AAEK,MAAM,qBAAqB,GAAG,CACpC,MAAmB,EACnB,aAAiD,EACvC,EAAE;IACZ,OAAO,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,yBAAQ,CAAC,yBAAQ,CAAC,MAAM,CAAC,CAAC;AACzG,CAAC,CAAC;AALW,QAAA,qBAAqB,yBAKhC","sourcesContent":["import { CardType } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { shuffleArray } from './utils';\r\n\r\n/**\r\n * Minions in hand with the highest current Attack.\r\n * Used by Expert Aviator, Diremuck Forager, etc.\r\n */\r\nexport const getHighestAttackHandMinions = (\r\n\thand: readonly BoardEntity[] | undefined,\r\n\tcount: number,\r\n\tisMinionInHand: (e: BoardEntity) => boolean,\r\n): BoardEntity[] => {\r\n\tif (!hand?.length || count <= 0) {\r\n\t\treturn [];\r\n\t}\r\n\tconst scored = hand.map((entity, index) => ({ entity, index })).filter(({ entity }) => isMinionInHand(entity));\r\n\tconst randomized = shuffleArray(scored);\r\n\trandomized.sort((a, b) => {\r\n\t\tconst atkDiff = (b.entity.attack ?? 0) - (a.entity.attack ?? 0);\r\n\t\tif (atkDiff !== 0) {\r\n\t\t\treturn atkDiff;\r\n\t\t}\r\n\t\t// UPDATE 2026-04-21: it doesn't look like we want to pick the earliest in hand anymore in case of ties\r\n\t\treturn 0; //a.index - b.index;\r\n\t});\r\n\treturn randomized.slice(0, count).map((s) => s.entity);\r\n};\r\n\r\nexport const isHandMinionCandidate = (\r\n\tentity: BoardEntity,\r\n\tcardTypeUpper: (id: string) => string | undefined,\r\n): boolean => {\r\n\treturn !!entity?.cardId && !entity.locked && cardTypeUpper(entity.cardId) === CardType[CardType.MINION];\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawns.js","sourceRoot":"","sources":["../../src/simulation/spawns.ts"],"names":[],"mappings":";;;AAEA,+DAAkF;AAClF,qCAA0C;AAE1C,6CAAqD;AAE9C,MAAM,mBAAmB,GAAG,CAClC,iBAAyC,EACzC,qBAAoC,EACpC,yBAA0C,EAC1C,iBAA+D,EAC/D,+BAAuC,EACvC,aAA4B,EAC5B,iBAAkC,EAClC,SAAwB,EACxB,cAAc,GAAG,IAAI,EACrB,cAA2B,IAAI,EACN,EAAE;;IAC3B,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACvG,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAElC,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAA,kCAAqB,EAAC,YAAY,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC;aACpG;YACD,MAAM;SACN;QAKD,+BAA+B,GAAG,MAAA,SAAS,CAAC,mBAAmB,mCAAI,+BAA+B,CAAC;QACnG,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,MAAM,GAAG,+BAA+B,CAAC,CAAC;QACnG,IAAA,sCAAgB,EACf,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,SAAS,EACT,cAAc,CACd,CAAC;QACF,IAAI,SAAS,CAAC,iBAAiB,EAAE;YAEhC,MAAM,cAAc,GAAG,IAAA,uBAAc,EACpC,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,EAAE,WAAW,EAAE,WAAW,EAAE,CAC5B,CAAC;YAKF,IAAI,cAAc,EAAE;gBACnB,cAAc,CAAC,iBAAiB,GAAG,KAAK,CAAC;aACzC;iBAEI;gBACJ,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC;aACpC;SACD;
|
|
1
|
+
{"version":3,"file":"spawns.js","sourceRoot":"","sources":["../../src/simulation/spawns.ts"],"names":[],"mappings":";;;AAEA,+DAAkF;AAClF,qCAA0C;AAE1C,6CAAqD;AAE9C,MAAM,mBAAmB,GAAG,CAClC,iBAAyC,EACzC,qBAAoC,EACpC,yBAA0C,EAC1C,iBAA+D,EAC/D,+BAAuC,EACvC,aAA4B,EAC5B,iBAAkC,EAClC,SAAwB,EACxB,cAAc,GAAG,IAAI,EACrB,cAA2B,IAAI,EACN,EAAE;;IAC3B,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACvG,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAElC,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAA,kCAAqB,EAAC,YAAY,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC;aACpG;YACD,MAAM;SACN;QAKD,+BAA+B,GAAG,MAAA,SAAS,CAAC,mBAAmB,mCAAI,+BAA+B,CAAC;QACnG,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,MAAM,GAAG,+BAA+B,CAAC,CAAC;QACnG,IAAA,sCAAgB,EACf,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,SAAS,EACT,cAAc,CACd,CAAC;QACF,IAAI,SAAS,CAAC,iBAAiB,EAAE;YAEhC,MAAM,cAAc,GAAG,IAAA,uBAAc,EACpC,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,EAAE,WAAW,EAAE,WAAW,EAAE,CAC5B,CAAC;YAKF,IAAI,cAAc,EAAE;gBACnB,cAAc,CAAC,iBAAiB,GAAG,KAAK,CAAC;aACzC;iBAEI;gBACJ,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC;aACpC;SACD;QAMD,IAAA,6CAAuB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,CAAC,SAAS,CAAC,EACX,SAAS,CACT,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YACtD,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAChC;KACD;IAED,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAAC;IACpG,OAAO,eAAe,CAAC;AACxB,CAAC,CAAC;AAjFW,QAAA,mBAAmB,uBAiF9B","sourcesContent":["import { BgsPlayerEntity, BoardTrinket } from '../bgs-player-entity';\r\nimport { BoardEntity } from '../board-entity';\r\nimport { addMinionToBoard, handleAfterSpawnEffects } from './add-minion-to-board';\r\nimport { simulateAttack } from './attack';\r\nimport { FullGameState } from './internal-game-state';\r\nimport { onMinionFailedToSpawn } from './spawn-fail';\r\n\r\nexport const performEntitySpawns = (\r\n\tcandidateEntities: readonly BoardEntity[],\r\n\tboardWithKilledMinion: BoardEntity[],\r\n\tboardWithKilledMinionHero: BgsPlayerEntity,\r\n\tspawnSourceEntity: BoardEntity | BgsPlayerEntity | BoardTrinket,\r\n\tspawnSourceEntityIndexFromRight: number,\r\n\topponentBoard: BoardEntity[],\r\n\topponentBoardHero: BgsPlayerEntity,\r\n\tgameState: FullGameState,\r\n\tapplySelfAuras = true,\r\n\tforceTarget: BoardEntity = null,\r\n): readonly BoardEntity[] => {\r\n\tconst aliveEntites = candidateEntities.filter((entity) => entity.health > 0 && !entity.definitelyDead);\r\n\tconst spawnedEntities = [];\r\n\tfor (let i = 0; i < aliveEntites.length; i++) {\r\n\t\tconst newMinion = aliveEntites[i];\r\n\t\t// All entities have been spawned\r\n\t\tif (boardWithKilledMinion.length >= 7) {\r\n\t\t\tfor (let j = i; j < aliveEntites.length; j++) {\r\n\t\t\t\tonMinionFailedToSpawn(aliveEntites[j], boardWithKilledMinion, boardWithKilledMinionHero, gameState);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t// Avoid minions spawning backwards (we don't have this issue if we add all elements at\r\n\t\t// the same time, but here we want to be able to attack after each spawn, which in turn\r\n\t\t// means that the minion can die before the other one spawns)\r\n\t\t// In boardWithKilledMinion, the dead minion has already been removed\r\n\t\tspawnSourceEntityIndexFromRight = newMinion.spawnIndexFromRight ?? spawnSourceEntityIndexFromRight;\r\n\t\tconst indexToSpawnAt = Math.max(0, boardWithKilledMinion.length - spawnSourceEntityIndexFromRight);\r\n\t\taddMinionToBoard(\r\n\t\t\tboardWithKilledMinion,\r\n\t\t\tboardWithKilledMinionHero,\r\n\t\t\topponentBoard,\r\n\t\t\topponentBoardHero,\r\n\t\t\tindexToSpawnAt,\r\n\t\t\tnewMinion,\r\n\t\t\tgameState,\r\n\t\t\tapplySelfAuras,\r\n\t\t);\r\n\t\tif (newMinion.attackImmediately) {\r\n\t\t\t// Whenever we are already in a combat phase, we need to first clean up the state\r\n\t\t\tconst actualAttacker = simulateAttack(\r\n\t\t\t\tboardWithKilledMinion,\r\n\t\t\t\tboardWithKilledMinionHero,\r\n\t\t\t\topponentBoard,\r\n\t\t\t\topponentBoardHero,\r\n\t\t\t\tgameState,\r\n\t\t\t\t{ forceTarget: forceTarget },\r\n\t\t\t);\r\n\t\t\t// So that, even if the opponent's board is temporarily empty (e.g. no minion, but a token will\r\n\t\t\t// spawn in the enchantments resolution phase), the minion won't attack right away again\r\n\t\t\t// In case of attack immediately + multiple spawns minins, it's possible that the minion for which\r\n\t\t\t// we triggered the attack simulation was not the one who actually attacked\r\n\t\t\tif (actualAttacker) {\r\n\t\t\t\tactualAttacker.attackImmediately = false;\r\n\t\t\t}\r\n\t\t\t// Can happen if the attackImmediately minion spawns first, opponent board is empty, then opponent minino spawns\r\n\t\t\telse {\r\n\t\t\t\tnewMinion.attackImmediately = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// See https://replays.firestoneapp.com/?reviewId=aa23c9a3-2851-4c50-81b4-2d47d228a8fc&turn=7&action=4\r\n\t\t// Attack immediately resolves first, then the \"after spawn\"\r\n\t\t// 2026-04-21: it looks like this isn't how it works anymore, the Stalwart Kodo now procs before the \"attack\r\n\t\t// immediately\"\r\n\t\t// https://replays.firestoneapp.com/?reviewId=124fdc93-41db-4994-a66a-692fb525d47f&turn=27&action=1\r\n\t\thandleAfterSpawnEffects(\r\n\t\t\tboardWithKilledMinion,\r\n\t\t\tboardWithKilledMinionHero,\r\n\t\t\topponentBoard,\r\n\t\t\topponentBoardHero,\r\n\t\t\t[newMinion],\r\n\t\t\tgameState,\r\n\t\t);\r\n\t\tif (newMinion.health > 0 && !newMinion.definitelyDead) {\r\n\t\t\tspawnedEntities.push(newMinion);\r\n\t\t}\r\n\t}\r\n\r\n\tgameState.spectator.registerMinionsSpawn(spawnSourceEntity, boardWithKilledMinion, spawnedEntities);\r\n\treturn spawnedEntities;\r\n};\r\n"]}
|