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.