@firestone-hs/simulate-bgs-battle 1.1.747 → 1.1.749

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.
Files changed (91) hide show
  1. package/dist/cards/card.interface.d.ts +19 -1
  2. package/dist/cards/card.interface.js +12 -2
  3. package/dist/cards/card.interface.js.map +1 -1
  4. package/dist/cards/impl/_card-mappings.js +8 -2
  5. package/dist/cards/impl/_card-mappings.js.map +1 -1
  6. package/dist/cards/impl/bg-spell/mighty-dragonbreath.js +3 -1
  7. package/dist/cards/impl/bg-spell/mighty-dragonbreath.js.map +1 -1
  8. package/dist/cards/impl/enchantments/deaths-embrace.d.ts +2 -2
  9. package/dist/cards/impl/enchantments/deaths-embrace.js +35 -6
  10. package/dist/cards/impl/enchantments/deaths-embrace.js.map +1 -1
  11. package/dist/cards/impl/enchantments/spell-siphon.d.ts +2 -0
  12. package/dist/cards/impl/enchantments/spell-siphon.js +22 -0
  13. package/dist/cards/impl/enchantments/spell-siphon.js.map +1 -0
  14. package/dist/cards/impl/minion/captain-cookie.d.ts +2 -0
  15. package/dist/cards/impl/minion/captain-cookie.js +14 -0
  16. package/dist/cards/impl/minion/captain-cookie.js.map +1 -0
  17. package/dist/cards/impl/minion/devout-hellcaller.js +1 -1
  18. package/dist/cards/impl/minion/devout-hellcaller.js.map +1 -1
  19. package/dist/cards/impl/minion/diremuck-forager.js +4 -1
  20. package/dist/cards/impl/minion/diremuck-forager.js.map +1 -1
  21. package/dist/cards/impl/minion/drustfallen-butcher.js +1 -1
  22. package/dist/cards/impl/minion/drustfallen-butcher.js.map +1 -1
  23. package/dist/cards/impl/minion/eredar-escapist.js +5 -21
  24. package/dist/cards/impl/minion/eredar-escapist.js.map +1 -1
  25. package/dist/cards/impl/minion/expert-aviator.js +1 -1
  26. package/dist/cards/impl/minion/expert-aviator.js.map +1 -1
  27. package/dist/cards/impl/minion/fire-forged-evoker.js +1 -1
  28. package/dist/cards/impl/minion/fire-forged-evoker.js.map +1 -1
  29. package/dist/cards/impl/minion/forsaken-weaver.js +1 -1
  30. package/dist/cards/impl/minion/forsaken-weaver.js.map +1 -1
  31. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js +1 -1
  32. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js.map +1 -1
  33. package/dist/cards/impl/minion/jailbird-juggernaut.js +1 -4
  34. package/dist/cards/impl/minion/jailbird-juggernaut.js.map +1 -1
  35. package/dist/cards/impl/minion/sanguine-champion.d.ts +2 -0
  36. package/dist/cards/impl/minion/sanguine-champion.js +21 -0
  37. package/dist/cards/impl/minion/sanguine-champion.js.map +1 -0
  38. package/dist/cards/impl/minion/sanguine-refiner.js +1 -1
  39. package/dist/cards/impl/minion/sanguine-refiner.js.map +1 -1
  40. package/dist/cards/impl/minion/showy-cyclist.d.ts +2 -2
  41. package/dist/cards/impl/minion/showy-cyclist.js +9 -3
  42. package/dist/cards/impl/minion/showy-cyclist.js.map +1 -1
  43. package/dist/cards/impl/minion/soul-rewinder.js +3 -2
  44. package/dist/cards/impl/minion/soul-rewinder.js.map +1 -1
  45. package/dist/cards/impl/minion/tasty-lobster.d.ts +2 -0
  46. package/dist/cards/impl/minion/tasty-lobster.js +5 -3
  47. package/dist/cards/impl/minion/tasty-lobster.js.map +1 -1
  48. package/dist/cards/impl/minion/tichondrius.js +1 -1
  49. package/dist/cards/impl/minion/tichondrius.js.map +1 -1
  50. package/dist/cards/impl/minion/utility-drone.js +1 -1
  51. package/dist/cards/impl/minion/utility-drone.js.map +1 -1
  52. package/dist/cards/impl/minion/wildfire-elemental.js +8 -3
  53. package/dist/cards/impl/minion/wildfire-elemental.js.map +1 -1
  54. package/dist/cards/impl/trinket/all-purpose-kibble.js +3 -2
  55. package/dist/cards/impl/trinket/all-purpose-kibble.js.map +1 -1
  56. package/dist/cards/impl/trinket/archaic-scroll.js +1 -1
  57. package/dist/cards/impl/trinket/archaic-scroll.js.map +1 -1
  58. package/dist/cards/impl/trinket/bubble-crown.js +1 -1
  59. package/dist/cards/impl/trinket/bubble-crown.js.map +1 -1
  60. package/dist/cards/impl/trinket/lionfish-portrait.js +3 -2
  61. package/dist/cards/impl/trinket/lionfish-portrait.js.map +1 -1
  62. package/dist/cards/impl/trinket/miniature-ship.js +1 -1
  63. package/dist/cards/impl/trinket/miniature-ship.js.map +1 -1
  64. package/dist/cards/impl/trinket/stormcoil-sticker.js +2 -1
  65. package/dist/cards/impl/trinket/stormcoil-sticker.js.map +1 -1
  66. package/dist/cards/impl/trinket/training-certificate.js +1 -1
  67. package/dist/cards/impl/trinket/training-certificate.js.map +1 -1
  68. package/dist/cards/impl/trinket/trusty-crowbar.js +1 -1
  69. package/dist/cards/impl/trinket/trusty-crowbar.js.map +1 -1
  70. package/dist/simulation/add-minion-to-board.js +34 -10
  71. package/dist/simulation/add-minion-to-board.js.map +1 -1
  72. package/dist/simulation/attack.d.ts +1 -0
  73. package/dist/simulation/attack.js +12 -8
  74. package/dist/simulation/attack.js.map +1 -1
  75. package/dist/simulation/auras.js +4 -1
  76. package/dist/simulation/auras.js.map +1 -1
  77. package/dist/simulation/battlecries.js +0 -6
  78. package/dist/simulation/battlecries.js.map +1 -1
  79. package/dist/simulation/deathrattle-spawns.js +0 -6
  80. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  81. package/dist/simulation/global-info-helpers.js +11 -0
  82. package/dist/simulation/global-info-helpers.js.map +1 -1
  83. package/dist/simulation/minion-kill.d.ts +1 -1
  84. package/dist/simulation/minion-kill.js +2 -1
  85. package/dist/simulation/minion-kill.js.map +1 -1
  86. package/dist/simulation/remove-minion-from-board.js +12 -0
  87. package/dist/simulation/remove-minion-from-board.js.map +1 -1
  88. package/dist/simulation/utils/golden.d.ts +9 -0
  89. package/dist/simulation/utils/golden.js +14 -0
  90. package/dist/simulation/utils/golden.js.map +1 -1
  91. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"utility-drone.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/utility-drone.ts"],"names":[],"mappings":";;;AAEA,6DAAkE;AAClE,qDAAwD;AAG3C,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,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,MAAM,cAAc,GAAG,IAAA,6BAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,cAAc,GAAG,CAAC,EAAE;gBACvB,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getMagnetizations } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const UtilityDrone: EndOfTurnCard = {\r\n\tcardIds: [CardIds.UtilityDrone_BG26_152, CardIds.UtilityDrone_BG26_152_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.UtilityDrone_BG26_152_G ? 2 : 1;\r\n\t\tfor (const target of input.board) {\r\n\t\t\tconst magnetizations = getMagnetizations(target, input.gameState);\r\n\t\t\tif (magnetizations > 0) {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\t4 * magnetizations * mult,\r\n\t\t\t\t\t4 * magnetizations * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"utility-drone.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/utility-drone.ts"],"names":[],"mappings":";;;AAEA,6DAAkE;AAClE,qDAAwD;AAG3C,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,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjC,MAAM,cAAc,GAAG,IAAA,6BAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,cAAc,GAAG,CAAC,EAAE;gBACvB,IAAA,mBAAW,EACV,MAAM,EACN,MAAM,EACN,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,CAAC,GAAG,cAAc,GAAG,IAAI,EACzB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,SAAS,CACf,CAAC;aACF;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { getMagnetizations } from '../../../simulation/magnetize';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { EndOfTurnCard, EndOfTurnInput } from '../../card.interface';\r\n\r\nexport const UtilityDrone: EndOfTurnCard = {\r\n\tcardIds: [CardIds.UtilityDrone_BG26_152, CardIds.UtilityDrone_BG26_152_G],\r\n\tendOfTurn: (minion: BoardEntity, input: EndOfTurnInput) => {\r\n\t\tconst mult = minion.cardId === CardIds.UtilityDrone_BG26_152_G ? 2 : 1;\r\n\t\tfor (const target of input.board) {\r\n\t\t\tconst magnetizations = getMagnetizations(target, input.gameState);\r\n\t\t\tif (magnetizations > 0) {\r\n\t\t\t\tmodifyStats(\r\n\t\t\t\t\ttarget,\r\n\t\t\t\t\tminion,\r\n\t\t\t\t\t4 * magnetizations * mult,\r\n\t\t\t\t\t5 * magnetizations * mult,\r\n\t\t\t\t\tinput.board,\r\n\t\t\t\t\tinput.hero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -8,17 +8,22 @@ exports.WildfireElemental = {
8
8
  if (input.killer !== minion || !input.killerIsAttacking) {
9
9
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
10
10
  }
11
+ const hadVenomous = input.hadVenomous;
11
12
  const excessDamage = -input.minionKilled.health;
12
13
  let damageDoneByAttacker = 0;
13
14
  if (input.defenderNeighbours.length > 0) {
14
15
  if (minion.cardId === "BGS_126") {
15
16
  const randomTarget = input.defenderNeighbours[Math.floor(Math.random() * input.defenderNeighbours.length)];
17
+ input.minionKilled.lastAffectedByEntity.venomous = hadVenomous;
16
18
  damageDoneByAttacker += (0, attack_1.dealDamageToMinion)(randomTarget, input.defendingBoard, input.defendingHero, input.minionKilled.lastAffectedByEntity, excessDamage, input.attackingBoard, input.attackingHero, input.gameState);
19
+ input.minionKilled.lastAffectedByEntity.venomous = false;
17
20
  }
18
21
  else {
19
- damageDoneByAttacker += input.defenderNeighbours
20
- .map((neighbour) => (0, attack_1.dealDamageToMinion)(neighbour, input.defendingBoard, input.defendingHero, input.minionKilled.lastAffectedByEntity, excessDamage, input.attackingBoard, input.attackingHero, input.gameState))
21
- .reduce((a, b) => a + b, 0);
22
+ for (const neighbour of input.defenderNeighbours) {
23
+ input.minionKilled.lastAffectedByEntity.venomous = hadVenomous;
24
+ damageDoneByAttacker += (0, attack_1.dealDamageToMinion)(neighbour, input.defendingBoard, input.defendingHero, input.minionKilled.lastAffectedByEntity, excessDamage, input.attackingBoard, input.attackingHero, input.gameState);
25
+ input.minionKilled.lastAffectedByEntity.venomous = false;
26
+ }
22
27
  }
23
28
  }
24
29
  return { dmgDoneByAttacker: damageDoneByAttacker, dmgDoneByDefender: 0 };
@@ -1 +1 @@
1
- {"version":3,"file":"wildfire-elemental.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/wildfire-elemental.ts"],"names":[],"mappings":";;;AAEA,uDAAqF;AAGxE,QAAA,iBAAiB,GAAuB;IACpD,OAAO,EAAE,8BAA8E;IACvF,cAAc,EAAE,CACf,MAAmB,EACnB,KAA0B,EACiC,EAAE;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACxD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;QAChD,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YACxC,IAAI,MAAM,CAAC,MAAM,cAAsC,EAAE;gBACxD,MAAM,YAAY,GACjB,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvF,oBAAoB,IAAI,IAAA,2BAAkB,EACzC,YAAY,EACZ,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CAAC,oBAAoB,EACvC,YAAY,EACZ,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;aACF;iBAAM;gBACN,oBAAoB,IAAI,KAAK,CAAC,kBAAkB;qBAC9C,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAClB,IAAA,2BAAkB,EACjB,SAAS,EACT,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CAAC,oBAAoB,EACvC,YAAY,EACZ,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CACD;qBACA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;aAC7B;SACD;QACD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IAC1E,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\nimport { BoardEntity } from '../../../board-entity';\r\nimport { dealDamageToMinion, OnMinionKilledInput } from '../../../simulation/attack';\r\nimport { OnMinionKilledCard } from '../../card.interface';\r\n\r\nexport const WildfireElemental: OnMinionKilledCard = {\r\n\tcardIds: [CardIds.WildfireElemental_BGS_126, CardIds.WildfireElemental_TB_BaconUps_166],\r\n\tonMinionKilled: (\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnMinionKilledInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tif (input.killer !== minion || !input.killerIsAttacking) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst excessDamage = -input.minionKilled.health;\r\n\t\tlet damageDoneByAttacker = 0;\r\n\t\t// console.log('neighbours', stringifySimple(neighbours, allCards));\r\n\t\tif (input.defenderNeighbours.length > 0) {\r\n\t\t\tif (minion.cardId === CardIds.WildfireElemental_BGS_126) {\r\n\t\t\t\tconst randomTarget =\r\n\t\t\t\t\tinput.defenderNeighbours[Math.floor(Math.random() * input.defenderNeighbours.length)];\r\n\t\t\t\tdamageDoneByAttacker += dealDamageToMinion(\r\n\t\t\t\t\trandomTarget,\r\n\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\tinput.minionKilled.lastAffectedByEntity,\r\n\t\t\t\t\texcessDamage,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tdamageDoneByAttacker += input.defenderNeighbours\r\n\t\t\t\t\t.map((neighbour) =>\r\n\t\t\t\t\t\tdealDamageToMinion(\r\n\t\t\t\t\t\t\tneighbour,\r\n\t\t\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\t\t\tinput.minionKilled.lastAffectedByEntity,\r\n\t\t\t\t\t\t\texcessDamage,\r\n\t\t\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t)\r\n\t\t\t\t\t.reduce((a, b) => a + b, 0);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: damageDoneByAttacker, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"wildfire-elemental.js","sourceRoot":"","sources":["../../../../src/cards/impl/minion/wildfire-elemental.ts"],"names":[],"mappings":";;;AAEA,uDAAqF;AAGxE,QAAA,iBAAiB,GAAuB;IACpD,OAAO,EAAE,8BAA8E;IACvF,cAAc,EAAE,CACf,MAAmB,EACnB,KAA0B,EACiC,EAAE;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACxD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACtC,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;QAChD,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YACxC,IAAI,MAAM,CAAC,MAAM,cAAsC,EAAE;gBACxD,MAAM,YAAY,GACjB,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvF,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,QAAQ,GAAG,WAAW,CAAC;gBAC/D,oBAAoB,IAAI,IAAA,2BAAkB,EACzC,YAAY,EACZ,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CAAC,oBAAoB,EACvC,YAAY,EACZ,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,QAAQ,GAAG,KAAK,CAAC;aACzD;iBAAM;gBACN,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,kBAAkB,EAAE;oBACjD,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,QAAQ,GAAG,WAAW,CAAC;oBAC/D,oBAAoB,IAAI,IAAA,2BAAkB,EACzC,SAAS,EACT,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CAAC,oBAAoB,EACvC,YAAY,EACZ,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;oBACF,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,QAAQ,GAAG,KAAK,CAAC;iBACzD;aACD;SACD;QACD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IAC1E,CAAC;CACD,CAAC","sourcesContent":["import { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { dealDamageToMinion, OnMinionKilledInput } from '../../../simulation/attack';\r\nimport { OnMinionKilledCard } from '../../card.interface';\r\n\r\nexport const WildfireElemental: OnMinionKilledCard = {\r\n\tcardIds: [CardIds.WildfireElemental_BGS_126, CardIds.WildfireElemental_TB_BaconUps_166],\r\n\tonMinionKilled: (\r\n\t\tminion: BoardEntity,\r\n\t\tinput: OnMinionKilledInput,\r\n\t): { dmgDoneByAttacker: number; dmgDoneByDefender: number } => {\r\n\t\tif (input.killer !== minion || !input.killerIsAttacking) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst hadVenomous = input.hadVenomous;\r\n\t\tconst excessDamage = -input.minionKilled.health;\r\n\t\tlet damageDoneByAttacker = 0;\r\n\t\t// console.log('neighbours', stringifySimple(neighbours, allCards));\r\n\t\tif (input.defenderNeighbours.length > 0) {\r\n\t\t\tif (minion.cardId === CardIds.WildfireElemental_BGS_126) {\r\n\t\t\t\tconst randomTarget =\r\n\t\t\t\t\tinput.defenderNeighbours[Math.floor(Math.random() * input.defenderNeighbours.length)];\r\n\t\t\t\tinput.minionKilled.lastAffectedByEntity.venomous = hadVenomous;\r\n\t\t\t\tdamageDoneByAttacker += dealDamageToMinion(\r\n\t\t\t\t\trandomTarget,\r\n\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\tinput.minionKilled.lastAffectedByEntity,\r\n\t\t\t\t\texcessDamage,\r\n\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.minionKilled.lastAffectedByEntity.venomous = false;\r\n\t\t\t} else {\r\n\t\t\t\tfor (const neighbour of input.defenderNeighbours) {\r\n\t\t\t\t\tinput.minionKilled.lastAffectedByEntity.venomous = hadVenomous;\r\n\t\t\t\t\tdamageDoneByAttacker += dealDamageToMinion(\r\n\t\t\t\t\t\tneighbour,\r\n\t\t\t\t\t\tinput.defendingBoard,\r\n\t\t\t\t\t\tinput.defendingHero,\r\n\t\t\t\t\t\tinput.minionKilled.lastAffectedByEntity,\r\n\t\t\t\t\t\texcessDamage,\r\n\t\t\t\t\t\tinput.attackingBoard,\r\n\t\t\t\t\t\tinput.attackingHero,\r\n\t\t\t\t\t\tinput.gameState,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tinput.minionKilled.lastAffectedByEntity.venomous = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn { dmgDoneByAttacker: damageDoneByAttacker, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -4,15 +4,16 @@ exports.AllPurposeKibble = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const stats_1 = require("../../../simulation/stats");
6
6
  const utils_1 = require("../../../utils");
7
+ const attackBuff = 3;
7
8
  exports.AllPurposeKibble = {
8
9
  cardIds: ["BG32_MagicItem_200"],
9
10
  onWheneverAnotherMinionAttacks: (trinket, input) => {
10
11
  if (!(0, utils_1.hasCorrectTribe)(input.attacker, input.attackingHero, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
11
12
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
12
13
  }
13
- const buff = trinket.scriptDataNum1 || 2;
14
+ const buff = (trinket.scriptDataNum1 || 0) + attackBuff;
14
15
  (0, stats_1.modifyStats)(input.attacker, trinket, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);
15
- trinket.scriptDataNum1 = (trinket.scriptDataNum1 || 2) + 2;
16
+ trinket.scriptDataNum1 = buff + attackBuff;
16
17
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
17
18
  },
18
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"all-purpose-kibble.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/all-purpose-kibble.ts"],"names":[],"mappings":";;;AACA,iEAAoD;AAGpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,gBAAgB,GAAuC;IACnE,OAAO,EAAE,sBAA6C;IACtD,8BAA8B,EAAE,CAAC,OAAqB,EAAE,KAAoB,EAAE,EAAE;QAC/E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;QACzC,IAAA,mBAAW,EAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1G,OAAO,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { CardIds } from '../../../services/card-ids';\nimport { Race } from '@firestone-hs/reference-data';\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnWheneverAnotherMinionAttacksCard } from '../../card.interface';\r\n\r\nexport const AllPurposeKibble: OnWheneverAnotherMinionAttacksCard = {\r\n\tcardIds: [CardIds.AllPurposeKibble_BG32_MagicItem_200],\r\n\tonWheneverAnotherMinionAttacks: (trinket: BoardTrinket, input: OnAttackInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.attacker,\r\n\t\t\t\tinput.attackingHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = trinket.scriptDataNum1 || 2;\r\n\t\tmodifyStats(input.attacker, trinket, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 || 2) + 2;\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"all-purpose-kibble.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/all-purpose-kibble.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGjD,MAAM,UAAU,GAAG,CAAC,CAAC;AAER,QAAA,gBAAgB,GAAuC;IACnE,OAAO,EAAE,sBAA6C;IACtD,8BAA8B,EAAE,CAAC,OAAqB,EAAE,KAAoB,EAAE,EAAE;QAC/E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC;QACxD,IAAA,mBAAW,EAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1G,OAAO,CAAC,cAAc,GAAG,IAAI,GAAG,UAAU,CAAC;QAC3C,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnWheneverAnotherMinionAttacksCard } from '../../card.interface';\r\n\r\nconst attackBuff = 3;\r\n\r\nexport const AllPurposeKibble: OnWheneverAnotherMinionAttacksCard = {\r\n\tcardIds: [CardIds.AllPurposeKibble_BG32_MagicItem_200],\r\n\tonWheneverAnotherMinionAttacks: (trinket: BoardTrinket, input: OnAttackInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.attacker,\r\n\t\t\t\tinput.attackingHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tconst buff = (trinket.scriptDataNum1 || 0) + attackBuff;\r\n\t\tmodifyStats(input.attacker, trinket, buff, 0, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\ttrinket.scriptDataNum1 = buff + attackBuff;\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ArchaicScroll = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
- const spellsToCast = 7;
6
+ const spellsToCast = 8;
7
7
  exports.ArchaicScroll = {
8
8
  cardIds: ["BG32_MagicItem_930"],
9
9
  afterTavernSpellCast: (trinket, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"archaic-scroll.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/archaic-scroll.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qEAAmE;AAGnE,MAAM,YAAY,GAAG,CAAC,CAAC;AAEV,QAAA,aAAa,GAA6B;IACtD,OAAO,EAAE,sBAA0C;IACnD,oBAAoB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QACpF,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,qBAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACtF,IAAI,MAAM,EAAE;gBACX,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACnE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nconst spellsToCast = 7;\r\n\r\nexport const ArchaicScroll: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.ArchaicScroll_BG32_MagicItem_930],\r\n\tafterTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? spellsToCast) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tconst tier = input.hero.tavernTier ?? 6;\r\n\t\t\tconst cardId = input.gameState.cardsData.getRandomMinionForTribe(Race.NAGA, tier, []);\r\n\t\t\tif (cardId) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [cardId], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"archaic-scroll.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/archaic-scroll.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qEAAmE;AAGnE,MAAM,YAAY,GAAG,CAAC,CAAC;AAEV,QAAA,aAAa,GAA6B;IACtD,OAAO,EAAE,sBAA0C;IACnD,oBAAoB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QACpF,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,qBAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACtF,IAAI,MAAM,EAAE;gBACX,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACnE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { AfterTavernSpellCastCard, CastSpellInput } from '../../card.interface';\r\n\r\nconst spellsToCast = 8;\r\n\r\nexport const ArchaicScroll: AfterTavernSpellCastCard = {\r\n\tcardIds: [CardIds.ArchaicScroll_BG32_MagicItem_930],\r\n\tafterTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? spellsToCast) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tconst tier = input.hero.tavernTier ?? 6;\r\n\t\t\tconst cardId = input.gameState.cardsData.getRandomMinionForTribe(Race.NAGA, tier, []);\r\n\t\t\tif (cardId) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [cardId], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BubbleCrown = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
- const spellsToCast = 12;
5
+ const spellsToCast = 14;
6
6
  exports.BubbleCrown = {
7
7
  cardIds: ["BG35_MagicItem_920"],
8
8
  onBeforeTavernSpellCast: (trinket, input) => {
@@ -1 +1 @@
1
- {"version":3,"file":"bubble-crown.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/bubble-crown.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAMvD,MAAM,YAAY,GAAG,EAAE,CAAC;AAEX,QAAA,WAAW,GAAgC;IACvD,OAAO,EAAE,sBAAwC;IAGjD,uBAAuB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QAEvF,IAAI,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAG,wBAAO,CAAC,cAAc,CAAC,MAAK,CAAC,EAAE;YACjD,OAAO;SACP;QAgBD,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,wBAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SACzC;IACF,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { CastSpellInput, OnBeforeTavernSpellCastCard } from '../../card.interface';\r\n\r\nconst spellsToCast = 12;\r\n\r\nexport const BubbleCrown: OnBeforeTavernSpellCastCard = {\r\n\tcardIds: [CardIds.BubbleCrown_BG35_MagicItem_920],\r\n\t// This seems to trigger before the first spell is cast\r\n\t// https://replays.firestoneapp.com/?reviewId=2503f562-e0e1-4564-8218-d36cbf09cbb0&turn=17&action=2\r\n\tonBeforeTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\t// It has already triggered once\r\n\t\tif (trinket.tags?.[GameTag.TRIGGER_VISUAL] === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// When we get the board state from the opponent, sometimes we have the trinket at 0, and this seems to mean that\r\n\t\t// it will proc on the next spell (eg https://replays.firestoneapp.com/?reviewId=0cff125a-7419-40c6-8c50-edfba59d1559&turn=17&action=4)\r\n\t\t/*\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - SHOW_ENTITY - Updating Entity=[entityName=泡泡王冠 id=6141 zone=SETASIDE zonePos=0 cardId=BG35_MagicItem_920 player=4] CardID=BG35_MagicItem_920\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - tag=TAG_SCRIPT_DATA_NUM_1 value=0\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=赶潮纳迦 id=6449 zone=PLAY zonePos=5 cardId=BG34_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=DEATHRATTLE\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=泡泡王冠 id=6141 zone=PLAY zonePos=0 cardId=BG35_MagicItem_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=TRIGGER_VISUAL\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_ATTACK_INCREASE value=5 \r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_HEALTH_INCREASE value=5 \r\n\t\t\t...\r\n\t\t*/\r\n\t\t// I'm not yet sure if this only happens under specific conditions\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? 0) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tinput.hero.globalInfo.TavernSpellAttackBuff += 4;\r\n\t\t\tinput.hero.globalInfo.TavernSpellHealthBuff += 4;\r\n\t\t\ttrinket.tags[GameTag.TRIGGER_VISUAL] = 0;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"bubble-crown.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/bubble-crown.ts"],"names":[],"mappings":";;;AAAA,iEAAuD;AAMvD,MAAM,YAAY,GAAG,EAAE,CAAC;AAEX,QAAA,WAAW,GAAgC;IACvD,OAAO,EAAE,sBAAwC;IAGjD,uBAAuB,EAAE,CAAC,OAAmC,EAAE,KAAqB,EAAE,EAAE;;QAEvF,IAAI,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAG,wBAAO,CAAC,cAAc,CAAC,MAAK,CAAC,EAAE;YACjD,OAAO;SACP;QAgBD,OAAO,CAAC,cAAc,GAAG,CAAC,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,wBAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SACzC;IACF,CAAC;CACD,CAAC","sourcesContent":["import { GameTag } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { CastSpellInput, OnBeforeTavernSpellCastCard } from '../../card.interface';\r\n\r\nconst spellsToCast = 14;\r\n\r\nexport const BubbleCrown: OnBeforeTavernSpellCastCard = {\r\n\tcardIds: [CardIds.BubbleCrown_BG35_MagicItem_920],\r\n\t// This seems to trigger before the first spell is cast\r\n\t// https://replays.firestoneapp.com/?reviewId=2503f562-e0e1-4564-8218-d36cbf09cbb0&turn=17&action=2\r\n\tonBeforeTavernSpellCast: (trinket: BoardTrinket | BoardEntity, input: CastSpellInput) => {\r\n\t\t// It has already triggered once\r\n\t\tif (trinket.tags?.[GameTag.TRIGGER_VISUAL] === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// When we get the board state from the opponent, sometimes we have the trinket at 0, and this seems to mean that\r\n\t\t// it will proc on the next spell (eg https://replays.firestoneapp.com/?reviewId=0cff125a-7419-40c6-8c50-edfba59d1559&turn=17&action=4)\r\n\t\t/*\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - SHOW_ENTITY - Updating Entity=[entityName=泡泡王冠 id=6141 zone=SETASIDE zonePos=0 cardId=BG35_MagicItem_920 player=4] CardID=BG35_MagicItem_920\r\n\t\t\tD 20:39:27.1063034 PowerTaskList.DebugPrintPower() - tag=TAG_SCRIPT_DATA_NUM_1 value=0\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=赶潮纳迦 id=6449 zone=PLAY zonePos=5 cardId=BG34_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=DEATHRATTLE\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=[entityName=泡泡王冠 id=6141 zone=PLAY zonePos=0 cardId=BG35_MagicItem_920 player=12] EffectCardId=System.Collections.Generic.List`1[System.String] EffectIndex=0 Target=0 SubOption=-1 TriggerKeyword=TRIGGER_VISUAL\r\n\t\t\t...\r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_ATTACK_INCREASE value=5 \r\n\t\t\tD 20:39:27.1643122 GameState.DebugPrintPower() - TAG_CHANGE Entity=wellwelc tag=TAVERN_SPELL_HEALTH_INCREASE value=5 \r\n\t\t\t...\r\n\t\t*/\r\n\t\t// I'm not yet sure if this only happens under specific conditions\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 ?? 0) - 1;\r\n\t\tif (trinket.scriptDataNum1 <= 0) {\r\n\t\t\ttrinket.scriptDataNum1 = spellsToCast;\r\n\t\t\tinput.hero.globalInfo.TavernSpellAttackBuff += 4;\r\n\t\t\tinput.hero.globalInfo.TavernSpellHealthBuff += 4;\r\n\t\t\ttrinket.tags[GameTag.TRIGGER_VISUAL] = 0;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -4,14 +4,15 @@ exports.LionfishPortrait = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const stats_1 = require("../../../simulation/stats");
6
6
  const utils_1 = require("../../../utils");
7
- const buff = 2;
7
+ const attackBuff = 4;
8
+ const healthBuff = 2;
8
9
  exports.LionfishPortrait = {
9
10
  cardIds: ["BG36_MagicItem_201"],
10
11
  onWheneverAnotherMinionAttacks: (trinket, input) => {
11
12
  if (!(0, utils_1.hasCorrectTribe)(input.attacker, input.attackingHero, reference_data_1.Race.BEAST, input.gameState.anomalies, input.gameState.allCards)) {
12
13
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
13
14
  }
14
- (0, stats_1.modifyStats)(input.attacker, trinket, buff, buff, input.attackingBoard, input.attackingHero, input.gameState);
15
+ (0, stats_1.modifyStats)(input.attacker, trinket, attackBuff, healthBuff, input.attackingBoard, input.attackingHero, input.gameState);
15
16
  return { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };
16
17
  },
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lionfish-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/lionfish-portrait.ts"],"names":[],"mappings":";;;AAMA,iEAAoD;AAGpD,qDAAwD;AACxD,0CAAiD;AAIjD,MAAM,IAAI,GAAG,CAAC,CAAC;AAEF,QAAA,gBAAgB,GAAuC;IACnE,OAAO,EAAE,sBAA6C;IACtD,8BAA8B,EAAE,CAAC,OAAqB,EAAE,KAAoB,EAAE,EAAE;QAC/E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,IAAA,mBAAW,EAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7G,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Lionfish Portrait (3 gold)\r\n * Get a Lurking Lionfish. Whenever a friendly Beast attacks, give it +2/+2.\r\n *\r\n * Only the second half is simulated; getting the Lionfish happens in the tavern.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnWheneverAnotherMinionAttacksCard } from '../../card.interface';\r\nimport { CardIds } from '../../../services/card-ids';\r\n\r\nconst buff = 2;\r\n\r\nexport const LionfishPortrait: OnWheneverAnotherMinionAttacksCard = {\r\n\tcardIds: [CardIds.LionfishPortrait_BG36_MagicItem_201],\r\n\tonWheneverAnotherMinionAttacks: (trinket: BoardTrinket, input: OnAttackInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.attacker,\r\n\t\t\t\tinput.attackingHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tmodifyStats(input.attacker, trinket, buff, buff, input.attackingBoard, input.attackingHero, input.gameState);\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"lionfish-portrait.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/lionfish-portrait.ts"],"names":[],"mappings":";;;AAMA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGjD,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,CAAC,CAAC;AAER,QAAA,gBAAgB,GAAuC;IACnE,OAAO,EAAE,sBAA6C;IACtD,8BAA8B,EAAE,CAAC,OAAqB,EAAE,KAAoB,EAAE,EAAE;QAC/E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,qBAAI,CAAC,KAAK,EACV,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;SACtD;QAED,IAAA,mBAAW,EACV,KAAK,CAAC,QAAQ,EACd,OAAO,EACP,UAAU,EACV,UAAU,EACV,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,SAAS,CACf,CAAC;QACF,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;CACD,CAAC","sourcesContent":["/**\r\n * Lionfish Portrait (3 gold)\r\n * Get a Lurking Lionfish. Whenever a friendly Beast attacks, give it +2/+2.\r\n *\r\n * Only the second half is simulated; getting the Lionfish happens in the tavern.\r\n */\r\nimport { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAttackInput } from '../../../simulation/on-attack';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnWheneverAnotherMinionAttacksCard } from '../../card.interface';\r\n\r\nconst attackBuff = 4;\r\nconst healthBuff = 2;\r\n\r\nexport const LionfishPortrait: OnWheneverAnotherMinionAttacksCard = {\r\n\tcardIds: [CardIds.LionfishPortrait_BG36_MagicItem_201],\r\n\tonWheneverAnotherMinionAttacks: (trinket: BoardTrinket, input: OnAttackInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.attacker,\r\n\t\t\t\tinput.attackingHero,\r\n\t\t\t\tRace.BEAST,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\r\n\t\t}\r\n\r\n\t\tmodifyStats(\r\n\t\t\tinput.attacker,\r\n\t\t\ttrinket,\r\n\t\t\tattackBuff,\r\n\t\t\thealthBuff,\r\n\t\t\tinput.attackingBoard,\r\n\t\t\tinput.attackingHero,\r\n\t\t\tinput.gameState,\r\n\t\t);\r\n\t\treturn { dmgDoneByAttacker: 0, dmgDoneByDefender: 0 };\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, 2, input.board, input.hero, input.gameState);
14
+ (0, stats_1.modifyStats)(entity, trinket, 3, 3, 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, 2, input.board, input.hero, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
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, 3, 3, input.board, input.hero, input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -3,13 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StormcoilSticker = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
5
  const cards_in_hand_1 = require("../../../simulation/cards-in-hand");
6
+ const threshold = 6;
6
7
  exports.StormcoilSticker = {
7
8
  cardIds: ["BG35_MagicItem_302"],
8
9
  onAfterFriendlyMinionDeath: (listener, input) => {
9
10
  var _a;
10
11
  const trinket = listener;
11
12
  trinket.scriptDataNum1 = (trinket.scriptDataNum1 || 0) + 1;
12
- if (trinket.scriptDataNum1 >= 8) {
13
+ if (trinket.scriptDataNum1 >= threshold) {
13
14
  trinket.scriptDataNum1 = 0;
14
15
  const randomMech = input.gameState.cardsData.getRandomMinionForTribe(reference_data_1.Race.MECH, (_a = input.hero.tavernTier) !== null && _a !== void 0 ? _a : 6, []);
15
16
  if (randomMech) {
@@ -1 +1 @@
1
- {"version":3,"file":"stormcoil-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/stormcoil-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAKpD,qEAAmE;AAGtD,QAAA,gBAAgB,GAAmC;IAC/D,OAAO,EAAE,sBAA6C;IACtD,0BAA0B,EAAE,CAAC,QAAoC,EAAE,KAAsC,EAAE,EAAE;;QAC5G,MAAM,OAAO,GAAG,QAAwB,CAAC;QACzC,OAAO,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CACnE,qBAAI,CAAC,IAAI,EACT,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,EAC1B,EAAE,CACF,CAAC;YACF,IAAI,UAAU,EAAE;gBACf,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACvE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterFriendlyMinionDeathInput } from '../../../simulation/attack';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { OnAfterFriendlyMinionDeathCard } from '../../card.interface';\r\n\r\nexport const StormcoilSticker: OnAfterFriendlyMinionDeathCard = {\r\n\tcardIds: [CardIds.StormcoilSticker_BG35_MagicItem_302],\r\n\tonAfterFriendlyMinionDeath: (listener: BoardEntity | BoardTrinket, input: OnAfterFriendlyMinionDeathInput) => {\r\n\t\tconst trinket = listener as BoardTrinket;\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 || 0) + 1;\r\n\t\tif (trinket.scriptDataNum1 >= 8) {\r\n\t\t\ttrinket.scriptDataNum1 = 0;\r\n\t\t\tconst randomMech = input.gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\tRace.MECH,\r\n\t\t\t\tinput.hero.tavernTier ?? 6,\r\n\t\t\t\t[],\r\n\t\t\t);\r\n\t\t\tif (randomMech) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [randomMech], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"stormcoil-sticker.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/stormcoil-sticker.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAKpD,qEAAmE;AAGnE,MAAM,SAAS,GAAG,CAAC,CAAC;AAEP,QAAA,gBAAgB,GAAmC;IAC/D,OAAO,EAAE,sBAA6C;IACtD,0BAA0B,EAAE,CAAC,QAAoC,EAAE,KAAsC,EAAE,EAAE;;QAC5G,MAAM,OAAO,GAAG,QAAwB,CAAC;QACzC,OAAO,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,cAAc,IAAI,SAAS,EAAE;YACxC,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CACnE,qBAAI,CAAC,IAAI,EACT,MAAA,KAAK,CAAC,IAAI,CAAC,UAAU,mCAAI,CAAC,EAC1B,EAAE,CACF,CAAC;YACF,IAAI,UAAU,EAAE;gBACf,IAAA,8BAAc,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aACvE;SACD;IACF,CAAC;CACD,CAAC","sourcesContent":["import { Race } from '@firestone-hs/reference-data';\r\nimport { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { BoardEntity } from '../../../board-entity';\r\nimport { CardIds } from '../../../services/card-ids';\r\nimport { OnAfterFriendlyMinionDeathInput } from '../../../simulation/attack';\r\nimport { addCardsInHand } from '../../../simulation/cards-in-hand';\r\nimport { OnAfterFriendlyMinionDeathCard } from '../../card.interface';\r\n\r\nconst threshold = 6;\r\n\r\nexport const StormcoilSticker: OnAfterFriendlyMinionDeathCard = {\r\n\tcardIds: [CardIds.StormcoilSticker_BG35_MagicItem_302],\r\n\tonAfterFriendlyMinionDeath: (listener: BoardEntity | BoardTrinket, input: OnAfterFriendlyMinionDeathInput) => {\r\n\t\tconst trinket = listener as BoardTrinket;\r\n\t\ttrinket.scriptDataNum1 = (trinket.scriptDataNum1 || 0) + 1;\r\n\t\tif (trinket.scriptDataNum1 >= threshold) {\r\n\t\t\ttrinket.scriptDataNum1 = 0;\r\n\t\t\tconst randomMech = input.gameState.cardsData.getRandomMinionForTribe(\r\n\t\t\t\tRace.MECH,\r\n\t\t\t\tinput.hero.tavernTier ?? 6,\r\n\t\t\t\t[],\r\n\t\t\t);\r\n\t\t\tif (randomMech) {\r\n\t\t\t\taddCardsInHand(input.hero, input.board, [randomMech], input.gameState);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -6,7 +6,7 @@ const stats_1 = require("../../../simulation/stats");
6
6
  exports.TrainingCertificate = {
7
7
  startOfCombat: (trinket, input) => {
8
8
  if (input.playerBoard.length > 0) {
9
- const baseBoard = (0, utils_1.shuffleArray)(input.playerBoard);
9
+ const baseBoard = (0, utils_1.shuffleArray)([...input.playerBoard]);
10
10
  const minionsByAttack = baseBoard.sort((a, b) => a.attack - b.attack);
11
11
  const firstTarget = minionsByAttack[0];
12
12
  (0, stats_1.setEntityStats)(firstTarget, 2 * firstTarget.maxAttack, 2 * firstTarget.maxHealth, input.playerBoard, input.playerEntity, input.gameState);
@@ -1 +1 @@
1
- {"version":3,"file":"training-certificate.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/training-certificate.ts"],"names":[],"mappings":";;;AACA,mDAAuD;AAEvD,qDAA2D;AAE9C,QAAA,mBAAmB,GAAG;IAClC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAEjC,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACvC,IAAA,sBAAc,EACb,WAAW,EACX,CAAC,GAAG,WAAW,CAAC,SAAS,EACzB,CAAC,GAAG,WAAW,CAAC,SAAS,EACzB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACnG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAA,sBAAc,EACb,YAAY,EACZ,CAAC,GAAG,YAAY,CAAC,SAAS,EAC1B,CAAC,GAAG,YAAY,CAAC,SAAS,EAC1B,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACpG;YACD,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\n\r\nexport const TrainingCertificate = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\t// In cae of ties, it should be random\r\n\t\t\tconst baseBoard = shuffleArray(input.playerBoard);\r\n\t\t\tconst minionsByAttack = baseBoard.sort((a, b) => a.attack - b.attack);\r\n\t\t\tconst firstTarget = minionsByAttack[0];\r\n\t\t\tsetEntityStats(\r\n\t\t\t\tfirstTarget,\r\n\t\t\t\t2 * firstTarget.maxAttack,\r\n\t\t\t\t2 * firstTarget.maxHealth,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, firstTarget, input.playerBoard, null, null);\r\n\t\t\tif (baseBoard.length > 1) {\r\n\t\t\t\tconst secondTarget = minionsByAttack[1];\r\n\t\t\t\tsetEntityStats(\r\n\t\t\t\t\tsecondTarget,\r\n\t\t\t\t\t2 * secondTarget.maxAttack,\r\n\t\t\t\t\t2 * secondTarget.maxHealth,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, secondTarget, input.playerBoard, null, null);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"training-certificate.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/training-certificate.ts"],"names":[],"mappings":";;;AACA,mDAAuD;AAEvD,qDAA2D;AAE9C,QAAA,mBAAmB,GAAG;IAClC,aAAa,EAAE,CAAC,OAAqB,EAAE,KAAe,EAAE,EAAE;QACzD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAEjC,MAAM,SAAS,GAAG,IAAA,oBAAY,EAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YACvD,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACvC,IAAA,sBAAc,EACb,WAAW,EACX,CAAC,GAAG,WAAW,CAAC,SAAS,EACzB,CAAC,GAAG,WAAW,CAAC,SAAS,EACzB,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACnG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAA,sBAAc,EACb,YAAY,EACZ,CAAC,GAAG,YAAY,CAAC,SAAS,EAC1B,CAAC,GAAG,YAAY,CAAC,SAAS,EAC1B,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,CACf,CAAC;gBACF,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACpG;YACD,OAAO,IAAI,CAAC;SACZ;IACF,CAAC;CACD,CAAC","sourcesContent":["import { BoardTrinket } from '../../../bgs-player-entity';\r\nimport { shuffleArray } from '../../../services/utils';\r\nimport { SoCInput } from '../../../simulation/start-of-combat/start-of-combat-input';\r\nimport { setEntityStats } from '../../../simulation/stats';\r\n\r\nexport const TrainingCertificate = {\r\n\tstartOfCombat: (trinket: BoardTrinket, input: SoCInput) => {\r\n\t\tif (input.playerBoard.length > 0) {\r\n\t\t\t// In cae of ties, it should be random\r\n\t\t\tconst baseBoard = shuffleArray([...input.playerBoard]);\r\n\t\t\tconst minionsByAttack = baseBoard.sort((a, b) => a.attack - b.attack);\r\n\t\t\tconst firstTarget = minionsByAttack[0];\r\n\t\t\tsetEntityStats(\r\n\t\t\t\tfirstTarget,\r\n\t\t\t\t2 * firstTarget.maxAttack,\r\n\t\t\t\t2 * firstTarget.maxHealth,\r\n\t\t\t\tinput.playerBoard,\r\n\t\t\t\tinput.playerEntity,\r\n\t\t\t\tinput.gameState,\r\n\t\t\t);\r\n\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, firstTarget, input.playerBoard, null, null);\r\n\t\t\tif (baseBoard.length > 1) {\r\n\t\t\t\tconst secondTarget = minionsByAttack[1];\r\n\t\t\t\tsetEntityStats(\r\n\t\t\t\t\tsecondTarget,\r\n\t\t\t\t\t2 * secondTarget.maxAttack,\r\n\t\t\t\t\t2 * secondTarget.maxHealth,\r\n\t\t\t\t\tinput.playerBoard,\r\n\t\t\t\t\tinput.playerEntity,\r\n\t\t\t\t\tinput.gameState,\r\n\t\t\t\t);\r\n\t\t\t\tinput.gameState.spectator.registerPowerTarget(trinket, secondTarget, input.playerBoard, null, null);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -12,7 +12,7 @@ exports.TrustyCrowbar = {
12
12
  }
13
13
  const leftMost = input.board[0];
14
14
  if (leftMost) {
15
- (0, stats_1.modifyStats)(leftMost, trinket, 10, 10, input.board, input.hero, input.gameState);
15
+ (0, stats_1.modifyStats)(leftMost, trinket, 16, 16, input.board, input.hero, input.gameState);
16
16
  }
17
17
  },
18
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"trusty-crowbar.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/trusty-crowbar.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,aAAa,GAA0B;IACnD,OAAO,EAAE,sBAA0C;IACnD,iBAAiB,EAAE,CAAC,OAAqB,EAAE,KAA6B,EAAE,EAAE;QAC3E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,IAAI,EACV,qBAAI,CAAC,MAAM,EACX,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO;SACP;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,QAAQ,EAAE;YACb,IAAA,mBAAW,EAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjF;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 { OnCardAddedToHandInput } from '../../../simulation/cards-in-hand';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnCardAddedToHandCard } from '../../card.interface';\r\n\r\nexport const TrustyCrowbar: OnCardAddedToHandCard = {\r\n\tcardIds: [CardIds.TrustyCrowbar_BG35_MagicItem_713],\r\n\tonCardAddedToHand: (trinket: BoardTrinket, input: OnCardAddedToHandInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.addedCard,\r\n\t\t\t\tinput.hero,\r\n\t\t\t\tRace.PIRATE,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst leftMost = input.board[0];\r\n\t\tif (leftMost) {\r\n\t\t\tmodifyStats(leftMost, trinket, 10, 10, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
1
+ {"version":3,"file":"trusty-crowbar.js","sourceRoot":"","sources":["../../../../src/cards/impl/trinket/trusty-crowbar.ts"],"names":[],"mappings":";;;AAAA,iEAAoD;AAIpD,qDAAwD;AACxD,0CAAiD;AAGpC,QAAA,aAAa,GAA0B;IACnD,OAAO,EAAE,sBAA0C;IACnD,iBAAiB,EAAE,CAAC,OAAqB,EAAE,KAA6B,EAAE,EAAE;QAC3E,IACC,CAAC,IAAA,uBAAe,EACf,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,IAAI,EACV,qBAAI,CAAC,MAAM,EACX,KAAK,CAAC,SAAS,CAAC,SAAS,EACzB,KAAK,CAAC,SAAS,CAAC,QAAQ,CACxB,EACA;YACD,OAAO;SACP;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,QAAQ,EAAE;YACb,IAAA,mBAAW,EAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;SACjF;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 { OnCardAddedToHandInput } from '../../../simulation/cards-in-hand';\r\nimport { modifyStats } from '../../../simulation/stats';\r\nimport { hasCorrectTribe } from '../../../utils';\r\nimport { OnCardAddedToHandCard } from '../../card.interface';\r\n\r\nexport const TrustyCrowbar: OnCardAddedToHandCard = {\r\n\tcardIds: [CardIds.TrustyCrowbar_BG35_MagicItem_713],\r\n\tonCardAddedToHand: (trinket: BoardTrinket, input: OnCardAddedToHandInput) => {\r\n\t\tif (\r\n\t\t\t!hasCorrectTribe(\r\n\t\t\t\tinput.addedCard,\r\n\t\t\t\tinput.hero,\r\n\t\t\t\tRace.PIRATE,\r\n\t\t\t\tinput.gameState.anomalies,\r\n\t\t\t\tinput.gameState.allCards,\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst leftMost = input.board[0];\r\n\t\tif (leftMost) {\r\n\t\t\tmodifyStats(leftMost, trinket, 16, 16, input.board, input.hero, input.gameState);\r\n\t\t}\r\n\t},\r\n};\r\n"]}
@@ -361,6 +361,18 @@ const applyAurasToSelf = (spawned, board, boardHero, gameState, applyAttackAuras
361
361
  applyHealthAuras,
362
362
  });
363
363
  }
364
+ for (const enchantment of spawned.enchantments) {
365
+ const onSpawnedEnchantmentImpl = _card_mappings_1.cardMappings[enchantment.cardId];
366
+ if ((0, card_interface_1.hasOnSpawnedEnchantment)(onSpawnedEnchantmentImpl)) {
367
+ onSpawnedEnchantmentImpl.onSpawnedEnchantment(spawned, enchantment, {
368
+ hero: boardHero,
369
+ board: board,
370
+ gameState: gameState,
371
+ applyAttackAuras,
372
+ applyHealthAuras,
373
+ });
374
+ }
375
+ }
364
376
  switch (spawned.cardId) {
365
377
  case "BG25_008":
366
378
  case "BG25_008_G":
@@ -415,6 +427,28 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState, applyAttackAur
415
427
  applyHealthAuras,
416
428
  });
417
429
  }
430
+ for (const enchantment of entity.enchantments) {
431
+ const onDespawnedEnchantmentImpl = _card_mappings_1.cardMappings[enchantment.cardId];
432
+ if ((0, card_interface_1.hasOnDespawnedEnchantment)(onDespawnedEnchantmentImpl)) {
433
+ onDespawnedEnchantmentImpl.onDespawnedEnchantment(entity, enchantment, {
434
+ hero: boardHero,
435
+ board: board,
436
+ gameState: gameState,
437
+ applyAttackAuras,
438
+ applyHealthAuras,
439
+ });
440
+ }
441
+ }
442
+ for (const enchantment of entity.enchantments) {
443
+ switch (enchantment === null || enchantment === void 0 ? void 0 : enchantment.cardId) {
444
+ case "TB_BaconShop_HP_085e":
445
+ if (applyAttackAuras) {
446
+ entity.attack = Math.max(0, entity.attack - enchantment.tagScriptDataNum1);
447
+ entity.maxAttack = Math.max(0, entity.maxAttack - enchantment.tagScriptDataNum1);
448
+ }
449
+ break;
450
+ }
451
+ }
418
452
  if (!!((_a = boardHero.questRewards) === null || _a === void 0 ? void 0 : _a.length)) {
419
453
  for (const quest of boardHero.questRewards) {
420
454
  switch (quest) {
@@ -639,16 +673,6 @@ const removeAurasFromSelf = (entity, board, boardHero, gameState, applyAttackAur
639
673
  }
640
674
  break;
641
675
  }
642
- for (const enchantment of entity.enchantments) {
643
- switch (enchantment === null || enchantment === void 0 ? void 0 : enchantment.cardId) {
644
- case "TB_BaconShop_HP_085e":
645
- if (applyAttackAuras) {
646
- entity.attack = Math.max(0, entity.attack - enchantment.tagScriptDataNum1);
647
- entity.maxAttack = Math.max(0, entity.maxAttack - enchantment.tagScriptDataNum1);
648
- }
649
- break;
650
- }
651
- }
652
676
  };
653
677
  exports.removeAurasFromSelf = removeAurasFromSelf;
654
678
  const handleMinionAddedAuraEffect = (spawnedCardId, spawned, board, boardHero, gameState, isActuallySpawned = true) => {