mse version: 0.2.7 short name: Magic full name: Magic the Gathering icon: card-back.png ############################################################## Functions & filters # General functions init script: # correctly sort a mana symbol (no guild mana) mana_sort := sort_rule(order: "XYZ[0123456789]S(WUBRG)") # correctly sort guild mana mana_sort_guild := replace_rule( # swap these: match: "U/W|B/U|R/B|G/B|W/G|B/W|R/U|G/B|W/R|U/G", in_context: "(^|[^/])($|[^/])", replace: {input[2] + "/" + input[0]}) + replace_rule( match: "T", replace: "" ) mana_has_guild := sort_rule(order: "") # Is there guild or half mana in the input? # A mana cost can contain both normal and guild mana mana_filter := to_upper + { if mana_has_guild()!="" then mana_sort_guild() else mana_sort() } # Like mana filter, only also allow tap symbols: tap_filter := sort_rule(order: "") mana_filter_t := replace_rule( # Remove [] used for forcing mana symbols match: "[\\[\\]]", replace: "" ) + { tap_filter() + mana_filter() } # Names of colors color_name := { if input = "W" then "white" else if input = "U" then "blue" else if input = "B" then "black" else if input = "R" then "red" else if input = "G" then "green" else "" } # color based on mana cost, input = a mana cost color_filter := sort_rule(order: "") + sort_rule(order: "(WUBRG)") color_filterH := sort_rule(order: "") mana_to_color := { colors := color_filter() hybrid := color_filterH() count := number_of_items(in: colors) if hybrid == "" then # not a hybrid if count == 0 then "colorless" else if count == 1 then color_name(colors[0]) else if set.set_info.use_gradient_multicolor == "no" then "multicolor" # stop here else if count == 2 then "multicolor 2 color " + color_name(colors[0]) + " / " + color_name(colors[1]) else if set.set_info.use_gradient_multicolor != "yes" then "multicolor" # stop here else if count == 3 then "multicolor 3 color " + color_name(colors[0]) + " / " + color_name(colors[1]) + " / " + color_name(colors[2]) else if count == 3 then "multicolor 4 color " + to_lower(colors[0]) + "/" + to_lower(colors[1]) + "/" + to_lower(colors[2]) + to_lower(colors[3]) else if count == 5 then "multicolor 5 color w/u/b/r/g" else "multicolor" else # hybrid if count == 2 then "hybrid 2 color " + color_name(colors[0]) + " / " + color_name(colors[1]) else "multicolor" } # color based on land text box, input = textbox contents color_text_filter := filter_rule(match: "]*>([^<]+)") + color_filter; land_to_color := { # Based on watermark if card.watermark = "mana symbol white" then "land 1 color white" else if card.watermark = "mana symbol blue" then "land 1 color blue" else if card.watermark = "mana symbol black" then "land 1 color black" else if card.watermark = "mana symbol red" then "land 1 color red" else if card.watermark = "mana symbol green" then "land 1 color green" else ( # Based on colors in text box colors := color_text_filter(input: card.rule_text); if colors = "" then "land" else if colors = "W" then "land 1 color white" else if colors = "U" then "land 1 color blue" else if colors = "B" then "land 1 color black" else if colors = "R" then "land 1 color red" else if colors = "G" then "land 1 color green" else if colors = "WU" then "land 2 color white / blue" else if colors = "UB" then "land 2 color blue / black" else if colors = "BR" then "land 2 color black / red" else if colors = "RG" then "land 2 color red / green" else if colors = "WG" then "land 2 color green / white" else if colors = "WB" then "land 2 color white / black" else if colors = "UR" then "land 2 color blue / red" else if colors = "BG" then "land 2 color black / green" else if colors = "WR" then "land 2 color red / white" else if colors = "UG" then "land 2 color green / blue" else "land 1 color multicolor" ) }; # Index for sorting, white cards are first, so white->1, blue->2, .. , # multi->6, hybrid->7, arti->8, land->9, basic land->10 is_multicolor := filter_rule(match: "^multicolor") + {input != ""}; is_hybrid := filter_rule(match: "^hybrid") + {input != ""}; is_colorless := filter_rule(match: "^colorless") + {input != ""}; sort_index := { if card.card_color=="white" then "A" else if card.card_color=="blue" then "B" else if card.card_color=="black" then "C" else if card.card_color=="red" then "D" else if card.card_color=="green" then "E" else if is_multicolor(card.card_color) then "F" else if is_hybrid (card.card_color) then "G" else if is_colorless (card.card_color) then "H" else if card.super_type!="Basic Land" then "I" else "J" }; # The color of a card is_land := filter_rule(match: "(?i)Land") + {input != ""}; card_color := { # usually the color of mana mana_color := mana_to_color(casting_cost); if mana_color == "colorless" and is_land(input: card.super_type) then land_to_color() else mana_color }; # Filters for the text box # context in which mana symbols are found mana_context := "(?ix) # case insensitive, ignore whitespace (^|[[:space:]\"(]) # start of a word ( : # G: something | , # G, tap: something | [ ]can[ ]be[ ]pay | (pays?|additional|costs?|the # pay X. creatures cost 1 less. pay an additional G. |adds?|pay(ed)?[ ](with|using) ) ([ ]either)? # pay either X or Y ([ ]]*>[XYZWUBRG0-9/|]+]*>[ ](and|or))* # pay X or Y [ ] ([,.)]|$ # (end of word) |[ ][^ .,]*$ # still typing... |[ ]( or | and | in | less | more | to ) # or next word is ... ) ) | # keyword argument that is declared as mana | # keyword argument that is declared as cost | , # keyword argument that is declared as cost "; # the rule text filter # - adds mana symbols # - makes text in parentheses italic text_filter := # step 1 : remove all automatic tags tag_remove_rule(tag: "") + tag_remove_rule(tag: "") + # # step 2 : reminder text for keywords # keyword_rule( # expand_reminder_game: { set.automatic_reminder_text == "yes" }, # expand_reminder_set: { set.automatic_reminder_text != "no" }, # before: " (", # after: ")", # fix_english: true # ) + expand_keywords_rule( default_expand: { set.automatic_reminder_text == "yes" }, combine: { "{keyword} ({reminder})" } ) + # step 3a : expand shortcut words ~ and CARDNAME replace_rule( match: "~|~THIS~|CARDNAME", in_context: "(^|[[:space:]]|\\()", # TODO: Allow any punctuation before replace: "" ) + # step 3b : fill in atom fields tag_contents_rule( tag: "", contents: { if card_name=="" then "CARDNAME" else card_name } ) + # step 4 : explict non mana symbols replace_rule( match: "\\][STXYZWUBRG0-9/|]+\\[", replace: {"" + mana_filter_t() + ""} ) + # step 5 : add mana & tap symbols replace_rule( match: "[STXYZWUBRG0-9/|]+", in_context: mana_context, replace: {"" + mana_filter_t() + ""} ) + # step 5b : add explict mana symbols replace_rule( match: "\\[[STXYZWUBRG0-9/|]+\\]", replace: {"" + mana_filter_t() + ""} ) + # step 6 : longdash replace_rule( match: "-", in_context: "(?i)[a-z0-9] | ?" # Lengthen dashes in Keyword--Cost -- jimrandomh replace: "—")+ # step 7 : italic reminder text replace_rule( match: "[(][^)\n]*[)]?", in_context: "(^|[[:space:]])|&") # the flavor text filter # - makes all text italic flavor_text_filter := # step 1 : remove italic tags tag_remove_rule(tag: "") + # step 2 : surround by tags { "" + input + "" } # Converted mana cost cmc := { 1 * number_of_items(in: sort(order:"SWUBRG")) # colored mana - 1 * number_of_items(in: sort(order:"/")) # guild mana, W/U -> 2 - 1 + 1 * sort(order: "[0123456789]") # colorless mana } # TODO : somewhere else? #card to conversion: # name: MTGnews.com forums # script: # "[b]" + card.name + "[/b]\n" + # card.sub_type + " - " + card.super_type + "\n" + # card.rules_text + "\n" # card.pt + "\n" # "[i]" + card.flavor_text + "[/i]" ############################################################## Set fields set field: type: info name: Set Information set field: type: text name: title set field: type: text name: description multi line: true set field: type: text name: artist set field: type: text name: copyright set field: type: symbol name: symbol description: The symbol for this set, double click to edit set field: type: info name: Defaults and Automation set field: type: color name: border color description: The default border color for cards choice: name: black color: rgb(0,0,0) choice: name: white color: rgb(255,255,255) choice: name: silver color: rgb(128,128,128) choice: name: gold color: rgb(200,180,0) set field: type: choice name: automatic reminder text choice: yes choice: only for custom keywords choice: no description: Should reminder text be added to keywords by default? Note: you can enable/disable reminder text by right clicking the keyword. set field: type: boolean name: automatic card numbers description: Should card numbers be shown on the cards? set field: type: boolean name: mark errors description: Marks errors on cards, for example wording and spelling errors, non unique card names, etc. set field: type: choice name: use gradient multicolor choice: yes choice: only for two color cards choice: no description: Use gradients on multicolor cards by default, you can always change it be clicking on the card border. initial: no ############################################################## Card fields ############################# Background stuff card field: type: color name: border color default: set.border_color choice: name: black color: rgb(0,0,0) choice: name: white color: rgb(255,255,255) choice: name: silver color: rgb(128,128,128) choice: name: gold color: rgb(200,180,0) show statistics: false card field: type: choice name: card color icon: stats/card_color.png # Specify the colors somewhere else, to keep things clean include file: magic-blends.mse-include/card-colors default: card_color(casting_cost: card.casting_cost) ############################# Name line card field: type: text name: name identifying: true show statistics: false card list visible: true card list column: 1 card list width: 150 description: The name of the card card field: type: text name: casting cost icon: stats/casting_cost.png script: mana_filter(value) move cursor with sort: true card list visible: true card list column: 2 card list alignment: right card list width: 50 card list name: CC description: The casting cost of the card card field: type: choice name: card symbol icon: stats/card_symbol.png choice: none choice: tombstone description: Symbol for this card (tombstone) ############################# Image card field: type: image name: image show statistics: false ############################# Card type card field: type: text name: super type icon: stats/creature_type.png editable: false card field: type: text name: sub type icon: stats/creature_type.png editable: false card field: type: text name: type icon: stats/creature_type.png save value: false script: # Either just supertype, or subtype - supertype combined_editor( field1: card.super_type, separator: " — ", field2: card.sub_type, soft_before_empty: true, hide_when_empty: true, type_over1: " -", type_over2: "-" ) card list visible: true card list column:4 description: The type of this card, type - to go the sub type card field: type: choice name: rarity icon: stats/rarity.png choice: basic land choice: common choice: uncommon choice: rare choice: special initial: common card list visible: true card list column: 6 description: The rarity of the card, to edit the symbol switch to the 'set info' tab ############################# Text box card field: type: text name: rule text script: text_filter(input: value, card_name: card.name) editable: false show statistics: false card field: type: text name: flavor text script: flavor_text_filter(value) editable: false show statistics: false card field: type: text name: text multi line: true save value: false show statistics: false script: combined_editor(field1: card.rule_text, separator: "\n", field2: card.flavor_text) card field: type: choice name: watermark icon: stats/watermark.png choice: none choice: name: mana symbol choice: white choice: blue choice: black choice: red choice: green choice: name: guild symbol choice: Azorius Senate (W/U) choice: House Dimir (U/B) choice: Cult of Rakdos (B/R) choice: Gruul Clans (R/G) choice: Selesnya Conclave (G/W) choice: Orzhov Syndicate (W/B) choice: The Izzet (U/R) choice: The Golgari (B/G) choice: Boros Legion (R/W) choice: The Simic (G/U) description: A watermark for below the textbox, this can be a big mana symbol used on basic lands, or a guild symbol ############################# PT card field: type: text name: power icon: stats/power.png editable: false card field: type: text name: toughness icon: stats/toughness.png editable: false card field: type: text name: pt save value: false script: combined_editor( field1: card.power, separator: "/", field2: card.toughness, soft_before_empty: true, hide_when_empty: true, type_over1: "/" ) card list visible: true card list column: 5 card list width: 50 card list name: P/T description: Power/toughness show statistics: false card field: # box for power/toughness type: choice name: pt box include file: magic-blends.mse-include/card-colors script: card.card_color editable: false save value: false show statistics: false ############################# Card sorting / numbering card field: type: text name: card number save value: false script: position( of: card in: set order_by: { sort_index() + card.name } ) + 1 + "/" + number_of_items(in: set) card list visible: true card list column: 10 card list width: 50 card list name: # card list alignment: right editable: false show statistics: false ############################# Copyright stuff card field: type: text name: illustrator icon: stats/illustrator.png default: set.artist description: Illustrator of this card, the default value can be changed on the 'set info' tab card field: type: text name: copyright default: set.copyright editable: false show statistics: false card field: type: text name: copyright line save value: false show statistics: false script: if set.automatic_card_numbers then combined_editor(field1: card.copyright, separator: " ", field2: card.card_number) else forward_editor(field: card.copyright) description: Copyright of this card and cardnumber, the default value can be changed on the 'set info' tab ############################################################## Duplicate fields (split/flip cards) # Based on flip templates by Wolfwood # These are a direct copy of the fields above, only with a 2 card field: type: choice name: card color 2 icon: stats/card_color.png include file: magic-blends.mse-include/card-colors default: card_color(casting_cost: card.casting_cost_2) show statistics: false card field: type: text name: name 2 identifying: true show statistics: false card field: type: text name: casting cost 2 icon: stats/casting_cost.png script: mana_filter(value) move cursor with sort: true card list alignment: right card list width: 50 card list name: CC show statistics: false card field: type: choice name: card symbol 2 icon: stats/card_symbol.png choice: none choice: tombstone show statistics: false card field: type: image name: image 2 show statistics: false card field: type: text name: super type 2 icon: stats/creature_type.png editable: false show statistics: false card field: type: text name: sub type 2 icon: stats/creature_type.png editable: false show statistics: false card field: type: text name: type 2 save value: false script: combined_editor( field1: card.super_type_2, separator: " — ", field2: card.sub_type_2, hide_when_empty: true, soft_before_empty: true, type_over1: " -", type_over2: "-" ) show statistics: false card field: type: choice name: rarity 2 icon: stats/rarity.png choice: basic land choice: common choice: uncommon choice: rare choice: special initial: common # Both rarities will be the same script: card.rarity editable: false show statistics: false card field: type: text name: rule text 2 script: text_filter(input: value, card_name: card.name_2) editable: false show statistics: false card field: type: text name: flavor text 2 script: flavor_text_filter(value) editable: false show statistics: false card field: type: text name: text 2 multi line: true save value: false show statistics: false script: combined_editor(field1: card.rule_text_2, separator: "\n", field2: card.flavor_text_2) card field: type: text name: power 2 icon: stats/power.png editable: false show statistics: false card field: type: text name: toughness 2 icon: stats/toughness.png editable: false show statistics: false card field: type: text name: pt 2 save value: false script: combined_editor( field1: card.power_2, separator: "/", field2: card.toughness_2, soft_before_empty: true, hide_when_empty: true, type_over1: "/" ) card list width: 50 card list name: P/T2 show statistics: false card field: type: choice name: pt box 2 include file: magic-blends.mse-include/card-colors script: card.card_color_2 editable: false save value: false show statistics: false card field: # Another pt box witht the same value as pt box 1 type: choice name: pt box 1b include file: magic-blends.mse-include/card-colors script: card.card_color editable: false save value: false show statistics: false card field: type: text name: illustrator 2 icon: stats/illustrator.png default: set.artist show statistics: false card field: type: text name: copyright 2 default: set.copyright editable: false show statistics: false card field: type: text name: copyright line 2 save value: false show statistics: false script: if set.automatic_card_numbers then combined_editor(field1: card.copyright_2, separator: " ", field2: card.card_number) else forward_editor(field: card.copyright_2) # The following (until keywords) doesn't do anything yet ############################################################## Statistics categories statistics dimension: name: converted mana cost script: cmc(card.casting_cost) numeric: true icon: stats/casting_cost.png statistics dimension: name: rarity_twice script: card.rarity + card.rarity statistics category: name: color / rarity dimension: card_color dimension: rarity #statistics field: # name: creature type # data 1: # if card.super_type == "Creature" or card.super_type == "Legendary Creature" then # split(around:" ", input: card.sub_type) #statistics field: # name: converted mana cost # graph style: bar # data 1: # card.casting_cost # # TODO #statistics field: # name: color / rarity # graph style: cross # data 1: card.card_color # data 2: card.rarity ############################################################## Word lists #word list: # name: card types # word: Creature # word: Artifact # word: Enchantment # word: Instant # word: Sorcery # word: Land # word: Legendary Creature # word: Legendary Artifact # word: Legendary Enchantment # word: Legendary Land #word list: # name: creature types # word: Goblin # word: Elf # word: Wizard # word: Human #word list: # name: enchantment types # word: # word: Aura ############################################################## Card packs #pack: # name: Base set # pack type: #pack: # name: #pack: # name: Booster # pack type: random # card type: # amount: 1 # filter: rarity = "rare" # card type: # amount: 3 # filter: rarity = "uncommon" # card type: # amount: 11 # filter: rarity = "common" ############################################################## Keywords ############################# Keyword rules keyword parameter type: name: no parameter keyword parameter type: name: mana match: [XYZ0-9WUBRGS/]+ # By jimrandomh keyword parameter type: name: cost #insert as: word match: [XYZ0-9WUBRGS/]+|[^(.,\n]|([XYZ0-9WUBRGS/]+,)?[^(.,\n]* script: "{input}" # TODO : DEBUG keyword parameter type: name: number match: [XYZ0-9]+ keyword parameter type: name: number (one, two, ...) #insert as: number: one, two match: [XYZ0-9]+ keyword parameter type: name: number (a, two, ...) #insert as: number: a, two match: [XYZ0-9]+ keyword parameter type: name: number (, two, ...) #insert as: number: , two match: [XYZ0-9]+ keyword parameter type: name: action #insert as: word match: [^(.,\n]+ keyword parameter type: name: name #insert as: word match: [^(.,\n]+ ############################# All Magic keywords # By JrEye and Neko_Asakami keyword: keyword: Flying reminder: This creature can’t be blocked except by creatures with flying. keyword: keyword: Haste reminder: This creature can attack and tap the turn it comes under your control. keyword: keyword: Fear reminder: This creature can’t be blocked except by artifact creatures and/or black creatures. keyword: keyword: First strike reminder: This creature deals combat damage before creatures without first strike. keyword: keyword: Enchant separator: whitespace [ ] parameter: name reminder: Target a as you play this. This card comes into play attached to that . keyword: keyword: Cycling separator: whitespace [ ] parameter: cost reminder: {param1}, Discard this card: Draw a card. keyword: keyword: Trample reminder: If this creature would deal enough combat damage to its blockers to destroy them, you may have it deal the rest of its damage to defending player. keyword: keyword: Banding reminder: When declaring attackers or blockers this creature may group with others creatures with banding and one creature without banding. When damage is dealt, you decide where damage is dealt. keyword: keyword: Rampage separator: whitespace [ ] parameter: number reminder: Whenever this creature becomes blocked, it gets +/+ until end of turn for each creature blocking it beyond the first. keyword: keyword: Vigilance reminder: Attacking doesn’t cause this creature to tap. keyword: keyword: Defender reminder: This creature can’t attack. keyword: keyword: Cumulative upkeep separator: whitespace [ ] parameter: cost reminder: At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay for each age counter on it. keyword: keyword: Horsemanship reminder: This creature can’t be blocked except by creatures with horsemanship. keyword: keyword: Phasing reminder: At the beginning of your upkeep, put this and any cards attached to it in the phased-out zone. If this is already in the phased-out zone, return it and any card attached to it to play. If there were counters on this card when it phased out, put that many counters on it when it returns to play. This ability does not cause comes-into-play or leaves play abilities to trigger. keyword: keyword: Flanking separator: whitespace [ ] parameter: number reminder: Whenever a creature without flanking blocks this creature, the blocking creature gets -/- until end of turn. keyword: keyword: Shadow reminder: This creature can block or be blocked by only creatures with shadow. keyword: keyword: Buyback separator: whitespace [ ] parameter: name reminder: You may pay in addition to any other costs as you play this spell. If you do, put ~ into your hand instead of your graveyard as part of its resolution. keyword: keyword: Echo reminder: At the beginning of your next upkeep after this permanent comes under your control, sacrifice it unless you pay its mana cost. keyword: keyword: Plainscycling separator: whitespace [ ] parameter: cost reminder: , Discard this card: Search your library for a Plains card, reveal it, and put it into your hand. Then shuffle your library. keyword: keyword: Islandcycling separator: whitespace [ ] parameter: cost reminder: , Discard this card: Search your library for a Island card, reveal it, and put it into your hand. Then shuffle your library. keyword: keyword: Swampcycling separator: whitespace [ ] parameter: cost reminder: , Discard this card: Search your library for a Swamp card, reveal it, and put it into your hand. Then shuffle your library. keyword: keyword: Mountaincycling separator: whitespace [ ] parameter: cost reminder: , Discard this card: Search your library for a Mountain card, reveal it, and put it into your hand. Then shuffle your library. keyword: keyword: Forestcycling separator: whitespace [ ] parameter: cost reminder: , Discard this card: Search your library for a Forest card, reveal it, and put it into your hand. Then shuffle your library. keyword: keyword: Fading separator: whitespace [ ] parameter: number (a, two, ...) reminder: This comes into play with fade counter(s) on it. At the beginning of your upkeep, remove a fade counter from it. If you can’t, sacrifice it. keyword: keyword: Kicker separator: whitespace [ ] parameter: cost reminder: You may pay an additional as you play this spell. keyword: keyword: Madness separator: whitespace [ ] parameter: cost reminder: You may play this card for its madness cost at the time you discard it. keyword: keyword: Threshold separator: dash [ - ] parameter: action reminder: You have threshold as long as seven or more cards are in your graveyard. keyword: keyword: Flashback separator: whitespace [ ] parameter: cost reminder: You may play this card from your graveyard for its flashback cost. Then remove it from the game. keyword: keyword: Morph separator: whitespace [ ] parameter: cost reminder: You may play this face down as a 2/2 creature for [3]. Turn it face up any time for its morph cost. keyword: keyword: Amplify separator: whitespace [ ] parameter: number (a, two, ...) reminder: As this card comes into play, put +1/+1 counter(s) on it for each creature that shares a type with this that you reveal in your hand. keyword: keyword: Double strike reminder: This creature deals both first-strike and regular combat damage. keyword: keyword: Provoke reminder: When this attacks, you may have target creature defending player controls untap and block it if able. keyword: keyword: Storm reminder: When you play this spell, copy it for each spell played before it this turn. You may choose new targets for the copies. keyword: keyword: Affinity for separator: whitespace [ ] parameter: name reminder: This spell costs 1 less to play for each you control. keyword: keyword: Entwine separator: whitespace [ ] parameter: cost reminder: Choose both if you pay the entwine cost. keyword: keyword: Equip separator: whitespace [ ] parameter: cost reminder: : Attach to target creature you control. Equip only as a sorcery. This card comes into play unattached and stays in play if the creature leaves play. keyword: keyword: Imprint separator: dash [ - ] parameter: action reminder: The removed card is imprinted on this artifact. keyword: keyword: Modular separator: whitespace [ ] parameter: number (a, two, ...) reminder: This comes into play with +1/+1 counter(s) on it. When it’s put into a graveyard, you may put its +1/+1 counters on target artifact creature. keyword: keyword: Scry separator: whitespace [ ] parameter: number (, two, ...) reminder: Look at the top card(s) of your library. Put any number of them on the bottom of your library in any order and the rest on top of your library in any order. keyword: keyword: Sunburst reminder: This comes into play with a +1/+1 counter on it for each color of mana used to pay its cost. If it is not a creature, use charge counters instead. #keyword: # keyword: Splice onto # separator: whitespace [ ] # parameter: name # reminder: As you play a spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card’s effects to that spell. keyword: keyword: Splice onto Arcane separator: whitespace [ ] parameter: cost reminder: As you play an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card’s effects to that spell. keyword: keyword: Offering separator: dash [ - ] parameter: name reminder: You may play this card any time you could play an instant by sacrificing a and paying the difference in mana costs between this and the sacrificed . Mana cost includes color. keyword: keyword: Bushido separator: whitespace [ ] parameter: number reminder: When this blocks or becomes blocked, it gets +/+ until end of turn. keyword: keyword: Ninjutsu separator: whitespace [ ] parameter: cost reminder: , Return an unblocked attacker you control to hand: Put this card into play from your hand tapped and attacking. keyword: keyword: Soulshift separator: whitespace [ ] parameter: number reminder: When this is put into a graveyard from play, you may return target Spirit card with converted mana cost or less from you graveyard to your hand. keyword: keyword: Epic reminder: For the rest of the game, you can’t play spells. At the beginning of each of your upkeeps, copy this spell except for its epic ability. If the spell has any targets, you may choose new targets for the copy. keyword: keyword: Convoke reminder: Each creature you tap while playing this spell reduces its cost by 1 or by one mana of that creature’s color. keyword: keyword: Transmute separator: whitespace [ ] parameter: cost reminder: , Discard this card: Search your library for a card with the same converted mana cost as this card, reveal it, and put it into your hand. Then shuffle your library. Play only as a sorcery. keyword: keyword: Haunt reminder: When this card is put into a graveyard from play, remove it from the game haunting target creature. keyword: keyword: Bloodthirst separator: whitespace [ ] parameter: number (a, two, ...) reminder: If an opponent was dealt damage this turn, this creature comes into play with +1/+1 counter(s) on it. keyword: keyword: Replicate separator: whitespace [ ] parameter: cost reminder: When you play this spell, copy it for each time you paid its replicate cost. You may choose new targets for the copies. keyword: keyword: Islandwalk reminder: This creature is unblockable as long as defending player controls a Island. keyword: keyword: Forestwalk reminder: This creature is unblockable as long as defending player controls a Forest. keyword: keyword: Mountainwalk reminder: This creature is unblockable as long as defending player controls a Mountain. keyword: keyword: Plainswalk reminder: This creature is unblockable as long as defending player controls a Plains. keyword: keyword: Swampwalk reminder: This creature is unblockable as long as defending player controls a Swamp. keyword: keyword: Legendary Landwalk reminder: This creature is unblockable as long as defending player controls a Legendary land. keyword: keyword: Non-basic Landwalk reminder: This creature is unblockable as long as defending player controls a non-basic land. keyword: keyword: Snow-covered Landwalk reminder: This creature is unblockable as long as defending player controls a Snow-covered land. keyword: keyword: Denimwalk reminder: If defending player is wearing any clothing made of denim, this creature is unblockable. keyword: keyword: Protection from separator: whitespace [ ] parameter: name reminder: This creature can’t be blocked, targeted, dealt damage, or enchanted by anything . keyword: keyword: Dredge separator: whitespace [ ] parameter: number (one, two, ...) reminder: As long as you have at least card(s) in your library, if you would draw a card, you may instead put exactly card(s) from the top of your library into your graveyard and return this card from your graveyard to your hand. keyword: keyword: Graft separator: whitespace [ ] parameter: number (a, two, ...) reminder: This creature comes into play with +1/+1 counter(s) on it. Whenever another creature comes into play, you may move a +1/+1 counter from this creature onto it. keyword: keyword: Forecast separator: whitespace [ ] parameter: cost reminder: Play this ability only during your upkeep and only once each turn.