mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 13:06:59 -04:00
6dceccd6cb
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@639 0fc631ac-6414-0410-93d0-97cfa31319b6
1965 lines
63 KiB
Plaintext
1965 lines
63 KiB
Plaintext
mse version: 0.3.5
|
||
short name: Magic
|
||
full name: Magic the Gathering
|
||
icon: card-back.png
|
||
version: 2007-08-28
|
||
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: "(^|[^/])<match>($|[^/])",
|
||
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: "<T>")
|
||
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: "<WUBRG>")
|
||
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: "<sym[^>]*>[^<]+</sym[^>]*>"
|
||
in_context: "(?ix) (\\n|^)[^:]*<match>(,|:) | (pays?|additional|costs?)[ ]<match>",
|
||
replace: ""
|
||
) +
|
||
# keep only mana
|
||
filter_rule(match: "<sym[^>]*>([^<]+)") + 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+"(</[-a-z]+>)? 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, .. ,
|
||
# multi->F, hybrid->G, splits -> H, arti->I, land->K, basic land->L, plains->M, island->N, swamp->O, mountain->P, forest->Q
|
||
is_multicolor := { chosen(choice: "multicolor") and input != "artifact, multicolor" }
|
||
is_null_cost := { input == "" or input == "0" }
|
||
sort_index := {
|
||
card_color := card.card_color
|
||
casting_cost := card.casting_cost
|
||
if card.casting_cost_2 != "" and
|
||
card_color != card.card_color_2 then "H" # multicolor splits
|
||
else if chosen(choice: "land", card_color) then (
|
||
# land
|
||
if card.rarity != "basic land" then "K" # nonbasic land
|
||
else (
|
||
if contains(card.name, match:"Plains") then "M"
|
||
else if contains(card.name, match:"Island") then "N"
|
||
else if contains(card.name, match:"Swamp") then "O"
|
||
else if contains(card.name, match:"Mountain") then "P"
|
||
else if contains(card.name, match:"Forest") then "Q"
|
||
else "L" # other basic land
|
||
)
|
||
) else if is_null_cost(casting_cost) then (
|
||
# no casting cost; use frame
|
||
if chosen(choice: "hybrid", card_color) then "G" # Hybrid frame
|
||
else if is_multicolor(card_color) then "F" # Multicolor frame
|
||
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" # Non of the above = Colorless/artifact
|
||
) else (
|
||
# use the casting cost
|
||
colors := sort_text(casting_cost, order: "<WUBRG>")
|
||
if colors == "" then "I" # Colorless
|
||
else if contains(casting_cost, match:"/") then "G" # Hybrid cost
|
||
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 "F" # non of the above = multicolor
|
||
)
|
||
}
|
||
|
||
rarity_sort := {
|
||
if set.sort_special_rarity == "with the rest" or card.rarity != "special" then "A" else "Z"
|
||
}
|
||
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 := replace_rule(match:" ", replace: " and/or ")+ remove_tags
|
||
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}<param-cost>{combined_cost(input.param)}</param-cost>"
|
||
else "<param-cost>{combined_cost(input.param)}</param-cost>"
|
||
) else
|
||
"<param-cost>{alternative_cost(input.param)}</param-cost>"
|
||
) else
|
||
"{add}<param-mana>{input.param}</param-mana>"
|
||
}
|
||
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:]])<match>", replace: "<sym-auto>&</sym-auto>")+
|
||
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
|
||
( <match>: # G: something
|
||
| <match>, # G, tap: something
|
||
| <match>[ ]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
|
||
([ ]<sym[^>]*>[STXYZWUBRG0-9/|]+</sym[^>]*>,)* # pay X, Y or Z
|
||
([ ]<sym[^>]*>[STXYZWUBRG0-9/|]+</sym[^>]*>[ ](and|or|and/or))* # pay X or Y
|
||
[ ]<match>
|
||
([,.)]|$ # (end of word)
|
||
|[ ][^ .,]*$ # still typing...
|
||
|[ ]( or | and | in | less | more | to ) # or next word is ...
|
||
)
|
||
)
|
||
| <param-mana><match></param-mana> # keyword argument that is declared as mana
|
||
| <param-cost>[ ]*<match></param-cost> # keyword argument that is declared as cost
|
||
| <param-cost><match>, # 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: "<sym-auto>") +
|
||
tag_remove_rule(tag: "<i-auto>") +
|
||
# step 2 : reminder text for keywords
|
||
expand_keywords_rule(
|
||
default_expand: { chosen(choice:mode, set.automatic_reminder_text) },
|
||
combine: {
|
||
if mode == "pseudo" then "<i-auto>{keyword}</i-auto>"
|
||
else "{keyword}<atom-reminder-{mode}> ({process_english_hints(reminder)})</atom-reminder-{mode}>" }
|
||
) +
|
||
# step 2b : move action keywords' reminder text to the end of the line
|
||
replace_rule(
|
||
match: "(<atom-reminder-action>(?:(?!<kw-).)*</atom-reminder-action></kw[^>]*>)(((?!<atom-reminder| ?<kw-)[^\n(])+)",
|
||
replace: "\\2\\1"
|
||
) +
|
||
# step 2c : remove duplicate reminder text
|
||
replace_rule(
|
||
match: "(<atom-reminder-[^>]*>[^)]+[)]</atom-reminder-[^>]*>)([^\n]+)\\1"
|
||
replace: "\\2\\1"
|
||
) +
|
||
# step 3a : expand shortcut words ~ and CARDNAME
|
||
replace_rule(
|
||
match: "~|~THIS~|CARDNAME",
|
||
in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
|
||
replace: "<atom-cardname></atom-cardname>"
|
||
) +
|
||
# step 3b : fill in atom fields
|
||
tag_contents_rule(
|
||
tag: "<atom-cardname>",
|
||
contents: { if card_name=="" then "CARDNAME" else card_name }
|
||
) +
|
||
# step 4 : explict non mana symbols
|
||
replace_rule(
|
||
match: "\\][STXYZWUBRG0-9/|]+\\[",
|
||
replace: {"<nosym>" + mana_filter_t() + "</nosym>"} ) +
|
||
# step 5 : add mana & tap symbols
|
||
replace_rule(
|
||
match: "[STXYZWUBRG0-9/|]+",
|
||
in_context: mana_context,
|
||
replace: {"<sym-auto>" + mana_filter_t() + "</sym-auto>"} ) +
|
||
# step 5b : add explict mana symbols
|
||
replace_rule(
|
||
match: "\\[[STXYZWUBRG0-9/|]+\\]",
|
||
replace: {"<sym>" + mana_filter_t() + "</sym>"} ) +
|
||
# step 7 : italic reminder text
|
||
replace_rule(
|
||
match: "[(][^)\n]*[)]?",
|
||
in_context: "(^|[[:space:]])<match>|<atom-keyword><match></",
|
||
replace: "<i-auto>&</i-auto>") +
|
||
# step 8 : automatic capitalization
|
||
replace_rule(
|
||
match: "[a-z]",
|
||
in_context: "[(](<param-[a-z]*>)?<match>|[ ]*: <param-cost><match>|—<match>| — <match>",
|
||
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: "<i-flavor>") +
|
||
# step 2 : surround by <i> tags
|
||
{ "<i-flavor>" + input + "</i-flavor>" } +
|
||
# 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: "<word-list-") +
|
||
type_over_type +
|
||
{ "<word-list-type>{input}</word-list-type>" }
|
||
|
||
space_to_wltags := replace_rule(match:"( +|<soft> </soft>)",
|
||
replace:{"</word-list-{list_type}>{_1}<word-list-{list_type}>"})
|
||
sub_type_filter :=
|
||
tag_remove_rule(tag: "<word-list-") +
|
||
replace_rule(match: " </soft>$", replace: "") + # remove trailing soft space
|
||
tag_remove_rule(tag: "<soft") +
|
||
{ list_type := if is_creature(type) then "class"
|
||
else if is_land(type) then "land"
|
||
else if is_artifact(type) then "artifact"
|
||
else if is_enchantment(type) then "enchantment"
|
||
else if is_spell(type) then "spell"
|
||
if is_creature(type) or is_tribal(type) then (
|
||
first := "<word-list-race>{ only_first(input) }</word-list-race>"
|
||
next := only_next(input)
|
||
if input == "" then list_type := "" # only edit the race
|
||
else if next == "" then first := first + "<soft> </soft>"
|
||
else first := first + " "
|
||
input := next
|
||
) else (
|
||
first := ""
|
||
)
|
||
if list_type != "" then (
|
||
if input != "" then input := input + "<soft> </soft>" # Add a new box at the end
|
||
first + "<word-list-{list_type}>{ space_to_wltags(input) }</word-list-{list_type}>"
|
||
) 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" }
|
||
|
||
############################################################## 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
|
||
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 card_shape() == "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
|
||
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
|
||
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
|
||
script: super_type_filter(value)
|
||
card field:
|
||
type: text
|
||
name: sub type
|
||
icon: stats/creature_type.png
|
||
script: sub_type_filter(value, type:card.super_type)
|
||
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
|
||
)
|
||
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
|
||
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: "<line>\n</line>", field2: card.flavor_text)
|
||
card field:
|
||
type: choice
|
||
name: watermark
|
||
icon: stats/watermark.png
|
||
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
|
||
|
||
############################# PT
|
||
card field:
|
||
type: text
|
||
name: power
|
||
icon: stats/power.png
|
||
script: type_over_pt(value)
|
||
card field:
|
||
type: text
|
||
name: toughness
|
||
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
|
||
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)
|
||
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: "<line>\n</line>", field2: card.flavor_text_2)
|
||
card field:
|
||
type: choice
|
||
name: watermark 2
|
||
include file: magic-watermarks.mse-include/watermark-names
|
||
icon: stats/watermark.png
|
||
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: -1
|
||
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:
|
||
name: converted mana cost
|
||
script: cmc(card.casting_cost)
|
||
numeric: true
|
||
icon: stats/casting_cost.png
|
||
|
||
statistics dimension:
|
||
name: colored mana cost
|
||
script: colored_mana(card.casting_cost)
|
||
numeric: true
|
||
icon: stats/colored_casting_cost.png
|
||
|
||
statistics dimension:
|
||
name: keywords
|
||
script: keyword_usage(unique:true)
|
||
show empty: false
|
||
split list: true
|
||
icon: stats/keywords.png
|
||
|
||
statistics dimension:
|
||
name: race
|
||
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
|
||
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 dimension:
|
||
# name: word count
|
||
# type: word count
|
||
# display: list
|
||
|
||
statistics category:
|
||
name: color / rarity
|
||
type: stack
|
||
icon: stats/color_rarity.png
|
||
dimension: card color
|
||
dimension: rarity
|
||
|
||
#statistics category:
|
||
# name: power / toughness
|
||
# type: scatter
|
||
# icon: stats/pt.png
|
||
# dimension: power
|
||
# dimension: toughness
|
||
|
||
#statistics category:
|
||
# name: power / toughness / color
|
||
# type: scatter pie
|
||
# icon: stats/pt.png
|
||
# dimension: power
|
||
# dimension: toughness
|
||
# dimension: card color
|
||
|
||
statistics category:
|
||
name: power / toughness
|
||
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
|
||
type: scatter pie
|
||
icon: stats/color_cost.png
|
||
dimension: card color
|
||
dimension: converted mana cost
|
||
dimension: rarity
|
||
|
||
statistics category:
|
||
name: color / colored cost
|
||
type: scatter
|
||
dimension: card color
|
||
dimension: colored mana cost
|
||
|
||
statistics category:
|
||
name: cost / colored cost
|
||
type: scatter pie
|
||
dimension: converted mana cost
|
||
dimension: colored mana cost
|
||
dimension: card color
|
||
|
||
statistics category:
|
||
name: creature race / class
|
||
type: scatter pie
|
||
dimension: race
|
||
dimension: creature class
|
||
dimension: card color
|
||
|
||
#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
|
||
|
||
# The following (until keywords) doesn't do anything yet
|
||
|
||
|
||
|
||
############################################################## 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
|
||
line below: true
|
||
word: Creature
|
||
word: Artifact
|
||
word: Artifact Creature
|
||
word: Enchantment
|
||
word: Instant
|
||
word: Sorcery
|
||
word: Land
|
||
|
||
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} <i>({reminder})</i>
|
||
|
||
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 <cost>"
|
||
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 <cost>"
|
||
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 "<something>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: <atom-param>prefix</atom-param>walk
|
||
mode: core
|
||
reminder: This creature is unblockable as long as defending player controls a {param1}.
|
||
keyword:
|
||
keyword: Protection from
|
||
match: Protection from <atom-param>name</atom-param>
|
||
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 <atom-param>name</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
mode: expert
|
||
reminder: {param1}, Discard this card: Draw a card.
|
||
keyword:
|
||
keyword: Haste
|
||
match: Haste
|
||
mode: core
|
||
reminder: This creature can attack and <sym>T</sym> 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 <atom-param>number</atom-param>
|
||
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 <atom-param>mana</atom-param> and/or <atom-param>mana</atom-param>
|
||
mode: expert
|
||
reminder: You may pay an additional {param1} and/or {param2} as you play this spell.
|
||
keyword:
|
||
keyword: Kicker
|
||
match: Kicker <atom-param>cost</atom-param>
|
||
mode: expert
|
||
reminder: You may {for_mana_costs(add:"pay an additional ", param1)} as you play this spell.
|
||
keyword:
|
||
keyword: Flashback
|
||
match: Flashback <atom-param>cost</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
mode: expert
|
||
reminder: You may play this face down as a 2/2 creature for <sym>3</sym>. 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 <atom-param>number</atom-param>
|
||
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: <atom-param>prefix</atom-param>cycling <atom-param>cost</atom-param>
|
||
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 <atom-param>name</atom-param>
|
||
mode: expert
|
||
reminder: This spell costs <sym>1</sym> less to play for each {english_singular(param1)} you control.
|
||
keyword:
|
||
keyword: Entwine
|
||
match: Entwine <atom-param>cost</atom-param>
|
||
mode: expert
|
||
reminder: Choose both if you pay the entwine cost.
|
||
keyword:
|
||
keyword: Equip
|
||
match: Equip <atom-param>cost</atom-param>
|
||
mode: core
|
||
reminder: {param1}: Attach to target creature you control. Equip only as a sorcery.
|
||
keyword:
|
||
keyword: Imprint
|
||
match: Imprint — <atom-param>action</atom-param>
|
||
mode: expert
|
||
reminder: The removed card is imprinted on this artifact.
|
||
keyword:
|
||
keyword: Modular
|
||
match: Modular <atom-param>number</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
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: 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 <atom-param>name</atom-param> <atom-param>cost</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
mode: expert
|
||
reminder: When this blocks or becomes blocked, it gets +{param1}/+{param1} until end of turn.
|
||
keyword:
|
||
keyword: Soulshift
|
||
match: Soulshift <atom-param>number</atom-param>
|
||
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 <atom-param>name</atom-param>
|
||
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: <atom-param>prefix</atom-param> 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 <atom-param>cost</atom-param>
|
||
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 <sym>1</sym> or by one mana of that creature’s color.
|
||
keyword:
|
||
keyword: Transmute
|
||
match: Transmute <atom-param>cost</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
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 — <atom-param>action</atom-param>, Reveal <atom-param>name</atom-param> from your hand: <atom-param>action</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
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 <atom-param>number</atom-param>—<atom-param>cost</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
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 <atom-param>number</atom-param>
|
||
mode: expert
|
||
reminder: If a source would deal damage to this creature, prevent {param1} of that damage.
|
||
keyword:
|
||
keyword: Fateseal
|
||
match: Fateseal <atom-param>number</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
mode: expert
|
||
reminder: {param1}: Exchange this Aura with an Aura card in your hand.
|
||
keyword:
|
||
keyword: Frenzy
|
||
match: Frenzy <atom-param>number</atom-param>
|
||
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 <sym>1</sym> less to play for each card removed this way.
|
||
keyword:
|
||
keyword: Poisonous
|
||
match: Poisonous <atom-param>number</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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 <atom-param>cost</atom-param>
|
||
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: Champion <atom-param>a</atom-param> <atom-param>name</atom-param>
|
||
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.
|