git: change ignored files

This commit is contained in:
Brendan Hagan
2022-06-13 19:35:43 -04:00
parent ab40f587fa
commit 94b073f496
56 changed files with 8722 additions and 15 deletions
+8 -7
View File
@@ -462,16 +462,17 @@ label:
game type: &Game type:
style type: &Card style:
stylesheet not found:
stylesheet not found :
The set you are trying to open uses the stylesheet "%s".
This stylesheet is not found on your system, please select an alternative.
# Preferences
language: Language
windows: Open sets
app language: Language of the user interface:
card display: Card Display
zoom: &Zoom:
language : Language
windows : Open sets
app language : Language of the user interface :
card display : Card Display
zoom : &Zoom :
export : &Export :
percent of normal: % of normal size
external programs: External programs
apprentice: &Apprentice:
+12
View File
@@ -0,0 +1,12 @@
mse version: 2.0.0
full name: Magic The Gathering, card blend utilities
version: 2015-05-23
# This file doesn't do anything, other files in this directory can be included
# in game/style files:
# card-colors Defines card color choices
# Use in game
# blend-scripts Defines card_hybrid, family of functions
# Use in init script of style
# card-backgrounds Uses the blend scripts to make choice images for card backgrounds
# Template names can be redefined
+949
View File
@@ -0,0 +1,949 @@
# Scripts for blending images
# Included by a style file in its init script
########################################################################
# Filenames and other defaults
########################################################################
mask_hybrid_with_land := { false }
mask_multi_land_with_color := { false }
template := { input + "{type}.jpg" }
land_template := { (if input == "a" then "c" else input) + "l{type}.jpg" }
# For what value should thumbnails of hybrids be made?
hybrid_previews := "hybrid"
# Are there templates for colored lands, land_template(...)?
colored_lands := true
watermark_colors := {
if card.card_color == "white" then "ww"
else if card.card_color == "blue" then "uu"
else if card.card_color == "black" then "bb"
else if card.card_color == "red" then "rr"
else if card.card_color == "green" then "gg"
else if contains(card.card_color, match:"multi") or contains(card.card_color, match:"hybrid") then hybrid_color()
else if card.card_color == "" then "cc"
else "aa"
}
hybrid_color := {
if contains(card.card_color, match: "white, blue") then "wu"
else if contains(card.card_color, match: "white, black") then "wb"
else if contains(card.card_color, match: "white, red") then "rw"
else if contains(card.card_color, match: "white, green") then "gw"
else if contains(card.card_color, match: "blue, black") then "ub"
else if contains(card.card_color, match: "blue, red") then "ur"
else if contains(card.card_color, match: "blue, green") then "gu"
else if contains(card.card_color, match: "black, red") then "br"
else if contains(card.card_color, match: "black, green") then "bg"
else if contains(card.card_color, match: "red, green") then "rg"
else "mm"
}
########################################################################
# Combining multiple colors (hybrids)
########################################################################
card_hybrid_2 := {
linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0.4, y1: 0
x2: 0.6, y2: 0
)
}
overlay_hybrid := [
1: { template(colors[0]) }
2: { combine_blend(
image1: template(colors[0]),
image2: template(colors[1]),
combine: "symmetric overlay"
)}
]
# vertical version of a horizontal hybrid
vertical_card_hybrid := {
do_linear_blend := linear_blend
linear_blend := { do_linear_blend(x1: 0, x2: 0, y1: x1, y2: x2) }
card_hybrid.horizontal[color_count]()
}
horizontal_card_hybrid := [
1: { template(colors[0]) }
2: card_hybrid_2
3: {linear_blend(
image1: template(colors[0])
x1: 0.22, y1: 0
x2: 0.4, y2: 0
image2: linear_blend(
image1: template(colors[1])
x1: 0.6, y1: 0
x2: 0.78, y2: 0
image2: template(colors[2])
))}
4: {linear_blend(
# blend = 0.16
image1: template(colors[0])
x1: 0.15, y1: 0
x2: 0.31, y2: 0
image2: linear_blend(
image1: template(colors[1])
x1: 0.42, y1: 0
x2: 0.58, y2: 0
image2: linear_blend(
image1: template(colors[2])
x1: 0.69, y1: 0
x2: 0.85, y2: 0
image2: template(colors[3])
)))}
5: {linear_blend(
image1: template(colors[0])
x1: 2.0 / 15, y1: 0
x2: 4.0 / 15, y2: 0
image2: linear_blend(
image1: template(colors[1])
x1: 5.0 / 15, y1: 0
x2: 7.0 / 15, y2: 0
image2: linear_blend(
image1: template(colors[2])
x1: 8.0 / 15, y1: 0
x2: 10.0 / 15, y2: 0
image2: linear_blend(
image1: template(colors[3])
x1: 11.0 / 15, y1: 0
x2: 13.0 / 15, y2: 0
image2: template(colors[4])
))))}
6: {linear_blend(
image1: template(colors[0])
x1: 1.5 / 15, y1: 0
x2: 3.1 / 15, y2: 0
image2: linear_blend(
image1: template(colors[1])
x1: 4.1 / 15, y1: 0
x2: 5.7 / 15, y2: 0
image2: linear_blend(
image1: template(colors[2])
x1: 6.7 / 15, y1: 0
x2: 8.3 / 15, y2: 0
image2: linear_blend(
image1: template(colors[3])
x1: 9.3 / 15, y1: 0
x2: 10.9 / 15, y2: 0
image2: linear_blend(
image1: template(colors[4])
x1: 11.9 / 15, y1: 0
x2: 13.5 / 15, y2: 0
image2: template(colors[5])
)))))}
7: {linear_blend(
image1: template(colors[0])
x1: 1.3 / 15, y1: 0
x2: 2.7 / 15, y2: 0
image2: linear_blend(
image1: template(colors[1])
x1: 3.5 / 15, y1: 0
x2: 4.9 / 15, y2: 0
image2: linear_blend(
image1: template(colors[2])
x1: 5.7 / 15, y1: 0
x2: 7.1 / 15, y2: 0
image2: linear_blend(
image1: template(colors[3])
x1: 7.9 / 15, y1: 0
x2: 9.3 / 15, y2: 0
image2: linear_blend(
image1: template(colors[4])
x1: 10.1 / 15, y1: 0
x2: 11.5 / 15, y2: 0
image2: linear_blend(
image1: template(colors[5])
x1: 12.3 / 15, y1: 0
x2: 13.7 / 15, y2: 0
image2: template(colors[6])
))))))}
]
card_hybrid := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: card_hybrid_2
3: {linear_blend(
image1: card_hybrid_2(colors: colors[0] + colors[1]),
image2: template(colors[2]),
x1: 0, y1: 0.55
x2: 0, y2: 0.77
)}
4: {linear_blend(
image1: card_hybrid_2(colors: colors[0] + colors[1])
image2: card_hybrid_2(colors: colors[3] + colors[2])
x1: 0, y1: 0.4
x2: 0, y2: 0.62
)}
5: {linear_blend(
image1: linear_blend(
image1: card_hybrid_2(colors: colors[0] + colors[1]),
image2: card_hybrid_2(colors: colors[4] + colors[2]),
x1: 0, y1: 0.19
x2: 0, y2: 0.35
),
image2: template(colors[3]),
x1: 0, y1: 0.777
x2: 0, y2: 0.937
)}
6: {linear_blend(
image1: linear_blend(
image1: card_hybrid_2(colors: colors[0] + colors[1]),
image2: card_hybrid_2(colors: colors[5] + colors[2]),
x1: 0, y1: 0.19
x2: 0, y2: 0.35
),
image2: card_hybrid_2(colors: colors[4] + colors[3]),
x1: 0, y1: 0.777
x2: 0, y2: 0.937
)}
7: {linear_blend(
image1: linear_blend(
image1: linear_blend(
image1: card_hybrid_2(colors: colors[0] + colors[1]),
image2: card_hybrid_2(colors: colors[6] + colors[3]),
x1: 0, y1: 0.34
x2: 0, y2: 0.50
),
image2: card_hybrid_2(colors: colors[5] + colors[3]),
x1: 0, y1: 0.877
x2: 0, y2: 0.937
),
image2: template(colors[4]),
x1: 0, y1: 1.140
x2: 0, y2: 1.300
)}
]
horizontal: horizontal_card_hybrid
vertical: [
1: { template(colors[0]) }
2: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0, y1: 0.4
x2: 0, y2: 0.6
)}
3: vertical_card_hybrid
4: vertical_card_hybrid
5: vertical_card_hybrid
6: vertical_card_hybrid
7: vertical_card_hybrid
]
overlay: overlay_hybrid
]
########################################################################
# P/T box
########################################################################
# These are easier
horizontal_pt_hybrid := [
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { linear_blend(
image1: template(colors[1])
image2: template(colors[2])
x1: -0.51, y1: 0
x2: 0.26, y2: 0
)}
4: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: -0.1, y1: 0
x2: 0.6, y2: 0
)}
5: { linear_blend(
image1: template(colors[3])
image2: template(colors[4])
x1: 0.08, y1: 0
x2: 0.65, y2: 0
)}
6: { linear_blend(
image1: template(colors[4])
image2: template(colors[5])
x1: 0.07, y1: 0
x2: 0.7, y2: 0
)}
7: {linear_blend(
image1: linear_blend(
image1: template(colors[4]),
image2: template(colors[5]),
x1: -0.2, y1: 0
x2: 0.2, y2: 0
),
image2: template(colors[6]),
x1: 0.5, y1: 0
x2: 0.7, y2: 0
)}
]
pt_hybrid := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) }
4: { template(colors[2]) }
5: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: 0, y1: -1.5
x2: 0, y2: 0.7
)}
6: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: 0, y1: -1.5
x2: 0, y2: 0.7
)}
7: { template(colors[4]) }
]
horizontal: horizontal_pt_hybrid
vertical: [
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) }
4: { template(colors[3]) }
5: { template(colors[4]) }
6: { template(colors[5]) }
7: { template(colors[6]) }
]
overlay: overlay_hybrid
]
########################################################################
# P/T boxes of flip cards
########################################################################
flip_pt_hybrid := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[1]) }
4: { template(colors[1]) }
5: { linear_blend(
image1: template(colors[1])
image2: template(colors[2])
x1: 0, y1: -1
x2: 0, y2: 1.8
)}
6: { linear_blend(
image1: template(colors[1])
image2: template(colors[2])
x1: 0, y1: -1
x2: 0, y2: 1.8
)}
7: { template(colors[4]) }
]
horizontal: horizontal_pt_hybrid
vertical: [
1: { template(colors[0]) }
2: { template(colors[0]) }
3: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0, y1: 0
x2: 0, y2: 2
)}
4: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0, y1: -1.5
x2: 0, y2: 1
)}
5: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0, y1: -1.1
x2: 0, y2: 0.2
)}
6: { template(colors[1]) } # Probably not right
7: { template(colors[2]) }
]
overlay: overlay_hybrid
]
flip_pt_hybrid2 := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: { template(colors[0]) }
3: { linear_blend(
image1: template(colors[0])
image2: template(colors[2])
x1: 0, y1: -1
x2: 0, y2: 1.1
)}
4: { template(colors[3]) }
5: { template(colors[4]) }
6: { template(colors[5]) }
7: { template(colors[5]) }
]
horizontal: [
1: { template(colors[0]) }
2: { template(colors[0]) }
3: { template(colors[0]) }
4: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0.4, y1: 0
x2: 1.5, y2: 0
)}
5: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0.08, y1: 0
x2: 0.65, y2: 0
)}
6: { template(colors[5]) } #TODO
7: { template(colors[6]) } #TODO
]
vertical: [
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { linear_blend(
image1: template(colors[1])
image2: template(colors[2])
x1: 0, y1: -1
x2: 0, y2: 1.5
)}
4: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: 0, y1: 0.5
x2: 0, y2: 3
)}
5: { template(colors[3]) }
6: { template(colors[5]) } # Probably not right
7: { template(colors[6]) }
]
overlay: overlay_hybrid
]
########################################################################
# P/T boxes for leveler cards
########################################################################
leveler_pt_hybrid := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { linear_blend(
image1: template(colors[1])
image2: template(colors[2])
x1: 0, y1: 0
x2: 0, y2: 1
)}
4: { template(colors[2]) }
5: { template(colors[2]) }
6: { template(colors[2]) }
7: { template(colors[4]) }
]
horizontal: horizontal_pt_hybrid
vertical: [
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { linear_blend(
image1: template(colors[1])
image2: template(colors[2])
x1: 0, y1: 0
x2: 0, y2: 1
)}
4: { template(colors[2]) }
5: { template(colors[3]) }
6: { linear_blend(
image1: template(colors[3])
image2: template(colors[4])
x1: 0, y1: 0
x2: 0, y2: 0.25
)}
7: { template(colors[5]) }
]
overlay: overlay_hybrid
]
leveler_pt_hybrid2 := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) }
4: { template(colors[2]) }
5: { template(colors[2]) }
6: { template(colors[2]) }
7: { template(colors[4]) }
]
horizontal: horizontal_pt_hybrid
vertical: [
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) }
4: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: 0, y1: 0
x2: 0, y2: 1
)}
5: { linear_blend(
image1: template(colors[3])
image2: template(colors[4])
x1: 0, y1: 0
x2: 0, y2: 0.75
)}
6: { template(colors[4]) }
7: { template(colors[5]) }
]
overlay: overlay_hybrid
]
leveler_pt_hybrid3 := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) }
4: { template(colors[2]) }
5: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: 0, y1: 0
x2: 0, y2: 1
)}
6: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: 0, y1: 0
x2: 0, y2: 1
)}
7: { template(colors[4]) }
]
horizontal: horizontal_pt_hybrid
vertical: [
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) }
4: { template(colors[3]) }
5: { linear_blend(
image1: template(colors[3])
image2: template(colors[4])
x1: 0, y1: 0
x2: 0, y2: 0.5
)}
6: { linear_blend(
image1: template(colors[4])
image2: template(colors[5])
x1: 0, y1: 0
x2: 0, y2: 0.5
)}
7: { template(colors[5]) }
]
overlay: overlay_hybrid
]
########################################################################
# Textbox and typeline for FPM templates and Futureshifts
########################################################################
textbox_hybrid := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: card_hybrid_2
3: { template(colors[2]) }
4: { card_hybrid_2(colors: colors[3] + colors[2]) }
5: { template(colors[3]) }
6: { card_hybrid_2(colors: colors[4] + colors[3]) }
7: { template(colors[4]) }
]
horizontal: horizontal_card_hybrid
vertical: [
0: { template("c") }
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) } # TODO
4: { template(colors[3]) }
5: { template(colors[4]) }
6: { template(colors[5]) }
7: { template(colors[6]) }
]
overlay: overlay_hybrid
]
typeline_hybrid := textbox_hybrid
########################################################################
# Color Identity Marking
########################################################################
identity_horizontal_hybrid := [
0: { template("c") }
1: { template(colors[0]) }
2: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: 0.49, y1: 0.49
x2: 0.5, y2: 0.5
)}
3: {masked_blend(light: masked_blend(light: template(colors[0]), dark: template(colors[2]), mask: "/magic-identity-new.mse-include/imask_32.png"), dark: template(colors[1]), mask: "/magic-identity-new.mse-include/imask_33.png")}
4: {masked_blend(
light: masked_blend(
light: masked_blend(light: template(colors[1]), dark: template(colors[0]), mask: "/magic-identity-new.mse-include/imask_42.png"),
dark: template(colors[2]),
mask: "/magic-identity-new.mse-include/imask_43.png")
dark: template(colors[3]),
mask: "/magic-identity-new.mse-include/imask_44.png"
)}
5: {masked_blend(
light: masked_blend(
light: masked_blend(
light: masked_blend(
light: template(colors[0]),
dark: template(colors[4]),
mask: "/magic-identity-new.mse-include/imask_52.png"),
dark: template(colors[1]),
mask: "/magic-identity-new.mse-include/imask_53.png"),
dark: template(colors[2]),
mask: "/magic-identity-new.mse-include/imask_54.png"),
dark: template(colors[3]),
mask: "/magic-identity-new.mse-include/imask_55.png")
}
6: { template("m") }
]
identity_hybrid := [
radial: identity_horizontal_hybrid
vertical: identity_horizontal_hybrid
horizontal: identity_horizontal_hybrid
overlay: identity_horizontal_hybrid
]
########################################################################
# Promo Stamp
########################################################################
# These are easier
horizontal_stamp_hybrid := [
1: { template(colors[0]) }
2: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: -0.3, y1: 0
x2: 1.3, y2: 0
)}
3: { template(colors[1]) }
4: { linear_blend(
image1: template(colors[1])
image2: template(colors[2])
x1: -0.3, y1: 0
x2: 1.3, y2: 0
)}
5: {linear_blend(
image1: template(colors[1])
x1: -0.55, y1: 0
x2: 0.2, y2: 0
image2: linear_blend(
image1: template(colors[2])
x1: 0.8, y1: 0
x2: 1.55, y2: 0
image2: template(colors[3])
))}
6: { linear_blend(
image1: template(colors[2])
image2: template(colors[3])
x1: 0.1, y1: 0
x2: 0.9, y2: 0
)}
7: {linear_blend(
image1: template(colors[2])
x1: -0.55, y1: 0
x2: 0.2, y2: 0
image2: linear_blend(
image1: template(colors[3])
x1: 0.8, y1: 0
x2: 1.55, y2: 0
image2: template(colors[4])
))}
]
stamp_hybrid := [
radial: [
0: { template("c") }
1: { template(colors[0]) }
2: { linear_blend(
image1: template(colors[0])
image2: template(colors[1])
x1: -0.3, y1: 0
x2: 1.3, y2: 0
)}
3: { template(colors[2]) }
4: { linear_blend(
image1: template(colors[3])
image2: template(colors[2])
x1: -0.3, y1: 0
x2: 1.3, y2: 0
)}
5: { template(colors[3]) }
6: { linear_blend(
image1: template(colors[4])
image2: template(colors[3])
x1: -0.3, y1: 0
x2: 1.3, y2: 0
)}
7: { template(colors[4]) }
]
horizontal: horizontal_stamp_hybrid
vertical: [
1: { template(colors[0]) }
2: { template(colors[1]) }
3: { template(colors[2]) }
4: { template(colors[3]) }
5: { template(colors[4]) }
6: { template(colors[5]) }
7: { template(colors[6]) }
]
overlay: overlay_hybrid
]
########################################################################
# Putting it all together.
########################################################################
# Determine the card background based on the card_color multiple choice options
color_background := {
# for thumbnails
if input == "hybrid" then
input := "white,blue,red,{hybrid_previews},horizontal"
else if input == "overlay" then
input := "blue,red,{hybrid_previews},overlay"
else if input == "radial" or input == "horizontal" or input == "vertical" then
input := "white,blue,red,{hybrid_previews}," + input
else if input == "reversed" then
input := "white,blue,red,{hybrid_previews},horizontal,reversed"
# What type of 'hybrid'?
land := chosen(choice:"land")
multi := chosen(choice:"multicolor")
hybrid := chosen(choice:"hybrid")
artifact := chosen(choice:"artifact")
if land and colored_lands then template := land_template # use land template instead?
# The selected colors
colors := sort_text( order: "(wubrg)"
, (if chosen(choice:"white") then "w")
+ (if chosen(choice:"blue") then "u")
+ (if chosen(choice:"black") then "b")
+ (if chosen(choice:"red") then "r")
+ (if chosen(choice:"green") then "g"))
if multi and (hybrid or colors == "") then (
colors := colors + "m"
multi := false
)
if artifact and (hybrid or colors == "") then (
colors := colors + "a"
artifact := false
)
if chosen(choice:"reversed") then colors := reverse(colors)
color_count := number_of_items(in: colors)
if colors == "" then colors == "c"
# 'shape' / type of hybrid
shape := if chosen(choice:"horizontal") then "horizontal"
else if chosen(choice:"vertical") then "vertical"
else if chosen(choice:"overlay") then "overlay"
else "radial"
# Determine background (allows styles to hook something else here)
color_combination()
}
color_combination := {
# The base hybrid, without the outer frame blended over it
base := base_hybrid[shape][color_count]()
# Put a frame around it?
if land and not colored_lands then
masked_blend(
mask: "multicolor_blend_{type}.png",
dark: land_template("c"),
light: base,
)
else if land and multi and mask_multi_land_with_color() then
masked_blend(
mask: "hybrid_blend_{type}.png",
dark: base,
light: land_template("m"),
)
else if multi and artifact then
masked_blend(
mask: "artifact_blend_{type}.png",
dark: template("a"),
light: masked_blend(
mask: "multicolor_blend_{type}.png",
dark: template("m"),
light: base
)
)
else if multi then
masked_blend(
mask: "multicolor_blend_{type}.png",
dark: template("m"),
light: base,
)
else if artifact and color_count > 1 and mask_hybrid_with_land() then
masked_blend(
mask: "artifact_blend_{type}.png",
dark: template("a"),
light: masked_blend(
mask: "multicolor_blend_{type}.png",
dark: template("c"),
light: base
)
)
else if artifact then
masked_blend(
mask: "artifact_blend_{type}.png",
dark: template("a"),
light: base,
)
else if color_count > 1 and mask_hybrid_with_land() then
masked_blend(
mask: "hybrid_blend_{type}.png",
dark: land_template("c"),
light: base,
)
else base
}
########################################################################
# Specific types
########################################################################
card_background := { color_background(type:"card", base_hybrid:card_hybrid) }
card_ptbox := { color_background(type:"pt", base_hybrid:pt_hybrid) }
flip_ptbox := { color_background(type:"pt", base_hybrid:flip_pt_hybrid) }
flip_ptbox2 := { color_background(type:"pt2", base_hybrid:flip_pt_hybrid2) }
leveler_ptbox := { color_background(type:"pt", base_hybrid:leveler_pt_hybrid) }
leveler_ptbox2 := { color_background(type:"pt", base_hybrid:leveler_pt_hybrid2) }
leveler_ptbox3 := { color_background(type:"pt", base_hybrid:leveler_pt_hybrid3) }
card_textbox := { color_background(type:"textbox", base_hybrid:textbox_hybrid) }
card_typeline := { color_background(type:"typeline", base_hybrid:typeline_hybrid) }
card_identity := { color_background(type:"identity", base_hybrid:identity_hybrid) }
card_identity_2 := { color_background(type:"identity2", base_hybrid:identity_hybrid) }
card_stamp := { color_background(type:"stamp", base_hybrid:stamp_hybrid) }
card_stamp2 := { color_background(type:"stamp", base_hybrid:stamp_hybrid) }
flip_background := {
linear_blend(
image1: card_background(top)
image2: card_background(bottom)
x1: 0, y1: 0.4
x2: 0, y2: 0.6
)
}
########################################################################
# Font colors
########################################################################
# For which colors is the font white?
font_colors_white := { input == "b" or input == "l" }
font_color_positions := [
radial: [0,0,0,2,3,3,4,4]
horizontal: [0,0,0,0,0,0,0,0]
vertical: [0,0,1,2,3,4,5,6]
overlay: [0,0,0,0,0,0,0,0]
]
# Determine whether light or dark fonts should be used
font_white := {
hybrid := chosen(choice:"hybrid")
artifact := chosen(choice:"artifact")
colors := sort_text( order: "(wubrg)"
, (if chosen(choice:"white") then "w")
+ (if chosen(choice:"blue") then "u")
+ (if chosen(choice:"black") then "b")
+ (if chosen(choice:"red") then "r")
+ (if chosen(choice:"green") then "g"))
+ (if artifact then "a")
font_colors_white(
if chosen(choice:"land") then "l"
else if input == "artifact, multicolor" then "a"
else if chosen(choice:"multicolor") then "m"
else if artifact and not hybrid then "a"
else if colors == "" then "c"
else colors[
font_color_positions[
if chosen(choice:"horizontal") then "horizontal"
else if chosen(choice:"vertical") then "vertical"
else if chosen(choice:"overlay") then "overlay"
else "radial"
][number_of_items(in: colors)]
]
)
}
font_color := { if font_white() then rgb(255,255,255) else rgb(0,0,0) }
#####Watermark Blending
watermark_hybrid:= {
linear_blend(
image1: colors[0] + input + ".png"
image2: colors[1] + input + ".png"
x1: 0.4, y1: 0
x2: 0.6, y2: 0
)
}
set_watermark_blend := {
set_alpha(
alpha: 0.75
input:
linear_blend(
image1:
masked_blend(
light: "/magic-watermarks.mse-include/sets/" + input + ".png"
dark: "/magic-watermarks.mse-include/sets/" + watermark_colors().0 + "mark.png"
mask: "/magic-watermarks.mse-include/sets/" + input + ".png"
)
image2:
masked_blend(
light: "/magic-watermarks.mse-include/sets/" + input + ".png"
dark: "/magic-watermarks.mse-include/sets/" + watermark_colors().1 + "mark.png"
mask: "/magic-watermarks.mse-include/sets/" + input + ".png"
)
x1: 0.4, y1: 0
x2: 0.6, y2: 0
)
)
}
spotlight_watermark_blend := {
set_alpha(
alpha: 0.75
input:
linear_blend(
image1:
masked_blend(
light: "/magic-watermarks.mse-include/planeswalker.png"
dark: "/magic-watermarks.mse-include/spotlight/" + watermark_colors().0 + "spotlight.png"
mask: "/magic-watermarks.mse-include/planeswalker.png"
)
image2:
masked_blend(
light: "/magic-watermarks.mse-include/planeswalker.png"
dark: "/magic-watermarks.mse-include/spotlight/" + watermark_colors().1 + "spotlight.png"
mask: "/magic-watermarks.mse-include/planeswalker.png"
)
x1: 0.4, y1: 0
x2: 0.6, y2: 0
)
)
}
+93
View File
@@ -0,0 +1,93 @@
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: &Common Cycle
description: Add a common card of each color to the set
script:
# TODO:
#rarity := show_text_dialog("What rarity should the cards be?")
[ new_card([casting_cost: "W"])
, new_card([casting_cost: "U"])
, new_card([casting_cost: "B"])
, new_card([casting_cost: "R"])
, new_card([casting_cost: "G"])
]
add cards script:
name: &Uncommon Cycle
description: Add an uncommon card of each color to the set
script:
[ new_card([casting_cost: "W", rarity: "uncommon"])
, new_card([casting_cost: "U", rarity: "uncommon"])
, new_card([casting_cost: "B", rarity: "uncommon"])
, new_card([casting_cost: "R", rarity: "uncommon"])
, new_card([casting_cost: "G", rarity: "uncommon"])
]
add cards script:
name: &Rare Cycle
description: Adds a rare card of each color to the set
script:
[ new_card([casting_cost: "W", rarity: "rare"]) , new_card([casting_cost: "U", rarity: "rare"]) , new_card([casting_cost: "B", rarity: "rare"]) , new_card([casting_cost: "R", rarity: "rare"]) , new_card([casting_cost: "G", rarity: "rare"]) ]
add cards script:
name: &Cube
description: Custom list of cube cards
script:
[
new_card([ name: "Thousand-Faced Shadow", super_type: "Creature", sub_type: "Human Ninja", rule_text: "Ninjutsu [2][U][U] ([2][U][U], Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nFlying\nWhen Thousand-Faced Shadow enters the battlefield from your hand, if it's attacking, create a token that's a copy of another target attacking creature. The token enters the battlefield tapped and attacking.", casting_cost: "U", power: "1", toughness: "1", illustrator: "Ekaterina Burmak", card_color: "blue", rarity: "mythic rare"])
, new_card([ name: "Sea Gate Stormcaller", super_type: "Creature", sub_type: "Human Wizard", rule_text: "Kicker [4][U]\nWhen Sea Gate Stormcaller enters the battlefield, copy the next instant or sorcery spell with mana value 2 or less you cast this turn when you cast it. If Sea Gate Stormcaller was kicked, copy that spell twice instead. You may choose new targets for the copies.", casting_cost: "1U", power: "2", toughness: "1", illustrator: "Anna Steinbauer", card_color: "blue", rarity: "mythic rare"])
, new_card([ name: "Thieving Skydiver", super_type: "Creature", sub_type: "Merfolk Rogue", rule_text: "Kicker [X]. X can't be 0. (You may pay an additional [X] as you cast this spell.)\nFlying\nWhen Thieving Skydiver enters the battlefield, if it was kicked, gain control of target artifact with mana value X or less. If that artifact is an Equipment, attach it to Thieving Skydiver.", casting_cost: "1U", power: "2", toughness: "1", illustrator: "Kieran Yanner", card_color: "blue", rarity: "mythic rare"])
, new_card([ name: "Watcher for Tomorrow", super_type: "Creature", sub_type: "Human Wizard", rule_text: "Hideaway 4 (When this creature enters the battlefield, look at the top four cards of your library, exile one face down, then put the rest on the bottom in a random order.)\nWatcher for Tomorrow enters the battlefield tapped.\nWhen Watcher for Tomorrow leaves the battlefield, put the exiled card into its owner's hand.", casting_cost: "1U", power: "2", toughness: "1", illustrator: "Tommy Arnold", card_color: "blue", rarity: "mythic rare"])
, new_card([ name: "Snap", super_type: "Instant", rule_text: "Return target creature to its owner's hand. Untap up to two lands.", flavor_text: "Good riddance.", casting_cost: "1U", illustrator: "Mike Raabe", card_color: "blue", rarity: "mythic rare"])
, new_card([ name: "Thopter Foundry", super_type: "Artifact", rule_text: "[1], Sacrifice a nontoken artifact: Create a 1/1 blue Thopter artifact creature token with flying. You gain 1 life.", flavor_text: "\"Etherium is limited. Innovation is not.\"\n—Tezzeret", casting_cost: "W/BU", illustrator: "Ralph Horsley", card_color: "black, blue, white", rarity: "mythic rare"])
, new_card([ name: "Sword of the Meek", super_type: "Artifact", sub_type: "Equipment", rule_text: "Equipped creature gets +1/+2.\nEquip [2]\nWhenever a 1/1 creature enters the battlefield under your control, you may return Sword of the Meek from your graveyard to the battlefield, then attach it to that creature.", casting_cost: "2", illustrator: "Franz Vohwinkel", rarity: "mythic rare"])
, new_card([ name: "Infernal Grasp", super_type: "Instant", rule_text: "Destroy target creature. You lose 2 life.", flavor_text: "Ancient evils dwell within the burning chasm called the Ashmouth, ever ready to devour those foolish enough to travel alone.", casting_cost: "1B", illustrator: "Naomi Baker", card_color: "black", rarity: "mythic rare"])
, new_card([ name: "Dualcaster Mage", super_type: "Creature", sub_type: "Human Wizard", rule_text: "Flash\nWhen Dualcaster Mage enters the battlefield, copy target instant or sorcery spell. You may choose new targets for the copy.", flavor_text: "\"It has been my experience that disasters like to strike in pairs.\"", casting_cost: "1RR", power: "2", toughness: "2", illustrator: "Matt Stewart", card_color: "red", rarity: "mythic rare"])
, new_card([ name: "Burst Lightning", super_type: "Instant", rule_text: "Kicker [4] (You may pay an additional [4] as you cast this spell.)\nBurst Lightning deals 2 damage to any target. If this spell was kicked, it deals 4 damage instead.", casting_cost: "R", illustrator: "Vance Kovacs", card_color: "red", rarity: "mythic rare"])
, new_card([ name: "Rite of Flame", super_type: "Sorcery", rule_text: "Add [R][R], then add [R] for each card named Rite of Flame in each graveyard.", flavor_text: "Deep beneath the ice, beneath the soil and the rock, Dominaria's fire still burned hot.", casting_cost: "R", illustrator: "Dany Orizio", card_color: "red", rarity: "mythic rare"])
, new_card([ name: "Cathartic Reunion", super_type: "Sorcery", rule_text: "As an additional cost to cast this spell, discard two cards.\nDraw three cards.", flavor_text: "The chasm of years and worlds collapsed under the power of their embrace.", casting_cost: "1R", illustrator: "Howard Lyon", card_color: "red", rarity: "mythic rare"])
, new_card([ name: "Finale of Promise", super_type: "Sorcery", rule_text: "You may cast up to one target instant card and/or up to one target sorcery card from your graveyard each with mana value X or less without paying their mana costs. If a spell cast this way would be put into your graveyard, exile it instead. If X is 10 or more, copy each of those spells twice. You may choose new targets for the copies.", casting_cost: "XRR", illustrator: "Jaime Jones", card_color: "red", rarity: "mythic rare"])
, new_card([ name: "Endurance", super_type: "Creature", sub_type: "Elemental Incarnation", rule_text: "Flash\nReach\nWhen Endurance enters the battlefield, up to one target player puts all the cards from their graveyard on the bottom of their library in a random order.\nEvoke—Exile a green card from your hand.", casting_cost: "1GG", power: "3", toughness: "4", illustrator: "Svetlin Velinov", card_color: "green", rarity: "mythic rare"])
, new_card([ name: "Arboreal Grazer", super_type: "Creature", sub_type: "Beast", rule_text: "Reach\nWhen Arboreal Grazer enters the battlefield, you may put a land card from your hand onto the battlefield tapped.", flavor_text: "\"We fight to stop a tyrant, but we also fight for the gentle creatures who have no concept of what befalls their world.\"\n—Vivien Reid", casting_cost: "G", power: "0", toughness: "3", illustrator: "Jason Rainville", card_color: "green", rarity: "mythic rare"])
, new_card([ name: "Avacyn's Pilgrim", super_type: "Creature", sub_type: "Human Monk", rule_text: "[T]: Add [W].", flavor_text: "\"Avacyn's protection is everywhere. From the holy church to the sacred glade, all that we see is under her blessed watch.\"", casting_cost: "G", power: "1", toughness: "1", illustrator: "Jana Schirmer & Johannes Voss", card_color: "green, white", rarity: "mythic rare"])
, new_card([ name: "Elvish Mystic", super_type: "Creature", sub_type: "Elf Druid", rule_text: "[T]: Add [G].", flavor_text: "\"Life grows everywhere. My kin merely find those places where it grows strongest.\"\n—Nissa Revane", casting_cost: "G", power: "1", toughness: "1", illustrator: "Wesley Burt", card_color: "green", rarity: "mythic rare"])
, new_card([ name: "Krark, the Thumbless", super_type: "Legendary Creature", sub_type: "Goblin Wizard", rule_text: "Whenever you cast an instant or sorcery spell, flip a coin. If you lose the flip, return that spell to its owner's hand. If you win the flip, copy that spell, and you may choose new targets for the copy.\nPartner (You can have two commanders if both have partner.)", flavor_text: "\"Double or nothing.\"", casting_cost: "1R", power: "2", toughness: "2", illustrator: "Mathias Kollros", card_color: "red", rarity: "mythic rare"])
, new_card([ name: "Oni-Cult Anvil", super_type: "Artifact", rule_text: "Whenever one or more artifacts you control leave the battlefield during your turn, create a 1/1 colorless Construct artifact creature token. This ability triggers only once each turn.\n[T], Sacrifice an artifact: Oni-Cult Anvil deals 1 damage to each opponent. You gain 1 life.", casting_cost: "BR", illustrator: "Yeong-Hao Han", card_color: "black, red", rarity: "mythic rare"])
, new_card([ name: "Prismari Command", super_type: "Instant", rule_text: "Choose two —\n• Prismari Command deals 2 damage to any target.\n• Target player draws two cards, then discards two cards.\n• Target player creates a Treasure token.\n• Destroy target artifact.", casting_cost: "1UR", illustrator: "Johannes Voss", card_color: "red, blue", rarity: "mythic rare"])
, new_card([ name: "Korvold, Fae-Cursed King", super_type: "Legendary Creature", sub_type: "Dragon Noble", rule_text: "Flying\nWhenever Korvold, Fae-Cursed King enters the battlefield or attacks, sacrifice another permanent.\nWhenever you sacrifice a permanent, put a +1/+1 counter on Korvold and draw a card.", flavor_text: "Transformed at his own wedding, he promptly ate the banquet, the gifts, and the guests.", casting_cost: "2BRG", power: "4", toughness: "4", illustrator: "Wisnu Tan", card_color: "black, green, red", rarity: "mythic rare"])
, new_card([ name: "Sol Ring", super_type: "Artifact", rule_text: "[T]: Add [C][C].", casting_cost: "1", illustrator: "Mark Tedin", rarity: "mythic rare"])
, new_card([ name: "Witch's Oven", super_type: "Artifact", rule_text: "[T], Sacrifice a creature: Create a Food token. If the sacrificed creature's toughness was 4 or greater, create two Food tokens instead. (They're artifacts with \"[2], [T], Sacrifice this artifact: You gain 3 life.\")", flavor_text: "The wafting smells are both scrumptious and suspicious.", casting_cost: "1", illustrator: "Alexander Forssberg", rarity: "mythic rare"])
, new_card([ name: "Silver Raven", super_type: "Artifact Creature", sub_type: "Bird", rule_text: "Flying\nWhen Silver Raven enters the battlefield, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.)", flavor_text: "Wings take flight on whispered wind.", casting_cost: "U", power: "1", toughness: "1", illustrator: "Joe Slucher", card_color: "blue", rarity: "mythic rare"])
]
+189
View File
@@ -0,0 +1,189 @@
############################################################## 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: •
auto replace:
match: ->
replace: •
auto replace:
match: ETB
replace: enters the battlefield
auto replace:
match: etbt
replace: enters the battlefield tapped
auto replace:
match: phyW
replace: ([H/W] can be paid with either [W] or 2 life.)
auto replace:
match: phyU
replace: ([H/U] can be paid with either [U] or 2 life.)
auto replace:
match: phyB
replace: ([H/B] can be paid with either [B] or 2 life.)
auto replace:
match: phyR
replace: ([H/R] can be paid with either [R] or 2 life.)
auto replace:
match: phyG
replace: ([H/G] can be paid with either [G] or 2 life.)
auto replace:
match: twoW
replace: ([2/W] can be paid with any two mana or with [W].)
auto replace:
match: twoU
replace: ([2/U] can be paid with any two mana or with [U].)
auto replace:
match: twoB
replace: ([2/B] can be paid with any two mana or with [B].)
auto replace:
match: twoR
replace: ([2/R] can be paid with any two mana or with [R].)
auto replace:
match: twoG
replace: ([2/G] can be paid with any two mana or with [G].)
auto replace:
match: TWALK
replace: Take an extra turn after this one.
auto replace:
match: TAW
replace: [T]: Add [W] to your mana pool.
auto replace:
match: TAU
replace: [T]: Add [U] to your mana pool.
auto replace:
match: TAB
replace: [T]: Add [B] to your mana pool.
auto replace:
match: TAR
replace: [T]: Add [R] to your mana pool.
auto replace:
match: TAG
replace: [T]: Add [G] to your mana pool.
auto replace:
match: TAC
replace: [T]: Add [C] to your mana pool.
auto replace:
match: TWU
replace: [T]: Add [W] or [U] to your mana pool.
auto replace:
match: TUB
replace: [T]: Add [U] or [B] to your mana pool.
auto replace:
match: TBR
replace: [T]: Add [B] or [R] to your mana pool.
auto replace:
match: TRG
replace: [T]: Add [R] or [G] to your mana pool.
auto replace:
match: TGW
replace: [T]: Add [G] or [W] to your mana pool.
auto replace:
match: TWB
replace: [T]: Add [W] or [B] to your mana pool.
auto replace:
match: TUR
replace: [T]: Add [U] or [R] to your mana pool.
auto replace:
match: TBG
replace: [T]: Add [B] or [G] to your mana pool.
auto replace:
match: TRW
replace: [T]: Add [R] or [W] to your mana pool.
auto replace:
match: TGU
replace: [T]: Add [G] or [U] to your mana pool.
auto replace:
match: twub
replace: [T]: Add [W], [U], or [B] to your mana pool.
auto replace:
match: tubr
replace: [T]: Add [U], [B], or [R] to your mana pool.
auto replace:
match: tbrg
replace: [T]: Add [B], [R], or [G] to your mana pool.
auto replace:
match: trgw
replace: [T]: Add [R], [G], or [W] to your mana pool.
auto replace:
match: tgwu
replace: [T]: Add [G], [W] or [U] to your mana pool.
auto replace:
match: twbg
replace: [T]: Add [W], [B], or [G] to your mana pool.
auto replace:
match: turw
replace: [T]: Add [U], [R], or [W] to your mana pool.
auto replace:
match: tbgu
replace: [T]: Add [B], [G], or [U] to your mana pool.
auto replace:
match: trwb
replace: [T]: Add [R], [W], or [B] to your mana pool.
auto replace:
match: tgur
replace: [T]: Add [G], [U], or [R] to your mana pool.
auto replace:
match: twbr
replace: [T]: Add [W], [B], or [R] to your mana pool.
auto replace:
match: turg
replace: [T]: Add [U], [R], or [G] to your mana pool.
auto replace:
match: tbgw
replace: [T]: Add [B], [G], or [W] to your mana pool.
auto replace:
match: trwu
replace: [T]: Add [R], [W], or [U] to your mana pool.
auto replace:
match: tgub
replace: [T]: Add [G], [U], or [B] to your mana pool.
auto replace:
match: WTD
replace: When CARDNAME dies
auto replace:
match: WTT
replace: Whenever CARDNAME becomes the target of a spell
auto replace:
match: ANYCARD
replace: Search your library for a card and put that card into your hand. Then shuffle your library.
auto replace:
match: TUTOR
replace: Search your library for a card, reveal it, and put it into your hand. Then shuffle your library.
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because it is too large Load Diff
+786
View File
@@ -0,0 +1,786 @@
############################################################## 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: fuse split
choice: double faced
choice: planeswalker
choice: shifted
choice: rulestip
choice: leveler
choice: augment
choice: counter
choice: checklist
choice: emblem
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") or contains(card.shape, match:"flip") or contains(card.shape, match:"double faced") 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(type: card.super_type)
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
card field:
type: choice
name: transformation
choice: day
choice: night
description: On transforming cards, is this the day or the night side?
show statistics: false
card field:
type: multiple choice
name: indicator
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.card_color
show statistics: false
description: The color indicator of the card, used to indicate card color.
############################# 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
card field:
type: text
name: loyalty cost 6
show statistics: false
description: The loyalty cost for the sixth ability of a planeswalker
card field:
type: text
name: loyalty cost 7
show statistics: false
description: The loyalty cost for the seventh ability of a planeswalker
card field:
type: text
name: loyalty cost 8
show statistics: false
description: The loyalty cost for the eighth ability of a planeswalker
############################# 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
card field:
type: text
name: card number m15
save value: false
script: card_number_m15() + "/" + card_count_m15()
sort script: rarity_sort() + card.card_number
card list visible: false
editable: false
show statistics: false
card field:
type: text
name: custom card number
save value: true
editable: true
show statistics: false
card field:
type: text
name: set code
editable: false
save value: false
script: set.set_code + " ⋅ " + set.set_language
show statistics: false
card field:
type: text
name: card code text
editable: true
save value: true
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: text
name: casting cost 3
icon: stats/casting_cost.png
script: mana_filter(value)
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: choice
name: type symbol 2
default: typesymbol_type(type: card.super_type_2)
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
card field:
type: choice
name: transformation 2
choice: night
choice: day
description: On transforming cards, is this the day or the night side?
show statistics: false
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: multiple choice
name: indicator 2
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) >= 2 and not chosen(choice:"overlay",card.card_color_2) }
script: card_color_filter(value)
default: card.card_color_2
show statistics: false
description: The color indicator of the card, used to indicate card color.
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: rule text 4
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 5
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 6
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: 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
card field:
type: text
name: set code 2
editable: false
save value: false
script: set.set_code + " ⋅ " + set.set_language
show statistics: false
+55
View File
@@ -0,0 +1,55 @@
mse version: 2.0.0
short name: Magic
full name: Magic the Gathering
installer group: magic/game files
icon: card-back.png
position hint: 01
version: 2016-01-11
depends on:
package: magic-blends.mse-include
version: 2014-06-25
depends on:
package: magic-watermarks.mse-include
version: 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: add_cards_scripts
include file: packs
include file: keywords
include file: word_lists
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 if input == "pink" then rgb(210,60,140)
else if input == "purple" then rgb(150,100,160)
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
)
+52
View File
@@ -0,0 +1,52 @@
mse version: 2.0.0
short name: Magic
full name: Magic the Gathering
installer group: magic/game files
icon: card-back.png
position hint: 01
version: 2016-01-11
depends on:
package: magic-blends.mse-include
version: 2014-06-25
depends on:
package: magic-watermarks.mse-include
version: 2007-09-23
############################################################## The script
init script: include file: mainframe_scripts
############################################################## Lots of lists
################## There be dragons here. -Liosan ##########################
include file: mainframe_card_fields
include file: mainframe_set_fields
include file: statistics
include file: mainframe_patch
include file: keywords
include file: word_lists
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
)
+53
View File
@@ -0,0 +1,53 @@
mse version: 2.0.0
short name: Magic
full name: Magic the Gathering
installer group: magic/game files
icon: card-back.png
position hint: 01
version: 2016-01-11
depends on:
package: magic-blends.mse-include
version: 2014-06-25
depends on:
package: magic-watermarks.mse-include
version: 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: mainframe_patch
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
)
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+37
View File
@@ -0,0 +1,37 @@
# 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
View File
@@ -0,0 +1 @@
merfolk
+175
View File
@@ -0,0 +1,175 @@
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
Thopter
Kraken
and/or
primordial
non-Dragon
nonpermanent
noninstant
nonplaneswalker
nonenchantment
nonsorcery
nonartifact
non-Human
Hellkite
hexproof
draughts
dwarves
sigil
dwarven
axe
earthen
hedron
thrull
arcun
merfolk
+200
View File
@@ -0,0 +1,200 @@
pack type:
name: basic land
select: equal
filter: card.rarity == "basic land" and not is_token_card() and not is_masterpiece() # can be shifted
pack type:
name: common
filter: card.rarity == "common" and not is_token_card() and not is_shifted_card() and not is_masterpiece() and not is_unsorted()
pack type:
name: uncommon
filter: card.rarity == "uncommon" and not is_token_card() and not is_shifted_card() and not is_masterpiece() and not is_unsorted()
pack type:
name: rare
filter: card.rarity == "rare" and not is_token_card() and not is_shifted_card() and not is_masterpiece() and not is_unsorted()
pack type:
name: mythic rare
filter: card.rarity == "mythic rare" and not is_masterpiece() and not is_token_card() and not is_shifted_card() and not is_unsorted()
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() and not is_unsorted()
pack type:
name: shifted uncommon
filter: card.rarity == "uncommon" and not is_token_card() and is_shifted_card() and not is_unsorted()
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() and not is_unsorted()
pack type:
name: token / rulestip
filter: is_token_card()
pack type:
name: masterpiece
filter: is_masterpiece()
# 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
pack type:
name: common sometimes masterpiece
select: equal
item:
name: masterpiece
weight: 1
item:
name: common
weight: 35
pack type:
name: common rarely masterpiece
select: equal
item:
name: masterpiece
weight: 1
item:
name: common
weight: 143
+187
View File
@@ -0,0 +1,187 @@
############################################################## Card pack types
pack type:
name: basic land
select: equal
filter: card.rarity == "basic land" and not is_token_card()
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()
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
+801
View File
@@ -0,0 +1,801 @@
############################################################## Localization
include file: language
############################################################## Sorting mana symbols
# correctly sort a mana symbol (no guild mana)
mana_sort := sort_text@(order: "XYZI[0123456789]DHSC(WUBRG)")
# correctly sort wedge mana
mana_sort_wedge := sort_text@(order: "XYZI[0123456789]DHSC(WBGUR)")
# correctly sort guild mana
mana_sort_guild := sort_text@(order: "[XYZI01234567890DHSCWUBRG/|]") +
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?
mana_is_wedge := { contains(set.mana_cost_sorting, match: "wedge") and ( number_of_items(in: sort_text(order:"<WUBRG>", card.casting_cost), filter: "<WUBRG>") == 3 ) }
# A mana cost can contain both normal and guild mana
mana_filter := to_upper + {
if contains(set.mana_cost_sorting, match: "unsorted") then input
else if mana_has_guild() then mana_sort_guild()
else if mana_is_wedge() then mana_sort_wedge()
else mana_sort()
}
# Like mana filter, only also allow tap symbols:
tap_filter := sort_text@(order: "<TQ>")
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: "")
)
) else (
colors := ""
)
) else (
colors := ""
)
};
# 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 not set.sort_hybrid_in_pairs then "HK"
else 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 not set.sort_multicolor_in_pairs then "GK"
else 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 contains(card.shape, match: "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 "T1"
else if card.shape == "emblem" then "T2"
else if card.shape == "rulestip" then "T3"
else if card.shape == "counter" then "T4"
else if card.shape == "checklist" then "T5"
else if is_masterpiece() then "T6"
else if set.sort_special_rarity == "with the rest" or card.rarity != "special" then " "
else "S"
}
set_filter := {
# TODO: what about rulestips?
if is_unsorted() then
{ is_unsorted() }
if card.shape == "token" or card.shape == "emblem" then
{ card.shape == "token" or card.shape == "emblem" }
else if card.shape == "rulestip" then
{ card.shape == "rulestip" }
else if card.shape == "counter" then
{ card.shape == "counter" }
else if card.shape == "checklist" then
{ card.shape == "checklist" }
else if is_masterpiece() and card.shape != "token" and card.shape != "emblem" then
{ is_masterpiece() and card.shape != "token" and card.shape != "emblem" }
else if set.sort_special_rarity != "separate numbering" then
{ not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist"}
else if card.rarity == "special" then
{ not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist" and card.rarity == "special" }
else
{ not is_unsorted() and card.shape != "token" and not is_masterpiece() and card.shape != "emblem" and card.shape != "rulestip" and card.shape != "counter" and card.shape != "checklist" 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())
}
#Starting with M15, zero digits in card numbers should be shown up to three.
card_number_m15 := { (if card_number() < 100 then "0" else "") + (if card_number() < 10 then "0" else "") + card_number() }
card_count_m15 := { (if card_count() < 100 then "0" else "") + (if card_count() < 10 then "0" else "") + card_count() }
# used by pack scripts
is_token_card := { card.shape == "token" or card.shape == "rulestip" or card.shape == "counter" or card.shape == "checklist" or card.shape == "emblem"}
is_shifted_card := { contains(card.shape, match:"shifted") }
is_masterpiece := { card.rarity == "masterpiece" }
is_nightbreak := { card.shape == "nightbreak" }
############################################################## Utilities for keywords
comma_count := filter_text@(match:",")
# 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 comma_count(input.param) == "," then (
if match(match: "^[DHSCTQXYZIWUBRG0-9/|]+,", input.param) then
"{add}<param-cost>{combined_cost(input.param)}</param-cost>"
else "<param-cost>{combined_cost(input.param)}</param-cost>"
) else if contains(input.param, match: ",") then (
if match(match: "^[DHSCTQXYZIWUBRG0-9/|]+,", input.param) then
"{add}<param-cost>{long_cost(input.param)}</param-cost>"
else "<param-cost>{long_nomana_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() })
# Convert extra costs
long_cost := replace@(match:", [A-Z]", replace: { to_lower() } )
long_nomana_cost := replace@(match:"[A-Z]", replace: { to_lower() })
#
combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+
replace@(match:",", replace:" and")+
replace@(match:"^[DHSCTQXYZIWUBRG0-9/|]+", in_context: "(^|[[:space:]])<match>(?![a-z])", 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_spell := { contains(card.type, match:"Instant") or contains(card.type, match:"Sorcery") }
is_targeted := { contains_target(card.rule_text) }
color_to_mana := replace@(match: "white", replace: "[W]")+
replace@(match: "blue", replace: "[U]")+
replace@(match: "black", replace: "[B]")+
replace@(match: "red", replace: "[R]")+
replace@(match: "green", replace: "[G]")
############################################################## 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
| or[ ]<match> # Add X, Y, or Z.
| <match>[ ]to # Add X, Y, or Z to your mana pool.
| <match>[ ]was[ ]spent # if G was spent to cast
| <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[^>]*>)?[DHSCTQXYZIEWUBRG0-9/|]+(</sym[^>]*>)?,)* # pay X, Y or Z
([ ](<sym[^>]*>)?[DHSCTQXYZIEWUBRG0-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: "\\][DHSCTQXYZIWUBRG0-9/|]+\\[",
replace: {"<nosym>" + mana_filter_t() + "</nosym>"} ) +
# step 5 : add mana & tap symbols
replace@(
match: "\\b[DHSCTQXYZIWUBRG0-9/|]+\\b",
in_context: mana_context,
replace: {"<sym-auto>" + mana_filter_t() + "</sym-auto>"} ) +
# step 5c : add explicit mana symbols
replace@(
match: "\\[[DHSCTQXYZIWUBRG0-9/|]+\\]",
replace: {"<sym>" + mana_filter_t() + "</sym>"} ) +
# step 6 : curly quotes
(if set.curly_quotes then 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
(if set.curly_quotes then 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"
else "";
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)))
}
# Determine a rarity code for M15 styles.
rarity_code := {
if is_promo() then "P"
else if is_masterpiece() then "S"
else if contains(card.shape, match:"token") then "T"
else if contains(card.shape, match:"emblem") then "E"
else if card.rarity == "common" then "C"
else if card.rarity == "uncommon" then "U"
else if card.rarity == "rare" then "R"
else if card.rarity == "mythic rare" then "M"
else if card.rarity == "special" then "S"
else if card.rarity == "basic land" then "L"
else ""
};
# Determine if the card is a promo card.
is_promo := { "false" }
# Determine if the card is a rare.
is_rare := { card.rarity == "rare" or card.rarity == "mythic rare" or card.rarity == "masterpiece" }
# 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(type) }
#Script to make magic-mana-future compatible w/ other templates
colorless_color := {
if contains(card.card_color, match:"hybrid") or contains(card.card_color, match:"multicolor") then "c"
else if card.card_color=="white" then "w"
else if card.card_color=="blue" then "u"
else if card.card_color=="black" then "b"
else if card.card_color=="red" then "r"
else if card.card_color=="green" then "g"
else "c"
}
#Indicators never appear if the indicator would be colorless, colorless land, or colorless artifact.
#Indicators do appear if the chosen frame doesn't match the default.
#Indicators do appear if the chosen color for the indicator doesn't match the default.
has_identity := { ( ( card.card_color != 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") ) or ( card.indicator != 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") ) ) and card.indicator != "colorless" and card.indicator != "artifact" and card.indicator != "land"}
has_identity_2 := { ( ( card.card_color_2 != card_color(casting_cost: card.casting_cost_2, rules_text: card.rule_text_2, type: card.super_type_2, watermark: card.watermark_2, card_name: card.name_2, default: "colorless") ) or ( card.indicator_2 != card_color(casting_cost: card.casting_cost_2, rules_text: card.rule_text_2, type: card.super_type_2, watermark: card.watermark_2, card_name: card.name_2, default: "colorless") ) ) and card.indicator_2 != "colorless" and card.indicator_2 != "artifact" and card.indicator_2 != "land"}
############################################################## 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]+(?!/[WUBRGDHSCTQ2]) | [WUBRGDHS0-9](/[WUBRGDHS])\{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") and not (chosen(choice:"white") or chosen(choice:"blue") or chosen(choice:"black") or chosen(choice:"red") or chosen(choice:"green"))
land := chosen(choice:"land")
multi := chosen(choice:"multicolor")
hybrid := chosen(choice:"hybrid")
white := chosen(choice:"white")
blue := chosen(choice:"blue")
black := chosen(choice:"black")
red := chosen(choice:"red")
green := chosen(choice:"green")
if land then "land"
else if multi then "multicolor"
else if hybrid then "hybrid"
else if artifact then "artifact"
else if white then "white"
else if blue then "blue"
else if black then "black"
else if red then "red"
else if green then "green"
else input
}
mainframe_stat_color := {
artifact := chosen(choice:"artifact") and not (chosen(choice:"white") or chosen(choice:"blue") or chosen(choice:"black") or chosen(choice:"red") or chosen(choice:"green"))
land := chosen(choice:"land")
multi := chosen(choice:"multicolor")
hybrid := chosen(choice:"hybrid")
white := chosen(choice:"white")
blue := chosen(choice:"blue")
black := chosen(choice:"black")
red := chosen(choice:"red")
green := chosen(choice:"green")
pink := chosen(choice:"pink")
purple := chosen(choice:"purple")
if land then "land"
else if multi then "multicolor"
else if hybrid then "hybrid"
else if artifact then "artifact"
else if white then "white"
else if blue then "blue"
else if black then "black"
else if red then "red"
else if green then "green"
else if pink then "pink"
else if purple then "purple"
else input
}
is_mainframe := { false }
is_walker := { contains(card.super_type, match:"Planeswalker") }
mainframe_power := { card.power }
mainframe_toughness := { card.toughness }
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: "")
node_script := { if card.shape == "double faced" then "transform day" else "none" }
node_script_2 := {
if card.mainframe_node == "transform day" then "transform night"
else if card.mainframe_node == "transform night" then "transform day"
else if card.mainframe_node == "transform moon" then "transform eldrazi"
else if card.mainframe_node == "transform eldrazi" then "transform moon"
else if card.mainframe_node == "transform sparker" then "transform aetherprint"
else if card.mainframe_node == "transform aetherprint" then "transform sparker"
else "none"
}
card_new_color := {
if card.card_color == "white" then "w"
else if card.card_color == "blue" then "u"
else if card.card_color == "black" then "b"
else if card.card_color == "red" then "r"
else if card.card_color == "green" then "g"
else if contains(card.card_color, match:"artifact") then "a"
else if contains(card.card_color, match:"multi") or contains(card.card_color, match:"hybrid") then "m"
else "c"
}
spark_color := {
if card.card_color == "white" then "w"
else if card.card_color == "blue" then "u"
else if card.card_color == "black" then "b"
else if card.card_color == "red" then "r"
else if card.card_color == "green" then "g"
else if contains(card.card_color, match:"multi") or contains(card.card_color, match:"hybrid") then "m"
else ""
}
card_spotlight := { "/magic-mainframe-watermarks.mse-include/spotlight/" + card_new_color() + "spotlight.png" }
ancestral_mana := { card.pt != "" and card.pt == "" }
exporter_check := { "no" }
custom_watermark_1 := { if set.custom_watermark_1 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_1 else "/magic-watermarks.mse-include/aetherprint3.png" }
custom_watermark_2 := { if set.custom_watermark_2 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_2 else "/magic-watermarks.mse-include/aetherprint3.png" }
custom_watermark_3 := { if set.custom_watermark_3 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_3 else "/magic-watermarks.mse-include/aetherprint3.png" }
custom_watermark_4 := { if set.custom_watermark_4 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_4 else "/magic-watermarks.mse-include/aetherprint3.png" }
custom_watermark_5 := { if set.custom_watermark_5 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_5 else "/magic-watermarks.mse-include/aetherprint3.png" }
is_unsorted := {"false"}
+280
View File
@@ -0,0 +1,280 @@
############################################################## 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: text
name: set code
description: Typically, a three letter code for the set.
set field:
type: text
name: set language
description: Typically, a two letter code for the language the set is in.
set field:
type: text
name: masterpiece set code
description: The letter code for masterpieces, typically MSP
set field:
type: symbol
name: symbol
description: The symbol for this set, double click to edit
set field:
type: symbol
name: masterpiece symbol
description: The symbol for this sets masterpieces, click to edit
set field:
type: text
name: custom watermark 1
description: Set this image in magic-watermarks.mse-include as Custom Watermark 1
set field:
type: text
name: custom watermark 2
description: Set this image in magic-watermarks.mse-include as Custom Watermark 2
set field:
type: text
name: custom watermark 3
description: Set this image in magic-watermarks.mse-include as Custom Watermark 3
set field:
type: text
name: custom watermark 4
description: Set this image in magic-watermarks.mse-include as Custom Watermark 4
set field:
type: text
name: custom watermark 5
description: Set this image in magic-watermarks.mse-include as Custom Watermark 5
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: boolean
name: automatic copyright
description: Should the copyright line above be shown on the cards?
set field:
type: boolean
name: trim statistics
description: Removes tokens, special rarity, and masterpiece rarity from most statistics.
set field:
type: boolean
name: curly quotes
description: converts quotes to curly quotes.
set field:
type: choice
name: sort special rarity
description: Determines how cards with special rarity are sorted.
choice: with the rest
choice: after other cards
choice: separate numbering
initial: after other cards
set field:
type: boolean
name: sort multicolor in pairs
description: Should multicolor cards be sorted according to pairs like in Shards block?
initial: no
set field:
type: boolean
name: sort hybrid in pairs
description: Should hybrid cards be sorted according to pairs like in Shadowmoor block?
initial: no
#set field:
# type: boolean
# name: wedge mana costs
# description: Should three color mana costs sort in wedge order like in Khans block?
# initial: no
set field:
type: choice
name: mana cost sorting
description: Should mana costs be sorted by shard, by wedge, or unsorted?
choice: shard sorting
choice: wedge sorting
choice: unsorted
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)
masterpiece 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
+291
View File
@@ -0,0 +1,291 @@
############################################################## Statistics dimensions
statistics dimension:
name: card color
position hint: 0
script: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else 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:
name: promo colors
position hint: 800
script: if card.rarity == "special" or card.rarity == "masterpiece" then primary_card_color(card.card_color) else ""
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:
name: omniverse card color
position hint: 9999
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)
pink : rgb(255,175,200)
purple : rgb(150,100,160)
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: pink
group: purple
group: colorless
group: artifact
group: multicolor
group: land
group: hybrid
statistics dimension:
position hint: 2
name: converted mana cost
script: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else cmc(card.casting_cost)
numeric: true
icon: stats/casting_cost.png
statistics dimension:
position hint: 3
name: colored mana cost
script: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else 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: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else 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: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else 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: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else 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 (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else
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 (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else
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 (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else
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: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else card.power
numeric: true
icon: stats/power.png
statistics dimension:
position hint: 51
name: toughness
script: if (card.shape == "token" or card.rarity == "special" or card.rarity == "masterpiece") and set.trim_statistics then "" else card.toughness
numeric: true
icon: stats/toughness.png
statistics dimension:
position hint: 99
name: rarity
script: if card.shape == "token" or card.shape == "emblem" then "token" else card.rarity
colors:
token: rgb(33,33,33)
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)
masterpiece: rgb(202,49,35)
group: token
group: basic land
group: common
group: uncommon
group: rare
group: mythic rare
group: special
group: masterpiece
icon: stats/rarity.png
statistics dimension:
name: text length (words)
position hint: 100
script: if is_mainframe() and is_walker() then word_count(to_text(card.mainframe_rule_text)) else 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: if is_mainframe() and is_walker() then line_count(to_text(card.mainframe_rule_text)) else 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
statistics dimension:
position hint: 210
name: illustrator
script: if card.illustrator == "" then " No artist" else card.illustrator
icon: stats/illustrator.png
#statistics dimension:
# position hint: 2
# name: purple converted mana cost
# script: 0 + (if card.mana_label_1 != "" then card.mana_label_1 else 0) + (if card.mana_label_2 != "" then card.mana_label_2 else 0) + (if card.mana_label_3 != "" then card.mana_label_3 else 0) + (if card.mana_label_4 != "" then card.mana_label_4 else 0) + (if card.mana_label_5 != "" then card.mana_label_5 else 0) + (if card.mana_label_6 != "" then card.mana_label_6 else 0) + (if card.mana_label_7 != "" then card.mana_label_7 else 0) + (if card.mana_label_8 != "" then card.mana_label_8 else 0)
# numeric: true
# icon: stats/casting_cost.png
Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1016 B

+27
View File
@@ -0,0 +1,27 @@
# This script contains tests of the functions defined in other script files.
# These are not used during normal execution, they are only used for development.
# When everything is right, all these tests pass.
##############################################################
# card_color_color_count
##############################################################
assert(card_color_color_count("") == 0)
assert(card_color_color_count("asdf") == 0)
assert(card_color_color_count("white") == 1)
assert(card_color_color_count("artifact,white") == 2)
##############################################################
# converted mana cost
##############################################################
assert(cmc("") == 0)
assert(cmc("0") == 0)
assert(cmc("1/2") == 0.5)
assert(cmc("2/R3/W") == 5)
assert(cmc("W/UW") == 2)
assert(cmc("RRR") == 3)
assert(cmc("2X") == 2)
assert(cmc("22") == 22)
assert(cmc("20WUBRG") == 25)
+531
View File
@@ -0,0 +1,531 @@
############################################################## Magic word lists
word list:
name:
word:
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: Conspiracy
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: Aetherborn
word: Angel
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: Carrier
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: Dinosaur
word: Djinn
word: Dragon
word: Drake
word: Dreadnought
word: Drone
word: Dryad
word: Dwarf
word:
name: E
word: Efreet
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: Germ
word: Giant
word: Gnome
word: Goat
word: Goblin
word: God
word: Golem
word: Gorgon
word: Graveborn
word: Gremlin
word: Griffin
word:
name: H
word: Hag
word: Harpy
word: Hellion
word: Hippo
word: Hippogriff
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: Jackal
word: Jellyfish
word: Juggernaut
word:
name: K
word: Kavu
word: Kirin
word: Kithkin
word: Kobold
word: Kor
word: Kraken
word:
name: L
word: Lamia
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: Mole
word: Mongoose
word: Monkey
word: Moonfolk
word: Mutant
word: Myr
word:
name: N
word: Naga
word: Nautilus
word: Nephilim
word: Nightmare
word: Nightstalker
word: Noggle
word: Nymph
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: Praetor
word: Prism
word:
name: R
word: Rabbit
word: Rat
word: Reflection
word: Rhino
word:
name: S
word:
name: Sa-Sl
word: Sable
word: Salamander
word: Sand
word: Saproling
word: Satyr
word: Scarecrow
word: Scorpion
word: Serpent
word: Servo
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: Trilobite
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: Werewolf
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: Pilot
word: Pirate
word: Processor
word:
name: R-S
word: Rebel
word: Reflection
word: Rigger
word: Rogue
word: Samurai
word: Scion
word: Scout
word: Serf
word: Shaman
word: Skeleton
word: Soldier
word: Spawn
word: Spellshaper
word: Spirit
word: Survivor
word:
name: T-Z
word: Thopter
word: Vampire
word: Warrior
word: Werewolf
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: Curse
word: Shrine
word: Cartouche
word: Saga
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: Angrath
word: Arlinn
word: Ashiok
word: Bolas
word: Chandra
word: Dack
word: Daretti
word: Domri
word: Dovin
word: Elspeth
word: Freylaise
word: Garruk
word: Gideon
word: Huatli
word: Jace
word: Karn
word: Kiora
word: Koth
word: Liliana
word: Nahiri
word: Narset
word: Nissa
word: Nixilis
word: Ral
word: Saheeli
word: Samut
word: Sarkhan
word: Sorin
word: Tamiyo
word: Teferi
word: Tezzeret
word: Tibalt
word: Ugin
word: Venser
word: Vraska
word: Xenagos
word:
name: Last Seen on Ixalan
word: Angrath
word: Huatli
word: Jace
word: Vraska
word:
name: Last Seen on Amonkhet
word: Bolas
word: Gideon
word: Liliana
word: Nissa
word: Samut
word:
name: Last Seen on Kaladesh
word: Ajani
word: Chandra
word: Dovin
word: Saheeli
word: Tezzeret
word:
name: Last Seen on Innistrad
word: Arlinn
word: Nahiri
word: Sorin
word: Tamiyo
word: Tibalt
word:
name: Last Seen on Zendikar
word: Kiora
word: Nixilis
word:
name: Last Seen on Tarkir
word: Narset
word: Sarkhan
word: Ugin
word:
name: Last Seen on Theros
word: Ashiok
word: Elspeth
word: Xenagos
word:
name: Last Seen on Ravnica
word: Domri
word: Ral
word:
name: Last Seen on New Phyrexia
word: Karn
word: Koth
word: Venser
+412
View File
@@ -0,0 +1,412 @@
############################################################## Magic word lists
word list:
name: type
word:
name: de base
is prefix: true
word:
name: légendaire
is prefix: true
word:
name: tribaux
is prefix: true
word:
name: de neige
is prefix: true
word:
name: monde
is prefix: true
line below: true
word: Créature
word: Artefact
word: Artefact Créature
word: Enchantement
word: Instant
word: Rituel
word: Terrain
word: Planeswalker
word list:
name: race
word:
script: all_races()
line below: true
word: Angel
word: Beast
word: Bird
word: Construct
word: Demon
word: Dragon
word: Drake
word: Elemental
word: Elf
word: Faerie
word: Giant
word: Goblin
word: Golem
word: Human
word: Illusion
word: Merfolk
word: Treefolk
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: 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: 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: 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:
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: Advisor
word: Archer
word: Artificer
word: Assassin
word: Beast
word: Cleric
word: Druid
word: Knight
word: Mutant
word: Rogue
word: Scout
word: Shaman
word: Soldier
word: Warrior
word: Wizard
word: Zombie
word:
name: All Classes
word:
name: A-C
word: Advisor
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: Soldier
word: Spellshaper
word: Survivor
word:
name: T-Z
word: Thopter
word: Vampire
word: Warrior
word: Wizard
word: Zombie
word list:
name: artifact
word:
name:
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:
name:
line below: true
word: Aura
word: Shrine
word list:
name: spell
word:
name:
line below: true
word: Arcane