mse version: 0.3.5 short name: Magic full name: Magic the Gathering icon: card-back.png version: 2007-09-23 position hint: 01 ############################################################## Functions & filters # General functions init script: ############################################################## Sorting mana symbols # 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( match: "./.|././.|./././.|.[|]", in_context: "(^|[^/])($|[^/])", replace: {sort_text(order:"in_place((WUBRG)")} ) mana_has_guild := match_rule(match: "[/|]") # 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() } ############################################################## Determine card color # 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_names_1 := { color_name(colors.0) } color_names_2 := { color_name(colors.0) + ", " + color_name(colors.1) } color_names_3 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) } color_names_4 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) } color_names_5 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) + ", " + color_name(colors.4) } # color based on mana cost, input = a mana cost color_filter := sort_rule(order: "") color_filterH := sort_rule(order: "") mana_to_color := { count := number_of_items(in: colors) if hybrid == "" then # not a hybrid if count == 0 then "colorless" else if count == 1 then color_names_1() else if set.set_info.use_gradient_multicolor == "no" then "multicolor" # stop here else if count == 2 then color_names_2() + ", multicolor" else if set.set_info.use_gradient_multicolor != "yes" then "multicolor" # stop here else if count == 3 then color_names_3() + ", multicolor" else if count == 4 then color_names_4() + ", multicolor" else if count == 5 then color_names_5() + ", multicolor" else "multicolor" else # hybrid if count == 2 then color_names_2() + ", hybrid" else if count == 3 then color_names_3() + ", hybrid" else "multicolor" } # color based on land text box, input = textbox contents color_text_filter := # remove activation costs replace_rule( match: "]*>[^<]+]*>" in_context: "(?ix) (\\n|^)[^:]*(,|:) | (pays?|additional|costs?)[ ]", replace: "" ) + # keep only mana filter_rule(match: "]*>([^<]+)") + color_filter; # get the land frame for a "WUBRG"-style input. land_multicolor := { count := number_of_items(in: colors) if count == 0 then "land" else if count == 1 then color_names_1() + ", land" else if count == 2 then color_names_2() + ", land" else if count == 3 then color_names_3() + ", land" else "land, multicolor" } land_to_color := { # Based on watermark if watermark = "mana symbol white" then "white, land" else if watermark = "mana symbol blue" then "blue, land" else if watermark = "mana symbol black" then "black, land" else if watermark = "mana symbol red" then "red, land" else if watermark = "mana symbol green" then "green, land" else land_multicolor(colors:color_text_filter(input: card.rule_text)) }; # Look for a CDA that defines colors text_to_color := { # Note: running filter_text is quite slow, do a quick 'contains' check first if contains(match: card_name) then ( text := filter_text(match: card_name+"()? is (colorless|all colors|((blue|white|green|red|black)((,|,? and) (blue|white|green|red|black))*))\\.") if text != "" then ( if contains(text, match: "all colors") then ( colors := "WUBRG" if land = "land" then land_multicolor() else mana_to_color(hybrid: "") ) else ( colors := "" if contains(text, match: "white") then colors := colors + "W" if contains(text, match: "blue") then colors := colors + "U" if contains(text, match: "black") then colors := colors + "B" if contains(text, match: "red") then colors := colors + "R" if contains(text, match: "green") then colors := colors + "G" if land = "land" then land_multicolor() else mana_to_color(hybrid: "") ) ) ) } # The color of a card is_creature := match_rule(match: "(?i)Creature") is_tribal := match_rule(match: "(?i)Tribal") is_artifact := match_rule(match: "(?i)Artifact") is_land := match_rule(match: "(?i)Land") is_enchantment := match_rule(match: "(?i)Enchantment") is_spell := match_rule(match: "(?i)Instant|Sorcery") card_color := { # usually the color of mana text_color := text_to_color(rules_text, land: is_land(type)); if text_color == "" then ( mana_color := mana_to_color(colors: color_filter(casting_cost), hybrid: color_filterH(casting_cost)) if mana_color == "colorless" and is_land (type) then land_to_color(watermark) else if mana_color == "colorless" and is_artifact(type) then "artifact" else mana_color ) else text_color }; # Number of colors in a card_color card_color_color_count := { chosen(choice:"white") + chosen(choice:"blue") + chosen(choice:"black") + chosen(choice:"red") + chosen(choice:"green") + chosen(choice:"artifact") } # Clean up color field card_color_filter := { colors := card_color_color_count() if colors > 2 then input := remove_choice(choice: "overlay") if colors > 1 then ( input := require_choice(choice1: "multicolor", choice2: "hybrid", choice3: "land", choice4: "artifact") input := exclusive_choice(choice1: "multicolor", choice2: "hybrid") input := require_exclusive_choice(choice1: "horizontal", choice2: "vertical", choice3: "radial", choice4: "overlay") ) else input := remove_choice(choice1: "radial", choice2: "horizontal", choice3: "vertical", choice4: "overlay", choice5: "hybrid", choice6: "reversed") if chosen(choice:"overlay") then input := remove_choice(choice: "reversed") input } # needed by all style files anyway include file: /magic-blends.mse-include/new-blends ############################################################## Card number # Index for sorting, white cards are first, so white->A, blue->B, .. , # The code consists of 4 parts: # normal/token, color, shifted, split sort_index := { (if contains(card.shape, match:"token") then "T" else " ") + # Tokens come last color_of_card() + (if contains(card.shape, match:"shifted") then "S" else " ") + # planeshifted cards come after normal ones (if contains(card.shape, match:"split") then "S" else " ") + # split cards come after normal ones ":" } is_multicolor := { chosen(choice: "multicolor") and input != "artifact, multicolor" } is_null_cost := { input == "" or input == "0" } basic_land_sort := { if contains(card.name, match:"Plains") then "LB" # Plains else if contains(card.name, match:"Island") then "LC" # Islands else if contains(card.name, match:"Swamp") then "LD" # Swamps else if contains(card.name, match:"Mountain") then "LE" # Mountains else if contains(card.name, match:"Forest") then "LF" # Forests else "LA" # other basic lands } color_of_card := { card_color := card.card_color casting_cost := card.casting_cost if card.shape == "split" and card_color != card.card_color_2 then "H" # Diff Color Splits else if chosen(choice: "land", card_color) then ( if card.rarity != "basic land" then "K" # Nonbasic Land else basic_land_sort() ) else if is_null_cost(casting_cost) then ( if chosen(choice: "hybrid", card_color) then "G" # Hybrids else if is_multicolor(card_color) then "F" # Multicolor else if chosen(choice:"white", card_color) then "A" # White else if chosen(choice:"blue", card_color) then "B" # Blue else if chosen(choice:"black", card_color) then "C" # Black else if chosen(choice:"red", card_color) then "D" # Red else if chosen(choice:"green", card_color) then "E" # Green else "I" # Colorless / Artifact ) else ( # use the casting cost colors := sort_text(casting_cost, order: "") if colors == "" then "I" # Colorless / Artifact else if colors == "W" then "A" # White else if colors == "U" then "B" # Blue else if colors == "B" then "C" # Black else if colors == "R" then "D" # Red else if colors == "G" then "E" # Green else if contains(casting_cost, match:"/") then "G" #Hybrid else "F" # Multicolor ) } rarity_sort := { if set.sort_special_rarity == "with the rest" or card.rarity != "special" then " " else "S" } set_filter := { if set.sort_special_rarity != "separate numbering" then nil else if card.rarity == "special" then { card.rarity == "special" } else { card.rarity != "special" } } card_number := { position ( of: card in: set order_by: { rarity_sort() + sort_index() + card.name } filter: set_filter() ) + 1 } card_count := { number_of_items(in: set, filter: set_filter()) } ############################################################## Utilities for keywords # replaces — correctly add := "" # default is nothing separate_words := remove_tags + trim + replace_rule(match:" ", replace: " and/or ") for_mana_costs := format_cost := { if input.separator_before == "—" and contains(input.param, match: " ") then ( if contains(input.param, match:",") then ( if match(match: "^[STXYZWUBRG0-9/|]+,", input.param) then "{add}{combined_cost(input.param)}" else "{combined_cost(input.param)}" ) else "{alternative_cost(input.param)}" ) else "{add}{input.param}" } alternative_cost := replace_rule(match:"^[A-Z]", replace: { to_lower() }) combined_cost := replace_rule(match:", [A-Z]", replace: { to_lower() })+ replace_rule(match:",", replace:" and")+ replace_rule(match:"^[STXYZWUBRG0-9/|]", in_context: "(^|[[:space:]])", replace: "&")+ replace_rule(match:"^[A-Z]", replace: { to_lower() }) long_dash := replace_rule(match:"-", replace:"—") # Utilities for keywords has_cc := { card.casting_cost != "" } has_pt := { card.pt != "" } contains_target := match_rule(match:"(?i)([^a-z]|^)target([^a-z]|$)") is_targeted := { contains_target(card.rule_text) } ############################################################## The text box # 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 ([ ]]*>[STXYZWUBRG0-9/|]+]*>,)* # pay X, Y or Z ([ ]]*>[STXYZWUBRG0-9/|]+]*>[ ](and|or|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 expand_keywords_rule( default_expand: { chosen(choice:mode, set.automatic_reminder_text) }, combine: { if mode == "pseudo" then "{keyword}" else "{keyword} ({process_english_hints(reminder)})" } ) + # step 2b : move action keywords' reminder text to the end of the line replace_rule( match: "((?:(?!]*>)(((?!]*>[^)]+[)]]*>)([^\n]+)\\1" replace: "\\2\\1" ) + # 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 7 : italic reminder text replace_rule( match: "[(]([^)\n]|[(][^)\n]*[)])*[)]?", in_context: "(^|[[:space:]])|&") + # step 8 : automatic capitalization replace_rule( match: "[a-z]", in_context: "[(]()?[^)]|[ ]*: |—| — ", replace: to_upper) + curly_quotes ############################################################## Other boxes # 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 + "" } + # curly quotes curly_quotes # Move the cursor past the separator in the p/t and type boxes type_over_pt := replace_rule(match:"/$", replace:"") type_over_type := replace_rule(match:" ?-$", replace:"") super_type_filter := tag_remove_rule(tag: "{input}" } space_to_wltags := replace_rule(match:"( +| )", replace:{"{_1}"}) sub_type_filter := tag_remove_rule(tag: "$", replace: "") + # remove trailing soft space tag_remove_rule(tag: " " else first := first + " " input := next ) else ( first := "" ) if list_type != "" then ( if input != "" then input := input + " " # Add a new box at the end first + "{ space_to_wltags(input) }" ) else first + input } # all sub types, for word list space_to_comma := replace_rule(match:" ", replace:",") only_first := replace_rule(match:" .*", replace:"") only_next := replace_rule(match:"^[^ ]* ?", replace:"") all_sub_types := { for each card in set do if contains(card.super_type) then "," + space_to_comma(to_text(card.sub_type)) } all_races := { for each card in set do if is_creature(card.super_type) or is_tribal(card.super_type) then "," + only_first(to_text(card.sub_type)) } all_classes := { for each card in set do if contains(card.super_type, match:"Creature") then "," + space_to_comma(only_next(to_text(card.sub_type))) } # Shape of cards, can be changed in style files card_shape := { "normal" } typesymbol_for := to_text + replace_rule(match: "(Legendary|Basic|Snow|World| )", replace: "") + { if input == "Creature" then "creature" else if input == "Sorcery" then "sorcery" else if input == "Instant" then "instant" else if input == "Artifact" then "artifact" else if input == "Enchantment" then "enchantment" else if input == "Land" then "land" else "multitype" } typesymbol_type := { typesymbol_for(card.super_type) } ############################################################## Statistics utilities # Converted mana cost cmc := to_text + { 1 * number_of_items(in: sort_text(order:"SWUBRG")) # colored mana - 1 * number_of_items(in: sort_text(order:"/")) # guild mana, W/U -> 2 - 1 + 1 * filter_text(match: "^[0123456789]+(?!/)") # colorless mana, but not 1/2 + 1 * (length(sort_text(order:"compound(1/2)")) / 3) # compensate for 1/2. Should actually be 1.5 * } colored_mana := to_text + { number_of_items(in: sort_text(order: "WUBRG")) # colored mana - number_of_items(in: sort_text(order:"/")) # guild mana, W/U -> 2 - 1 + 1 * (length(sort_text(order:"compound(1/2)")) / 3) # compensate for 1/2. } primary_card_color := { artifact := chosen(choice:"artifact") land := chosen(choice:"land") multi := chosen(choice:"multicolor") hybrid := chosen(choice:"hybrid") if land then "land" else if multi and input != "artifact, multicolor" then "multicolor" else if hybrid then "hybrid" else if artifact then "artifact" else input } # 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 identifying: true 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: multiple choice name: automatic reminder text choice: old choice: core choice: expert choice: pseudo choice: action choice: custom initial: old, core, expert, pseudo, action, custom # Convert from older mse versions script: if value = "yes" then "old, core, expert, custom" else if value = "no" then "" else value description: For which kinds of keywords should reminder text be added 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: choice name: sort special rarity description: Determines how cards with special rarity are sorted. choice: with the rest choice: after other cards choice: separate numbering initial: after other 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 ############################# Default style default set style: title: padding left: 2 font: size: 16 symbol: max aspect ratio: 2.5 variation: name: common border radius: 0.10 fill type: solid fill color: rgb(0,0,0) border color: rgb(255,255,255) variation: name: uncommon border radius: 0.05 fill type: linear gradient fill color 1: rgb(224,224,224) fill color 2: rgb(84, 84, 84) border color 1: rgb(0, 0, 0) border color 2: rgb(0, 0, 0) variation: name: rare border radius: 0.05 fill type: linear gradient fill color 1: rgb(214,196,94) fill color 2: rgb(95, 84, 40) border color 1: rgb(0, 0, 0) border color 2: rgb(0, 0, 0) variation: name: special border radius: 0.10 fill type: linear gradient fill color 1: rgb(224,170,247) fill color 2: rgb(58,7,80) border color 1: rgb(255,255,255) border color 2: rgb(255,255,255) automatic reminder text: render style: checklist direction: vertical sort special rarity: render style: both choice images: with the rest: /magic.mse-game/icons/number_cards_mixed.png after other cards: /magic.mse-game/icons/number_cards_after.png separate numbering: /magic.mse-game/icons/number_cards_separate.png use gradient multicolor: render style: both choice images: yes: script: built_in_image("bool_yes") no: script: built_in_image("bool_no") ############################################################## Card fields ############################# Automatic fields # The 'shape' of the card (flip, split, etc.) card field: type: choice name: shape save value: false show statistics: false editable: false choice: normal choice: token choice: flip choice: split choice: shifted script: card_shape() # determined by the style card field: type: text name: full name save value: false show statistics: false editable: false card list visible: true card list name: Name card list column: 1 card list width: 150 description: The name of the card script: if contains(card.shape, match:"split") then card.name + " // " + card.name_2 else card.name ############################# 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: multiple choice name: card color empty choice: colorless choice: white choice: blue choice: black choice: red choice: name: green line below: true choice: artifact choice: land choice: multicolor choice: name: hybrid enabled: { card_color_color_count(card.card_color) >= 2 } line below: true choice: name: horizontal enabled: { card_color_color_count(card.card_color) >= 2 } type: radio choice: name: vertical enabled: { card_color_color_count(card.card_color) >= 2 } type: radio choice: name: radial enabled: { card_color_color_count(card.card_color) >= 2 } type: radio choice: name: overlay enabled: { card_color_color_count(card.card_color) == 2 and chosen(choice:"hybrid",card.card_color) } type: radio choice: name: reversed enabled: { card_color_color_count(card.card_color) >= 2 and not chosen(choice:"overlay",card.card_color) } script: card_color_filter(value) default: card_color(casting_cost: card.casting_cost, rules_text: card.rule_text, type: card.super_type, watermark: card.watermark, card_name: card.name) show statistics: false ############################# Name line card field: type: text name: name card list visible: false identifying: true show statistics: false card field: type: text name: casting cost icon: stats/casting_cost.png position hint: 1 script: mana_filter(value) 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 position hint: 10 icon: stats/card_symbol.png choice: none choice: tombstone description: Symbol for this card (tombstone) card field: type: choice name: type symbol default: typesymbol_type(value) card list visible: false show statistics: false choice: artifact choice: creature choice: enchantment choice: instant choice: land choice: multitype choice: sorcery ############################# Image card field: type: image name: image show statistics: false ############################# Card type card field: type: text name: super type icon: stats/card_type.png position hint: 30 editable: false script: super_type_filter(value) card field: type: text name: sub type icon: stats/creature_type.png position hint: 31 script: sub_type_filter(value, type:card.super_type) editable: false card field: type: text name: type show statistics: false 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 ) 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 position hint: 100 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 choice colors: basic land: rgb(109,62,39) common: rgb(33,33,33) uncommon: rgb(224,224,224) rare: rgb(255,207,52) special: rgb(190,0,255) ############################# Text box card field: type: text name: rule text script: text_filter(input: value, card_name: card.name) 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 position hint: 200 include file: /magic-watermarks.mse-include/watermark-names description: A watermark for below the textbox, this can be a big mana symbol used on basic lands, or a guild symbol ############################# Loyalty card field: type: text name: loyalty icon: stats/toughness.png position hint: 59 card field: type: text name: loyalty cost 1 show statistics: false card field: type: text name: loyalty cost 2 show statistics: false card field: type: text name: loyalty cost 3 show statistics: false ############################# PT card field: type: text name: power icon: stats/power.png show statistics: false script: type_over_pt(value) card field: type: text name: toughness show statistics: false icon: stats/toughness.png 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 ) card list visible: true card list column: 5 card list width: 50 card list name: P/T description: Power/toughness show statistics: false ############################# Card sorting / numbering card field: type: text name: card number save value: false script: card_number() + "/" + card_count() sort script: rarity_sort() + card.card_number 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 position hint: 210 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: multiple choice name: card color 2 icon: stats/card_color.png empty choice: colorless choice: white choice: blue choice: black choice: red choice: name: green line below: true choice: artifact choice: land choice: multicolor choice: name: hybrid enabled: { card_color_color_count(card.card_color_2) >= 2 } line below: true choice: name: horizontal enabled: { card_color_color_count(card.card_color_2) >= 2 } type: radio choice: name: vertical enabled: { card_color_color_count(card.card_color_2) >= 2 } type: radio choice: name: radial enabled: { card_color_color_count(card.card_color_2) >= 2 } type: radio choice: name: overlay enabled: { card_color_color_count(card.card_color_2) == 2 and chosen(choice:"hybrid",card.card_color_2) } type: radio choice: name: reversed enabled: { card_color_color_count(card.card_color) >= 2 and not chosen(choice:"overlay",card.card_color_2) } script: card_color_filter(value) default: card_color(casting_cost: card.casting_cost_2, type: card.super_type_2, rules_text: card.rule_text_2, watermark: card.watermark_2, card_name: card.name_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) 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 script: super_type_filter(value) card field: type: text name: sub type 2 icon: stats/creature_type.png editable: false show statistics: false script: sub_type_filter(value, type:card.super_type_2) card field: type: text name: type 2 save value: false script: combined_editor( field1: card.super_type_2, separator: " — ", field2: card.sub_type_2, soft_before_empty: true, hide_when_empty: true ) 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) 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: choice name: watermark 2 include file: /magic-watermarks.mse-include/watermark-names icon: stats/watermark.png show statistics: false description: A watermark for below the textbox, this can be a big mana symbol used on basic lands, a special symbol, or a guild symbol card field: type: text name: power 2 icon: stats/power.png show statistics: false script: type_over_pt(value) card field: type: text name: toughness 2 icon: stats/toughness.png 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 ) card list width: 50 card list name: P/T2 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) ############################################################## Card list card list color script: input := card.card_color if input == "white" then rgb(156,134,90) else if input == "blue" then rgb(0,64,168) else if input == "black" then rgb(0,0,0) else if input == "red" then rgb(168,0,0) else if input == "green" then rgb(0,168,0) else ( artifact := chosen(choice:"artifact") land := chosen(choice:"land") multi := chosen(choice:"multicolor") hybrid := chosen(choice:"hybrid") if land then rgb(109,62,39) # land else if multi and input != "artifact, multicolor" then rgb(120,120,0) # multicolor else if hybrid then rgb(115,0,160) # hybrid else if artifact then rgb(72,90,100) # artifact else rgb(119,83,83) # colorless ) ############################################################## Statistics categories statistics dimension: name: card color position hint: 0 script: primary_card_color(card.card_color) icon: stats/card_color.png colors: white : rgb(255,237,202) blue : rgb(42,141,255) black : rgb(33,33,33) red : rgb(255,52,0) green : rgb(138,230,0) colorless : rgb(122,85,85) artifact : rgb(188,192,195) multicolor : rgb(255,188,14) land : rgb(109,62,39) hybrid : rgb(243,26,136) group: white group: blue group: black group: red group: green group: colorless group: artifact group: multicolor group: land group: hybrid statistics dimension: position hint: 2 name: converted mana cost script: cmc(card.casting_cost) numeric: true icon: stats/casting_cost.png statistics dimension: position hint: 3 name: colored mana cost script: colored_mana(card.casting_cost) numeric: true icon: stats/colored_casting_cost.png statistics dimension: position hint: 50 name: power script: card.power numeric: true icon: stats/power.png statistics dimension: position hint: 51 name: toughness script: card.toughness numeric: true icon: stats/toughness.png statistics dimension: name: keywords position hint: 1000 script: keyword_usage(unique:true) show empty: false split list: true icon: stats/keywords.png statistics dimension: name: race position hint: 32 icon: stats/creature_type.png description: Race of creatures and tribal cards script: if is_creature(card.super_type) or is_tribal(card.super_type) then only_first(card.sub_type) show empty: false statistics dimension: name: creature class position hint: 33 icon: stats/creature_type.png description: Class of creature cards script: if is_creature(card.super_type) then space_to_comma(trim(remove_tags(only_next(card.sub_type)))) show empty: false split list: true statistics category: name: color / rarity position hint: 101 type: stack icon: stats/color_rarity.png dimension: card color dimension: rarity statistics category: name: power / toughness position hint: 52 type: scatter pie icon: stats/pt.png dimension: power dimension: toughness dimension: rarity #statistics category: # name: color / cost # type: scatter # dimension: card color # dimension: converted mana cost statistics category: name: color / cost position hint: 4 type: scatter pie icon: stats/color_cost.png dimension: card color dimension: converted mana cost dimension: rarity statistics category: name: color / colored cost position hint: 5 icon: stats/color_colored_cost.png type: scatter dimension: card color dimension: colored mana cost statistics category: name: cost / colored cost position hint: 6 icon: stats/cost_colored_cost.png type: scatter pie dimension: converted mana cost dimension: colored mana cost dimension: card color statistics category: name: creature race / class position hint: 34 icon: stats/creature_type.png type: scatter pie dimension: race dimension: creature class dimension: card color ############################################################## Word lists word list: name: type word: name: Basic is prefix: true word: name: Legendary is prefix: true word: name: Tribal is prefix: true word: name: Snow is prefix: true word: name: World is prefix: true line below: true word: Creature word: Artifact word: Artifact Creature word: Enchantment word: Instant word: Sorcery word: Land word: Planeswalker word list: name: race word: script: all_races() line below: true word: Beast word: Bird word: Elemental word: Elf word: Goblin word: Human word: Merfolk word: Zombie # TODO: lots more? word list: name: class word: script: all_classes() line below: true word: Cleric word: Druid word: Lord word: Shaman word: Soldier word: Warrior word: name: Wizard # line below: true #word: # name: All types # word: A # word: B # # TODO: Add all types here word list: name: artifact word: name: line below: true word: Equipment word list: name: land word: script: all_sub_types(match: "Land") line below: true word: Plains word: Island word: Swamp word: Mountain word: Forest word list: name: enchantment word: name: line below: true word: Aura word list: name: spell word: name: line below: true word: Arcane ############################################################## Auto replace # Do we need categories? #auto replace category: text box #auto replace category: copyright #auto replace category: everywhere auto replace: match: (C) replace: © auto replace: match: AE replace: Æ whole word: false auto replace: match: TM replace: ™ whole word: false auto replace: match: -- replace: — auto replace: # note the spaces match: - replace: — auto replace: match: CIP replace: comes into play auto replace: match: AAA replace: as an additional cost to play ############################################################## Add multiple cards #set template: # name: Base set (??? cards) #set template: # name: Expansion set (134 cards) #set template: # name: 5 color cycle # field: rarity #set template: # name: 3 rarities cycle ############################################################## Card packs pack type: name: Starter pack pack type: name: Tournament pack card type: name: Rare amount: 3 filter: card.rarity == "rare" card type: name: Uncommon amount: 9 filter: card.rarity == "uncommon" card type: name: Common amount: 33 filter: card.rarity == "common" card type: name: Plains amount: 6 filter: card.type == "Plains" card type: name: Island amount: 6 filter: card.type == "Island" card type: name: Swamp amount: 6 filter: card.type == "Swamp" card type: name: Mountain amount: 6 filter: card.type == "Mountain" card type: name: Forest amount: 6 filter: card.type == "Forest" pack type: name: Booster pack card type: name: Rare amount: 1 filter: card.rarity == "rare" card type: name: Uncommon amount: 3 filter: card.rarity == "uncommon" card type: name: Common amount: 11 filter: card.rarity == "common" ############################################################## Keywords ############################# Keyword rules has keywords: true #keyword match script: name_filter(value) #keyword preview: {keyword} ({reminder}) keyword mode: name: old description: Old keywords (Banding, Phasing, etc.) keyword mode: name: core description: Core set keywords (Flying, Haste, etc.) keyword mode: name: expert description: Expert set keywords (Cycling, Vanishing, etc.) keyword mode: name: pseudo description: Pseudo keyword / Ability words (Hellbent, Threshold, etc.) keyword mode: name: action description: Keyword actions, reminder text at end of line (Scry, Regenerate, etc.) keyword mode: is default: true name: custom description: Custom keywords keyword parameter type: name: mana match: [STXYZ0-9WUBRG/|]+ refer script: name: normal description: No changes made script: \{{input}\} refer script: name: converted mana cost description: Converts mana to number # "0" left in so users can easily see how to edit script. script: \{cmc({input}) + 0\} # By pichoro and bunnierein keyword parameter type: name: cost match: [ ][STXYZ0-9WUBRG/|]*|[-—][^(\n]* separator before is: [ —-] separator after is: [.] optional: false # note: the separator is part of match refer script: name: normal description: When using mana only costs, doesn't include anything extra in the reminder text script: \{{input}\} refer script: name: add "pay an additional " for mana costs description: When using mana only costs, words the reminder text as "pay an additional " script: \{for_mana_costs(add:"pay an additional ", {input})\} refer script: name: add "pay " for mana costs description: When using mana only costs, words the reminder text as "pay " script: \{for_mana_costs(add:"pay ", {input})\} separator script: long_dash() keyword parameter type: name: number match: [XYZ0-9]+ refer script: name: normal description: (1,2,3) script: \{{input}\} refer script: name: as words description: (one, two, three) script: \{english_number({input})\} refer script: name: as words, use "a" for 1 description: (a, two, three) script: \{english_number_a({input})\} refer script: name: as words, use "" for 1 description: (, two, three) script: \{english_number_multiple({input})\} refer script: name: as ordinal words description: (first, second, third) script: \{english_number_ordinal({input})\} keyword parameter type: name: action match: [^(:\n]+ separator after is: [.] reminder script: alternative_cost() keyword parameter type: name: name match: [^(.:;\n—]+ refer script: name: normal description: No changes made. script: \{{input}\} refer script: name: singular description: Removes plurality from words. script: \{english_singular({input})\} refer script: name: separate words description: Changes spaces to " and/or ". "Elf Warrior" becomes "Elf and/or Warrior". script: \{separate_words({input})\} keyword parameter type: name: prefix description: Prefix for things like "walk" optional: false # match: [A-Z][a-z, ]*([A-Z][a-z, ]*\xEB00) # commented out because it stopped prefix param from working, version below allows all "walks", including "Dame Judi Denchwalk", doesn't trigger #in middle of sentences, and doesn't trigger in chains of keywords. match: [A-Z][A-Z,a-z’ ]* example: Forest keyword parameter type: name: a match: [ ]*|[ an?]* ############################# All Magic keywords # By JrEye and Neko_Asakami, Updated by Pichoro and Buttock1234 keyword: keyword: Flying match: Flying mode: core reminder: This creature can’t be blocked except by creatures with flying or reach. keyword: keyword: First strike match: First strike mode: core reminder: This creature deals combat damage before creatures without first strike. keyword: keyword: Trample match: Trample mode: core 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 match: Banding mode: old reminder: Any number of attacking creatures with banding, and up to one without, can form a band. Blocking a creature in the band blocks all of them. You assign combat damage for any creature blocking or blocked by this creature. keyword: keyword: Landwalk match: prefixwalk mode: core reminder: This creature is unblockable as long as defending player controls a {if match(param1.value, match: " land$") or contains(param1.value, match: "Snow") or contains(param1.value, match:"Basic") or contains(param1.value, match:"Legendary") then "{to_lower(param1)}" else "{param1}"}. keyword: keyword: Protection from match: Protection from name mode: core reminder: This creature can’t be blocked, targeted, dealt damage, enchanted, or equipped by anything {english_singular(param1)}. keyword: keyword: Regeneration match: Regenerate mode: action reminder: The next time {if has_pt() then "this creature" else "this"} would be destroyed this turn, it isn't.{if has_pt() then " Instead tap it, remove all damage from it, and remove it from combat." else " Instead tap it."} keyword: keyword: Bands with other match: Bands with other name mode: old reminder: Any number of attacking creatures with banding or bands with other {param1} can form a band. Blocking a creature in the band blocks all of them. You assign combat damage for any creature blocking or blocked by this creature and another creature with bands with other {param1}. keyword: keyword: Rampage match: Rampage number mode: old reminder: Whenever this creature becomes blocked, it gets +{param1}/+{param1} until end of turn for each creature blocking it beyond the first. keyword: keyword: Cumulative upkeep match: Cumulative upkeep cost mode: old reminder: 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. keyword: keyword: Phasing match: Phasing mode: old reminder: At the beginning of your untap step, put this and any cards and/or counters attached to it in the phased-out zone. If this is already in the phased-out zone, return it and any cards and/or counters attached to it to play. This ability does not cause comes-into-play or leaves-play abilities to trigger. keyword: keyword: Flanking match: Flanking mode: old reminder: Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn. keyword: keyword: Shadow match: Shadow mode: expert reminder: This creature can block or be blocked by only creatures with shadow. keyword: keyword: Denimwalk match: Denimwalk mode: old reminder: If defending player is wearing any clothing made of denim, this creature is unblockable. keyword: keyword: Buyback match: Buyback cost mode: expert reminder: You may {for_mana_costs(add:"pay an additional ",param1)} as you play this spell. If you do, put this card into your hand as it resolves. keyword: keyword: Echo match: Echo cost mode: expert reminder: At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost. keyword: keyword: Cycling match: Cycling cost mode: expert reminder: {param1}, Discard this card: Draw a card. keyword: keyword: Haste match: Haste mode: core reminder: This creature can attack and T as soon as it comes under your control. keyword: keyword: Horsemanship match: Horsemanship mode: old reminder: This creature can’t be blocked except by creatures with horsemanship. keyword: keyword: Fading match: Fading number mode: expert reminder: This comes into play with {english_number_a(param1)} 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 match: Kicker mana and/or mana mode: expert reminder: You may pay an additional {param1} and/or {param2} as you play this spell. keyword: keyword: Kicker match: Kicker cost mode: expert reminder: You may {for_mana_costs(add:"pay an additional ", param1)} as you play this spell. keyword: keyword: Flashback match: Flashback cost mode: expert reminder: You may play this card from your graveyard for its flashback cost. Then remove it from the game. keyword: keyword: Threshold match: Threshold mode: pseudo rules: Threshold — [effect] as long as seven or more cards are in your graveyard. keyword: keyword: Madness match: Madness cost mode: expert reminder: If you discard this card, you may play it for its madness cost instead of putting it into your graveyard. keyword: keyword: Morph match: Morph cost mode: expert 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: Fear match: Fear mode: core reminder: This creature can’t be blocked except by artifact creatures and/or black creatures. keyword: keyword: Amplify match: Amplify number mode: expert reminder: As this card comes into play, put {english_number_a(param1)} +1/+1 counter(s) on it for each {separate_words(card.sub_type)} card you reveal in your hand. keyword: keyword: Double strike match: Double strike mode: core reminder: This creature deals both first-strike and regular combat damage. keyword: keyword: Provoke match: Provoke mode: expert reminder: When this attacks, you may have target creature defending player controls untap and block it if able. keyword: keyword: Typecycling match: prefixcycling cost mode: expert reminder: {param2}, Discard this card: Search your library for a {param1} card, reveal it, and put it into your hand. Then shuffle your library. keyword: keyword: Storm match: Storm mode: expert reminder: When you play this spell, copy it for each spell played before it this turn.{ if is_targeted() then " You may choose new targets for the copies." } keyword: keyword: Affinity for match: Affinity for name mode: expert reminder: This spell costs 1 less to play for each {english_singular(param1)} you control. keyword: keyword: Entwine match: Entwine cost mode: expert reminder: Choose both if you pay the entwine cost. keyword: keyword: Equip match: Equip cost mode: core reminder: {param1}: Attach to target creature you control. Equip only as a sorcery. keyword: keyword: Imprint match: Imprint — action mode: expert reminder: The removed card is imprinted on this artifact. keyword: keyword: Modular match: Modular number mode: expert reminder: This comes into play with {english_number_a(param1)} +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 match: Scry number mode: action reminder: To scry {param1}, look at the top { if param1.value==1 then "card of your library, then you may put that card on the bottom of your library." else "{english_number(param1)} cards of your library. Put any number of them on the bottom of your library in any order and the rest on top in any order." } keyword: keyword: Sunburst match: Sunburst mode: expert reminder: This comes into play with a {if has_pt() then "+1/+1" else "charge"} counter on it for each color of mana used to pay its cost. keyword: keyword: Art rampage match: Art rampage number mode: expert reminder: Whenever this becomes blocked by a creature, it gets +{param1}/+{param1} for each creature in the blocker's art beyond the first. keyword: keyword: Super haste match: Super haste mode: expert reminder: This may attack the turn before you play it. (You may put this card into play from your hand, tapped and attacking, during your declare attackers step. If you do, you lose the game at the end of your next turn unless you pay this card's mana cost during that turn.) keyword: keyword: Gotcha match: Gotcha mode: pseudo rules: Gotcha — Whenever an opponent [does something], you may say "Gotcha!". If you do, return [something] from your graveyard to your hand. keyword: keyword: Splice match: Splice onto name cost mode: expert reminder: As you play a {param1} 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: Bushido match: Bushido number mode: expert reminder: When this blocks or becomes blocked, it gets +{param1}/+{param1} until end of turn. keyword: keyword: Soulshift match: Soulshift number mode: expert reminder: When this is put into a graveyard from play, you may return target Spirit card with converted mana cost {param1} or less from you graveyard to your hand. keyword: keyword: Enchant match: Enchant name mode: core reminder: Target a {param1} as you play this. This card comes into play attached to that {param1}. keyword: keyword: Vigilance match: Vigilance mode: core reminder: Attacking doesn’t cause this creature to tap. keyword: keyword: Defender match: Defender mode: core reminder: This creature can’t attack. keyword: keyword: Offering match: prefix offering mode: expert reminder: You may play this card any time you could play an instant by sacrificing a {param1} and paying the difference in mana costs between this and the sacrificed {param1}. Mana cost includes color. keyword: keyword: Ninjutsu match: Ninjutsu cost mode: expert reminder: {param1}, Return an unblocked attacker you control to hand: Put this card into play from your hand tapped and attacking. keyword: keyword: Epic match: Epic mode: expert 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 is_targeted() then " You may choose a new target for the copy." } keyword: keyword: Channel match: Channel mode: pseudo rules: Channel — [cost], Discard ~: [effect]. keyword: keyword: Sweep match: Sweep mode: pseudo rules: Sweep — Return any number of [basic land type] you control to their owner's hand. [effect based on number of lands returned]. keyword: keyword: Convoke match: Convoke mode: expert 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 match: Transmute cost mode: expert reminder: {param1}, 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: Dredge match: Dredge number mode: expert reminder: If you would draw a card, instead you may put exactly {english_number(param1)} card(s) from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card. keyword: keyword: Radiance match: Radiance mode: pseudo rules: Radiance — [effect to target permanent or spell and all cards of same card type that share a color with it] keyword: keyword: Haunt match: Haunt mode: expert reminder: When this { if contains(card.type,match:"Instant") or contains(card.type,match:"Sorcery") then "spell card is put into a graveyard after resolving," else "card is put into a graveyard from play," } remove it from the game haunting target creature. keyword: keyword: Bloodthirst match: Bloodthirst number mode: expert reminder: If an opponent was dealt damage this turn, this creature comes into play with {english_number_a(param1)} +1/+1 counter(s) on it. keyword: keyword: Replicate match: Replicate cost mode: expert reminder: When you play this spell, copy it for each time you paid its replicate cost.{ if is_targeted() then " You may choose new targets for the copies." } keyword: keyword: Graft match: Graft number mode: expert reminder: {if has_pt() then "This creature" else "This permanent"} comes into play with {english_number_a(param1)} +1/+1 counter(s) on it. Whenever {if has_pt() then "another" else "a"} creature comes into play, you may move a +1/+1 counter from {if has_pt() then "this creature" else "this permanent"} onto it. keyword: keyword: Forecast match: Forecast — action, Reveal name from your hand: action mode: expert reminder: Play this ability only during your upkeep and only once each turn. keyword: keyword: Hellbent match: Hellbent mode: pseudo rules: Hellbent — [effect] if you have no cards in hand. keyword: keyword: Recover match: Recover cost mode: expert reminder: When a creature is put into your graveyard from play, you may {for_mana_costs(add:"pay ",param1)}. If you do, return this card from your graveyard to your hand. Otherwise, remove this card from the game. keyword: keyword: Ripple match: Ripple number mode: expert reminder: When you play this spell, you may reveal the top {english_number_multiple(param1)} card(s) of your library. You may play any revealed cards with the same name as this spell without paying their mana costs. Put the rest on the bottom of your library. keyword: keyword: Flash match: Flash mode: core reminder: You may play this spell anytime you could play an instant. keyword: keyword: Split second match: Split second mode: expert reminder: As long as this spell is on the stack, players can't play spells or activated abilities that aren't mana abilities. keyword: keyword: Suspend match: Suspend numbercost mode: expert reminder: Rather than play this card from your hand,{if has_cc() then " you may" else ""} {for_mana_costs(add:"pay ", param2)} and remove it from the game with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter. When the last is removed, play it without paying its mana cost.{if has_pt() then " It has haste." } keyword: keyword: Vanishing match: Vanishing number mode: expert reminder: This permanent comes into play with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it. keyword: keyword: Deathtouch match: Deathtouch mode: expert reminder: Whenever this creature deals damage to a creature, destroy that creature. keyword: keyword: Reach match: Reach mode: core reminder: This creature can block creatures with flying. keyword: keyword: Gravestorm match: Gravestorm mode: expert reminder: When you play this spell, copy it for each permanent put into a graveyard this turn.{ if is_targeted() then " You may choose new targets for the copies." } keyword: keyword: Lifelink match: Lifelink mode: core reminder: Whenever this creature deals damage, you gain that much life. keyword: keyword: Absorb match: Absorb number mode: expert reminder: If a source would deal damage to this creature, prevent {param1} of that damage. keyword: keyword: Fateseal match: Fateseal number mode: action reminder: Look at the top { if param1.value==1 then "card of an opponent's library, then you may put it on the bottom of that player's library." else "{english_number(param1)} cards of an opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order." } keyword: keyword: Transfigure match: Transfigure cost mode: expert reminder: {param1}, Sacrifice this creature: Search your library for a creature card with the same converted mana cost as this creature and put that card into play. Then shuffle your library. Play only as a sorcery. keyword: keyword: Aura swap match: Aura swap cost mode: expert reminder: {param1}: Exchange this Aura with an Aura card in your hand. keyword: keyword: Frenzy match: Frenzy number mode: expert reminder: Whenever this creature attacks and isn't blocked, it gets +{param1}/+0 until end of turn. keyword: keyword: Delve match: Delve mode: expert reminder: You may remove any number of cards in your graveyard from the game as you play this spell. It costs 1 less to play for each card removed this way. keyword: keyword: Poisonous match: Poisonous number mode: expert reminder: Whenever this creature deals combat damage to a player, that player gets {english_number_a(param1)} poison counter(s). A player with ten or more poison counters loses the game. keyword: keyword: Shroud match: Shroud mode: core reminder: This permanent can't be the target of spells or abilities. keyword: keyword: Fortify match: Fortify cost mode: expert reminder: {param1}: Attach to target land you control. Fortify only as a sorcery. This card comes into play unattached and stays in play if the land leaves play. keyword: keyword: Grandeur match: Grandeur mode: pseudo rules: Grandeur — Discard another card named ~: [effect]. keyword: keyword: Evoke match: Evoke cost mode: expert reminder: You may play this spell for its evoke cost. If you do, it's sacrificed when it comes into play. keyword: keyword: Champion match: Championaname mode: expert reminder: When this comes into play, sacrifice it unless you remove another {param2} you control from the game. When this leaves play, that card returns to play. keyword: keyword: Clash match: Clash mode: action reminder: Each clashing player reveals the top card of his or her library then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost. keyword: keyword: Changeling match: Changeling mode: expert reminder: This card is every creature type even if it isn't in play. keyword: keyword: Hideaway match: Hideaway mode: expert reminder: This land comes into play tapped. When it does, look at the top four cards of your library, remove one from the game face down, then put the rest on the bottom of your library.