Delete template data.
@@ -1,50 +0,0 @@
|
||||
|
||||
add cards script:
|
||||
name: &Basic Lands
|
||||
description: Adds 5 basic lands to the set (Plains, Island, Swamp, Mountain, Forest)
|
||||
script:
|
||||
# TODO:
|
||||
#show_yes_no_dialog("This set already contains basic lands, do you want to add more?")
|
||||
[ new_card([name: "Plains", super_type: "Basic Land", sub_type: "Plains", rarity: "basic land", watermark: "mana symbol white"])
|
||||
, new_card([name: "Island", super_type: "Basic Land", sub_type: "Island", rarity: "basic land", watermark: "mana symbol blue"])
|
||||
, new_card([name: "Swamp", super_type: "Basic Land", sub_type: "Swamp", rarity: "basic land", watermark: "mana symbol black"])
|
||||
, new_card([name: "Mountain", super_type: "Basic Land", sub_type: "Mountain", rarity: "basic land", watermark: "mana symbol red"])
|
||||
, new_card([name: "Forest", super_type: "Basic Land", sub_type: "Forest", rarity: "basic land", watermark: "mana symbol green"])
|
||||
]
|
||||
|
||||
add cards script:
|
||||
name: &Basic Snow-Covered Lands
|
||||
description: Adds 5 basic snow-covered lands to the set (Plains, Island, Swamp, Mountain, Forest)
|
||||
script:
|
||||
# TODO:
|
||||
#show_yes_no_dialog("This set already contains basic snow-covered lands, do you want to add more?")
|
||||
[ new_card([name: "Snow-Covered Plains", super_type: "Basic Snow Land", sub_type: "Plains", rarity: "common", watermark: "mana symbol white"])
|
||||
, new_card([name: "Snow-Covered Island", super_type: "Basic Snow Land", sub_type: "Island", rarity: "common", watermark: "mana symbol blue"])
|
||||
, new_card([name: "Snow-Covered Swamp", super_type: "Basic Snow Land", sub_type: "Swamp", rarity: "common", watermark: "mana symbol black"])
|
||||
, new_card([name: "Snow-Covered Mountain", super_type: "Basic Snow Land", sub_type: "Mountain", rarity: "common", watermark: "mana symbol red"])
|
||||
, new_card([name: "Snow-Covered Forest", super_type: "Basic Snow Land", sub_type: "Forest", rarity: "common", watermark: "mana symbol green"])
|
||||
]
|
||||
|
||||
#add cards script:
|
||||
# name: &Many Empty Cards
|
||||
# script:
|
||||
# # TODO:
|
||||
# #count := show_number_dialog("How many cards should be added?")
|
||||
# count := 1
|
||||
# for _ from 1 to count do [new_card()]
|
||||
|
||||
add cards script:
|
||||
name: &Horizontal Cycle
|
||||
description: Add 1 card of each color to the set
|
||||
script:
|
||||
# TODO:
|
||||
#rarity := show_text_dialog("What rarity should the cards be?")
|
||||
[ new_card([card_color: "white"])
|
||||
, new_card([card_color: "blue"])
|
||||
, new_card([card_color: "black"])
|
||||
, new_card([card_color: "red"])
|
||||
, new_card([card_color: "green"])
|
||||
]
|
||||
|
||||
#TODO: Vertical Cycle; needs text dialog for setting color
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
|
||||
############################################################## 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: enters the battlefield
|
||||
auto replace:
|
||||
match: AAA
|
||||
replace: as an additional cost to cast
|
||||
auto replace:
|
||||
match: @
|
||||
replace: LEGENDNAME
|
||||
auto replace:
|
||||
match: ~
|
||||
replace: CARDNAME
|
||||
auto replace:
|
||||
match: '
|
||||
replace: ’
|
||||
|
Before Width: | Height: | Size: 20 KiB |
@@ -1,592 +0,0 @@
|
||||
############################################################## 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: planeswalker
|
||||
choice: shifted
|
||||
choice: rulestip
|
||||
choice: leveler
|
||||
choice: counter
|
||||
script:
|
||||
stylesheet # indicate that this value should be updated when the stylesheet changes
|
||||
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
|
||||
description: The border of the card; can be any solid color.
|
||||
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, default: "colorless")
|
||||
show statistics: false
|
||||
description: The frame of the card, used to indicate card color.
|
||||
|
||||
############################# Name line
|
||||
card field:
|
||||
type: text
|
||||
name: name
|
||||
card list visible: false
|
||||
identifying: true
|
||||
show statistics: false
|
||||
description: The name of the card
|
||||
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: planeswalker
|
||||
choice: sorcery
|
||||
choice: none
|
||||
description: The card type symbol for this card
|
||||
|
||||
############################# Image
|
||||
card field:
|
||||
type: image
|
||||
name: image
|
||||
show statistics: false
|
||||
description: The image of the card
|
||||
|
||||
############################# Card type
|
||||
card field:
|
||||
type: text
|
||||
name: super type
|
||||
icon: stats/card_type.png
|
||||
position hint: 30
|
||||
script: super_type_filter(value)
|
||||
show statistics: false
|
||||
card field:
|
||||
type: text
|
||||
name: sub type
|
||||
icon: stats/creature_type.png
|
||||
position hint: 31
|
||||
script: sub_type_filter(value, type:card.super_type)
|
||||
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: language().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: mythic 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)
|
||||
mythic rare: rgb(202, 49, 35)
|
||||
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
|
||||
multi line: true
|
||||
description: The rules text for the card
|
||||
card field:
|
||||
type: text
|
||||
name: flavor text
|
||||
script: flavor_text_filter(value)
|
||||
show statistics: false
|
||||
multi line: true
|
||||
description: The flavor text for the card
|
||||
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)
|
||||
description: The rules and flavor text for the card; use up and down arrows to switch
|
||||
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
|
||||
description: The initial loyalty of a planeswalker
|
||||
card field:
|
||||
type: text
|
||||
name: loyalty cost 1
|
||||
show statistics: false
|
||||
description: The loyalty cost for the first ability of a planeswalker
|
||||
card field:
|
||||
type: text
|
||||
name: loyalty cost 2
|
||||
show statistics: false
|
||||
description: The loyalty cost for the second ability of a planeswalker
|
||||
card field:
|
||||
type: text
|
||||
name: loyalty cost 3
|
||||
show statistics: false
|
||||
description: The loyalty cost for the third ability of a planeswalker
|
||||
card field:
|
||||
type: text
|
||||
name: loyalty cost 4
|
||||
show statistics: false
|
||||
description: The loyalty cost for the fourth ability of a planeswalker
|
||||
default: if card.power_2 !="" then card.power_2 else card.power #For back compatibility with past templates. Take out a couple versions after 0.3.8
|
||||
card field:
|
||||
type: text
|
||||
name: loyalty cost 5
|
||||
show statistics: false
|
||||
description: The loyalty cost for the fifth ability of a planeswalker
|
||||
default: card.toughness_2 #For back compatibility with past templates. Take out a couple versions after 0.3.8
|
||||
############################# Levels
|
||||
card field:
|
||||
type: text
|
||||
name: level 1
|
||||
description: The first level of a creature
|
||||
show statistics: false
|
||||
card field:
|
||||
type: text
|
||||
name: level 2
|
||||
description: The second level of a creature
|
||||
show statistics: false
|
||||
############################# PT
|
||||
card field:
|
||||
type: text
|
||||
name: power
|
||||
icon: stats/power.png
|
||||
show statistics: false
|
||||
script: type_over_pt(value)
|
||||
description: The power of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: toughness
|
||||
show statistics: false
|
||||
icon: stats/toughness.png
|
||||
description: The toughness of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: pt
|
||||
save value: false
|
||||
script:
|
||||
combined_editor(
|
||||
field1: card.power,
|
||||
separator: language().pt_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 of a creature
|
||||
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
|
||||
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, default: card.card_color)
|
||||
show statistics: false
|
||||
description: The frame of a card
|
||||
card field:
|
||||
type: text
|
||||
name: name 2
|
||||
identifying: true
|
||||
show statistics: false
|
||||
description: The name of a card
|
||||
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
|
||||
description: The casting cost of a card
|
||||
card field:
|
||||
type: choice
|
||||
name: card symbol 2
|
||||
icon: stats/card_symbol.png
|
||||
choice: none
|
||||
choice: tombstone
|
||||
show statistics: false
|
||||
description: The card symbol of the card (Tombstone)
|
||||
card field:
|
||||
type: image
|
||||
name: image 2
|
||||
show statistics: false
|
||||
description: The image of the card
|
||||
card field:
|
||||
type: text
|
||||
name: super type 2
|
||||
icon: stats/creature_type.png
|
||||
show statistics: false
|
||||
script: super_type_filter(value)
|
||||
card field:
|
||||
type: text
|
||||
name: sub type 2
|
||||
icon: stats/creature_type.png
|
||||
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: language().type_separator,
|
||||
field2: card.sub_type_2,
|
||||
soft_before_empty: true,
|
||||
hide_when_empty: true
|
||||
)
|
||||
show statistics: false
|
||||
description: The type of the card; type "-" to go from type to subtype
|
||||
card field:
|
||||
type: choice
|
||||
name: rarity 2
|
||||
icon: stats/rarity.png
|
||||
choice: basic land
|
||||
choice: common
|
||||
choice: uncommon
|
||||
choice: rare
|
||||
choice: mythic 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
|
||||
multi line: true
|
||||
description: The rules text of the card
|
||||
card field:
|
||||
type: text
|
||||
name: rule text 3
|
||||
script: text_filter(input: value, card_name: card.name)
|
||||
show statistics: false
|
||||
multi line: true
|
||||
description: The rules text of the card
|
||||
card field:
|
||||
type: text
|
||||
name: flavor text 2
|
||||
script: flavor_text_filter(value)
|
||||
multi line: true
|
||||
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)
|
||||
description: The rules and flavor text of the card
|
||||
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: loyalty 2
|
||||
icon: stats/toughness.png
|
||||
show statistics: false
|
||||
description: The initial loyalty of a planeswalker
|
||||
card field:
|
||||
type: text
|
||||
name: power 2
|
||||
icon: stats/power.png
|
||||
show statistics: false
|
||||
script: type_over_pt(value)
|
||||
description: The power of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: toughness 2
|
||||
icon: stats/toughness.png
|
||||
show statistics: false
|
||||
description: The toughness of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: pt 2
|
||||
save value: false
|
||||
script:
|
||||
combined_editor(
|
||||
field1: card.power_2,
|
||||
separator: language().pt_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
|
||||
description: Power/Toughness of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: power 3
|
||||
icon: stats/power.png
|
||||
show statistics: false
|
||||
script: type_over_pt(value)
|
||||
description: The power of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: toughness 3
|
||||
icon: stats/toughness.png
|
||||
show statistics: false
|
||||
description: The toughness of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: pt 3
|
||||
save value: false
|
||||
script:
|
||||
combined_editor(
|
||||
field1: card.power_3,
|
||||
separator: language().pt_separator,
|
||||
field2: card.toughness_3,
|
||||
soft_before_empty: true,
|
||||
hide_when_empty: true
|
||||
)
|
||||
card list width: 50
|
||||
card list name: P/T3
|
||||
show statistics: false
|
||||
description: Power/Toughness of a creature
|
||||
card field:
|
||||
type: text
|
||||
name: illustrator 2
|
||||
icon: stats/illustrator.png
|
||||
default: set.artist
|
||||
show statistics: false
|
||||
description: The illustrator of the image
|
||||
card field:
|
||||
type: text
|
||||
name: copyright 2
|
||||
default: set.copyright
|
||||
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)
|
||||
description: The copyright and card number of the card
|
||||
@@ -1,48 +0,0 @@
|
||||
mse version: 0.3.9
|
||||
short name: Magic
|
||||
full name: Magic the Gathering
|
||||
installer group: magic/game files
|
||||
icon: card-back.png
|
||||
position hint: 01
|
||||
|
||||
version: 2011-01-18
|
||||
depends on: magic-blends.mse-include 2010-04-07
|
||||
depends on: magic-watermarks.mse-include 2007-09-23
|
||||
|
||||
############################################################## The script
|
||||
|
||||
init script: include file: script
|
||||
|
||||
############################################################## Lots of lists
|
||||
|
||||
################## There be dragons here. -Liosan ##########################
|
||||
|
||||
include file: card_fields
|
||||
include file: set_fields
|
||||
include file: statistics
|
||||
include file: packs
|
||||
include file: keywords
|
||||
include file: word_lists
|
||||
include file: add_cards_scripts
|
||||
include file: auto_replace
|
||||
|
||||
############################################################## Other stuff
|
||||
|
||||
card list color script:
|
||||
input := card.card_color
|
||||
if input == "white" then rgb(156,130,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(130,110,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
|
||||
)
|
||||
|
Before Width: | Height: | Size: 109 B |
|
Before Width: | Height: | Size: 108 B |
|
Before Width: | Height: | Size: 111 B |
|
Before Width: | Height: | Size: 631 B |
|
Before Width: | Height: | Size: 545 B |
|
Before Width: | Height: | Size: 460 B |
|
Before Width: | Height: | Size: 632 B |
|
Before Width: | Height: | Size: 613 B |
|
Before Width: | Height: | Size: 628 B |
|
Before Width: | Height: | Size: 372 B |
@@ -1,702 +0,0 @@
|
||||
|
||||
############################################################## We have keywords
|
||||
|
||||
has keywords: true
|
||||
|
||||
############################################################## Keyword mode
|
||||
|
||||
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 types
|
||||
|
||||
keyword parameter type:
|
||||
name: mana
|
||||
match: [SCTQXYZI0-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})\}
|
||||
refer script:
|
||||
name: colored mana cost
|
||||
description: Converts mana to number of colored mana
|
||||
# "0" left in so users can easily see how to edit script.
|
||||
script: \{colored_mana({input})\}
|
||||
|
||||
# By pichoro and bunnierein
|
||||
keyword parameter type:
|
||||
name: cost
|
||||
match: [ ][SCTQXYZI0-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 with "and/or"
|
||||
description: Changes spaces to " and/or ". "Elf Warrior" becomes "Elf and/or Warrior".
|
||||
script: \{separate_words(spacer: " and/or ", {input})\}
|
||||
refer script:
|
||||
name: separate words with "or"
|
||||
description: Changes spaces to " or ". "Elf Warrior" becomes "Elf or Warrior".
|
||||
script: \{separate_words(spacer: " or ", {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 damage to its blockers to destroy them, you may have it deal the rest of its damage to defending player or planeswalker.
|
||||
keyword:
|
||||
keyword: Banding
|
||||
match: Banding
|
||||
mode: old
|
||||
reminder: Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature’s combat damage, not its controller, among any of the creatures it’s being blocked by or is blocking.
|
||||
keyword:
|
||||
keyword: Landwalk
|
||||
match: <atom-param>prefix</atom-param>walk
|
||||
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 <atom-param>name</atom-param>
|
||||
mode: core
|
||||
reminder: {if has_pt() then "This creature" else "This permanent"} can’t be blocked, targeted, dealt damage, or enchanted 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 {param1} can attack in a band as long as at least one has “bands with other {param1}.” Bands are blocked as a group. If at least two {param1} you control, one of which has “bands with other {param1},” are blocking or being blocked by the same creature, you divide that creature’s combat damage, not its controller, among any of the creatures it’s being blocked by or is blocking.
|
||||
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: This phases in or out before you untap during each of your untap steps. While it’s phased out, it’s treated as though it doesn’t exist.
|
||||
keyword:
|
||||
keyword: Flanking
|
||||
match: Flanking
|
||||
mode: expert
|
||||
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 cast 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 {if has_pt() then "creature" else "permanent"} enters the battlefield 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>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: You may {for_mana_costs(add:"pay an additional ", param1)} as you cast this spell.
|
||||
keyword:
|
||||
keyword: Flashback
|
||||
match: Flashback <atom-param>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: You may cast this card from your graveyard for its flashback cost. Then exile it.
|
||||
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 cast 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 cast 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: old
|
||||
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 creature enters the battlefield, put {english_number_a(param1)} +1/+1 counter(s) on it for each {separate_words(spacer: " and/or ", 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 cast this spell, copy it for each spell cast 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 cast 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
|
||||
mode: pseudo
|
||||
rules: When ~ enters the battlefield, you may exile a [something] from [somewhere].
|
||||
keyword:
|
||||
keyword: Modular
|
||||
match: Modular <atom-param>number</atom-param>
|
||||
mode: expert
|
||||
reminder: This enters the battlefield 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 enters the battlefield with a {if has_pt() then "+1/+1" else "charge"} counter on it for each color of mana spent to cast it.
|
||||
keyword:
|
||||
keyword: Art rampage
|
||||
match: Art rampage <atom-param>number</atom-param>
|
||||
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 cast it. (You may have this card enter the battlefield 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 <atom-param>name</atom-param> <atom-param>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: As you cast 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 the battlefield, you may return target Spirit card with converted mana cost {param1} or less from your graveyard to your hand.
|
||||
keyword:
|
||||
keyword: Enchant
|
||||
match: Enchant <atom-param>name</atom-param>
|
||||
mode: core
|
||||
reminder: Target a {param1} as you cast this. This card enters the battlefield 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 cast this card any time you could cast 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 onto the battlefield from your hand tapped and attacking.
|
||||
keyword:
|
||||
keyword: Epic
|
||||
match: Epic
|
||||
mode: expert
|
||||
reminder: For the rest of the game, you can’t cast 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 casting 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. Transmute 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 the battlefield," } exile it 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 {if has_pt() then "creature" else "permanent"} enters the battlefield 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 cast 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"} enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. Whenever {if has_pt() then "another" else "a"} creature enters the battlefield, 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: Activate 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 the battlefield, you may {for_mana_costs(add:"pay ",param1)}. If you do, return this card from your graveyard to your hand. Otherwise, exile this card.
|
||||
keyword:
|
||||
keyword: Ripple
|
||||
match: Ripple <atom-param>number</atom-param>
|
||||
mode: expert
|
||||
reminder: When you cast this spell, you may reveal the top {english_number_multiple(param1)} card(s) of your library. You may cast 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 cast this spell any time you could cast an instant.
|
||||
keyword:
|
||||
keyword: Split second
|
||||
match: Split second
|
||||
mode: expert
|
||||
reminder: As long as this spell is on the stack, players can’t cast spells or activate 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 cast this card from your hand,{if has_cc() then " you may" else ""} {for_mana_costs(add:"pay ", param2)} and exile it 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, cast 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 enters the battlefield 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: core
|
||||
reminder: Any amount of damage this deals to a creature is enough to destroy it.
|
||||
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 cast 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: Damage dealt by this creature also causes you to 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:
|
||||
To fateseal {param1}, 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 onto the battlefield. Then shuffle your library. Transfigure 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 exile any number of cards in your graveyard as you cast this spell. It costs <sym>1</sym> less to cast for each card exiled 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 enters the battlefield unattached and stays on the battlefield if the land leaves.
|
||||
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 cast this spell for its evoke cost. If you do, it’s sacrificed when it enters the battlefield.
|
||||
keyword:
|
||||
keyword: Champion
|
||||
match: Champion <atom-param>a</atom-param> <atom-param>name</atom-param>
|
||||
mode: expert
|
||||
reminder: When this enters the battlefield, sacrifice it unless you exile another {param2} you control. When this leaves the battlefield, return that card to the battlefield.
|
||||
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 at all times.
|
||||
keyword:
|
||||
keyword: Hideaway
|
||||
match: Hideaway
|
||||
mode: expert
|
||||
reminder: This land enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.
|
||||
keyword:
|
||||
keyword: Prowl
|
||||
match: Prowl <atom-param>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: You may cast this for its prowl cost if you dealt combat damage to a player this turn with a {separate_words(spacer: " or ", card.sub_type)}.
|
||||
keyword:
|
||||
keyword: Reinforce
|
||||
match: Reinforce <atom-param>number</atom-param>—<atom-param>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: {param2}, Discard this card: Put {english_number_a(param1)} +1/+1 counter(s) on target creature.
|
||||
keyword:
|
||||
keyword: Kinship
|
||||
match: Kinship
|
||||
mode: pseudo
|
||||
rules: Kinship — At the beginning of your upkeep, you may look at the top card of your library. If that card shares a creature type with ~, you may reveal it. If you do, [effect].
|
||||
keyword:
|
||||
keyword: Persist
|
||||
match: Persist
|
||||
mode: expert
|
||||
reminder: When this creature is put into a graveyard from the battlefield, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it.
|
||||
keyword:
|
||||
keyword: Wither
|
||||
match: Wither
|
||||
mode: expert
|
||||
reminder: This deals damage to creatures in the form of -1/-1 counters.
|
||||
keyword:
|
||||
keyword: Conspire
|
||||
match: Conspire
|
||||
mode: expert
|
||||
reminder: As you cast this spell, you may tap two untapped creatures you control that share a color with it. When you do, copy it{ if is_targeted() then " and you may choose a new target for the copy" }.
|
||||
keyword:
|
||||
keyword: Retrace
|
||||
match: Retrace
|
||||
mode: expert
|
||||
reminder: You may cast this card from your graveyard by discarding a land card in addition to paying its other costs.
|
||||
keyword:
|
||||
keyword: Chroma
|
||||
match: Chroma
|
||||
mode: pseudo
|
||||
rules: Chroma — [effect] based on the number of [color] mana symbols [in graveyard, under your control, in cards you discard].
|
||||
keyword:
|
||||
keyword: Unearth
|
||||
match: Unearth <atom-param>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: {param1}: Return this card from your graveyard to the battlefield. {if has_pt() then "It gains haste. " else "" }Exile it at the beginning of the end step or if it would leave the battlefield. Unearth only as a sorcery.
|
||||
keyword:
|
||||
keyword: Devour
|
||||
match: Devour <atom-param>number</atom-param>
|
||||
mode: expert
|
||||
reminder: As this creature enters the battlefield, you may sacrifice any number of creatures. This creature enters the battlefield with { if param1.value == 1 then "" else if param1.value == 2 then "twice " else english_number(param1) + " times " }that many +1/+1 counters on it.
|
||||
keyword:
|
||||
keyword: Exalted
|
||||
match: Exalted
|
||||
mode: expert
|
||||
reminder: Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn.
|
||||
keyword:
|
||||
keyword: Domain
|
||||
match: Domain
|
||||
mode: pseudo
|
||||
rules: Domain — [effect] for each basic land type among lands you control.
|
||||
keyword:
|
||||
keyword: Cascade
|
||||
match: Cascade
|
||||
mode: expert
|
||||
reminder: When you cast this spell, exile the top card of your library until you exile a nonland card that costs less. You may cast that card without paying its mana cost. Put the exiled cards on the bottom of your library at random.
|
||||
keyword:
|
||||
keyword: Intimidate
|
||||
match: Intimidate
|
||||
mode: core
|
||||
reminder: This creature can’t be blocked except by artifact creatures and/or creatures that share a color with it.
|
||||
keyword:
|
||||
keyword: Landfall
|
||||
match: Landfall
|
||||
mode: pseudo
|
||||
rules: Landfall — Whenever a land enters the battlefield under your control, [effect].
|
||||
keyword:
|
||||
keyword: Multikicker
|
||||
match: Multikicker <atom-param>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: You may {for_mana_costs(add:"pay an additional ", param1)} any number of times as you cast this spell.
|
||||
keyword:
|
||||
keyword: Annihilator
|
||||
match: Annihilator <atom-param>number</atom-param>
|
||||
mode: expert
|
||||
reminder: Whenever this creature attacks, defending player sacrifices {english_number_a(param1)} permanent(s).
|
||||
keyword:
|
||||
keyword: Rebound
|
||||
match: Rebound
|
||||
mode: expert
|
||||
reminder: If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.
|
||||
keyword:
|
||||
keyword: Totem armor
|
||||
match: Totem armor
|
||||
mode: expert
|
||||
reminder: If enchanted creature would be destroyed, instead remove all damage from it and destroy this Aura.
|
||||
keyword:
|
||||
keyword: Level up
|
||||
match: Level up <atom-param>cost</atom-param>
|
||||
mode: expert
|
||||
reminder: {param1}: Put a level counter on this. Level up only as a sorcery.
|
||||
keyword:
|
||||
keyword: Infect
|
||||
match: Infect
|
||||
mode: expert
|
||||
reminder: This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.
|
||||
keyword:
|
||||
keyword: Proliferate
|
||||
match: Proliferate
|
||||
mode: action
|
||||
reminder: You may choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there.
|
||||
keyword:
|
||||
keyword: Metalcraft
|
||||
match: Metalcraft
|
||||
mode: pseudo
|
||||
rules: Metalcraft — As long as you control three or more artifacts, [effect].
|
||||
keyword:
|
||||
keyword: Battlecry
|
||||
match: Battlecry
|
||||
mode: expert
|
||||
reminder: Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn.
|
||||
keyword:
|
||||
keyword: Living weapon
|
||||
match: Living weapon
|
||||
mode: expert
|
||||
reminder: When this Equipment enters the battlefield, put a 0/0 black Germ creature token onto the battlefield, then attach this to it.
|
||||
@@ -1,37 +0,0 @@
|
||||
|
||||
|
||||
# Language specific strings
|
||||
languages := [
|
||||
English: [
|
||||
code : "en",
|
||||
spellcheck_code : "en_us",
|
||||
pt_separator : "/",
|
||||
type_separator : " — ",
|
||||
subtype_separator : " ",
|
||||
is_creature : match@(match: "(?i)Creature")
|
||||
is_tribal : match@(match: "(?i)Tribal")
|
||||
is_artifact : match@(match: "(?i)Artifact")
|
||||
is_land : match@(match: "(?i)Land")
|
||||
is_enchantment : match@(match: "(?i)Enchantment")
|
||||
is_spell : match@(match: "(?i)Instant|Sorcery")
|
||||
is_planeswalker : match@(match: "(?i)Planeswalker")
|
||||
],
|
||||
|
||||
Français: [
|
||||
code : "fr",
|
||||
spellcheck_code : "", # TODO: get dictionary
|
||||
pt_separator : "/",
|
||||
type_separator : " : "
|
||||
subtype_separator : "<atom-sep> et </atom-sep>",
|
||||
is_creature : match@(match: "(?i)Creature|Créature")
|
||||
is_tribal : match@(match: "(?i)Tribal")
|
||||
is_artifact : match@(match: "(?i)Artifact")
|
||||
is_land : match@(match: "(?i)Land")
|
||||
is_enchantment : match@(match: "(?i)Enchantment")
|
||||
is_spell : match@(match: "(?i)Instant|Sorcery")
|
||||
is_planeswalker : match@(match: "(?i)Planeswalker")
|
||||
]
|
||||
]
|
||||
|
||||
# The selected language
|
||||
language := { languages[set.card_language] or else language.English }
|
||||
@@ -1,149 +0,0 @@
|
||||
148
|
||||
mana
|
||||
untap/MSDRJZG
|
||||
unblockable
|
||||
planeswalker
|
||||
noncreature
|
||||
nonland
|
||||
nonenchantment
|
||||
nonartifact
|
||||
nonwhite
|
||||
nonblue
|
||||
nonblack
|
||||
nonred
|
||||
nongreen
|
||||
unblock/USDG
|
||||
precombat
|
||||
postcombat
|
||||
scry
|
||||
plainswalk
|
||||
islandwalk
|
||||
swampwalk
|
||||
mountainwalk
|
||||
forestwalk
|
||||
landwalk
|
||||
desertwalk
|
||||
plainshome
|
||||
islandhome
|
||||
swamphome
|
||||
mountainhome
|
||||
foresthome
|
||||
landhome
|
||||
soulshift
|
||||
ninjitsu
|
||||
bushido
|
||||
lifelink
|
||||
gravestorm
|
||||
fateseal
|
||||
bloodthirst
|
||||
djinn
|
||||
unattach
|
||||
face-down
|
||||
face-up
|
||||
spell's
|
||||
guerrilas
|
||||
mages
|
||||
exit-the-battlefield
|
||||
enter-the-battlefield
|
||||
havok
|
||||
spectre
|
||||
gargadon
|
||||
gargadons
|
||||
Crovax
|
||||
evincar
|
||||
and/or
|
||||
20/20
|
||||
planeswalkers
|
||||
Merfolk
|
||||
deathtouch
|
||||
noncombat
|
||||
Urza
|
||||
Karn
|
||||
Ajani
|
||||
Goldmane
|
||||
Jace
|
||||
Beleren
|
||||
Liliana
|
||||
Vess
|
||||
Chandra
|
||||
Nalaar
|
||||
Garruk
|
||||
Wildspeaker
|
||||
Tezzeret
|
||||
Elspeth
|
||||
Tirel
|
||||
Nicol
|
||||
Bolas
|
||||
Sarkhan
|
||||
Vol
|
||||
Nissa
|
||||
Revane
|
||||
Baltrice
|
||||
Crucius
|
||||
scryers
|
||||
+1
|
||||
etherium
|
||||
-1
|
||||
Kothophed
|
||||
wurm
|
||||
Tolaria
|
||||
Weatherlight
|
||||
Ertai
|
||||
Barrin
|
||||
Dominaria
|
||||
Benalish
|
||||
Benalia
|
||||
Sisay
|
||||
golem
|
||||
Keld
|
||||
Maraxus
|
||||
Volrath
|
||||
Mirri
|
||||
Multani
|
||||
maro-sorcerer
|
||||
Squee
|
||||
Tahngarth
|
||||
Crovax
|
||||
Selenia
|
||||
Greven
|
||||
il-Vec
|
||||
Argive
|
||||
Samite
|
||||
Orim
|
||||
Argivian
|
||||
Rath
|
||||
Starke
|
||||
Sidar
|
||||
Kondo
|
||||
evincar
|
||||
multiverse
|
||||
Eladamri
|
||||
Skyshroud
|
||||
guerilla
|
||||
Soltari
|
||||
Lyna
|
||||
Rofellos
|
||||
spellcasting
|
||||
Korvecdal
|
||||
Vuel
|
||||
Takara
|
||||
self-interest
|
||||
Ashnod
|
||||
Mishra
|
||||
Fallaji
|
||||
Gix
|
||||
Phyrexia
|
||||
Phyrexian
|
||||
supremacy
|
||||
Tawnos
|
||||
Argoth
|
||||
Xantcha
|
||||
Saproling
|
||||
nontoken
|
||||
mage
|
||||
Ashling
|
||||
Jaya
|
||||
Maralen
|
||||
Mornsong
|
||||
non-Sliver
|
||||
non-Shapeshifter
|
||||
@@ -1,186 +0,0 @@
|
||||
|
||||
############################################################## Card pack types
|
||||
|
||||
pack type:
|
||||
name: basic land
|
||||
select: equal
|
||||
filter: card.rarity == "basic land" and not is_token_card() # can be shifted
|
||||
pack type:
|
||||
name: common
|
||||
filter: card.rarity == "common" and not is_token_card() and not is_shifted_card()
|
||||
pack type:
|
||||
name: uncommon
|
||||
filter: card.rarity == "uncommon" and not is_token_card() and not is_shifted_card()
|
||||
pack type:
|
||||
name: rare
|
||||
filter: card.rarity == "rare" and not is_token_card() and not is_shifted_card()
|
||||
pack type:
|
||||
name: mythic rare
|
||||
filter: card.rarity == "mythic rare" and not is_token_card() and not is_shifted_card()
|
||||
pack type:
|
||||
name: special
|
||||
filter: card.rarity == "special" and not is_token_card() # can be shifted
|
||||
|
||||
pack type:
|
||||
name: shifted common
|
||||
filter: card.rarity == "common" and not is_token_card() and is_shifted_card()
|
||||
pack type:
|
||||
name: shifted uncommon
|
||||
filter: card.rarity == "uncommon" and not is_token_card() and is_shifted_card()
|
||||
pack type:
|
||||
name: shifted rare
|
||||
filter:
|
||||
( card.rarity == "rare" or
|
||||
card.rarity == "mythic rare" # We've got to put shifted mythic rares somewhere
|
||||
) and not is_token_card() and is_shifted_card()
|
||||
|
||||
pack type:
|
||||
name: token / rulestip
|
||||
filter: is_token_card()
|
||||
|
||||
############################################################## shifted/special if possible
|
||||
|
||||
# shifted common if they exist, otherwise a normal common
|
||||
pack type:
|
||||
name: shifted common or else common
|
||||
selectable: false
|
||||
select: first
|
||||
item: shifted common
|
||||
item: common
|
||||
|
||||
# basic land if it exist, otherwise a common
|
||||
pack type:
|
||||
name: basic land or else common
|
||||
selectable: false
|
||||
select: first
|
||||
item: basic land
|
||||
item: common
|
||||
|
||||
# special if it exist, otherwise a common
|
||||
pack type:
|
||||
name: special or else common
|
||||
selectable: false
|
||||
select: first
|
||||
item: special
|
||||
item: common
|
||||
|
||||
# shifted uncommon/rare if they exist, otherwise a normal uncommon
|
||||
pack type:
|
||||
name: shifted uncommon or rare or else uncommon
|
||||
selectable: false
|
||||
select: first
|
||||
item: shifted uncommon or rare
|
||||
item: uncommon
|
||||
|
||||
############################################################## Randomized selections
|
||||
|
||||
pack type:
|
||||
name: mythic rare or rare
|
||||
selectable: false
|
||||
# In Shards of Alara there are 15 mythic rares and 53 rares.
|
||||
# Each booster has a 1/8 chance of containing a mythic rare.
|
||||
# This means that looking at single mythics : rares, the proportion is
|
||||
# 1*53 : 7*15 = 53 : 105
|
||||
# this is almost exactly 1 : 2,
|
||||
# So, a a single mythic is 2 times as rare as a single normal rare.
|
||||
#
|
||||
# We use this proportional system instead of a fixed 1:7 system,
|
||||
# because it copes better with cases where there are few mythics.
|
||||
# For example, if a set has 1 mythic and 20 rares, you would actually
|
||||
# be MORE likely to find the mythic card with the 1:7 system!
|
||||
select: proportional
|
||||
item:
|
||||
name: mythic rare
|
||||
weight: 1
|
||||
item:
|
||||
name: rare
|
||||
weight: 2
|
||||
|
||||
pack type:
|
||||
name: shifted uncommon or rare
|
||||
selectable: false
|
||||
select: nonempty
|
||||
item:
|
||||
name: shifted uncommon
|
||||
weight: 3
|
||||
item:
|
||||
name: shifted rare
|
||||
weight: 1
|
||||
|
||||
############################################################## Common proportions of cards
|
||||
|
||||
# of the common slots, 3/10 will be shifted, 1/10 will be special
|
||||
pack type:
|
||||
name: common sometimes shifted or special
|
||||
selectable: false
|
||||
# TODO: Perhaps use some kind of proportional system here as well?
|
||||
select: equal
|
||||
item:
|
||||
name: common
|
||||
weight: 6
|
||||
item:
|
||||
name: shifted common or else common
|
||||
weight: 3
|
||||
item:
|
||||
name: special or else common
|
||||
weight: 1
|
||||
|
||||
# of the uncommon slots, 1/3 will be shifted, 1/4 of that will be shifted rares instead
|
||||
pack type:
|
||||
name: uncommon sometimes shifted
|
||||
selectable: false
|
||||
select: equal
|
||||
item: uncommon
|
||||
item: uncommon
|
||||
item: shifted uncommon or rare or else uncommon
|
||||
|
||||
############################################################## Card packs
|
||||
|
||||
pack type:
|
||||
name: tournament pack
|
||||
item:
|
||||
name: mythic rare or rare
|
||||
amount: 3
|
||||
item:
|
||||
name: uncommon sometimes shifted
|
||||
amount: 9
|
||||
item:
|
||||
name: common sometimes shifted or special
|
||||
amount: 33
|
||||
item:
|
||||
name: basic land
|
||||
amount: 30
|
||||
item:
|
||||
name: token / rulestip
|
||||
pack type:
|
||||
name: booster pack
|
||||
item:
|
||||
name: mythic rare or rare
|
||||
amount: 1
|
||||
item:
|
||||
name: uncommon sometimes shifted
|
||||
amount: 3
|
||||
# a total of 11 common-likes
|
||||
item:
|
||||
name: common sometimes shifted or special
|
||||
amount: 10
|
||||
item:
|
||||
name: basic land or else common
|
||||
item:
|
||||
name: token / rulestip
|
||||
|
||||
pack type:
|
||||
name: additional land
|
||||
item: basic land
|
||||
pack type:
|
||||
name: additional common
|
||||
item: common sometimes shifted or special
|
||||
pack type:
|
||||
name: additional uncommon
|
||||
item: uncommon sometimes shifted
|
||||
pack type:
|
||||
name: additional rare
|
||||
item: mythic rare or rare
|
||||
pack type:
|
||||
name: additional token / rulestip
|
||||
item: token / rulestip
|
||||
@@ -1,635 +0,0 @@
|
||||
############################################################## Localization
|
||||
|
||||
include file: language
|
||||
|
||||
############################################################## Sorting mana symbols
|
||||
|
||||
# correctly sort a mana symbol (no guild mana)
|
||||
mana_sort := sort_text@(order: "XYZI[0123456789]S(WUBRG)")
|
||||
# correctly sort guild mana
|
||||
mana_sort_guild := sort_text@(order: "[XYZI01234567890SWUBRG/|]") +
|
||||
replace@(
|
||||
# No lookbehind :(
|
||||
#match: "(?<!/)(./.|././.|./././.|.[|])(?!/)",
|
||||
match: "./.|././.|./././.|.[|]",
|
||||
in_context: "(^|[^/])<match>($|[^/])",
|
||||
replace: {sort_text(order:"in_place((WUBRG)")}
|
||||
)
|
||||
mana_has_guild := match@(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_text@(order: "<CTQ>")
|
||||
mana_filter_t := replace@( # 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_text@(order: "<WUBRG>")
|
||||
color_filterH := sort_text@(order: "</>")
|
||||
mana_to_color := {
|
||||
count := number_of_items(in: colors)
|
||||
if hybrid == "" and contains(type, match:"Artifact") then
|
||||
# not a hybrid, but artifact
|
||||
if count == 0 then "artifact"
|
||||
else if count == 1 then color_names_1() + ", artifact"
|
||||
else if set.set_info.use_gradient_multicolor == "no" then "artifact, multicolor" # stop here
|
||||
else if count == 2 then color_names_2() + ", artifact, multicolor"
|
||||
else if set.set_info.use_gradient_multicolor != "yes" then "artifact, multicolor" # stop here
|
||||
else if count == 3 then color_names_3() + ", artifact, multicolor"
|
||||
else if count == 4 then color_names_4() + ", artifact, multicolor"
|
||||
else if count == 5 then color_names_5() + ", artifact, multicolor"
|
||||
else "artifact, multicolor"
|
||||
else if hybrid == "" then
|
||||
# not a hybrid, not artifact
|
||||
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 if contains(type, match:"Artifact") then
|
||||
# hybrid, but artifact
|
||||
if count == 0 then "artifact"
|
||||
else if count == 1 then color_names_1() + ", artifact"
|
||||
else if count == 2 then color_names_2() + ", artifact"
|
||||
else "artifact, multicolor"
|
||||
else
|
||||
# hybrid, not artifact
|
||||
if count == 0 then "colorless"
|
||||
else if count == 1 then color_names_1()
|
||||
else if count == 2 then color_names_2() + ", hybrid"
|
||||
else "multicolor"
|
||||
}
|
||||
|
||||
# color based on land text box, input = textbox contents
|
||||
color_text_filter :=
|
||||
# remove activation costs
|
||||
replace@(
|
||||
match: "<sym[^>]*>[^<]+</sym[^>]*>"
|
||||
in_context: "(?ix) (\\n|^)[^:]*<match>(,|:) | (pays?|additional|costs?)[ ]<match>",
|
||||
replace: ""
|
||||
) +
|
||||
# keep only mana
|
||||
filter_text@(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 "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: "is (colorless|all colors|((blue|white|green|red|black)((,|,? and) (blue|white|green|red|black))*))", in_context: regex_escape(card_name)+"(</[-a-z]+>)* <match>\\.")
|
||||
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@(match: "(?i)Creature")
|
||||
is_tribal := match@(match: "(?i)Tribal")
|
||||
is_artifact := match@(match: "(?i)Artifact")
|
||||
is_land := match@(match: "(?i)Land")
|
||||
is_enchantment := match@(match: "(?i)Enchantment")
|
||||
is_spell := match@(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 if mana_color == "colorless" and contains(card.shape, match:"flip") then default
|
||||
else mana_color
|
||||
)
|
||||
else text_color
|
||||
};
|
||||
|
||||
# Number of colors in a card_color
|
||||
card_color_color_count := count_chosen@(choices: "white,blue,black,red,green,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(choices: "multicolor, hybrid, land, artifact")
|
||||
input := exclusive_choice(choices: "multicolor, hybrid")
|
||||
input := require_exclusive_choice(choices: "horizontal, vertical, radial, overlay")
|
||||
) else
|
||||
input := remove_choice(choices: "radial, horizontal, vertical, overlay, hybrid, 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 3 parts:
|
||||
# color, shifted, split
|
||||
sort_index := {
|
||||
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
|
||||
":"
|
||||
}
|
||||
# Process the name for sorting rules
|
||||
sort_name :=
|
||||
# Remove "The", "A", and "And" at the beginning
|
||||
replace@(match: "^(The|An?) ", replace: "") +
|
||||
# Remove commas and apostrophes
|
||||
replace@(match: "(,|'|’)", replace: "") +
|
||||
# Remove bold and italic tags
|
||||
replace@(match: "(<b>|<i>|</b>|</i>)", replace: "") +
|
||||
# Make lowercase
|
||||
to_lower
|
||||
|
||||
is_multicolor := { chosen(choice: "multicolor") and input != "artifact, multicolor" }
|
||||
is_null_cost := { input == "" or input == "0" }
|
||||
is_hybrid_cost := { contains(card.casting_cost, match: "W/") or contains(card.casting_cost, match: "U/") or contains(card.casting_cost, match: "B/") or contains(card.casting_cost, match: "R/") or contains(card.casting_cost, match: "G/") }
|
||||
basic_land_sort := {
|
||||
if contains(card.name, match:"Plains") then "MB" # Plains
|
||||
else if contains(card.name, match:"Island") then "MC" # Islands
|
||||
else if contains(card.name, match:"Swamp") then "MD" # Swamps
|
||||
else if contains(card.name, match:"Mountain") then "ME" # Mountains
|
||||
else if contains(card.name, match:"Forest") then "MF" # Forests
|
||||
else "MA" # other basic lands
|
||||
}
|
||||
hybrid_color_pair_sort := {
|
||||
colors := sort_text(casting_cost, order: "<WUBRG>")
|
||||
if colors = "WU" then "HA"
|
||||
else if colors = "UB" then "HB"
|
||||
else if colors = "BR" then "HC"
|
||||
else if colors = "RG" then "HD"
|
||||
else if colors = "WG" then "HE"
|
||||
else if colors = "WB" then "HF"
|
||||
else if colors = "UR" then "HG"
|
||||
else if colors = "BG" then "HH"
|
||||
else if colors = "WR" then "HI"
|
||||
else if colors = "UG" then "HJ"
|
||||
else "HK"
|
||||
}
|
||||
multi_color_pair_sort := {
|
||||
colors := sort_text(casting_cost, order: "<WUBRG>")
|
||||
if colors = "WU" then "GA"
|
||||
else if colors = "UB" then "GB"
|
||||
else if colors = "BR" then "GC"
|
||||
else if colors = "RG" then "GD"
|
||||
else if colors = "WG" then "GE"
|
||||
else if colors = "WB" then "GF"
|
||||
else if colors = "UR" then "GG"
|
||||
else if colors = "BG" then "GH"
|
||||
else if colors = "WR" then "GI"
|
||||
else if colors = "UG" then "GJ"
|
||||
else if contains(card.casting_cost, match:"/") then "GL"
|
||||
else "GK"
|
||||
}
|
||||
# A code for the color of the card
|
||||
color_of_card := {
|
||||
card_color := card.card_color
|
||||
casting_cost := card.casting_cost
|
||||
type := card.super_type
|
||||
if card.shape == "split" and
|
||||
card_color != card.card_color_2 then "I" # Diff Color Splits
|
||||
else if chosen(choice: "land", card_color) then ( # Lands
|
||||
if card.rarity != "basic land" then "L" # Nonbasic Land
|
||||
else basic_land_sort() # Basic Land
|
||||
) else if is_null_cost(casting_cost) then ( # Non-Land Cards with no or zero costs.
|
||||
if chosen(choice: "colorless", card_color) then "A" # Clear Colorless
|
||||
else if chosen(choice: "hybrid", card_color) then "HK" # Hybrids
|
||||
else if is_multicolor(card_color) then "GK" # Multicolor
|
||||
else if chosen(choice:"white", card_color) then "B" # White
|
||||
else if chosen(choice:"blue", card_color) then "C" # Blue
|
||||
else if chosen(choice:"black", card_color) then "D" # Black
|
||||
else if chosen(choice:"red", card_color) then "E" # Red
|
||||
else if chosen(choice:"green", card_color) then "F" # Green
|
||||
else "J" # Artifact
|
||||
) else (
|
||||
# Cards with costs.
|
||||
colors := sort_text(casting_cost, order: "<WUBRG>")
|
||||
if colors == "" and contains(type, match:"Artifact") then "J" # Artifact
|
||||
else if colors == "" then "A" # Clear Colorless
|
||||
else if colors == "W" then "B" # White
|
||||
else if colors == "U" then "C" # Blue
|
||||
else if colors == "B" then "D" # Black
|
||||
else if colors == "R" then "E" # Red
|
||||
else if colors == "G" then "F" # Green
|
||||
else if is_hybrid_cost() then hybrid_color_pair_sort() # Hybrid (by pairs)
|
||||
else if contains(casting_cost, match:"/") and contains(type, match:"Artifact") then "I" # Hybrid Artifacts
|
||||
else multi_color_pair_sort() # Multicolor (by pairs)
|
||||
)
|
||||
}
|
||||
|
||||
rarity_sort := {
|
||||
if card.shape == "token" then "T"
|
||||
else if card.shape == "rulestip" then "U"
|
||||
else if card.shape == "counter" then "C"
|
||||
else if set.sort_special_rarity == "with the rest" or card.rarity != "special" then " "
|
||||
else "S"
|
||||
}
|
||||
set_filter := {
|
||||
# TODO: what about rulestips?
|
||||
if card.shape == "token" then
|
||||
{ card.shape == "token" }
|
||||
else if card.shape == "rulestip" then
|
||||
{ card.shape == "rulestip" }
|
||||
else if card.shape == "counter" then
|
||||
{ card.shape == "counter" }
|
||||
else if set.sort_special_rarity != "separate numbering" then
|
||||
{ card.shape != "token" and card.shape != "rulestip" and card.shape != "counter" }
|
||||
else if card.rarity == "special" then
|
||||
{ card.shape != "token" and card.shape != "rulestip" and card.shape != "counter" and card.rarity == "special" }
|
||||
else
|
||||
{ card.shape != "token" and card.shape != "rulestip" and card.shape != "counter" and card.rarity != "special" }
|
||||
}
|
||||
|
||||
card_number := {
|
||||
position (
|
||||
of: card
|
||||
in: set
|
||||
order_by: { rarity_sort() + sort_index() + sort_name(card.name) }
|
||||
filter: set_filter()
|
||||
) + 1
|
||||
}
|
||||
card_count := {
|
||||
number_of_items(in: set, filter: set_filter())
|
||||
}
|
||||
|
||||
# used by pack scripts
|
||||
is_token_card := { card.shape == "token" or card.shape == "rulestip" or card.shape == "counter" }
|
||||
is_shifted_card := { contains(card.shape, match:"shifted") }
|
||||
|
||||
|
||||
############################################################## Utilities for keywords
|
||||
|
||||
# Replace spaces by a spacer
|
||||
separate_words := remove_tags + trim + replace@(match:" ", replace: {spacer})
|
||||
|
||||
# replaces — correctly
|
||||
add := "" # default is nothing
|
||||
# If the 'input' parameter is a mana costs, then adds 'add'
|
||||
for_mana_costs := format_cost := {
|
||||
if input.separator_before == "—" and contains(input.param, match: " ") then (
|
||||
if contains(input.param, match:",") then (
|
||||
if match(match: "^[SCTQXYZIWUBRG0-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>"
|
||||
}
|
||||
# Convert first character to lower case
|
||||
alternative_cost := replace@(match:"^[A-Z]", replace: { to_lower() })
|
||||
#
|
||||
combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+
|
||||
replace@(match:",", replace:" and")+
|
||||
replace@(match:"^[SCTQXYZIWUBRG0-9/|]", in_context: "(^|[[:space:]])<match>", replace: "<sym-auto>&</sym-auto>")+
|
||||
replace@(match:"^[A-Z]", replace: { to_lower() })
|
||||
long_dash := replace@(match:"-", replace:"—")
|
||||
|
||||
# Utilities for keywords
|
||||
has_cc := { card.casting_cost != "" }
|
||||
has_pt := { card.power != "" or card.toughness != "" }
|
||||
|
||||
contains_target := match@(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[^>]*>)?[SCTQXYZIWUBRG0-9/|]+(</sym[^>]*>)?,)* # pay X, Y or Z
|
||||
([ ](<sym[^>]*>)?[SCTQXYZIWUBRG0-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
|
||||
";
|
||||
|
||||
# truncates the name of legends
|
||||
legend_filter := replace@(match:"(, | of | the ).*", replace: "" )
|
||||
|
||||
# these are considered a correct 'word' for spellchecking in the text box:
|
||||
additional_text_words := match@(match:
|
||||
"(?ix)^(?: # match whole word
|
||||
<atom-[^>]*>.*?</atom-[^>]*> # cardnames and stuff
|
||||
| [+-]?[0-9X]+ / [+-]?[0-9X]+ # '3/3', '+X/+X'
|
||||
)$")
|
||||
|
||||
# the rule text filter
|
||||
# - adds mana symbols
|
||||
# - makes text in parentheses italic
|
||||
text_filter :=
|
||||
# step 1 : remove all automatic tags
|
||||
remove_tag@(tag: "<sym-auto>") +
|
||||
remove_tag@(tag: "<i-auto>") +
|
||||
remove_tag@(tag: "<b-auto>") +
|
||||
remove_tag@(tag: "<error-spelling") +
|
||||
remove_tag@(tag: "<nospellcheck") +
|
||||
# step 2 : reminder text for keywords
|
||||
expand_keywords@(
|
||||
condition: {
|
||||
correct_case or (mode != "pseudo" and not used_placeholders)
|
||||
}
|
||||
default_expand: {
|
||||
chosen(choice:if correct_case then mode else "lower case", set.automatic_reminder_text)
|
||||
},
|
||||
combine: {
|
||||
keyword := "<nospellcheck>{keyword}</nospellcheck>"
|
||||
reminder := process_english_hints(reminder)
|
||||
if mode == "pseudo" then "<i-auto>{keyword}</i-auto>"
|
||||
else keyword + if expand then "<atom-reminder-{mode}> ({reminder})</atom-reminder-{mode}>"
|
||||
}) +
|
||||
# step 2b : move action keywords' reminder text to the end of the line
|
||||
replace@(
|
||||
match: "(<atom-reminder-action>(?:(?!<kw-).)*</atom-reminder-action></kw[^>]*>)(((?!<atom-reminder| ?<kw-)[^\n(])+)",
|
||||
replace: "\\2\\1"
|
||||
) +
|
||||
# step 2c : remove duplicate reminder text
|
||||
replace@(
|
||||
match: "(<atom-reminder-[^>]*>[^)]+[)]</atom-reminder-[^>]*>)([^\n]+)\\1"
|
||||
replace: "\\2\\1"
|
||||
) +
|
||||
# step 3a : expand shortcut word CARDNAME
|
||||
replace@(
|
||||
match: "CARDNAME",
|
||||
in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
|
||||
replace: "<atom-cardname></atom-cardname>"
|
||||
) +
|
||||
# step 3b : expand shortcut word LEGENDNAME
|
||||
replace@(
|
||||
match: "LEGENDNAME",
|
||||
in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
|
||||
replace: "<atom-legname></atom-legname>"
|
||||
) +
|
||||
# step 3c : fill in atom fields
|
||||
tag_contents@(
|
||||
tag: "<atom-cardname>",
|
||||
contents: { "<nospellcheck>" + (if card_name=="" then "CARDNAME" else card_name) + "</nospellcheck>" }
|
||||
) +
|
||||
tag_contents@(
|
||||
tag: "<atom-legname>",
|
||||
contents: { "<nospellcheck>" + (if card_name=="" then "LEGENDNAME" else legend_filter(card_name)) + "</nospellcheck>" }
|
||||
) +
|
||||
# step 4 : explict non mana symbols
|
||||
replace@(
|
||||
match: "\\][SCTQXYZIWUBRG0-9/|]+\\[",
|
||||
replace: {"<nosym>" + mana_filter_t() + "</nosym>"} ) +
|
||||
# step 5 : add mana & tap symbols
|
||||
replace@(
|
||||
match: "\\b[SCTQXYZIWUBRG0-9/|]+\\b",
|
||||
in_context: mana_context,
|
||||
replace: {"<sym-auto>" + mana_filter_t() + "</sym-auto>"} ) +
|
||||
# step 5b : add explict mana symbols
|
||||
replace@(
|
||||
match: "\\[[SCTQXYZIWUBRG0-9/|]+\\]",
|
||||
replace: {"<sym>" + mana_filter_t() + "</sym>"} ) +
|
||||
# step 6 : curly quotes
|
||||
curly_quotes +
|
||||
# step 7 : italicize text in parenthesis
|
||||
replace@(
|
||||
match: "[(]([^)\n]|[(][^)\n]*[)])*[)]?",
|
||||
in_context: "(^|[[:space:]])<match>|<atom-keyword><match></",
|
||||
replace: "<i-auto>&</i-auto>") +
|
||||
# step 8 : automatic capitalization, but not after "("
|
||||
replace@(
|
||||
match: "([ ]*: |—| — )" # preceded by this
|
||||
+ "([[:lower:]])" # match this
|
||||
+ "(?![)])", # not followed by this
|
||||
replace: { _1 + to_upper(_2) }) +
|
||||
# step 9 : spellcheck
|
||||
{ if set.mark_errors then
|
||||
check_spelling(
|
||||
language: language().spellcheck_code,
|
||||
extra_dictionary: "/magic.mse-game/magic-words",
|
||||
extra_match: additional_text_words
|
||||
)
|
||||
else input
|
||||
}
|
||||
|
||||
|
||||
############################################################## Other boxes
|
||||
|
||||
# the flavor text filter
|
||||
# - makes all text italic
|
||||
flavor_text_filter :=
|
||||
# step 1 : remove italic tags
|
||||
remove_tag@(tag: "<i-flavor>") +
|
||||
# step 2 : surround by <i> tags
|
||||
{ "<i-flavor>" + input + "</i-flavor>" } +
|
||||
# curly quotes
|
||||
curly_quotes +
|
||||
# spellcheck
|
||||
{ if set.mark_errors
|
||||
then check_spelling(language:language().spellcheck_code)
|
||||
else input
|
||||
}
|
||||
|
||||
# Move the cursor past the separator in the p/t and type boxes
|
||||
type_over_pt := replace@(match:"/$", replace:"")
|
||||
type_over_type := replace@(match:" ?[-:]$", replace:"")
|
||||
|
||||
super_type_filter := {
|
||||
input := remove_tag(tag: "<word-list-")
|
||||
input := type_over_type()
|
||||
tag := "word-list-type" # TODO: localize
|
||||
"<{tag}>{input}</{tag}>"
|
||||
}
|
||||
|
||||
break_subtypes := split_text@(match: " +|<atom-sep>[^<]*</atom-sep>", include_empty:false)
|
||||
sub_type_filter := {
|
||||
input := remove_tag(tag: "<word-list-")
|
||||
input := remove_tag(tag: "<soft")
|
||||
lang := language()
|
||||
# What word list to use?
|
||||
list_type_rest := if lang.is_creature(type) then "class"
|
||||
else if lang.is_land(type) then "land"
|
||||
else if lang.is_artifact(type) then "artifact"
|
||||
else if lang.is_enchantment(type) then "enchantment"
|
||||
else if lang.is_spell(type) then "spell"
|
||||
else if lang.is_planeswalker(type) then "planeswalker"
|
||||
if list_type_rest != "" then (
|
||||
if lang.is_creature(type) or lang.is_tribal(type) then (
|
||||
list_type_first := "race"
|
||||
) else (
|
||||
list_type_first := list_type_rest
|
||||
);
|
||||
# wrap wordlist tag around each part
|
||||
parts := break_subtypes()
|
||||
(for each i:part in parts do
|
||||
if i == 0 then
|
||||
"<word-list-{list_type_first}>{part}</word-list-{list_type_first}>"
|
||||
else
|
||||
lang.subtype_separator + "<word-list-{list_type_rest}>{part}</word-list-{list_type_rest}>"
|
||||
) +
|
||||
(if length(parts) > 0 then
|
||||
# Add a new box at the end
|
||||
"<soft>{lang.subtype_separator}</soft><word-list-{list_type_rest}></word-list-{list_type_rest}>"
|
||||
else
|
||||
"<word-list-{list_type_first}></word-list-{list_type_first}>"
|
||||
)
|
||||
) else input # do nothing
|
||||
}
|
||||
|
||||
# all sub types, for word list
|
||||
space_to_comma := replace@(match:" ", replace:",")
|
||||
only_first := replace@(match:" .*", replace:"")
|
||||
only_next := replace@(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@(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 if input == "Planeswalker" then "planeswalker"
|
||||
else "multitype"
|
||||
}
|
||||
typesymbol_type := { typesymbol_for(card.super_type) }
|
||||
|
||||
#Script to make magic-mana-future compatible w/ other templates
|
||||
colorless_color := { "c" }
|
||||
|
||||
|
||||
############################################################## Statistics utilities
|
||||
|
||||
# Converted mana cost
|
||||
is_half_mana := match@(match: "1/2|[|][WUBRGS]")
|
||||
is_colored_mana := match@(match: "[WUBRG]")
|
||||
only_numbers := filter_text@(match: "^[0123456789]+")
|
||||
cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRG] | [0-9]+(?!/[WUBRGSCTQ2]) | [WUBRGS0-9](/[WUBRGS])\{0,4} ")
|
||||
cmc := {to_number(
|
||||
for each sym in cmc_split(to_text()) do (
|
||||
numbers := only_numbers(sym)
|
||||
if is_half_mana(sym) then 0.5
|
||||
else if numbers != "" then to_int(numbers)
|
||||
else 1 # all other symbols are 1
|
||||
))
|
||||
}
|
||||
|
||||
colored_mana := {to_number(
|
||||
for each sym in cmc_split(to_text()) do (
|
||||
numbers := only_numbers(sym)
|
||||
if is_colored_mana(sym) then
|
||||
if is_half_mana(sym) then 0.5 else 1
|
||||
else 0
|
||||
))
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
word_count := break_text@(match:"[^[:space:]]+") + length
|
||||
line_count := split_text@(match:"\n+",include_empty:false) + length
|
||||
|
||||
#Remove supertypes or types to look at parts of the super_type field by themselves.
|
||||
remove_supertype := replace@(match: "(Legendary|Basic|Snow|World|Tribal|Token)", replace: "")+
|
||||
replace@(match: "[ ]+", in_context: "^<match>", replace: "")+
|
||||
replace@(match: "[ ]+", in_context: "<match>$", replace: "")
|
||||
remove_type := replace@(match: "(Artifact|Creature|Enchantment|Instant|Land|Planeswalker|Sorcery)", replace: "")+
|
||||
replace@(match: "[ ]+", in_context: "^<match>", replace: "")+
|
||||
replace@(match: "[ ]+", in_context: "<match>$", replace: "")
|
||||
@@ -1,164 +0,0 @@
|
||||
|
||||
############################################################## 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
|
||||
choice: lower case
|
||||
initial: old, 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: choice
|
||||
name: card language
|
||||
description: Language for the cards
|
||||
choice: English
|
||||
choice: Français
|
||||
initial: English
|
||||
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: only for two color cards
|
||||
|
||||
############################# 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.07
|
||||
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.07
|
||||
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: mythic rare
|
||||
border radius: 0.07
|
||||
fill type: linear gradient
|
||||
fill color 1: rgb(245,148,31)
|
||||
fill color 2: rgb(186,45,38)
|
||||
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)
|
||||
variation:
|
||||
name: watermark
|
||||
border radius: 0.10
|
||||
fill type: solid
|
||||
fill color: rgb(255,255,255)
|
||||
border color: rgba(0,0,0,0)
|
||||
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 language:
|
||||
render style: both
|
||||
choice images:
|
||||
English: /magic.mse-game/icons/language-en.png
|
||||
Français: /magic.mse-game/icons/language-fr.png
|
||||
@@ -1,199 +0,0 @@
|
||||
|
||||
############################################################## Statistics dimensions
|
||||
|
||||
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(118,230,0)
|
||||
colorless : rgb(120,90,90)
|
||||
artifact : rgb(185,192,199)
|
||||
multicolor : rgb(255,188,14)
|
||||
land : rgb(109,62,39)
|
||||
hybrid : rgb(201,12,230)
|
||||
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:
|
||||
name: supertype
|
||||
position hint: 27
|
||||
icon: stats/card_type.png
|
||||
description: The card's supertype, not including types
|
||||
script: remove_type(to_text(card.super_type))
|
||||
|
||||
statistics dimension:
|
||||
name: type
|
||||
position hint: 28
|
||||
icon: stats/card_type.png
|
||||
description: The card's type, not including supertypes
|
||||
script: remove_supertype(to_text(card.super_type))
|
||||
|
||||
statistics dimension:
|
||||
name: combined type
|
||||
position hint: 29
|
||||
icon: stats/card_type.png
|
||||
description: The traditional supertype statistic, with no filtering
|
||||
script: card.super_type
|
||||
|
||||
statistics dimension:
|
||||
name: perm/non-perm
|
||||
position hint: 30
|
||||
icon: stats/card_type.png
|
||||
description: Is the card a creature, non-creature permanent, or nonpermanent?
|
||||
script:
|
||||
if is_creature(card.super_type) then "creature"
|
||||
else if is_spell(card.super_type) then "nonpermanent"
|
||||
else if is_artifact(card.super_type) or is_enchantment(card.super_type) or is_land(card.super_type) or contains(card.super_type, match:"Planeswalker") then "permanent"
|
||||
else "unknown"
|
||||
|
||||
statistics dimension:
|
||||
name: race
|
||||
position hint: 32
|
||||
icon: stats/creature_race.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_class.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 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: text length (words)
|
||||
position hint: 100
|
||||
script: word_count(to_text(card.rule_text))
|
||||
numeric: true
|
||||
bin size: 5
|
||||
icon: stats/text_length.png
|
||||
|
||||
statistics dimension:
|
||||
name: text length (lines)
|
||||
position hint: 101
|
||||
script: line_count(to_text(card.rule_text))
|
||||
numeric: true
|
||||
icon: stats/text_length.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: style
|
||||
position hint: 1001
|
||||
script: stylesheet.short_name
|
||||
icon: stats/stylesheet.png
|
||||
|
||||
############################################################## Statistics categories (OLD)
|
||||
|
||||
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
|
||||
|
Before Width: | Height: | Size: 876 B |
|
Before Width: | Height: | Size: 654 B |
|
Before Width: | Height: | Size: 400 B |
|
Before Width: | Height: | Size: 877 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1014 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 672 B |
|
Before Width: | Height: | Size: 706 B |
|
Before Width: | Height: | Size: 416 B |
|
Before Width: | Height: | Size: 394 B |
|
Before Width: | Height: | Size: 674 B |
|
Before Width: | Height: | Size: 576 B |
|
Before Width: | Height: | Size: 1000 B |
|
Before Width: | Height: | Size: 860 B |
|
Before Width: | Height: | Size: 590 B |
|
Before Width: | Height: | Size: 118 B |
|
Before Width: | Height: | Size: 702 B |
|
Before Width: | Height: | Size: 1016 B |
@@ -1,428 +0,0 @@
|
||||
|
||||
############################################################## Magic 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: Angel
|
||||
word: Beast
|
||||
word: Construct
|
||||
word: Demon
|
||||
word: Dragon
|
||||
word: Elf
|
||||
word: Faerie
|
||||
word: Giant
|
||||
word: Goblin
|
||||
word: Golem
|
||||
word: Human
|
||||
word: Merfolk
|
||||
word: Zombie
|
||||
word:
|
||||
name: All Races
|
||||
word:
|
||||
name: A
|
||||
word: Angel
|
||||
word: Anteater
|
||||
word: Antelope
|
||||
word: Ape
|
||||
word: Archon
|
||||
word: Assembly-Worker
|
||||
word: Atog
|
||||
word: Aurochs
|
||||
word: Avatar
|
||||
word:
|
||||
name: B
|
||||
word: Badger
|
||||
word: Basilisk
|
||||
word: Bat
|
||||
word: Bear
|
||||
word: Beast
|
||||
word: Beeble
|
||||
word: Bird
|
||||
word: Blinkmoth
|
||||
word: Boar
|
||||
word: Bringer
|
||||
word: Brushwagg
|
||||
word:
|
||||
name: C
|
||||
word: Camarid
|
||||
word: Camel
|
||||
word: Caribou
|
||||
word: Cat
|
||||
word: Centaur
|
||||
word: Cephalid
|
||||
word: Chimera
|
||||
word: Cockatrice
|
||||
word: Construct
|
||||
word: Crab
|
||||
word: Crocodile
|
||||
word: Cyclops
|
||||
word:
|
||||
name: D
|
||||
word: Dauthi
|
||||
word: Demon
|
||||
word: Devil
|
||||
word: Djinn
|
||||
word: Dragon
|
||||
word: Drake
|
||||
word: Dreadnought
|
||||
word: Dryad
|
||||
word: Dwarf
|
||||
word:
|
||||
name: E
|
||||
word: Efreet
|
||||
word: Egg
|
||||
word: Eldrazi
|
||||
word: Elemental
|
||||
word: Elephant
|
||||
word: Elf
|
||||
word: Elk
|
||||
word: Eye
|
||||
word:
|
||||
name: F
|
||||
word: Faerie
|
||||
word: Ferret
|
||||
word: Fish
|
||||
word: Fox
|
||||
word: Frog
|
||||
word: Fungus
|
||||
word:
|
||||
name: G
|
||||
word: Gargoyle
|
||||
word: Giant
|
||||
word: Gnome
|
||||
word: Goat
|
||||
word: Goblin
|
||||
word: Golem
|
||||
word: Gorgon
|
||||
word: Graveborn
|
||||
word: Gremlin
|
||||
word: Griffin
|
||||
word:
|
||||
name: H
|
||||
word: Hag
|
||||
word: Harpy
|
||||
word: Hellion
|
||||
word: Hippo
|
||||
word: Homarid
|
||||
word: Homunculus
|
||||
word: Horror
|
||||
word: Horse
|
||||
word: Hound
|
||||
word: Human
|
||||
word: Hydra
|
||||
word: Hyena
|
||||
word:
|
||||
name: I
|
||||
word: Illusion
|
||||
word: Imp
|
||||
word: Incarnation
|
||||
word: Insect
|
||||
word:
|
||||
name: J
|
||||
word: Jellyfish
|
||||
word: Juggernaut
|
||||
word:
|
||||
name: K
|
||||
word: Kavu
|
||||
word: Kirin
|
||||
word: Kithkin
|
||||
word: Kobold
|
||||
word: Kor
|
||||
word: Kraken
|
||||
word:
|
||||
name: L
|
||||
word: Lammasu
|
||||
word: Leech
|
||||
word: Leviathan
|
||||
word: Lhurgoyf
|
||||
word: Licid
|
||||
word: Lizard
|
||||
word:
|
||||
name: M
|
||||
word: Manticore
|
||||
word: Masticore
|
||||
word: Merfolk
|
||||
word: Metathran
|
||||
word: Minotaur
|
||||
word: Mongoose
|
||||
word: Moonfolk
|
||||
word: Mutant
|
||||
word: Myr
|
||||
word:
|
||||
name: N
|
||||
word: Nautilus
|
||||
word: Nephilim
|
||||
word: Nightmare
|
||||
word: Nightstalker
|
||||
word: Noggle
|
||||
word:
|
||||
name: O
|
||||
word: Octopus
|
||||
word: Ogre
|
||||
word: Ooze
|
||||
word: Orb
|
||||
word: Orc
|
||||
word: Orgg
|
||||
word: Ouphe
|
||||
word: Ox
|
||||
word: Oyster
|
||||
word:
|
||||
name: P
|
||||
word: Pegasus
|
||||
word: Pentavite
|
||||
word: Pest
|
||||
word: Phelddagrif
|
||||
word: Phoenix
|
||||
word: Pincher
|
||||
word: Plant
|
||||
word: Prism
|
||||
word:
|
||||
name: R
|
||||
word: Rabbit
|
||||
word: Rat
|
||||
word: Reflection
|
||||
word: Rhino
|
||||
word:
|
||||
name: S
|
||||
word:
|
||||
name: Sa-Sl
|
||||
word: Salamander
|
||||
word: Sand
|
||||
word: Saproling
|
||||
word: Satyr
|
||||
word: Scarecrow
|
||||
word: Scorpion
|
||||
word: Serpent
|
||||
word: Shade
|
||||
word: Shapeshifter
|
||||
word: Sheep
|
||||
word: Siren
|
||||
word: Skeleton
|
||||
word: Slith
|
||||
word: Sliver
|
||||
word: Slug
|
||||
word:
|
||||
name: Sn-Sz
|
||||
word: Snake
|
||||
word: Soltari
|
||||
word: Spawn
|
||||
word: Specter
|
||||
word: Sphinx
|
||||
word: Spider
|
||||
word: Spike
|
||||
word: Spirit
|
||||
word: Splinter
|
||||
word: Sponge
|
||||
word: Squid
|
||||
word: Squirrel
|
||||
word: Starfish
|
||||
word: Surrakar
|
||||
word:
|
||||
name: T
|
||||
word: Tetravite
|
||||
word: Thalakos
|
||||
word: Thopter
|
||||
word: Thrull
|
||||
word: Treefolk
|
||||
word: Triskelavite
|
||||
word: Troll
|
||||
word: Turtle
|
||||
word:
|
||||
name: U
|
||||
word: Unicorn
|
||||
word:
|
||||
name: V
|
||||
word: Vampire
|
||||
word: Vedalken
|
||||
word: Viashino
|
||||
word: Volver
|
||||
word:
|
||||
name: W
|
||||
word: Wall
|
||||
word: Weird
|
||||
word: Whale
|
||||
word: Wolf
|
||||
word: Wolverine
|
||||
word: Wombat
|
||||
word: Worm
|
||||
word: Wraith
|
||||
word: Wurm
|
||||
word:
|
||||
name: Y
|
||||
word: Yeti
|
||||
word:
|
||||
name: Z
|
||||
word: Zombie
|
||||
word: Zubera
|
||||
|
||||
word list:
|
||||
name: class
|
||||
word:
|
||||
script: all_classes()
|
||||
line below: true
|
||||
word: Beast
|
||||
word: Cleric
|
||||
word: Druid
|
||||
word: Knight
|
||||
word: Rogue
|
||||
word: Shaman
|
||||
word: Soldier
|
||||
word: Warrior
|
||||
word: Wizard
|
||||
word: Zombie
|
||||
word:
|
||||
name: All Classes
|
||||
word:
|
||||
name: A-C
|
||||
word: Advisor
|
||||
word: Ally
|
||||
word: Archer
|
||||
word: Archon
|
||||
word: Artificer
|
||||
word: Assassin
|
||||
word: Barbarian
|
||||
word: Beast
|
||||
word: Berserker
|
||||
word: Bringer
|
||||
word: Carrier
|
||||
word: Citizen
|
||||
word: Cleric
|
||||
word: Coward
|
||||
word:
|
||||
name: D-I
|
||||
word: Deserter
|
||||
word: Dreadnought
|
||||
word: Drone
|
||||
word: Druid
|
||||
word: Elder
|
||||
word: Flagbearer
|
||||
word: Horror
|
||||
word: Incarnation
|
||||
word:
|
||||
name: J-P
|
||||
word: Juggernaut
|
||||
word: Knight
|
||||
word: Leviathan
|
||||
word: Mercenary
|
||||
word: Minion
|
||||
word: Monger
|
||||
word: Monk
|
||||
word: Mutant
|
||||
word: Mystic
|
||||
word: Ninja
|
||||
word: Nomad
|
||||
word: Pirate
|
||||
word:
|
||||
name: R-S
|
||||
word: Rebel
|
||||
word: Reflection
|
||||
word: Rigger
|
||||
word: Rogue
|
||||
word: Samurai
|
||||
word: Scout
|
||||
word: Serf
|
||||
word: Shaman
|
||||
word: Skeleton
|
||||
word: Soldier
|
||||
word: Spellshaper
|
||||
word: Spirit
|
||||
word: Survivor
|
||||
word:
|
||||
name: T-Z
|
||||
word: Thopter
|
||||
word: Vampire
|
||||
word: Warrior
|
||||
word: Wizard
|
||||
word: Zombie
|
||||
|
||||
word list:
|
||||
name: artifact
|
||||
word:
|
||||
script: all_sub_types(match: "Artifact")
|
||||
line below: true
|
||||
word: Contraption
|
||||
word: Equipment
|
||||
word: Fortification
|
||||
|
||||
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: Desert
|
||||
word: Lair
|
||||
word: Locus
|
||||
word: Mine
|
||||
word: Power-Plant
|
||||
word: Tower
|
||||
word: Urza's
|
||||
|
||||
word list:
|
||||
name: enchantment
|
||||
word:
|
||||
script: all_sub_types(match: "Enchantment")
|
||||
line below: true
|
||||
word: Aura
|
||||
word: Shrine
|
||||
|
||||
word list:
|
||||
name: spell
|
||||
word:
|
||||
script: all_sub_types(match: "Instant") + "," + all_sub_types(match: "Sorcery")
|
||||
line below: true
|
||||
word: Arcane
|
||||
word: Trap
|
||||
|
||||
word list:
|
||||
name: planeswalker
|
||||
word:
|
||||
script: all_sub_types(match: "Planeswalker")
|
||||
line below: true
|
||||
word: Ajani
|
||||
word: Bolas
|
||||
word: Chandra
|
||||
word: Elspeth
|
||||
word: Garruk
|
||||
word: Gideon
|
||||
word: Jace
|
||||
word: Koth
|
||||
word: Liliana
|
||||
word: Nissa
|
||||
word: Sarkhan
|
||||
word: Sorin
|
||||
word: Tezzeret
|
||||