Hearthstone uses card limits as a form of balancing. You cannot build a deck with more than one copy of any Legendary quality card and you cannot build a deck with more than two copies of any non-Legendary quality card.
The Discovery mechanic allows a player to bypass this limitation. That in and of itself is not a problem. The problem is how the mechanic is implemented, or more specifically how the current implementation makes it very hard for the developers to accurately balance cards with regards to the fact that they can be discovered.
With the current implementation I can create a Mage deck with 1x Astromancer Solarian, 2x Promordial Studies, and 2x Wand Thief. And then in a single game I can discover two additional copies of Primordial Studies from the Wand Thieves and discover a total of 4 additional copies of Astromancer Solarian from the Primordial Studies. You can argue that this is a rare outcome, but the fact remains that it is a possible outcome. And honestly, this example is not even an extreme one. It is incredibly hard to balance cards around these complex and varied potential interactions.
The primary reason it is so hard to balance cards around their interaction with the Discovery mechanic is that the current implementation pulls from an infinite pool.
Every discover card has a set of cards that it can discover. The Font of Power card, for example, can discover from the set of âMage minionâ cards. When playing on Standard it can discover from the set of âStandard Mage minionâ cards, which is a subset of the âMage minionâ set. And surely on the backend there is a configurable weight for each card in a set, to make them more or less likely to be chosen as one of the three discovered cards.
However, these sets are merely used as lookups. When a card from any given set is discovered, it remains in the set with an equal chance to be discovered again.
My recommendation, for the sake of balancing, is to adjust the discovery mechanic implementation to make the discovery pools finite. In addition to having discovery weights, the cards in sets would also have (configurable) âdiscovered maximumsâ. During each game, a tally of what cards were discovered could be kept and that information would be used to create a modified set each time a discover function is called in the backend.
This tally could also be affected by the cards in a playerâs built deck. For example, having two copies of a card in your built deck could be effectively tallied as having already discovered one copy. This would mean that if a cardâs discovery max is 2, a player who included two copies of that card in their built deck would only be able to discover one additional copy of the card instead of two additional copies.
Obviously, this proposed implementation would not affect cards like Warsong Wrangler, which discovers from your own deck, as that is already a finite pool. Perhaps the functionality of that card could be referenced or repurposed to save significant development effort for this recommendation.
All in all I know nothing about the codebase for Hearthstone, so feel free to take this post as me blowing wind. But maybe that wind can help stoke the developersâ fire.