Cheap: jk
Medium: Generally needs to go through the deck at least once to buy (cost 5)
Expensive: Needs a lot of money to get (6+)
Victory: Victory card
Chipper: Provides VP chips
Treasure: Treasure card
Chainer: Gives at least +1 Action
Cantrip: Gives at least +1 Card +1 Action
Splitter: Gives at least +2 Actions
Multiplier: Gives actions when combined with the right cards
Terminus: Decreases Actions played
Cumulative: Cards that are useful when played in quantity
Antisplitter: Cards that don't benefit from Splitters (i.e., Splitters and non-Cumulative Terminuses)
Buyer: Gives at least +1 Buy
Gainer: Gains an extra card into deck
Coinage: Amount of money given (actions only)
Discounter: Makes cards cheaper
Carddrawer: Number of cards hand size increases when played (Cantrips = 1, averaged)
Selftrasher: Number of cards that one's deck can shrink by (on average)
Mutator: Changes cards in deck without increasing deck size
Discardcasher: Turns discards to money
Attack: Does bad things to opponents
Blocker: Nullifies or slows some attacks
Giver: Increases opponent's deck size (e.g., by giving curses)
Trasher: Trashes other players' cards
Helper: Non-attacks that may give opponent a benefit or decision
Shrinker: Makes opponents have a smaller hand
Grower: Restores some effect against shrinking attacks
Scouter: Allows some control over composition of top of deck (# of cards)
Topdecker: Allows some control over composition of next hand
Selfmiller: May cause own cards to be discarded without a chance of being able to play them
Miller: May cause other players to discard cards without a chance of being able to play them
Spier: Mills with tactical decisions
Speeder: Goes through own deck faster
Slower: Causes other players to go through their deck slower
Interactive: Attack * 2 + Helper + (1 if Victory)
Improver: Cards that get better closer to game end
Variance: The "luck" factor of the effects of having this card --
0 -- has no luck at all (e.g., cantrips)
1 -- has a bit of luck (e.g., drawing actions with no actions left)
2 -- needs to be paired with rather common cards, or like 1 but more variance
3 -- needs to be paired with uncommon cards
4 -- variance in this card can be game-deciding
Chooser: Player gets decisions when playing the card
0 -- no decisions
1 -- trivial or inconsequential decisions
2 -- often obvious but occasionally interesting
3 -- interesting decisions
Deckchanger: a Buyer, Gainer, or \Selftrasher (i.e., anything that
allows deck size to change by more than +0/+1 cards a turn)
Medichainer: a medium-cost chainer
Brancher: Splitter or Multiplier (i.e., anything that helps you play
multiple Terminuses).
Antiterminus: Treasure, Chainer, Discardcasher, or Mutator (i.e., anything that
won't really clash if you have multiple ones in your deck)
General algorithm:
* Subsequent cards are random from remaining cards, but the weight
of each card receives multipliers based on each shared attribute with
remaining cards. Each attribute gives multipliers to the other cards.
* It should never be impossible to get any particular order of cards, just improbable.
Weights never drop to zero.
There are two ways to set attributes: "idealized" or "clustering".
0 -- unused
1 -- clustering
2 -- idealized
If an attribute is idealized, it needs "ideal min, ideal max" and a "min multiplier, max ";
if an attribute is clustering, it just gets a "multiplier".
"Idealized" attribute.
If (cardvalue > 0) && (current_set(attribute) < min),
then card *= min_multiplier
(Usually min_multiplier > 1, so this means that our set wants at least min).
If (cardvalue > 0) && (current_set(attribute) + cardvalue > max),
then card *= (max_multiplier) ^ (current_set(attribute) + 1).
(Usually max_multiplier < 1, so this means that our set doesn't like more than max).
Some attributes have an "ideal range". E.g., we'd like sets to have at least
2 splitters but not more than 4. So, for the Interactive attribute:
min = 2, min_multiplier > 1
max = 4, max_multiplier < 1
"Autophilic" attributes like being in the set if they are already in the set. So they have
min = 0, min_multiplier irrelevant.
max = 0, max_multiplier > 1.
"Autophobic" attributes don't want to show up in the set if they are already in the set. So
they have
min = 0, min_multiplier irrelevant.
max = 0, max_multiplier < 1.