Compare commits
No commits in common. "master" and "2073647708ffba2a7c80b1cb4480908c534627db" have entirely different histories.
master
...
2073647708
54
main.py
54
main.py
@ -1,42 +1,22 @@
|
|||||||
import sys
|
|
||||||
import os
|
|
||||||
sys.path.append(f'{os.getcwd()}/src')
|
|
||||||
|
|
||||||
import domdiv.main
|
import domdiv.main
|
||||||
|
|
||||||
HELP = False
|
base_args = [
|
||||||
|
"--papersize", "A4",
|
||||||
if HELP:
|
"--language", "de",
|
||||||
base_args = ["--help"]
|
"--size", "9.5x6.25",
|
||||||
else:
|
"--types",
|
||||||
base_args = [
|
"--tab-side", "left-alternate",
|
||||||
"--papersize", "A4",
|
"--tabwidth", "4.0",
|
||||||
"--language", "de",
|
"--tab-name-align", "center",
|
||||||
"--size", "9.5x6.25",
|
"--order", "cost",
|
||||||
"--types",
|
"--expansion-dividers",
|
||||||
"--tab-side", "left-alternate",
|
"--centre-expansion-dividers",
|
||||||
"--tabwidth", "4.0",
|
"--expansion-reset-tabs",
|
||||||
"--tab-name-align", "center",
|
"--expansions", "base", "alchemy", "cornucopia", "dark ages", "dominion2ndEdition", "empires", "promo",
|
||||||
"--order", "cost",
|
"--no-trash",
|
||||||
"--expansion-dividers",
|
"--group-kingdom",
|
||||||
"--centre-expansion-dividers",
|
"--group-special",
|
||||||
"--expansion-reset-tabs",
|
]
|
||||||
"--expansions", "base",
|
|
||||||
# "alchemy", "cornucopia",
|
|
||||||
"dark ages",
|
|
||||||
# "dominion2ndEdition", "empires",
|
|
||||||
"prosperity", "promo",
|
|
||||||
|
|
||||||
"--no-trash",
|
|
||||||
"--group-kingdom",
|
|
||||||
"--group-special",
|
|
||||||
|
|
||||||
"--curse10",
|
|
||||||
"--start-decks",
|
|
||||||
"--victory8_4split",
|
|
||||||
"--shelters-as-startdecks",
|
|
||||||
"--only-promo", "Prince", "Sauna", "Courtier"
|
|
||||||
]
|
|
||||||
opts = domdiv.main.parse_opts(base_args)
|
opts = domdiv.main.parse_opts(base_args)
|
||||||
opts = domdiv.main.clean_opts(opts)
|
opts = domdiv.main.clean_opts(opts)
|
||||||
domdiv.main.generate(opts)
|
domdiv.main.generate(opts)
|
||||||
|
|||||||
@ -975,18 +975,6 @@
|
|||||||
"Start Deck"
|
"Start Deck"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"card_tag": "Shelter Start Deck",
|
|
||||||
"cardset_tags": [
|
|
||||||
"dark ages"
|
|
||||||
],
|
|
||||||
"cost": "",
|
|
||||||
"count": "0",
|
|
||||||
"randomizer": false,
|
|
||||||
"types": [
|
|
||||||
"Shelter Start Deck"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"card_tag": "Trash",
|
"card_tag": "Trash",
|
||||||
"cardset_tags": [
|
"cardset_tags": [
|
||||||
@ -3460,7 +3448,6 @@
|
|||||||
{
|
{
|
||||||
"card_tag": "Courtier",
|
"card_tag": "Courtier",
|
||||||
"cardset_tags": [
|
"cardset_tags": [
|
||||||
"promo",
|
|
||||||
"intrigue2ndEdition",
|
"intrigue2ndEdition",
|
||||||
"intrigue2ndEditionUpgrade"
|
"intrigue2ndEditionUpgrade"
|
||||||
],
|
],
|
||||||
|
|||||||
@ -407,12 +407,7 @@
|
|||||||
"Start Deck": {
|
"Start Deck": {
|
||||||
"description": "Startkarten jedes Spielers:<n>7 Kupfer Karten<n>3 Anwesen Karten",
|
"description": "Startkarten jedes Spielers:<n>7 Kupfer Karten<n>3 Anwesen Karten",
|
||||||
"extra": "",
|
"extra": "",
|
||||||
"name": "Startkarten"
|
"name": "Startkarten jedes Spielers"
|
||||||
},
|
|
||||||
"Shelter Start Deck": {
|
|
||||||
"description": "Startkarten jedes spieleres, falls mit Unterschlüpfen anstatt Anwesen gespielt wird.",
|
|
||||||
"extra": "",
|
|
||||||
"name": "Unterschlupf"
|
|
||||||
},
|
},
|
||||||
"Trash": {
|
"Trash": {
|
||||||
"description": "Müllstapel.",
|
"description": "Müllstapel.",
|
||||||
@ -421,7 +416,7 @@
|
|||||||
},
|
},
|
||||||
"Colony": {
|
"Colony": {
|
||||||
"description": "10 <*VP*>",
|
"description": "10 <*VP*>",
|
||||||
"extra": "2 Spieler: 8 Kolonien<br>3+ Spieler: 12 Kolonien",
|
"extra": "Diese Karte ist eine Basiskarte und keine Königreichkarte. Spielt ihr ausschließlich mit Königreichkarten aus Blütezeit, wird diese Karte zusätzlich zu den Basis-Punktekarten ANWESEN, HERZOGTUM und PROVINZ in der Spielvorbereitung in den Vorrat gelegt. Bei Spielen mit Königreichkarten aus verschiedenen Editionen oder Erweiterungen entscheidet vor Spielbeginn, ob ihr die KOLONIE in den Vorrat legen wollt oder nicht. Achtet darauf, dass in diesem Fall das Spiel auch endet, wenn der Vorratsstapel KOLONIE leer ist.",
|
||||||
"name": "Kolonie"
|
"name": "Kolonie"
|
||||||
},
|
},
|
||||||
"Platinum": {
|
"Platinum": {
|
||||||
@ -685,7 +680,7 @@
|
|||||||
"name": "Schurke"
|
"name": "Schurke"
|
||||||
},
|
},
|
||||||
"Ruins": {
|
"Ruins": {
|
||||||
"description": "<left>2 Spieler: 10 Karten, 3 Spieler: 20 Karten, ...</left><left><u>Verlassene Mine</u>: +1 Coin</left><left><u>Zerstörte Bibliothek</u>: +1 Karte</left><left><u>Zerstörter Markt</u>: +1 Kauf</left><left><u>Zerstörtes Dorf</u>: +1 Aktion</left><left><u>Überlebende</u>: Sieh dir die obersten beiden Karten von deinem Nachziehstapel an. Lege beide Karten ab oder lege beide Karten in beliebiger Reihenfolge zurück auf deinen Nachziehstapel.</left>",
|
"description": "<left><u>Verlassene Mine</u>: +1 Coin</left><left><u>Zerstörte Bibliothek</u>: +1 Karte</left><left><u>Zerstörter Markt</u>: +1 Kauf</left><left><u>Zerstörtes Dorf</u>: +1 Aktion</left><left><u>Überlebende</u>: Sieh dir die obersten beiden Karten von deinem Nachziehstapel an. Lege beide Karten ab oder lege beide Karten in beliebiger Reihenfolge zurück auf deinen Nachziehstapel.</left>",
|
||||||
"extra": "Der Ruinen-Stapel besteht aus bis zu 5 unterschiedlichen Karten. Siehe hierzu auch unter Spielvorbereitung 'gemischte Stapel' und 'Ruinen'. Der Ruinen-Stapel ist Teil des Vorrats. Die offenliegende Karte (und nur diese) kann bzw. muss durch eine entsprechende Kartenanweisung genommen oder auch gekauft werden. Wenn du die Überlebenden ausspielst, siehst du dir die obersten beiden Karten von deinem Nachziehstapel an und entscheidest dich dann, ob du beide Karten auf deinen Ablagestapel legst oder ob du beide Karten in beliebiger Reihenfolge zurück auf deinen Nachziehstapel legst. Du darfst nicht eine Karte ablegen und die andere zurück auf den Nachziehstapel legen. Die übrigen 4 Ruinen-Karten sind selbsterklärend.",
|
"extra": "Der Ruinen-Stapel besteht aus bis zu 5 unterschiedlichen Karten. Siehe hierzu auch unter Spielvorbereitung 'gemischte Stapel' und 'Ruinen'. Der Ruinen-Stapel ist Teil des Vorrats. Die offenliegende Karte (und nur diese) kann bzw. muss durch eine entsprechende Kartenanweisung genommen oder auch gekauft werden. Wenn du die Überlebenden ausspielst, siehst du dir die obersten beiden Karten von deinem Nachziehstapel an und entscheidest dich dann, ob du beide Karten auf deinen Ablagestapel legst oder ob du beide Karten in beliebiger Reihenfolge zurück auf deinen Nachziehstapel legst. Du darfst nicht eine Karte ablegen und die andere zurück auf den Nachziehstapel legen. Die übrigen 4 Ruinen-Karten sind selbsterklärend.",
|
||||||
"name": "Ruinen"
|
"name": "Ruinen"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -30,7 +30,6 @@
|
|||||||
"Shelters": "Unterschlüpfe",
|
"Shelters": "Unterschlüpfe",
|
||||||
"Spirit": "Erscheinung",
|
"Spirit": "Erscheinung",
|
||||||
"Start Deck": "Startkarten",
|
"Start Deck": "Startkarten",
|
||||||
"Shelter Start Deck": "Unterschlupf",
|
|
||||||
"State": "Zustand",
|
"State": "Zustand",
|
||||||
"Trash": "Müll",
|
"Trash": "Müll",
|
||||||
"Traveller": "Reisender",
|
"Traveller": "Reisender",
|
||||||
|
|||||||
@ -503,15 +503,6 @@
|
|||||||
"tabCostHeightOffset": -1,
|
"tabCostHeightOffset": -1,
|
||||||
"tabTextHeightOffset": 0
|
"tabTextHeightOffset": 0
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"card_type": [
|
|
||||||
"Shelter Start Deck"
|
|
||||||
],
|
|
||||||
"card_type_image": "action-shelter.png",
|
|
||||||
"defaultCardCount": 0,
|
|
||||||
"tabCostHeightOffset": -1,
|
|
||||||
"tabTextHeightOffset": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"card_type": [
|
"card_type": [
|
||||||
"State"
|
"State"
|
||||||
|
|||||||
@ -483,7 +483,6 @@ class DividerDrawer(object):
|
|||||||
"MinionPro-Regular.ttf",
|
"MinionPro-Regular.ttf",
|
||||||
"MinionPro-Bold.ttf",
|
"MinionPro-Bold.ttf",
|
||||||
"MinionPro-It.ttf",
|
"MinionPro-It.ttf",
|
||||||
"MinionPro-Italic.ttf",
|
|
||||||
"Minion Pro Regular.ttf",
|
"Minion Pro Regular.ttf",
|
||||||
"Minion Pro Bold.ttf",
|
"Minion Pro Bold.ttf",
|
||||||
"Minion Pro Italic.ttf",
|
"Minion Pro Italic.ttf",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -115,43 +115,6 @@ def get_global_groups():
|
|||||||
GROUP_GLOBAL_CHOICES, GROUP_GLOBAL_VALID = get_global_groups()
|
GROUP_GLOBAL_CHOICES, GROUP_GLOBAL_VALID = get_global_groups()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def load_cards():
|
|
||||||
types_db_filepath = os.path.join("card_db", "types_db.json")
|
|
||||||
with get_resource_stream(types_db_filepath) as typefile:
|
|
||||||
Card.types = json.loads(
|
|
||||||
typefile.read().decode("utf-8"), object_hook=CardType.decode_json
|
|
||||||
)
|
|
||||||
assert Card.types, "Could not load any card types from database"
|
|
||||||
|
|
||||||
# extract unique types
|
|
||||||
type_list = []
|
|
||||||
for c in Card.types:
|
|
||||||
type_list = list(set(c.getTypeNames()) | set(type_list))
|
|
||||||
# set up the basic type translation. The actual language will be added later.
|
|
||||||
Card.type_names = {}
|
|
||||||
for t in type_list:
|
|
||||||
Card.type_names[t] = t
|
|
||||||
|
|
||||||
# turn Card.types into a dictionary for later
|
|
||||||
Card.types = dict(((c.getTypeNames(), c) for c in Card.types))
|
|
||||||
|
|
||||||
# Read in the card database
|
|
||||||
card_db_filepath = os.path.join("card_db", "cards_db.json")
|
|
||||||
with get_resource_stream(card_db_filepath) as cardfile:
|
|
||||||
cards = json.loads(
|
|
||||||
cardfile.read().decode("utf-8"), object_hook=Card.decode_json
|
|
||||||
)
|
|
||||||
assert cards, "Could not load any cards from database"
|
|
||||||
return cards
|
|
||||||
|
|
||||||
|
|
||||||
def get_promos():
|
|
||||||
cards = load_cards()
|
|
||||||
return [c.card_tag for c in cards if "promo" in c.cardset_tags]
|
|
||||||
|
|
||||||
PROMOS = get_promos()
|
|
||||||
|
|
||||||
def get_types(language="en_us"):
|
def get_types(language="en_us"):
|
||||||
# get a list of valid types
|
# get a list of valid types
|
||||||
language = language.lower()
|
language = language.lower()
|
||||||
@ -556,24 +519,12 @@ def parse_opts(cmdline_args=None):
|
|||||||
dest="curse10",
|
dest="curse10",
|
||||||
help="Package Curse cards into groups of ten cards.",
|
help="Package Curse cards into groups of ten cards.",
|
||||||
)
|
)
|
||||||
group_select.add_argument(
|
|
||||||
"--shelters-as-startdecks",
|
|
||||||
action="store_true",
|
|
||||||
dest="shelters_as_startdecks",
|
|
||||||
help="Package Curse cards into groups of ten cards.",
|
|
||||||
)
|
|
||||||
group_select.add_argument(
|
group_select.add_argument(
|
||||||
"--start-decks",
|
"--start-decks",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="start_decks",
|
dest="start_decks",
|
||||||
help="Include four start decks with the Base cards.",
|
help="Include four start decks with the Base cards.",
|
||||||
)
|
)
|
||||||
group_select.add_argument(
|
|
||||||
"--victory8_4split",
|
|
||||||
action="store_true",
|
|
||||||
dest="victory8_4split",
|
|
||||||
help="Split Base victory cards into two groups of 8 and 4 cards.",
|
|
||||||
)
|
|
||||||
group_select.add_argument(
|
group_select.add_argument(
|
||||||
"--include-blanks",
|
"--include-blanks",
|
||||||
type=int,
|
type=int,
|
||||||
@ -634,15 +585,6 @@ def parse_opts(cmdline_args=None):
|
|||||||
", ".join("%s" % x for x in TYPE_CHOICES)
|
", ".join("%s" % x for x in TYPE_CHOICES)
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
group_select.add_argument(
|
|
||||||
"--only-promo",
|
|
||||||
nargs="*",
|
|
||||||
action="append",
|
|
||||||
dest="only_promo",
|
|
||||||
help="Limit promos. Available cards: {}".format(
|
|
||||||
", ".join("%s" % x for x in PROMOS)
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
# Divider Sleeves/Wrappers
|
# Divider Sleeves/Wrappers
|
||||||
group_wrapper = parser.add_argument_group(
|
group_wrapper = parser.add_argument_group(
|
||||||
@ -992,15 +934,6 @@ def clean_opts(options):
|
|||||||
set([item.lower() for sublist in options.only_type_all for item in sublist])
|
set([item.lower() for sublist in options.only_type_all for item in sublist])
|
||||||
)
|
)
|
||||||
|
|
||||||
if options.only_promo is None:
|
|
||||||
# No instance given, so default to empty list
|
|
||||||
options.only_promo = []
|
|
||||||
else:
|
|
||||||
# options.only_promo is a list of lists. Reduce to single lowercase list
|
|
||||||
options.only_promo = list(
|
|
||||||
set([item for sublist in options.only_promo for item in sublist])
|
|
||||||
)
|
|
||||||
|
|
||||||
if options.group_global is None:
|
if options.group_global is None:
|
||||||
options.group_global = []
|
options.group_global = []
|
||||||
elif not any(options.group_global):
|
elif not any(options.group_global):
|
||||||
@ -1199,8 +1132,36 @@ def find_index_of_object(lst=[], attributes={}):
|
|||||||
# nothing matched
|
# nothing matched
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def read_card_data(options):
|
def read_card_data(options):
|
||||||
cards = load_cards()
|
|
||||||
|
# Read in the card types
|
||||||
|
types_db_filepath = os.path.join("card_db", "types_db.json")
|
||||||
|
with get_resource_stream(types_db_filepath) as typefile:
|
||||||
|
Card.types = json.loads(
|
||||||
|
typefile.read().decode("utf-8"), object_hook=CardType.decode_json
|
||||||
|
)
|
||||||
|
assert Card.types, "Could not load any card types from database"
|
||||||
|
|
||||||
|
# extract unique types
|
||||||
|
type_list = []
|
||||||
|
for c in Card.types:
|
||||||
|
type_list = list(set(c.getTypeNames()) | set(type_list))
|
||||||
|
# set up the basic type translation. The actual language will be added later.
|
||||||
|
Card.type_names = {}
|
||||||
|
for t in type_list:
|
||||||
|
Card.type_names[t] = t
|
||||||
|
|
||||||
|
# turn Card.types into a dictionary for later
|
||||||
|
Card.types = dict(((c.getTypeNames(), c) for c in Card.types))
|
||||||
|
|
||||||
|
# Read in the card database
|
||||||
|
card_db_filepath = os.path.join("card_db", "cards_db.json")
|
||||||
|
with get_resource_stream(card_db_filepath) as cardfile:
|
||||||
|
cards = json.loads(
|
||||||
|
cardfile.read().decode("utf-8"), object_hook=Card.decode_json
|
||||||
|
)
|
||||||
|
assert cards, "Could not load any cards from database"
|
||||||
|
|
||||||
set_db_filepath = os.path.join("card_db", "sets_db.json")
|
set_db_filepath = os.path.join("card_db", "sets_db.json")
|
||||||
with get_resource_stream(set_db_filepath) as setfile:
|
with get_resource_stream(set_db_filepath) as setfile:
|
||||||
@ -1247,17 +1208,6 @@ def read_card_data(options):
|
|||||||
# Add the new dividers
|
# Add the new dividers
|
||||||
cards.extend(new_cards)
|
cards.extend(new_cards)
|
||||||
|
|
||||||
if options.shelters_as_startdecks:
|
|
||||||
cards = [c for c in cards if "Shelter" not in c.types]
|
|
||||||
ShelterStartDeck_index = find_index_of_object(cards, {"card_tag": "Shelter Start Deck"})
|
|
||||||
for i in range(3): ## add 3 more card (sum=4)
|
|
||||||
cards.append(copy.deepcopy(cards[ShelterStartDeck_index]))
|
|
||||||
else:
|
|
||||||
# Remove Shelter Start Deck prototype. It is not needed.
|
|
||||||
ShelterStartDeck_index = find_index_of_object(cards, {"card_tag": "Shelter Start Deck"})
|
|
||||||
if ShelterStartDeck_index is not None:
|
|
||||||
del cards[ShelterStartDeck_index]
|
|
||||||
|
|
||||||
# Add any blank cards
|
# Add any blank cards
|
||||||
if options.include_blanks > 0:
|
if options.include_blanks > 0:
|
||||||
for x in range(0, options.include_blanks):
|
for x in range(0, options.include_blanks):
|
||||||
@ -1271,7 +1221,6 @@ def read_card_data(options):
|
|||||||
)
|
)
|
||||||
cards.append(c)
|
cards.append(c)
|
||||||
|
|
||||||
|
|
||||||
# Create Start Deck dividers. 4 sets. Adjust totals for other cards, too.
|
# Create Start Deck dividers. 4 sets. Adjust totals for other cards, too.
|
||||||
# Do early before propagating to various sets.
|
# Do early before propagating to various sets.
|
||||||
# The card database contains one prototype divider that needs to be either duplicated or deleted.
|
# The card database contains one prototype divider that needs to be either duplicated or deleted.
|
||||||
@ -1318,25 +1267,6 @@ def read_card_data(options):
|
|||||||
if StartDeck_index is not None:
|
if StartDeck_index is not None:
|
||||||
del cards[StartDeck_index]
|
del cards[StartDeck_index]
|
||||||
|
|
||||||
|
|
||||||
# Move 12er packs of base victory cards into two stacks of 8 and 4. Can only be used together with start_decks
|
|
||||||
if options.victory8_4split:
|
|
||||||
for card_tag in ("Duchy", "Estate", "Province", "Colony"):
|
|
||||||
i = find_index_of_object(cards, {"card_tag": card_tag})
|
|
||||||
if i is None:
|
|
||||||
raise "Error 1!"
|
|
||||||
card = cards[i]
|
|
||||||
if card.getCardCount() != 12:
|
|
||||||
raise "Error 2!"
|
|
||||||
card.setCardCount(8)
|
|
||||||
|
|
||||||
new_card = copy.deepcopy(card)
|
|
||||||
new_card.setCardCount(4)
|
|
||||||
cards.append(new_card)
|
|
||||||
|
|
||||||
if options.only_promo:
|
|
||||||
cards = [c for c in cards if ("promo" not in c.cardset_tags or c.card_tag in options.only_promo)]
|
|
||||||
|
|
||||||
# Set cardset_tag and expand cards that are used in multiple sets
|
# Set cardset_tag and expand cards that are used in multiple sets
|
||||||
new_cards = []
|
new_cards = []
|
||||||
for card in cards:
|
for card in cards:
|
||||||
@ -1373,7 +1303,6 @@ class CardSorter(object):
|
|||||||
self.sort_key = self.by_expansion_sort_key
|
self.sort_key = self.by_expansion_sort_key
|
||||||
|
|
||||||
self.baseOrder = [
|
self.baseOrder = [
|
||||||
"Start Deck",
|
|
||||||
"Copper",
|
"Copper",
|
||||||
"Silver",
|
"Silver",
|
||||||
"Gold",
|
"Gold",
|
||||||
@ -1385,17 +1314,16 @@ class CardSorter(object):
|
|||||||
"Province",
|
"Province",
|
||||||
"Colony",
|
"Colony",
|
||||||
"Trash",
|
"Trash",
|
||||||
|
"Start Deck",
|
||||||
]
|
]
|
||||||
self.baseCards = []
|
self.baseCards = []
|
||||||
for tag in self.baseOrder:
|
for tag in self.baseOrder:
|
||||||
if tag in baseCards:
|
if tag in baseCards:
|
||||||
for name in baseCards[tag]:
|
self.baseCards.append(baseCards[tag])
|
||||||
self.baseCards.append(name)
|
|
||||||
del baseCards[tag]
|
del baseCards[tag]
|
||||||
# now pick up those that have not been specified
|
# now pick up those that have not been specified
|
||||||
for tag in baseCards:
|
for tag in baseCards:
|
||||||
for name in baseCards[tag]:
|
self.baseCards.append(baseCards[tag])
|
||||||
self.baseCards.append(name)
|
|
||||||
|
|
||||||
# When sorting cards, want to always put "base" cards after all
|
# When sorting cards, want to always put "base" cards after all
|
||||||
# kingdom cards, and order the base cards in a particular order
|
# kingdom cards, and order the base cards in a particular order
|
||||||
@ -1431,7 +1359,6 @@ class CardSorter(object):
|
|||||||
def by_cost_sort_key(self, card):
|
def by_cost_sort_key(self, card):
|
||||||
"""
|
"""
|
||||||
Enforce color order:
|
Enforce color order:
|
||||||
0 Start Deck / Shelter Start Deck
|
|
||||||
1 Action
|
1 Action
|
||||||
2 Treasure
|
2 Treasure
|
||||||
3 Curse
|
3 Curse
|
||||||
@ -1440,7 +1367,7 @@ class CardSorter(object):
|
|||||||
6 Landmark
|
6 Landmark
|
||||||
7 Way (?)
|
7 Way (?)
|
||||||
8 Project (?)
|
8 Project (?)
|
||||||
9 Ruins
|
9 Ruine
|
||||||
10 Hideout
|
10 Hideout
|
||||||
11 Hex (?)
|
11 Hex (?)
|
||||||
12 Night (?)
|
12 Night (?)
|
||||||
@ -1450,11 +1377,7 @@ class CardSorter(object):
|
|||||||
"""
|
"""
|
||||||
types = card.getType().getTypeNames()
|
types = card.getType().getTypeNames()
|
||||||
# order of if-statements matters!
|
# order of if-statements matters!
|
||||||
if "Start Deck" in types:
|
if "Ruins" in types:
|
||||||
type_index = 0
|
|
||||||
elif "Shelter Start Deck" in types:
|
|
||||||
type_index = 0
|
|
||||||
elif "Ruins" in types:
|
|
||||||
type_index = 9
|
type_index = 9
|
||||||
elif "Shelter" in types:
|
elif "Shelter" in types:
|
||||||
type_index = 10
|
type_index = 10
|
||||||
@ -1512,7 +1435,7 @@ class CardSorter(object):
|
|||||||
return self.sort_key(card)
|
return self.sort_key(card)
|
||||||
|
|
||||||
|
|
||||||
def add_card_text(cards, victory8_4split, language="en_us"):
|
def add_card_text(cards, language="en_us"):
|
||||||
language = language.lower()
|
language = language.lower()
|
||||||
# Read in the card text file
|
# Read in the card text file
|
||||||
card_text_filepath = os.path.join(
|
card_text_filepath = os.path.join(
|
||||||
@ -1527,10 +1450,6 @@ def add_card_text(cards, victory8_4split, language="en_us"):
|
|||||||
if card.card_tag in card_text:
|
if card.card_tag in card_text:
|
||||||
if "name" in card_text[card.card_tag].keys():
|
if "name" in card_text[card.card_tag].keys():
|
||||||
card.name = card_text[card.card_tag]["name"]
|
card.name = card_text[card.card_tag]["name"]
|
||||||
|
|
||||||
if victory8_4split and card.card_tag in ("Duchy", "Estate", "Province", "Colony"):
|
|
||||||
card.name = card.name + f" ({card.getCardCount()})"
|
|
||||||
|
|
||||||
if "description" in card_text[card.card_tag].keys():
|
if "description" in card_text[card.card_tag].keys():
|
||||||
card.description = card_text[card.card_tag]["description"]
|
card.description = card_text[card.card_tag]["description"]
|
||||||
if "extra" in card_text[card.card_tag].keys():
|
if "extra" in card_text[card.card_tag].keys():
|
||||||
@ -1884,9 +1803,9 @@ def filter_sort_cards(cards, options):
|
|||||||
cards = keep_cards
|
cards = keep_cards
|
||||||
|
|
||||||
# Now add text to the cards. Waited as long as possible to catch all groupings
|
# Now add text to the cards. Waited as long as possible to catch all groupings
|
||||||
cards = add_card_text(cards, options.victory8_4split, LANGUAGE_DEFAULT)
|
cards = add_card_text(cards, LANGUAGE_DEFAULT)
|
||||||
if options.language != LANGUAGE_DEFAULT:
|
if options.language != LANGUAGE_DEFAULT:
|
||||||
cards = add_card_text(cards, options.victory8_4split, options.language)
|
cards = add_card_text(cards, options.language)
|
||||||
|
|
||||||
# Get list of cards from a file
|
# Get list of cards from a file
|
||||||
if options.cardlist:
|
if options.cardlist:
|
||||||
@ -1898,21 +1817,13 @@ def filter_sort_cards(cards, options):
|
|||||||
cards = [card for card in cards if card.name in cardlist]
|
cards = [card for card in cards if card.name in cardlist]
|
||||||
|
|
||||||
# Set up the card sorter
|
# Set up the card sorter
|
||||||
basecards = {}
|
|
||||||
for card in cards:
|
|
||||||
if "base" in [set_name.lower() for set_name in card.cardset_tags]:
|
|
||||||
if card.card_tag not in basecards:
|
|
||||||
basecards[card.card_tag] = []
|
|
||||||
basecards[card.card_tag].append(card.name)
|
|
||||||
|
|
||||||
cardSorter = CardSorter(
|
cardSorter = CardSorter(
|
||||||
options.order,
|
options.order,
|
||||||
#{
|
{
|
||||||
# card.card_tag: card.name
|
card.card_tag: card.name
|
||||||
# for card in cards
|
for card in cards
|
||||||
# if "base" in [set_name.lower() for set_name in card.cardset_tags]
|
if "base" in [set_name.lower() for set_name in card.cardset_tags]
|
||||||
#},
|
},
|
||||||
basecards
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Optionally remove base cards from expansions that have them
|
# Optionally remove base cards from expansions that have them
|
||||||
@ -1943,7 +1854,7 @@ def filter_sort_cards(cards, options):
|
|||||||
# Use the base card ordering
|
# Use the base card ordering
|
||||||
order = 100 + cardSorter.baseOrder.index(c.card_tag)
|
order = 100 + cardSorter.baseOrder.index(c.card_tag)
|
||||||
cardnamesByExpansion[c.cardset][c.card_tag] = {
|
cardnamesByExpansion[c.cardset][c.card_tag] = {
|
||||||
"name": c.name.strip().replace(" (4)", "").replace(" (8)", "").replace(" ", " "),
|
"name": c.name.strip().replace(" ", " "),
|
||||||
"randomizer": c.randomizer,
|
"randomizer": c.randomizer,
|
||||||
"count": 1,
|
"count": 1,
|
||||||
"sort": "%03d%s"
|
"sort": "%03d%s"
|
||||||
@ -1972,7 +1883,7 @@ def filter_sort_cards(cards, options):
|
|||||||
if not n["randomizer"]:
|
if not n["randomizer"]:
|
||||||
# Highlight cards without Randomizers
|
# Highlight cards without Randomizers
|
||||||
n["name"] = "<i>" + n["name"] + "</i>"
|
n["name"] = "<i>" + n["name"] + "</i>"
|
||||||
if n["count"] > 1 and exp_name != "Basis":
|
if n["count"] > 1:
|
||||||
# Add number of copies
|
# Add number of copies
|
||||||
n["name"] = (
|
n["name"] = (
|
||||||
"{} \u00d7 ".format(n["count"]) + n["name"]
|
"{} \u00d7 ".format(n["count"]) + n["name"]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user