I’ve been wanting to get started using XMage and thought it would be fun to play a few matches against the AI with the GRN Guild Kit decks (GK1) using the original printings. I found decklists on sites like mtg.wtf that list the card names and quantities, but they don’t specify the original set name and card number for each card.

For example, this GitHub repo has decklists for various preconstructed decks, but also lacks the specific set information and card numbers.

What I’m really looking for are decklists that include the card name, quantity, set name, and card number in the set for each card, ideally formatted like this:

quantity [SETCODE:collector number] cardname

This .dck file format used by XMage would allow me to easily import the exact preconstructed deck I want to play with the original printings, without having to rebuild it.

It made me think how nice it would be to have all the preconstructed decks available as .dck files with the original printings specified, nicely organized into folders by product. That way I could easily grab the exact deck I want to play with in XMage without having to build it manually.

Does anyone know if prebuilt decklists with detailed set data like this already exist somewhere for preconstructed products like the Guild Kits? Or if not, I may try writing a script to generate them before manually creating the files myself.

Please let me know if you know of any resources where I could find complete decklists for preconstructed decks specifying the card names, quantities, set names, and card numbers! This would save me a lot of time in recreating the decks accurately in XMage.

  • counterspell@mtgzone.comOP
    link
    fedilink
    English
    arrow-up
    0
    ·
    11 months ago

    https://github.com/taw/magic-preconstructed-decks-data/blob/master/README.md

    This repository contains machine readable decklist data generated from:

    Files

    decks.json has traditional cards + sideboard structure, with commanders reusing sideboard.

    decks_v2.json has cards + sideboard + commander structure. You should use this one.

    Data format

    Data file i a JSON array, with every element representing one deck.

    Fields for each deck:

    • name - deck name
    • type - deck type
    • set_code - mtgjson set code
    • set_name - set name
    • release_date - deck release date (many decks are released much after their set)
    • cards - list of cards in the deck’s mainboard
    • sideboard - list of cards in the deck’s sideboard
    • commander - any commanders deck has (can be multiple for partners)

    Each card is:

    • name - card name
    • set_code - mtgjson set card is from (decks often have cards from multiple sets)
    • number - card collector number
    • foil - is this a foil version
    • count - how many of given card
    • mtgjson_uuid - mtgjson uuid
    • multiverseid - Gatherer multiverseid of card if cards is on Gatherer (optional field)

    Data Limitations

    All precons ever released by Wizards of the Coast should be present, and decklists should always contain right cards, with correct number and foiling, and mainboard/sideboard/commander status.

    Source decklists generally do not say which printing (set and card number) each card is from, so we need to use heuristics to figure that out.

    We use a script to infer most likely set for each card based on some heuristics, and as far as I know, it always matches perfectly.

    That just leaves situation where there are multiple printings of same card in same set.

    If some of the printings are special (full art basics, Jumpstart basics, showcase frames etc.), these have been manually chosen to match every product.

    If you see any errors for anything mentioned above, please report them, so they can be fixed.

    That just leaves the case of multiple non-special printings of same card in same set - most commonly basic lands. In such case one of them is chosen arbitrarily, even though in reality a core set deck with 16 Forests would likely have 4 of each Forest in that core set, not 16 of one of them.

    Feel free to create issue with data on exact priting if you want, but realistically we’ll never get them all, and it’s not something most people care about much.

    • counterspell@mtgzone.comOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      edit-2
      11 months ago

      Here are step-by-step instructions to migrate decks_v2.json to .dck files with the desired structure, assuming no prior knowledge of the command line:

      1. Open a web browser and go to the following link: https://github.com/taw/magic-preconstructed-decks
      2. Click the green “Code” button and select “Download ZIP” to download the repository as a ZIP file.
      3. Extract the ZIP file to a folder on your computer.
      4. Open the folder and create a new file migrate_decks.py.
      5. Right-click on the file and select “Open With” and then choose a text editor such as Notepad or Sublime Text.
      6. Copy the following Python script and paste it into the text editor:
      import json
      
      def migrate_decks_v2():
          with open('decks_v2.json', 'r') as f:
              decks = json.load(f)
          for deck in decks:
              filename = deck['name'].lower()replace(' ', '_') + '.dck'
              with open(filename, 'w') as f:
                  f.write(f"// {deck['name']}\n")
                  f.write(f"// Set: {deck['set_name']} ({deck['set_code']})\n")
                  f.write(f"// Release Date: {deck['release_date']}\n")
                  f.write('\n')
                  for card in deck['cards']:
                      f.write(f"{card['count']} [{card['set_code']}:{card['number']}] {card['name']}\n")
                  f.write('\n')
                  f.write('SB:\n')
                  for card in deck['sideboard']:
                      f.write(f"{card['count']} [{card['set_code']}:{card['number']}] {card['name']}\n")
      
      migrate_decks_v2()
      
      1. Open a terminal or command prompt on your computer. On Windows, you can do this by pressing the Windows key and typing “cmd” and then pressing Enter.
      2. Navigate to the folder where the decks_v2.json file and the migrate_decks.py file are located. You can do this by typing cd followed by the path to the folder, such as cd C:\Users\YourName\Downloads\magic-preconstructed-decks-master.
      3. Type python migrate_decks.py and press Enter to run the Python script.
      4. Wait for the script to finish running. It will create a .dck file for each deck in the decks_v2.json file, with the desired structure.

      Note: If you don’t have Python installed on your computer, you can download it from the official website: https://www.python.org/downloads/. Choose the latest version for your operating system and follow the installation instructions.

      TODO: need to check what to do with the commander in EDH decklists

  • counterspell@mtgzone.comOP
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    11 months ago

    tappedout exports as csv with set information:

    .csv
    Board,Qty,Name,Printing,Foil,Alter,Signed,Condition,Language
    main,1,Beacon Bolt,GRN,,,,,
    
    .dck
    1 [GRN:?] Beacon Bolt
    

    Here is a Python script that reads the .csv file and writes the required format to a .dck file. This script uses the csv module to read the .csv file and write to the .dck file.

    import csv
    
    def read_csv_file(file_path):
        with open(file_path, 'r') as file:
            return list(csv.reader(file))
    
    def write_to_dck_file(file_path, data):
        with open(file_path, 'w') as file:
            file.writelines(data)
    
    def convert_csv_to_dck_format(csv_data):
        csv_header, *csv_rows = csv_data
        return [format_dck_line(row) for row in csv_rows]
    
    def format_dck_line(row):
        quantity, name, printing = row[1], row[2], row[3]
        return f"{quantity} [{printing}:?] {name}\n"
    
    csv_data = read_csv_file('input.csv')
    dck_data = convert_csv_to_dck_format(csv_data)
    write_to_dck_file('output.dck', dck_data)
    

    This script works as follows:

    1. It opens the .csv file in read mode.
    2. It creates a csv reader object to read the .csv file.
    3. It skips the header row using the next() function.
    4. It opens the .dck file in write mode.
    5. For each row in the .csv file, it formats the line as per the .dck file format. The format is “Quantity [Printing:?] Name”. Here, Quantity is the second column in the .csv file, Printing is the fourth column, and Name is the third column.
    6. It writes the formatted line to the .dck file.

    Please replace ‘input.csv’ with the path to your .csv file and ‘output.dck’ with the path where you want to create the .dck file. Run this script in a Python environment, and it will create the .dck file with the required format.