diff --git a/py-card_explorer/README.md b/py-card_explorer/README.md new file mode 100644 index 0000000..b78c84e --- /dev/null +++ b/py-card_explorer/README.md @@ -0,0 +1,48 @@ +# py-card_explorer + +Questo è uno script in python che permette di trovare tutte le carte di Magic implementate nell'API +a cui Java fa riferimento per ottenere i dati. + +## Installazione + +È consigliato utilizzare un ambiente come `venv` o `anaconda` per eseguire questo script. +Il file `create_env.sh` creerà in automatico un ambiente `venv`. + +Una volta creato l'abimente ed attivato (per venv `source .venv/bin/activate`) utilizzare il seguente comando per installare i requirements +necessari: + +`pip install -r requirements.txt` + +o in alternativa: + +`python3 -m pip install -r requirements.txt` + +## Utilizzo + +Una volta installati i requirements necessari, se non avete attivato l'abimente fatelo (per venv `source .venv/bin/actiate`) +e lanciate lo script con + +`python3 mtg_card_explorer.py` + +Sono implementate 4 funzioni differenti: + +- `Trova le carte esistenti`: avvia la ricerca delle carte presenti nell'API. +Effettua una chiamata con ID progressivo, attende qualche secondo per evitare di venir bloccato +dal server e continua. È possibile specificare i seguenti parametri: + - `ID start`: id della carta da cui partire per la ricerca + - `ID end`: ultimo id della carta dopo il quale termina la ricerca +Se lasciati vuoti utilizzeranno l'ultimo id trovato durante la ricerca (verrà creato un file apposito dove saranno salvati i dati). +È possibile interrompere e riprendere la ricerca quando si vuole, lo script è abbastanza intelligente da non aggiungere doppioni. +Una volta terminata la ricerca verrà generato un file di nome `all_cards.json` dove saranno contenuti tutti i dati (sotto forma di josn) +delle carte trovate durante la ricerca. +- `Esplora le carte trovate`: una volta trovate tutte le carte con la fase +di ricerca apposita, questo stamperà a video una tebella con tutte le carte +trovate ed alcune loro proprietà di interesse. +- `Cerca nelle carte`: permette di cercare per parole chiavi all'interno di alcuni campi come: + - `type` + - `subtype` + - `name` + - `abilities` +- `Rimuovi tutti i file generati da questo script`: elimina tutti i file generati da questo script: + - `all_cards.json` + - `.lastindex` diff --git a/py-card_explorer/create_env.sh b/py-card_explorer/create_env.sh new file mode 100755 index 0000000..17f58bf --- /dev/null +++ b/py-card_explorer/create_env.sh @@ -0,0 +1 @@ +python3 -m venv .venv diff --git a/py-card_explorer/mtg_card_explorer.py b/py-card_explorer/mtg_card_explorer.py new file mode 100644 index 0000000..ba0a0e3 --- /dev/null +++ b/py-card_explorer/mtg_card_explorer.py @@ -0,0 +1,222 @@ +import requests +import json +from time import sleep +from os.path import exists +import inquirer +from pprint import pprint +from os import remove + +from rich.console import Console +from rich.table import Table +from rich.progress import track +from rich.progress import Progress +from rich.prompt import Prompt +from rich.live import Live +from rich.layout import Layout + + +# --- Global VARS +CARD_FILE = "all_cards.json" +LAST_INDEX_FILE = ".lastindex" + +API_URL = "https://www.afterlifegdr.com/test/mtg/testjson.php" + +CMDS_MAP = ['Trova le carte esistenti', + 'Esplora le carte trovate', + 'Rimuovi tutti i file generati da questo script', + 'Cerca nelle carte', + ] + + +# --- Output Formatted Consoles +console = Console() +success_console = Console(stderr=True, style="bold green") +info_console = Console(stderr=True, style="bold") +error_console = Console(stderr=True, style="bold red") + + +# --- Aux Functions +def get_card(card_id: int) -> dict: + response = requests.get( + API_URL, + params={'cardid': card_id}, + timeout=3 + ) + + if response.status_code != 200: + error_console.print("Errore nella chiamata API !") + return None + + return response.json() + + +def generate_card_table(cards: list, print_table=True) -> Table: + table = Table(title="Carte Trovate", show_lines=True) + + table.add_column("ID", style="cyan", no_wrap=True) + table.add_column("Nome", style="magenta") + table.add_column("Keyword Abilities", style="red") + table.add_column("Subtipes", style="green") + table.add_column("Text Abilities", style="white") + + for card in cards: + table.add_row( + str(card['card']['cardID']), + card['card']['cardName'], + ", ".join(card['face1']['keywordAbilities']), + ", ".join(card['face1']['subtypes']), + " | ".join(card['face1']['abilities']) + ) + + if print_table: + console.print(table) + info_console.print(f"Totale Carte: {len(cards)}") + + return table + + +def check_cards_file(print_message=True): + if not exists(CARD_FILE): + if print_message: + error_console.print("Devi prima trovare le carte !") + + return False + + return True + + +def open_cards_file(print_message=True): + if not exists(CARD_FILE): + if print_message: + error_console.print("Devi prima trovare le carte !") + + return None + + with open(CARD_FILE, "r") as conf: + if print_message: + info_console.print(" Riapro la lista di carte già trovate") + + cards = json.loads(conf.read()) + + return cards + + +# --- Commands Functions +def query_all_cards(start=0, end=3000): + cards = [] + + if isinstance(end, str): + if end != '': + end = int(end) + else: + end = 3000 + + if isinstance(start, str): + if start != '': + start = int(start) + else: + start = 0 + + if exists(LAST_INDEX_FILE) and start == 0: + with open(LAST_INDEX_FILE, "r") as conf: + info_console.print(" Riprendo dall'ultimo id provato") + start = int(conf.read()) + + if exists(CARD_FILE): + with open(CARD_FILE, "r") as conf: + info_console.print(" Riapro la lista di carte già trovate") + cards = json.loads(conf.read()) + + max_range = range(start, end) + info_console.print(f" Inizio la ricerca degli ID (da {start} a {end})") + + try: + with Progress(console=success_console) as progres: + task = progres.add_task( + "Trovo le carte ...", completed=start, total=end) + for id in max_range: + sleep(.5) + progres.advance(task) + progres.update( + task, description=f"Trovo le carte (ID: {id}) ...") + + tmp = get_card(id) + + if tmp is None: + continue + + success_console.print(f" ++ Trovata Carta {id}") + + if tmp in cards: + success_console.print(" [yellow]Carta esistente ![/yellow]") + continue + + cards.append(tmp) + + except KeyboardInterrupt: + info_console.print(" Interrotta ricerca ") + except Exception: + error_console.print(" Si è verificato qualche problema :(") + finally: + with open(LAST_INDEX_FILE, "w") as conf: + info_console.print(" Salvo l'ultimo id provato") + conf.write(f"{id}") + + info_console.print(" Ricerca Terminata") + + return cards + + +def browse_cards(): + cards = open_cards_file() + + if cards is None: + return + + _ = generate_card_table(cards) + + +def search_card(): + if not exists(CARD_FILE): + error_console.print("Devi prima trovare le carte !") + return + + with open(CARD_FILE, "r") as conf: + info_console.print(" Riapro la lista di carte già trovate") + cards = json.loads(conf.read()) + + while True: + search_word = Prompt.ask("[[yellow bold]?[/yellow bold]] Cerca una parola", default="'q' per uscire") + + if search_word == 'q': + break + + filtered_cards = [card for card in cards if search_word in card['card']['cardName'] or search_word == str(card['card']['cardID']) or any(search_word in s.lower() for s in card['face1']['keywordAbilities']) or any(search_word in s.lower() for s in card['face1']['subtypes']) or any(search_word in s.lower() for s in card['face1']['types'])] + + _ = generate_card_table(filtered_cards) + + +def main(): + match inquirer.list_input("Comandi", choices=list(CMDS_MAP)): + case 'Trova le carte esistenti': + start = inquirer.text("ID Partenza (default l'ultimo usato)") + end = inquirer.text("ID Fine (default 3000)") + result = query_all_cards(start=start, end=end) + + with open(CARD_FILE, "w") as f: + f.write(json.dumps(result)) + + case 'Esplora le carte trovate': + browse_cards() + + case 'Cerca nelle carte': + search_card() + + case 'Rimuovi tutti i file generati da questo script': + info_console.print(" Rimuovo tutti i file generati") + remove(CARD_FILE) + remove(LAST_INDEX_FILE) + + +if __name__ == "__main__": + main() diff --git a/py-card_explorer/old_allcards.json b/py-card_explorer/old_allcards.json new file mode 100644 index 0000000..34d09cd --- /dev/null +++ b/py-card_explorer/old_allcards.json @@ -0,0 +1 @@ +[{"card": {"doublefacedCard": false, "cardID": 880, "alternateCardName": "", "cardName": "Forgotten Creation", "splitCard": false, "flipCard": false, "multiverseid": 409806}, "face1": {"keywordAbilities": ["skulk"], "toughness": "3", "colorIndicator": ["blue"], "subtypes": ["Zombie", "Horror"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{U}", "levelerCard": false, "power": "3", "faceName": "Forgotten Creation", "loyalty": "0", "types": ["creature"], "abilities": ["skulk (this creature can't be blocked by creatures with greater power.)", "at the beginning of your upkeep, you may discard all the cards in your hand. if you do, draw that many cards."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 911, "alternateCardName": "", "cardName": "Crow of Dark Tidings", "splitCard": false, "flipCard": false, "multiverseid": 409852}, "face1": {"keywordAbilities": ["flying"], "toughness": "1", "colorIndicator": ["black"], "subtypes": ["Zombie", "Bird"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{B}", "levelerCard": false, "power": "2", "faceName": "Crow of Dark Tidings", "loyalty": "0", "types": ["creature"], "abilities": ["flying", "when crow of dark tidings enters the battlefield or dies, put the top two cards of your library into your graveyard."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1049, "alternateCardName": "", "cardName": "True-Faith Censer", "splitCard": false, "flipCard": false, "multiverseid": 410035}, "face1": {"keywordAbilities": ["equip", "vigilance"], "toughness": "", "colorIndicator": [], "subtypes": ["Equipment"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}", "levelerCard": false, "power": "", "faceName": "True-Faith Censer", "loyalty": "0", "types": ["artifact"], "abilities": ["equipped creature gets +1/+1 and has vigilance.", "as long as equipped creature is a human, it gets an additional +1/+0.", "equip {2} ({2}: attach to target creature you control. equip only as a sorcery.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1064, "alternateCardName": "", "cardName": "Plains", "splitCard": false, "flipCard": false, "multiverseid": 2773}, "face1": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": ["Plains"], "supertypes": ["basic"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "", "levelerCard": false, "power": "", "faceName": "Plains", "loyalty": "0", "types": ["land"], "abilities": ["W"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1065, "alternateCardName": "", "cardName": "Island", "splitCard": false, "flipCard": false, "multiverseid": 2768}, "face1": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": ["Island"], "supertypes": ["basic"], "levelerAbilities": {"toughness": "", "N2": "", "N1": "", "power": "", "abilities": []}, "manaCost": "", "levelerCard": false, "power": "", "faceName": "Island", "loyalty": "0", "types": ["land"], "abilities": ["U"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N2": "", "N1": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1066, "alternateCardName": "", "cardName": "Swamp", "splitCard": false, "flipCard": false, "multiverseid": 397467}, "face1": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": ["Swamp"], "supertypes": ["basic"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "", "levelerCard": false, "power": "", "faceName": "Swamp", "loyalty": "0", "types": ["land"], "abilities": ["B"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1067, "alternateCardName": "", "cardName": "Mountain", "splitCard": false, "flipCard": false, "multiverseid": 2763}, "face1": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": ["Mountain"], "supertypes": ["basic"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "", "levelerCard": false, "power": "", "faceName": "Mountain", "loyalty": "0", "types": ["land"], "abilities": ["R"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1068, "alternateCardName": "", "cardName": "Forest", "splitCard": false, "flipCard": false, "multiverseid": 2748}, "face1": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": ["Forest"], "supertypes": ["basic"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "", "levelerCard": false, "power": "", "faceName": "Forest", "loyalty": "0", "types": ["land"], "abilities": ["G"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1083, "alternateCardName": "", "cardName": "Jace, Unraveler of Secrets", "splitCard": false, "flipCard": false, "multiverseid": 409812}, "face1": {"keywordAbilities": [], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Jace"], "supertypes": [], "levelerAbilities": {"toughness": "", "N2": "", "N1": "", "power": "", "abilities": []}, "manaCost": "{3}{U}{U}", "levelerCard": false, "power": "", "faceName": "Jace, Unraveler of Secrets", "loyalty": "5", "types": ["planeswalker"], "abilities": ["+1: scry 1, then draw a card.", "\u22122: return target creature to its owner's hand.", "\u22128: you get an emblem with \"whenever an opponent casts his or her first spell each turn, counter that spell.\""], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N2": "", "N1": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1169, "alternateCardName": "", "cardName": "Flight", "splitCard": false, "flipCard": false, "multiverseid": 401}, "face1": {"keywordAbilities": ["enchant", "flying"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{U}", "levelerCard": false, "power": "", "faceName": "Flight", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant creature", "enchanted creature has flying."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1201, "alternateCardName": "", "cardName": "Llanowar Elves", "splitCard": false, "flipCard": false, "multiverseid": 189878}, "face1": {"keywordAbilities": [], "toughness": "1", "colorIndicator": ["green"], "subtypes": ["Elf", "Druid"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{G}", "levelerCard": false, "power": "1", "faceName": "Llanowar Elves", "loyalty": "0", "types": ["creature"], "abilities": ["{T}{G}: add {G} to your mana pool."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1418, "alternateCardName": "", "cardName": "Armament Master", "splitCard": false, "flipCard": false, "multiverseid": 190420}, "face1": {"keywordAbilities": ["equip"], "toughness": "2", "colorIndicator": ["white"], "subtypes": ["Kor", "Soldier"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{W}{W}", "levelerCard": false, "power": "2", "faceName": "Armament Master", "loyalty": "0", "types": ["creature"], "abilities": ["other kor creatures you control get +2/+2 for each equipment attached to armament master."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1459, "alternateCardName": "", "cardName": "Welkin Tern", "splitCard": false, "flipCard": false, "multiverseid": 191353}, "face1": {"keywordAbilities": ["flying", "reach"], "toughness": "1", "colorIndicator": ["blue"], "subtypes": ["Bird"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{U}", "levelerCard": false, "power": "2", "faceName": "Welkin Tern", "loyalty": "0", "types": ["creature"], "abilities": ["flying (this creature can't be blocked except by creatures with flying or reach.)", "welkin tern can block only creatures with flying."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1460, "alternateCardName": "", "cardName": "Bala Ged Thief", "splitCard": false, "flipCard": false, "multiverseid": 197402}, "face1": {"keywordAbilities": [], "toughness": "2", "colorIndicator": ["black"], "subtypes": ["Human", "Rogue", "Ally"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{B}", "levelerCard": false, "power": "2", "faceName": "Bala Ged Thief", "loyalty": "0", "types": ["creature"], "abilities": ["whenever bala ged thief or another ally enters the battlefield under your control, target player reveals a number of cards from his or her hand equal to the number of allies you control. you choose one of them. that player discards that card."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1487, "alternateCardName": "", "cardName": "Goblin Guide", "splitCard": false, "flipCard": false, "multiverseid": 170987}, "face1": {"keywordAbilities": ["haste"], "toughness": "2", "colorIndicator": ["red"], "subtypes": ["Goblin", "Scout"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{R}", "levelerCard": false, "power": "2", "faceName": "Goblin Guide", "loyalty": "0", "types": ["creature"], "abilities": ["haste", "whenever goblin guide attacks, defending player reveals the top card of his or her library. if it's a land card, that player puts it into his or her hand."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1511, "alternateCardName": "", "cardName": "Frontier Guide", "splitCard": false, "flipCard": false, "multiverseid": 180361}, "face1": {"keywordAbilities": [], "toughness": "1", "colorIndicator": ["green"], "subtypes": ["Elf", "Scout"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{G}", "levelerCard": false, "power": "1", "faceName": "Frontier Guide", "loyalty": "0", "types": ["creature"], "abilities": ["{3}{G}, {T}: search your library for a basic land card and put it onto the battlefield tapped. then shuffle your library."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1673, "alternateCardName": "", "cardName": "Commander Greven il-Vec", "splitCard": false, "flipCard": false, "multiverseid": 397539}, "face1": {"keywordAbilities": ["fear"], "toughness": "5", "colorIndicator": ["black"], "subtypes": ["Human", "Warrior"], "supertypes": ["legendary"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{B}{B}{B}", "levelerCard": false, "power": "7", "faceName": "Commander Greven il-Vec", "loyalty": "0", "types": ["creature"], "abilities": ["fear (this creature can't be blocked except by artifact creatures and/or black creatures.)", "when commander greven il-vec enters the battlefield, sacrifice a creature."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1678, "alternateCardName": "", "cardName": "Dauthi Horror", "splitCard": false, "flipCard": false, "multiverseid": 397594}, "face1": {"keywordAbilities": ["shadow"], "toughness": "1", "colorIndicator": ["black"], "subtypes": ["Dauthi", "Horror"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{B}", "levelerCard": false, "power": "2", "faceName": "Dauthi Horror", "loyalty": "0", "types": ["creature"], "abilities": ["shadow (this creature can block or be blocked by only creatures with shadow.)", "dauthi horror can't be blocked by white creatures."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1710, "alternateCardName": "", "cardName": "Canyon Wildcat", "splitCard": false, "flipCard": false, "multiverseid": 4807}, "face1": {"keywordAbilities": ["mountainwalk"], "toughness": "1", "colorIndicator": ["red"], "subtypes": ["Cat"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{R}", "levelerCard": false, "power": "2", "faceName": "Canyon Wildcat", "loyalty": "0", "types": ["creature"], "abilities": ["mountainwalk (this creature can't be blocked as long as defending player controls a mountain.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 1958, "alternateCardName": "", "cardName": "Aggression", "splitCard": false, "flipCard": false, "multiverseid": 2605}, "face1": {"keywordAbilities": ["enchant", "first strike", "trample"], "toughness": "", "colorIndicator": ["red"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{R}", "levelerCard": false, "power": "", "faceName": "Aggression", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant non-wall creature", "enchanted creature has first strike and trample.", "at the beginning of the end step of enchanted creature's controller, destroy that creature if it didn't attack this turn."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2159, "alternateCardName": "", "cardName": "Artificer's Hex", "splitCard": false, "flipCard": false, "multiverseid": 370634}, "face1": {"keywordAbilities": ["enchant", "equip"], "toughness": "", "colorIndicator": ["black"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{B}", "levelerCard": false, "power": "", "faceName": "Artificer's Hex", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant equipment", "at the beginning of your upkeep, if enchanted equipment is attached to a creature, destroy that creature."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2160, "alternateCardName": "", "cardName": "Indestructibility", "splitCard": false, "flipCard": false, "multiverseid": 370673}, "face1": {"keywordAbilities": ["enchant", "indestructible"], "toughness": "", "colorIndicator": ["white"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{W}", "levelerCard": false, "power": "", "faceName": "Indestructibility", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant permanent", "enchanted permanent has indestructible. (effects that say \"destroy\" don't destroy that permanent. a creature with indestructible can't be destroyed by damage.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2161, "alternateCardName": "", "cardName": "Armor of Thorns", "splitCard": false, "flipCard": false, "multiverseid": 382848}, "face1": {"keywordAbilities": ["enchant", "flash"], "toughness": "", "colorIndicator": ["green"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{G}", "levelerCard": false, "power": "", "faceName": "Armor of Thorns", "loyalty": "0", "types": ["enchantment"], "abilities": ["you may cast armor of thorns as though it had flash. if you cast it any time a sorcery couldn't have been cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.", "enchant nonblack creature", "enchanted creature gets +2/+2."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2162, "alternateCardName": "", "cardName": "Call to Serve", "splitCard": false, "flipCard": false, "multiverseid": 240081}, "face1": {"keywordAbilities": ["enchant", "flying"], "toughness": "", "colorIndicator": ["white"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{W}", "levelerCard": false, "power": "", "faceName": "Call to Serve", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant nonblack creature", "enchanted creature gets +1/+2, has flying, and is an angel in addition to its other types."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2163, "alternateCardName": "", "cardName": "Carry Away", "splitCard": false, "flipCard": false, "multiverseid": 48572}, "face1": {"keywordAbilities": ["enchant", "equip"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{U}{U}", "levelerCard": false, "power": "", "faceName": "Carry Away", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant equipment", "when carry away enters the battlefield, unattach enchanted equipment.", "you control enchanted equipment."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2164, "alternateCardName": "", "cardName": "Mind Harness", "splitCard": false, "flipCard": false, "multiverseid": 3349}, "face1": {"keywordAbilities": ["cumulative upkeep", "enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{U}", "levelerCard": false, "power": "", "faceName": "Mind Harness", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant red or green creature", "{1}cumulative upkeep (at the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)", "you control enchanted creature."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2165, "alternateCardName": "", "cardName": "Consuming Ferocity", "splitCard": false, "flipCard": false, "multiverseid": 3437}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["red"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{R}", "levelerCard": false, "power": "", "faceName": "Consuming Ferocity", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant non-wall creature", "enchanted creature gets +1/+0.", "at the beginning of your upkeep, put a +1/+0 counter on enchanted creature. if that creature has three or more +1/+0 counters on it, it deals damage equal to its power to its controller, then destroy that creature and it can't be regenerated."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2166, "alternateCardName": "", "cardName": "Decomposition", "splitCard": false, "flipCard": false, "multiverseid": 3381}, "face1": {"keywordAbilities": ["cumulative upkeep", "enchant"], "toughness": "", "colorIndicator": ["green"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{G}", "levelerCard": false, "power": "", "faceName": "Decomposition", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant black creature", "enchanted creature has \"cumulative upkeep\u2014pay 1 life.\" (at the beginning of its controller's upkeep, that player puts an age counter on it, then sacrifices it unless he or she pays its upkeep cost for each age counter on it.)", "when enchanted creature dies, its controller loses 2 life."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2167, "alternateCardName": "", "cardName": "Controlled Instincts", "splitCard": false, "flipCard": false, "multiverseid": 183053}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{U}", "levelerCard": false, "power": "", "faceName": "Controlled Instincts", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant red or green creature", "enchanted creature doesn't untap during its controller's untap step."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2168, "alternateCardName": "", "cardName": "Coral Net", "splitCard": false, "flipCard": false, "multiverseid": 19696}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{U}", "levelerCard": false, "power": "", "faceName": "Coral Net", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant green or white creature", "enchanted creature has \"at the beginning of your upkeep, sacrifice this creature unless you discard a card.\""], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2169, "alternateCardName": "", "cardName": "Encase in Ice", "splitCard": false, "flipCard": false, "multiverseid": 394564}, "face1": {"keywordAbilities": ["enchant", "flash"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{U}", "levelerCard": false, "power": "", "faceName": "Encase in Ice", "loyalty": "0", "types": ["enchantment"], "abilities": ["flash (you may cast this spell any time you could cast an instant.)", "enchant red or green creature", "when encase in ice enters the battlefield, tap enchanted creature.", "enchanted creature doesn't untap during its controller's untap step."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2170, "alternateCardName": "", "cardName": "Entangling Vines", "splitCard": false, "flipCard": false, "multiverseid": 189901}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["green"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{G}", "levelerCard": false, "power": "", "faceName": "Entangling Vines", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant tapped creature", "enchanted creature doesn't untap during its controller's untap step."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2171, "alternateCardName": "", "cardName": "Glimmerdust Nap", "splitCard": false, "flipCard": false, "multiverseid": 139436}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{U}", "levelerCard": false, "power": "", "faceName": "Glimmerdust Nap", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant tapped creature", "enchanted creature doesn't untap during its controller's untap step."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2172, "alternateCardName": "", "cardName": "Krovikan Plague", "splitCard": false, "flipCard": false, "multiverseid": 3081}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["black"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{B}", "levelerCard": false, "power": "", "faceName": "Krovikan Plague", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant non-wall creature you control", "when krovikan plague enters the battlefield, draw a card at the beginning of the next turn's upkeep.", "enchant"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2173, "alternateCardName": "", "cardName": "Psychic Possession", "splitCard": false, "flipCard": false, "multiverseid": 107254}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{U}{U}", "levelerCard": false, "power": "", "faceName": "Psychic Possession", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant opponent", "skip your draw step.", "whenever enchanted opponent draws a card, you may draw a card."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2174, "alternateCardName": "", "cardName": "Soul Tithe", "splitCard": false, "flipCard": false, "multiverseid": 265372}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["white"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{W}", "levelerCard": false, "power": "", "faceName": "Soul Tithe", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant nonland permanent", "{variable colorless}at the beginning of the upkeep of enchanted permanent's controller, that player sacrifices it unless he or she pays , where x is its converted mana cost."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2175, "alternateCardName": "", "cardName": "Spellweaver Volute", "splitCard": false, "flipCard": false, "multiverseid": 136032}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{U}{U}", "levelerCard": false, "power": "", "faceName": "Spellweaver Volute", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant instant card in a graveyard", "whenever you cast a sorcery spell, copy the enchanted instant card. you may cast the copy without paying its mana cost. if you do, exile the enchanted card and attach spellweaver volute to another instant card in a graveyard."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2176, "alternateCardName": "", "cardName": "Suppression Bonds", "splitCard": false, "flipCard": false, "multiverseid": 398602}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["white"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{W}", "levelerCard": false, "power": "", "faceName": "Suppression Bonds", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant nonland permanent", "enchanted permanent can't attack or block, and its activated abilities can't be activated."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2177, "alternateCardName": "", "cardName": "Uncontrolled Infestation", "splitCard": false, "flipCard": false, "multiverseid": 46614}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["red"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{R}", "levelerCard": false, "power": "", "faceName": "Uncontrolled Infestation", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant nonbasic land", "when enchanted land becomes tapped, destroy it."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2178, "alternateCardName": "", "cardName": "Wurmweaver Coil", "splitCard": false, "flipCard": false, "multiverseid": 97230}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["green"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{4}{G}{G}", "levelerCard": false, "power": "", "faceName": "Wurmweaver Coil", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant green creature", "enchanted creature gets +6/+6.", "{G}{G}{G}, sacrifice wurmweaver coil: create a 6/6 green wurm creature token."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2179, "alternateCardName": "", "cardName": "Steal Enchantment", "splitCard": false, "flipCard": false, "multiverseid": 4729}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{U}{U}", "levelerCard": false, "power": "", "faceName": "Steal Enchantment", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant enchantment", "you control enchanted enchantment."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2180, "alternateCardName": "", "cardName": "Curse of Death's Hold", "splitCard": false, "flipCard": false, "multiverseid": 227075}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["black"], "subtypes": ["Aura", "Curse"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{B}{B}", "levelerCard": false, "power": "", "faceName": "Curse of Death's Hold", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant player", "creatures enchanted player controls get -1/-1."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2183, "alternateCardName": "", "cardName": "Convincing Mirage", "splitCard": false, "flipCard": false, "multiverseid": 190161}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{U}", "levelerCard": false, "power": "", "faceName": "Convincing Mirage", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant land", "as convincing mirage enters the battlefield, choose a basic land type.", "enchanted land is the chosen type."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2184, "alternateCardName": "", "cardName": "Darksteel Garrison", "splitCard": false, "flipCard": false, "multiverseid": 126211}, "face1": {"keywordAbilities": ["fortify", "indestructible"], "toughness": "", "colorIndicator": [], "subtypes": ["Fortification"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}", "levelerCard": false, "power": "", "faceName": "Darksteel Garrison", "loyalty": "0", "types": ["artifact"], "abilities": ["fortified land has indestructible.", "whenever fortified land becomes tapped, target creature gets +1/+1 until end of turn.", "fortify {3} ({3}: attach to target land you control. fortify only as a sorcery. this card enters the battlefield unattached and stays on the battlefield if the land leaves.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2185, "alternateCardName": "", "cardName": "Genju of the Fields", "splitCard": false, "flipCard": false, "multiverseid": 74087}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["white"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{W}", "levelerCard": false, "power": "", "faceName": "Genju of the Fields", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant plains", "{2}: until end of turn, enchanted plains becomes a 2/5 white spirit creature with \"whenever this creature deals damage, its controller gains that much life.\" it's still a land.", "when enchanted plains is put into a graveyard, you may return genju of the fields from your graveyard to your hand."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2186, "alternateCardName": "", "cardName": "Genju of the Falls", "splitCard": false, "flipCard": false, "multiverseid": 74582}, "face1": {"keywordAbilities": ["enchant", "flying"], "toughness": "", "colorIndicator": ["blue"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{U}", "levelerCard": false, "power": "", "faceName": "Genju of the Falls", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant island", "{2}: enchanted island becomes a 3/2 blue spirit creature with flying until end of turn. it's still a land.", "when enchanted island is put into a graveyard, you may return genju of the falls from your graveyard to your hand."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2187, "alternateCardName": "", "cardName": "Genju of the Fens", "splitCard": false, "flipCard": false, "multiverseid": 74035}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["black"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{B}", "levelerCard": false, "power": "", "faceName": "Genju of the Fens", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant swamp", "{2}{B}: until end of turn, enchanted swamp becomes a 2/2 black spirit creature with \"", "when enchanted swamp is put into a graveyard, you may return genju of the fens from your graveyard to your hand."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2188, "alternateCardName": "", "cardName": "Genju of the Spires", "splitCard": false, "flipCard": false, "multiverseid": 74666}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["red"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{R}", "levelerCard": false, "power": "", "faceName": "Genju of the Spires", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant mountain", "{2}: enchanted mountain becomes a 6/1 red spirit creature until end of turn. it's still a land.", "when enchanted mountain is put into a graveyard, you may return genju of the spires from your graveyard to your hand."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2189, "alternateCardName": "", "cardName": "Genju of the Cedars", "splitCard": false, "flipCard": false, "multiverseid": 74424}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["green"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{G}", "levelerCard": false, "power": "", "faceName": "Genju of the Cedars", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant forest", "{2}: enchanted forest becomes a 4/4 green spirit creature until end of turn. it's still a land.", "when enchanted forest is put into a graveyard, you may return genju of the cedars from your graveyard to your hand."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2190, "alternateCardName": "", "cardName": "Genju of the Realm", "splitCard": false, "flipCard": false, "multiverseid": 75364}, "face1": {"keywordAbilities": ["enchant", "trample"], "toughness": "", "colorIndicator": ["black", "blue", "green", "red", "white"], "subtypes": ["Aura"], "supertypes": ["legendary"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{W}{U}{B}{R}{G}", "levelerCard": false, "power": "", "faceName": "Genju of the Realm", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant land", "{2}: enchanted land becomes a legendary 8/12 spirit creature with trample until end of turn. it's still a land.", "when enchanted land is put into a graveyard, you may return genju of the realm from your graveyard to your hand."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2191, "alternateCardName": "", "cardName": "Cao Ren, Wei Commander", "splitCard": false, "flipCard": false, "multiverseid": 10712}, "face1": {"keywordAbilities": ["horsemanship"], "toughness": "3", "colorIndicator": ["black"], "subtypes": ["Human", "Soldier", "Warrior"], "supertypes": ["legendary"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{B}{B}", "levelerCard": false, "power": "3", "faceName": "Cao Ren, Wei Commander", "loyalty": "0", "types": ["creature"], "abilities": ["horsemanship (this creature can't be blocked except by creatures with horsemanship.)", "when cao ren, wei commander enters the battlefield, you lose 3 life."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2192, "alternateCardName": "", "cardName": "Barbarian General", "splitCard": false, "flipCard": false, "multiverseid": 10574}, "face1": {"keywordAbilities": ["horsemanship"], "toughness": "2", "colorIndicator": ["red"], "subtypes": ["Human", "Barbarian", "Soldier"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{4}{R}", "levelerCard": false, "power": "3", "faceName": "Barbarian General", "loyalty": "0", "types": ["creature"], "abilities": ["horsemanship (this creature can't be blocked except by creatures with horsemanship.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2194, "alternateCardName": "", "cardName": "Boggart Brute", "splitCard": false, "flipCard": false, "multiverseid": 398606}, "face1": {"keywordAbilities": ["menace"], "toughness": "2", "colorIndicator": ["red"], "subtypes": ["Goblin", "Warrior"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{R}", "levelerCard": false, "power": "3", "faceName": "Boggart Brute", "loyalty": "0", "types": ["creature"], "abilities": ["menace (this creature can't be blocked except by two or more creatures.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2195, "alternateCardName": "", "cardName": "Elemental Resonance", "splitCard": false, "flipCard": false, "multiverseid": 107369}, "face1": {"keywordAbilities": ["enchant"], "toughness": "", "colorIndicator": ["green"], "subtypes": ["Aura"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{G}{G}", "levelerCard": false, "power": "", "faceName": "Elemental Resonance", "loyalty": "0", "types": ["enchantment"], "abilities": ["enchant permanent", "at the beginning of your precombat main phase, add mana equal to enchanted permanent's mana cost to your mana pool. (mana cost includes color. if a mana symbol has multiple colors, choose one.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2196, "alternateCardName": "", "cardName": "Heartwood Treefolk", "splitCard": false, "flipCard": false, "multiverseid": 4767}, "face1": {"keywordAbilities": ["forestwalk"], "toughness": "4", "colorIndicator": ["green"], "subtypes": ["Treefolk"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{G}{G}", "levelerCard": false, "power": "3", "faceName": "Heartwood Treefolk", "loyalty": "0", "types": ["creature"], "abilities": ["forestwalk (this creature can't be blocked as long as defending player controls a forest.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2197, "alternateCardName": "", "cardName": "Benthic Behemoth", "splitCard": false, "flipCard": false, "multiverseid": 4690}, "face1": {"keywordAbilities": ["islandwalk ", "landwalk"], "toughness": "6", "colorIndicator": ["blue"], "subtypes": ["Serpent"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{5}{U}{U}{U}", "levelerCard": false, "power": "7", "faceName": "Benthic Behemoth", "loyalty": "0", "types": ["creature"], "abilities": ["islandwalk (this creature can't be blocked as long as defending player controls an island.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2198, "alternateCardName": "", "cardName": "Bayou Dragonfly", "splitCard": false, "flipCard": false, "multiverseid": 4749}, "face1": {"keywordAbilities": ["flying", "swampwalk"], "toughness": "1", "colorIndicator": ["green"], "subtypes": ["Insect"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{G}", "levelerCard": false, "power": "1", "faceName": "Bayou Dragonfly", "loyalty": "0", "types": ["creature"], "abilities": ["flying; swampwalk (this creature can't be blocked as long as defending player controls a swamp.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2199, "alternateCardName": "", "cardName": "Zodiac Rooster", "splitCard": false, "flipCard": false, "multiverseid": 10506}, "face1": {"keywordAbilities": ["plainswalk"], "toughness": "1", "colorIndicator": ["green"], "subtypes": ["Bird"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{G}", "levelerCard": false, "power": "2", "faceName": "Zodiac Rooster", "loyalty": "0", "types": ["creature"], "abilities": ["plainswalk (this creature can't be blocked as long as defending player controls a plains.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2881, "alternateCardName": "", "cardName": "Bladetusk Boar", "splitCard": false, "flipCard": false, "multiverseid": 380379}, "face1": {"keywordAbilities": ["intimidate"], "toughness": "2", "colorIndicator": ["red"], "subtypes": ["Boar"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{R}", "levelerCard": false, "power": "3", "faceName": "Bladetusk Boar", "loyalty": "0", "types": ["creature"], "abilities": ["Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2882, "alternateCardName": "", "cardName": "Marsh Threader", "splitCard": false, "flipCard": false, "multiverseid": 194718}, "face1": {"keywordAbilities": ["landwalk", "swampwalk"], "toughness": "1", "colorIndicator": ["white"], "subtypes": ["Kor", "Scout"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{W}", "levelerCard": false, "power": "2", "faceName": "Marsh Threader", "loyalty": "0", "types": ["creature"], "abilities": ["Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2883, "alternateCardName": "", "cardName": "Canyon Wildca", "splitCard": false, "flipCard": false, "multiverseid": 397566}, "face1": {"keywordAbilities": ["landwalk", "mountainwalk"], "toughness": "1", "colorIndicator": ["red"], "subtypes": ["Cat"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{R}", "levelerCard": false, "power": "2", "faceName": "Canyon Wildca", "loyalty": "0", "types": ["creature"], "abilities": ["Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2884, "alternateCardName": "", "cardName": "Elite Cat Warrior", "splitCard": false, "flipCard": false, "multiverseid": 221917}, "face1": {"keywordAbilities": ["landwalk", "forestwalk"], "toughness": "3", "colorIndicator": ["green"], "subtypes": ["Cat", "Warrior"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{G}", "levelerCard": false, "power": "2", "faceName": "Elite Cat Warrior", "loyalty": "0", "types": ["creature"], "abilities": ["Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": true, "cardID": 2885, "alternateCardName": "", "cardName": "Archangel Avacyn", "splitCard": false, "flipCard": false, "multiverseid": 409741}, "face1": {"keywordAbilities": ["Flying", "Vigilance", "Transform", "Flash"], "toughness": "4", "colorIndicator": ["white"], "subtypes": ["Angel"], "supertypes": ["legendary"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}{W}{W}", "levelerCard": false, "power": "4", "faceName": "Archangel Avacyn", "loyalty": "0", "types": ["creature"], "abilities": ["Flash \n Flying, vigilance \n When Archangel Avacyn enters the battlefield, creatures you control gain indestructible until end of turn. \n When a non-Angel creature you control dies, transform Archangel Avacyn at the beginning of the next upkeep"], "color": []}, "face2": {"keywordAbilities": ["flying"], "toughness": "5", "colorIndicator": ["red"], "subtypes": ["Angel"], "supertypes": ["legendary"], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "6", "faceName": "Avacyn, the Purifier", "loyalty": "", "types": ["creature"], "abilities": ["Flying \n When this creature transforms into Avacyn, the Purifier, it deals 3 damage to each other creature and each opponent."], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2886, "alternateCardName": "", "cardName": "Immerwolf", "splitCard": false, "flipCard": false, "multiverseid": 262700}, "face1": {"keywordAbilities": ["Intimidate"], "toughness": "2", "colorIndicator": ["green", "red"], "subtypes": ["Wolf"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{R}{G}", "levelerCard": false, "power": "2", "faceName": "Immerwolf", "loyalty": "0", "types": ["creature"], "abilities": ["Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.) \n Each other creature you control that's a Wolf or a Werewolf gets +1/+1. \n Non-Human Werewolves you control can't transform."], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2887, "alternateCardName": "", "cardName": "Armory Automaton", "splitCard": false, "flipCard": false, "multiverseid": 420668}, "face1": {"keywordAbilities": [], "toughness": "2", "colorIndicator": [], "subtypes": ["Construct"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{3}", "levelerCard": false, "power": "2", "faceName": "Armory Automaton", "loyalty": "0", "types": ["creature", "artifact"], "abilities": ["Whenever Armory Automaton enters the battlefield or attacks, you may attach any number of target Equipment to it. (Control of the Equipment doesn't change.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2888, "alternateCardName": "", "cardName": "Alchemist's Gift", "splitCard": false, "flipCard": false, "multiverseid": 485410}, "face1": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": ["Construct"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{B}", "levelerCard": false, "power": "", "faceName": "Alchemist's Gift", "loyalty": "", "types": ["Instant"], "abilities": ["Target creature gets +1/+1 and gains your choice of deathtouch or lifelink until end of turn. (Any amount of damage a creature with deathtouch deals to a creature is enough to destroy it. Damage dealt by a creature with lifelink also causes its controller to gain that much life.)"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2889, "alternateCardName": "", "cardName": "Lightning Hounds", "splitCard": false, "flipCard": false, "multiverseid": 19618}, "face1": {"keywordAbilities": ["First strike"], "toughness": "2", "colorIndicator": ["red"], "subtypes": ["Dog"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{2}{R}{R}", "levelerCard": false, "power": "3", "faceName": "Lightning Hounds", "loyalty": "", "types": ["creature"], "abilities": ["First strike"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2890, "alternateCardName": "", "cardName": "Fencing Ace", "splitCard": false, "flipCard": false, "multiverseid": 497541}, "face1": {"keywordAbilities": ["Double strike"], "toughness": "1", "colorIndicator": ["white"], "subtypes": ["Soldier", "Human"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}{W}", "levelerCard": false, "power": "1", "faceName": "Fencing Ace", "loyalty": "", "types": ["creature"], "abilities": ["Double strike"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2891, "alternateCardName": "", "cardName": "Hired Poisoner", "splitCard": false, "flipCard": false, "multiverseid": 452822}, "face1": {"keywordAbilities": ["Deathtouch"], "toughness": "1", "colorIndicator": ["black"], "subtypes": ["Assassin", "Human"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{B}", "levelerCard": false, "power": "1", "faceName": "Hired Poisoner", "loyalty": "", "types": ["creature"], "abilities": ["Deathtouch"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}, {"card": {"doublefacedCard": false, "cardID": 2892, "alternateCardName": "", "cardName": "Steel Wall", "splitCard": false, "flipCard": false, "multiverseid": 222731}, "face1": {"keywordAbilities": ["Defender"], "toughness": "4", "colorIndicator": [], "subtypes": ["Wall"], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "manaCost": "{1}", "levelerCard": false, "power": "0", "faceName": "Steel Wall", "loyalty": "", "types": ["creature", "Artifact"], "abilities": ["Defender"], "color": []}, "face2": {"keywordAbilities": [], "toughness": "", "colorIndicator": [], "subtypes": [], "supertypes": [], "levelerAbilities": {"toughness": "", "N1": "", "N2": "", "power": "", "abilities": []}, "levelerCard": false, "power": "", "faceName": "", "loyalty": "", "types": [], "abilities": [], "color": []}}] \ No newline at end of file diff --git a/py-card_explorer/requirements.txt b/py-card_explorer/requirements.txt new file mode 100644 index 0000000..879c7ec --- /dev/null +++ b/py-card_explorer/requirements.txt @@ -0,0 +1,3 @@ +requests +inquirer +rich