From a33ec8f6d7a944ee3e3538325ceb9c76168b731f Mon Sep 17 00:00:00 2001 From: Wendel Voigt Date: Sat, 28 Apr 2018 12:29:27 -0500 Subject: [PATCH] Expansion Randomizer Count Fix (#196) * Program changes for Randomizer correction * Card DB changes for Randomizer fix * Better expansion divider card listing * Base cards now sorted in preferred order. * Added randomizer field --- domdiv/card_db/cards_db.json | 134 +++++++++++++++++++++++++++++++++++ domdiv/cards.py | 3 +- domdiv/main.py | 47 +++++++++--- 3 files changed, 174 insertions(+), 10 deletions(-) diff --git a/domdiv/card_db/cards_db.json b/domdiv/card_db/cards_db.json index 657ee74..ea1c99a 100644 --- a/domdiv/card_db/cards_db.json +++ b/domdiv/card_db/cards_db.json @@ -5,6 +5,7 @@ ], "cost": "0", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -34,6 +35,7 @@ ], "cost": "5", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -44,6 +46,7 @@ ], "cost": "3", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -54,6 +57,7 @@ ], "cost": "0", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -87,6 +91,7 @@ "cost": "6*", "count": "5", "group_tag": "Page -> Champion", + "randomizer": false, "types": [ "Action", "Duration" @@ -108,6 +113,7 @@ ], "cost": "5*", "group_tag": "Peasant -> Teacher", + "randomizer": false, "types": [ "Action", "Traveller" @@ -150,6 +156,7 @@ ], "cost": "3", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -160,6 +167,7 @@ ], "cost": "3", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -170,6 +178,7 @@ ], "cost": "4*", "group_tag": "Peasant -> Teacher", + "randomizer": false, "types": [ "Action", "Traveller" @@ -222,6 +231,7 @@ ], "cost": "5*", "group_tag": "Page -> Champion", + "randomizer": false, "types": [ "Action", "Traveller" @@ -243,6 +253,7 @@ ], "cost": "7", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -253,6 +264,7 @@ ], "cost": "6", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -299,6 +311,7 @@ ], "cost": "4", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -322,6 +335,7 @@ ], "cost": "8", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -345,6 +359,7 @@ ], "cost": "4", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -355,6 +370,7 @@ ], "cost": "3", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -375,6 +391,7 @@ ], "cost": "0", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -385,6 +402,7 @@ ], "cost": "5", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -443,6 +461,7 @@ ], "cost": "1", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -453,6 +472,7 @@ ], "cost": "2", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -463,6 +483,7 @@ ], "cost": "5", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -473,6 +494,7 @@ ], "cost": "3*", "group_tag": "Peasant -> Teacher", + "randomizer": false, "types": [ "Action", "Attack", @@ -506,6 +528,7 @@ "cost": "6*", "count": "5", "group_tag": "Peasant -> Teacher", + "randomizer": false, "types": [ "Action", "Reserve" @@ -517,6 +540,7 @@ ], "cost": "5", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -527,6 +551,7 @@ ], "cost": "6", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -547,6 +572,7 @@ ], "cost": "2", "group_tag": "adventures events", + "randomizer": false, "types": [ "Event" ] @@ -557,6 +583,7 @@ ], "cost": "3*", "group_tag": "Page -> Champion", + "randomizer": false, "types": [ "Action", "Traveller" @@ -577,6 +604,7 @@ ], "cost": "4*", "group_tag": "Page -> Champion", + "randomizer": false, "types": [ "Action", "Attack", @@ -750,6 +778,7 @@ ], "cost": "4", "count": "16", + "randomizer": false, "types": [ "Treasure" ] @@ -763,6 +792,7 @@ ], "cost": "0", "count": "60", + "randomizer": false, "types": [ "Treasure" ] @@ -776,6 +806,7 @@ ], "cost": "0", "count": "30", + "randomizer": false, "types": [ "Curse" ] @@ -788,6 +819,7 @@ "intrigue1stEdition" ], "cost": "5", + "randomizer": false, "types": [ "Victory" ] @@ -801,6 +833,7 @@ ], "cost": "2", "count": "24", + "randomizer": false, "types": [ "Victory" ] @@ -814,6 +847,7 @@ ], "cost": "6", "count": "30", + "randomizer": false, "types": [ "Treasure" ] @@ -826,6 +860,7 @@ "intrigue1stEdition" ], "cost": "8", + "randomizer": false, "types": [ "Victory" ] @@ -839,6 +874,7 @@ ], "cost": "3", "count": "40", + "randomizer": false, "types": [ "Treasure" ] @@ -851,6 +887,7 @@ ], "cost": "", "count": "1", + "randomizer": false, "types": [ "Trash" ] @@ -861,6 +898,7 @@ "prosperity" ], "cost": "11", + "randomizer": false, "types": [ "Victory" ] @@ -872,6 +910,7 @@ ], "cost": "9", "count": "12", + "randomizer": false, "types": [ "Treasure" ] @@ -882,6 +921,7 @@ ], "cost": "0*", "group_tag": "Tournament and Prizes", + "randomizer": false, "types": [ "Action", "Prize" @@ -893,6 +933,7 @@ ], "cost": "0*", "group_tag": "Tournament and Prizes", + "randomizer": false, "types": [ "Treasure", "Prize" @@ -922,6 +963,7 @@ ], "cost": "0*", "group_tag": "Tournament and Prizes", + "randomizer": false, "types": [ "Action", "Attack", @@ -1009,6 +1051,7 @@ ], "cost": "0*", "group_tag": "Tournament and Prizes", + "randomizer": false, "types": [ "Action", "Prize" @@ -1040,6 +1083,7 @@ ], "cost": "0*", "group_tag": "Tournament and Prizes", + "randomizer": false, "types": [ "Action", "Prize" @@ -1203,6 +1247,7 @@ "cost": "1", "group_tag": "Shelters", "group_top": true, + "randomizer": false, "types": [ "Reaction", "Shelter" @@ -1250,6 +1295,7 @@ ], "cost": "0*", "group_tag": "Hermit - Madman", + "randomizer": false, "types": [ "Action" ] @@ -1279,6 +1325,7 @@ ], "cost": "0*", "group_tag": "Urchin - Mercenary", + "randomizer": false, "types": [ "Action", "Attack" @@ -1299,6 +1346,7 @@ ], "cost": "1", "group_tag": "Shelters", + "randomizer": false, "types": [ "Action", "Shelter" @@ -1310,6 +1358,7 @@ ], "cost": "1", "group_tag": "Shelters", + "randomizer": false, "types": [ "Victory", "Shelter" @@ -1378,6 +1427,7 @@ ], "cost": "0", "count": "50", + "randomizer": false, "types": [ "Action", "Ruins" @@ -1407,6 +1457,7 @@ ], "cost": "0*", "count": "15", + "randomizer": false, "types": [ "Treasure" ] @@ -1787,6 +1838,7 @@ ], "cost": "0", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -1798,6 +1850,7 @@ "cost": "0", "debtcost": "8", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -1808,6 +1861,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -1828,6 +1882,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -1838,6 +1893,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -1848,6 +1904,7 @@ ], "cost": "3", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -1858,6 +1915,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -1868,6 +1926,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -1878,6 +1937,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -1889,6 +1949,7 @@ "cost": "5", "count": "5", "group_tag": "Settlers - Bustling Village", + "randomizer": false, "types": [ "Action" ] @@ -1960,6 +2021,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -1970,6 +2032,7 @@ ], "cost": "6", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -1990,6 +2053,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2000,6 +2064,7 @@ ], "cost": "2", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2010,6 +2075,7 @@ ], "cost": "14", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2021,6 +2087,7 @@ "cost": "0", "debtcost": "8", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2032,6 +2099,7 @@ "cost": "5", "count": "5", "group_tag": "Patrician - Emporium", + "randomizer": false, "types": [ "Action" ] @@ -2087,6 +2155,7 @@ "count": "5", "debtcost": "8", "group_tag": "Gladiator - Fortune", + "randomizer": false, "types": [ "Treasure" ] @@ -2106,6 +2175,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2137,6 +2207,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2147,6 +2218,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2167,6 +2239,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2177,6 +2250,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2187,6 +2261,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2197,6 +2272,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2217,6 +2293,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2240,6 +2317,7 @@ "cost": "5", "count": "5", "group_tag": "Encampment - Plunder", + "randomizer": false, "types": [ "Treasure" ] @@ -2250,6 +2328,7 @@ ], "cost": "4", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2261,6 +2340,7 @@ "cost": "4", "count": "5", "group_tag": "Catapult - Rocks", + "randomizer": false, "types": [ "Treasure" ] @@ -2290,6 +2370,7 @@ ], "cost": "4", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2312,6 +2393,7 @@ ], "cost": "2", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2332,6 +2414,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2342,6 +2425,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2353,6 +2437,7 @@ "cost": "0", "debtcost": "5", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2363,6 +2448,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2382,6 +2468,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -2393,6 +2480,7 @@ "cost": "4", "debtcost": "3", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2413,6 +2501,7 @@ ], "cost": "5", "group_tag": "empires events", + "randomizer": false, "types": [ "Event" ] @@ -2423,6 +2512,7 @@ ], "cost": "", "group_tag": "empires landmarks", + "randomizer": false, "types": [ "Landmark" ] @@ -3117,6 +3207,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3137,6 +3228,7 @@ ], "cost": "2*", "group_tag": "Vampire - Bat", + "randomizer": false, "types": [ "Night" ] @@ -3206,6 +3298,7 @@ ], "cost": "4", "group_tag": "Pooka - Cursed Gold", + "randomizer": false, "types": [ "Treasure", "Heirloom" @@ -3227,6 +3320,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3268,6 +3362,7 @@ "cost": "", "count": "6", "group_tag": "nocturne states", + "randomizer": false, "types": [ "State" ] @@ -3278,6 +3373,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3307,6 +3403,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3317,6 +3414,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3339,6 +3437,7 @@ ], "cost": "4*", "count": "6", + "randomizer": false, "types": [ "Night", "Duration", @@ -3361,6 +3460,7 @@ ], "cost": "2", "group_tag": "Pixie - Goat", + "randomizer": false, "types": [ "Treasure", "Heirloom" @@ -3372,6 +3472,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3392,6 +3493,7 @@ ], "cost": "0", "group_tag": "Cemetery - Haunted Mirror", + "randomizer": false, "types": [ "Treasure", "Heirloom" @@ -3403,6 +3505,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3424,6 +3527,7 @@ ], "cost": "2*", "count": "13", + "randomizer": false, "types": [ "Action", "Spirit" @@ -3445,6 +3549,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3456,6 +3561,7 @@ "cost": "", "count": "1", "group_tag": "nocturne states", + "randomizer": false, "types": [ "State" ] @@ -3466,6 +3572,7 @@ ], "cost": "4", "group_tag": "Fool - Lucky Coin", + "randomizer": false, "types": [ "Treasure", "Heirloom" @@ -3477,6 +3584,7 @@ ], "cost": "0", "group_tag": "Secret Cave - Magic Lamp", + "randomizer": false, "types": [ "Treasure", "Heirloom" @@ -3489,6 +3597,7 @@ "cost": "", "count": "6", "group_tag": "nocturne states", + "randomizer": false, "types": [ "State" ] @@ -3499,6 +3608,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3538,6 +3648,7 @@ ], "cost": "2", "group_tag": "Shepherd - Pasture", + "randomizer": false, "types": [ "Treasure", "Victory", @@ -3562,6 +3673,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3583,6 +3695,7 @@ ], "cost": "2", "group_tag": "Tracker - Pouch", + "randomizer": false, "types": [ "Treasure", "Heirloom" @@ -3594,6 +3707,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3659,6 +3773,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3669,6 +3784,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3679,6 +3795,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3689,6 +3806,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3699,6 +3817,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3709,6 +3828,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3719,6 +3839,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3729,6 +3850,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3739,6 +3861,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3749,6 +3872,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3759,6 +3883,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3769,6 +3894,7 @@ ], "cost": "", "group_tag": "nocturne boons", + "randomizer": false, "types": [ "Boon" ] @@ -3824,6 +3950,7 @@ ], "cost": "", "group_tag": "nocturne hexes", + "randomizer": false, "types": [ "Hex" ] @@ -3846,6 +3973,7 @@ ], "cost": "0*", "count": "12", + "randomizer": false, "types": [ "Action", "Spirit" @@ -3857,6 +3985,7 @@ ], "cost": "0*", "count": "12", + "randomizer": false, "types": [ "Action" ] @@ -3868,6 +3997,7 @@ "cost": "3", "count": "1", "group_tag": "Necromancer - Zombies", + "randomizer": false, "types": [ "Action", "Zombie" @@ -3880,6 +4010,7 @@ "cost": "3", "count": "1", "group_tag": "Necromancer - Zombies", + "randomizer": false, "types": [ "Action", "Zombie" @@ -3892,6 +4023,7 @@ "cost": "3", "count": "1", "group_tag": "Necromancer - Zombies", + "randomizer": false, "types": [ "Action", "Zombie" @@ -3904,6 +4036,7 @@ "cost": "5", "count": "5", "group_tag": "Sauna - Avanto", + "randomizer": false, "types": [ "Action" ] @@ -3986,6 +4119,7 @@ ], "cost": "5", "group_tag": "promo events", + "randomizer": false, "types": [ "Event" ] diff --git a/domdiv/cards.py b/domdiv/cards.py index 26ecaf7..962e9d9 100644 --- a/domdiv/cards.py +++ b/domdiv/cards.py @@ -25,7 +25,7 @@ class Card(object): def __init__(self, name=None, cardset='', types=None, cost='', description='', potcost=0, debtcost=0, extra='', count=-1, card_tag='missing card_tag', cardset_tags=None, group_tag='', group_top=False, image=None, - text_icon=None, cardset_tag=''): + text_icon=None, randomizer=True, cardset_tag=''): if types is None: types = [] # make sure types is a list @@ -56,6 +56,7 @@ class Card(object): self.count = [] else: self.count = [int(count)] + self.randomizer = randomizer def getCardCount(self): return sum(i for i in self.count) diff --git a/domdiv/main.py b/domdiv/main.py index 14df69c..14c780e 100644 --- a/domdiv/main.py +++ b/domdiv/main.py @@ -7,6 +7,7 @@ import copy import fnmatch import pkg_resources import unicodedata +from collections import Counter, defaultdict import reportlab.lib.pagesizes as pagesizes from reportlab.lib.units import cm @@ -143,7 +144,8 @@ def parse_opts(cmdline_args=None): "--count", action="store_true", dest="count", - help="Display card count on body of the divider.") + help="Display the card count on the body of card dividers " + "and the randomizer count on the body of expansion dividers.") group_body.add_argument( "--types", action="store_true", @@ -609,11 +611,11 @@ class CardSorter(object): else: self.sort_key = self.by_expansion_sort_key - baseOrder = ['Copper', 'Silver', 'Gold', 'Platinum', 'Potion', - 'Curse', 'Estate', 'Duchy', 'Province', 'Colony', - 'Trash'] + self.baseOrder = ['Copper', 'Silver', 'Gold', 'Platinum', 'Potion', + 'Curse', 'Estate', 'Duchy', 'Province', 'Colony', + 'Trash'] self.baseCards = [] - for tag in baseOrder: + for tag in self.baseOrder: if tag in baseCards: self.baseCards.append(baseCards[tag]) del baseCards[tag] @@ -843,6 +845,7 @@ def filter_sort_cards(cards, options): group_cards[card.group_tag].potcost = card.potcost group_cards[card.group_tag].debtcost = card.debtcost group_cards[card.group_tag].types = card.types + group_cards[card.group_tag].randomizer = card.randomizer group_cards[card.group_tag].image = card.image group_cards[card.group_tag].addCardCount(card.count) # increase the count @@ -984,18 +987,34 @@ def filter_sort_cards(cards, options): # Add expansion divider if options.expansion_dividers: - cardnamesByExpansion = {} + cardnamesByExpansion = defaultdict(dict) + randomizerCountByExpansion = Counter() for c in cards: if cardSorter.isBaseExpansionCard(c): continue - cardnamesByExpansion.setdefault(c.cardset, []).append(c.name.strip().replace(' ', ' ')) + if c.randomizer: + randomizerCountByExpansion[c.cardset] += 1 + + if c.card_tag in cardnamesByExpansion[c.cardset]: + # Already have one, so just update the count (for extra Curses, Start Decks, etc) + cardnamesByExpansion[c.cardset][c.card_tag]['count'] += 1 + else: + # New, so save off information about the card to be used on the expansion divider + order = 0 + if c.card_tag in cardSorter.baseOrder: + # Use the base card ordering + order = 100 + cardSorter.baseOrder.index(c.card_tag) + cardnamesByExpansion[c.cardset][c.card_tag] = {'name': c.name.strip().replace(' ', ' '), + 'randomizer': c.randomizer, + 'count': 1, + 'sort': "%03d%s" % (order, c.name.strip(),)} for set_tag, set_values in Card.sets.iteritems(): exp = set_values["set_name"] if exp in cardnamesByExpansion: exp_name = exp - count = len(cardnamesByExpansion[exp]) + count = randomizerCountByExpansion[exp] if 'no_randomizer' in set_values: if set_values['no_randomizer']: count = 0 @@ -1004,12 +1023,22 @@ def filter_sort_cards(cards, options): if 'short_name' in set_values: exp_name = set_values['short_name'] + card_names = [] + for key, n in sorted(cardnamesByExpansion[exp].items(), key=lambda (k, x): x['sort']): + if not n['randomizer']: + # Highlight cards without Randomizers + n['name'] = '' + n['name'] + '' + if n['count'] > 1: + # Add number of copies + n['name'] = u"{} \u00d7 ".format(n['count']) + n['name'] + card_names.append(n['name']) + c = Card(name=exp_name, cardset=exp, cardset_tag=set_tag, types=("Expansion", ), cost=None, - description=' | '.join(sorted(cardnamesByExpansion[exp])), + description=' | '.join(card_names), extra=set_values.get("set_text", ""), count=count, card_tag=set_tag)