From 9f57081417bced26cc7222ffd862f4cd555d016f Mon Sep 17 00:00:00 2001 From: Brendan Hagan Date: Mon, 11 Jul 2022 22:21:09 -0400 Subject: [PATCH] misc: re-ignore non-locale packages These are covered in the Full-Magic-Pack and that's a much better place for them to live. --- .gitignore | 5 +- CHANGES.md | 1 - data/magic-blends.mse-include/include | 12 - data/magic-blends.mse-include/masks | 11 - data/magic-blends.mse-include/new-blends | 1080 ---------- data/magic.mse-game/add_cards_scripts | 90 - data/magic.mse-game/auto_replace | 1447 ------------- data/magic.mse-game/card-back.png | Bin 20023 -> 0 bytes data/magic.mse-game/card_fields | 1343 ------------ data/magic.mse-game/game | 55 - data/magic.mse-game/icons/center-all-text.png | Bin 109 -> 0 bytes data/magic.mse-game/icons/center-no-text.png | Bin 108 -> 0 bytes .../icons/center-short-text.png | Bin 111 -> 0 bytes data/magic.mse-game/icons/language-br.png | Bin 593 -> 0 bytes data/magic.mse-game/icons/language-en.png | Bin 631 -> 0 bytes data/magic.mse-game/icons/language-fr.png | Bin 545 -> 0 bytes data/magic.mse-game/icons/language-ru.png | Bin 807 -> 0 bytes data/magic.mse-game/icons/large-image.png | Bin 460 -> 0 bytes .../icons/number_cards_after.png | Bin 632 -> 0 bytes .../icons/number_cards_mixed.png | Bin 613 -> 0 bytes .../icons/number_cards_separate.png | Bin 628 -> 0 bytes data/magic.mse-game/icons/small-image.png | Bin 372 -> 0 bytes data/magic.mse-game/keywords | 1555 -------------- data/magic.mse-game/keywords_custom | 1 - data/magic.mse-game/language | 150 -- data/magic.mse-game/magic-words.en_US | 1 - data/magic.mse-game/magic-words.en_us.dic | 176 -- data/magic.mse-game/magic-words.fr_FR | 175 -- data/magic.mse-game/magic-words.fr_FR.dic | 175 -- data/magic.mse-game/magic-words.it_IT | 175 -- data/magic.mse-game/magic-words.it_IT.dic | 175 -- data/magic.mse-game/magic-words.pt_BR | 175 -- data/magic.mse-game/magic-words.pt_BR.dic | 175 -- data/magic.mse-game/magic-words.ru_RU | 175 -- data/magic.mse-game/magic-words.ru_RU.dic | 175 -- data/magic.mse-game/packs | 209 -- data/magic.mse-game/script | 1845 ----------------- data/magic.mse-game/set_fields | 414 ---- data/magic.mse-game/statistics | 291 --- data/magic.mse-game/stats/card_color.png | Bin 876 -> 0 bytes data/magic.mse-game/stats/card_symbol.png | Bin 654 -> 0 bytes data/magic.mse-game/stats/card_type.png | Bin 400 -> 0 bytes data/magic.mse-game/stats/casting_cost.png | Bin 877 -> 0 bytes .../stats/color_colored_cost.png | Bin 1262 -> 0 bytes data/magic.mse-game/stats/color_cost.png | Bin 1158 -> 0 bytes data/magic.mse-game/stats/color_rarity.png | Bin 1055 -> 0 bytes .../stats/colored_casting_cost.png | Bin 1014 -> 0 bytes .../stats/cost_colored_cost.png | Bin 1210 -> 0 bytes data/magic.mse-game/stats/creature_class.png | Bin 672 -> 0 bytes data/magic.mse-game/stats/creature_race.png | Bin 706 -> 0 bytes data/magic.mse-game/stats/creature_type.png | Bin 416 -> 0 bytes data/magic.mse-game/stats/illustrator.png | Bin 394 -> 0 bytes data/magic.mse-game/stats/keywords.png | Bin 674 -> 0 bytes data/magic.mse-game/stats/power.png | Bin 576 -> 0 bytes data/magic.mse-game/stats/pt.png | Bin 1000 -> 0 bytes data/magic.mse-game/stats/rarity.png | Bin 860 -> 0 bytes data/magic.mse-game/stats/stylesheet.png | Bin 590 -> 0 bytes data/magic.mse-game/stats/text_length.png | Bin 118 -> 0 bytes data/magic.mse-game/stats/toughness.png | Bin 702 -> 0 bytes data/magic.mse-game/stats/watermark.png | Bin 1016 -> 0 bytes data/magic.mse-game/unit_tests | 27 - data/magic.mse-game/word_lists | 719 ------- data/magic.mse-game/word_lists_fr | 412 ---- data/magic.mse-game/word_lists_it | 687 ------ data/magic.mse-game/word_lists_it.txt | 687 ------ data/magic.mse-game/word_lists_pt | 719 ------- data/magic.mse-game/word_lists_ru | 687 ------ 67 files changed, 1 insertion(+), 14023 deletions(-) delete mode 100644 data/magic-blends.mse-include/include delete mode 100644 data/magic-blends.mse-include/masks delete mode 100644 data/magic-blends.mse-include/new-blends delete mode 100644 data/magic.mse-game/add_cards_scripts delete mode 100644 data/magic.mse-game/auto_replace delete mode 100644 data/magic.mse-game/card-back.png delete mode 100644 data/magic.mse-game/card_fields delete mode 100644 data/magic.mse-game/game delete mode 100644 data/magic.mse-game/icons/center-all-text.png delete mode 100644 data/magic.mse-game/icons/center-no-text.png delete mode 100644 data/magic.mse-game/icons/center-short-text.png delete mode 100644 data/magic.mse-game/icons/language-br.png delete mode 100644 data/magic.mse-game/icons/language-en.png delete mode 100644 data/magic.mse-game/icons/language-fr.png delete mode 100644 data/magic.mse-game/icons/language-ru.png delete mode 100644 data/magic.mse-game/icons/large-image.png delete mode 100644 data/magic.mse-game/icons/number_cards_after.png delete mode 100644 data/magic.mse-game/icons/number_cards_mixed.png delete mode 100644 data/magic.mse-game/icons/number_cards_separate.png delete mode 100644 data/magic.mse-game/icons/small-image.png delete mode 100644 data/magic.mse-game/keywords delete mode 100644 data/magic.mse-game/keywords_custom delete mode 100644 data/magic.mse-game/language delete mode 100644 data/magic.mse-game/magic-words.en_US delete mode 100644 data/magic.mse-game/magic-words.en_us.dic delete mode 100644 data/magic.mse-game/magic-words.fr_FR delete mode 100644 data/magic.mse-game/magic-words.fr_FR.dic delete mode 100644 data/magic.mse-game/magic-words.it_IT delete mode 100644 data/magic.mse-game/magic-words.it_IT.dic delete mode 100644 data/magic.mse-game/magic-words.pt_BR delete mode 100644 data/magic.mse-game/magic-words.pt_BR.dic delete mode 100644 data/magic.mse-game/magic-words.ru_RU delete mode 100644 data/magic.mse-game/magic-words.ru_RU.dic delete mode 100644 data/magic.mse-game/packs delete mode 100644 data/magic.mse-game/script delete mode 100644 data/magic.mse-game/set_fields delete mode 100644 data/magic.mse-game/statistics delete mode 100644 data/magic.mse-game/stats/card_color.png delete mode 100644 data/magic.mse-game/stats/card_symbol.png delete mode 100644 data/magic.mse-game/stats/card_type.png delete mode 100644 data/magic.mse-game/stats/casting_cost.png delete mode 100644 data/magic.mse-game/stats/color_colored_cost.png delete mode 100644 data/magic.mse-game/stats/color_cost.png delete mode 100644 data/magic.mse-game/stats/color_rarity.png delete mode 100644 data/magic.mse-game/stats/colored_casting_cost.png delete mode 100644 data/magic.mse-game/stats/cost_colored_cost.png delete mode 100644 data/magic.mse-game/stats/creature_class.png delete mode 100644 data/magic.mse-game/stats/creature_race.png delete mode 100644 data/magic.mse-game/stats/creature_type.png delete mode 100644 data/magic.mse-game/stats/illustrator.png delete mode 100644 data/magic.mse-game/stats/keywords.png delete mode 100644 data/magic.mse-game/stats/power.png delete mode 100644 data/magic.mse-game/stats/pt.png delete mode 100644 data/magic.mse-game/stats/rarity.png delete mode 100644 data/magic.mse-game/stats/stylesheet.png delete mode 100644 data/magic.mse-game/stats/text_length.png delete mode 100644 data/magic.mse-game/stats/toughness.png delete mode 100644 data/magic.mse-game/stats/watermark.png delete mode 100644 data/magic.mse-game/unit_tests delete mode 100644 data/magic.mse-game/word_lists delete mode 100644 data/magic.mse-game/word_lists_fr delete mode 100644 data/magic.mse-game/word_lists_it delete mode 100644 data/magic.mse-game/word_lists_it.txt delete mode 100644 data/magic.mse-game/word_lists_pt delete mode 100644 data/magic.mse-game/word_lists_ru diff --git a/.gitignore b/.gitignore index 25729f5b..ef2a250f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,12 +8,9 @@ /data/**/* +# Explicitly include the English locale files as they relate to UI changes. !/data/en.mse-locale/ !/data/en.mse-locale/**/* -!/data/magic.mse-game/ -!/data/magic.mse-game/**/* -!/data/magic-blends.mse-include/ -!/data/magic-blends.mse-include/**/* /build_* /build diff --git a/CHANGES.md b/CHANGES.md index d86949cd..9ab010c5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,6 @@ Features: * Independently control Export Zoom setting in Preferences Window. * Center the loaded image by default in the Image Slice Window. * Add Button to Center the loaded image in the Image Slice Window. - * Add "Created At", "Last Modified At" columns to card list (within magic.mse-game). * Add filter box to Game and Stylesheet selection. * Add extra_card("field name") script function for accessing Extra Card Fields. * Add Clear button to console panel. diff --git a/data/magic-blends.mse-include/include b/data/magic-blends.mse-include/include deleted file mode 100644 index 2076d84e..00000000 --- a/data/magic-blends.mse-include/include +++ /dev/null @@ -1,12 +0,0 @@ -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 diff --git a/data/magic-blends.mse-include/masks b/data/magic-blends.mse-include/masks deleted file mode 100644 index a460d96a..00000000 --- a/data/magic-blends.mse-include/masks +++ /dev/null @@ -1,11 +0,0 @@ -id_mask :=[ - 32: "/magic-identity-new.mse-include/imask_32.png" - 33: "/magic-identity-new.mse-include/imask_33.png" - 42: "/magic-identity-new.mse-include/imask_42.png" - 43: "/magic-identity-new.mse-include/imask_43.png" - 44: "/magic-identity-new.mse-include/imask_44.png" - 52: "/magic-identity-new.mse-include/imask_52.png" - 53: "/magic-identity-new.mse-include/imask_53.png" - 54: "/magic-identity-new.mse-include/imask_54.png" - 55: "/magic-identity-new.mse-include/imask_55.png" -] diff --git a/data/magic-blends.mse-include/new-blends b/data/magic-blends.mse-include/new-blends deleted file mode 100644 index 29e82424..00000000 --- a/data/magic-blends.mse-include/new-blends +++ /dev/null @@ -1,1080 +0,0 @@ -#For vertical alignment, set tab spacing to 8. - -# Scripts for blending images -# Included by a style file in its init script - - -######################################################################## -# Filenames and other defaults -######################################################################## - include file: masks - - mask_hybrid_with_land := { false } - mask_hybrid_with_gold := { false } - mask_multi_land_with_color := { false } - template := { input + "{type}.jpg" } - land_template := { ( if input == "a" then "c" else input)+ "l{type}.jpg" } - offset := 0 -# For what value should thumbnails of hybrids be made? - hybrid_previews := "hybrid" - -# Are there templates for colored lands, land_template(...)? - colored_lands := true - trim_colors := - replace@(match:"(, )?(multicolor|hybrid|artifact|land|horizontal|vertical|radial)", replace:"") - -watermark_colors := { - check_colors := card.card_color - if face != "" then check_colors := face - if trim_colors(check_colors) == "white" then "ww" - else if trim_colors(check_colors) == "blue" then "uu" - else if trim_colors(check_colors) == "black" then "bb" - else if trim_colors(check_colors) == "red" then "rr" - else if trim_colors(check_colors) == "green" then "gg" - else if contains(check_colors, match:"multi") or - contains(check_colors, match:"hybrid") or - contains(check_colors, match:", land") then hybrid_color(face:face) - else if contains(check_colors, match:"artifact") then "aa" - else "cc" -}@(face:"") -hybrid_color := { - check_colors := card.card_color - if face != "" then check_colors := face - trimmed := trim_colors(check_colors) - if trimmed == "white, blue" then "wu" - else if trimmed == "white, black" then "wb" - else if trimmed == "white, red" then "rw" - else if trimmed == "white, green" then "gw" - else if trimmed == "blue, black" then "ub" - else if trimmed == "blue, red" then "ur" - else if trimmed == "blue, green" then "gu" - else if trimmed == "black, red" then "br" - else if trimmed == "black, green" then "bg" - else if trimmed == "red, green" then "rg" - else if trimmed == "white, blue, reversed" then "uw" - else if trimmed == "white, black, reversed" then "bw" - else if trimmed == "white, red, reversed" then "wr" - else if trimmed == "white, green, reversed" then "wg" - else if trimmed == "blue, black, reversed" then "bu" - else if trimmed == "blue, red, reversed" then "ru" - else if trimmed == "blue, green, reversed" then "ug" - else if trimmed == "black, red, reversed" then "rb" - else if trimmed == "black, green, reversed" then "bg" - else if trimmed == "red, green, reversed" then "gr" - else "mm" -}@(face:"") -######################################################################## -# 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[(to_int(offset) + 0 ) mod 3] ), - x1: 0.22, y1: 0 - x2: 0.4, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0.6, y1: 0 - x2: 0.78, y2: 0 - ) - ) - } - 4: {linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 4] ), - x1: 0.15, y1: 0 - x2: 0.31, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 4] ), - x1: 0.42, y1: 0 - x2: 0.58, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 4] ), - image2: template( colors[(to_int(offset) + 3 ) mod 4] ), - x1: 0.69, y1: 0 - x2: 0.85, y2: 0 - )))} - - 5: {linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 5] ), - x1: 2.0 / 15, y1: 0 - x2: 4.0 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 5] ), - x1: 5.0 / 15, y1: 0 - x2: 7.0 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 5] ), - x1: 8.0 / 15, y1: 0 - x2: 10.0 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 5] ), - image2: template( colors[(to_int(offset) + 4 ) mod 5] ), - x1: 11.0 / 15, y1: 0 - x2: 13.0 / 15, y2: 0 - ))))} - - 6: {linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 6] ), - x1: 1.5 / 15, y1: 0 - x2: 3.1 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 6] ), - x1: 4.1 / 15, y1: 0 - x2: 5.7 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 6] ), - x1: 6.7 / 15, y1: 0 - x2: 8.3 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 6] ), - x1: 9.3 / 15, y1: 0 - x2: 10.9 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 4 ) mod 6] ), - image2: template( colors[(to_int(offset) + 5 ) mod 6] ), - x1: 11.9 / 15, y1: 0 - x2: 13.5 / 15, y2: 0 - )))))} - - 7: {linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 7] ), - x1: 1.3 / 15, y1: 0 - x2: 2.7 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 7] ), - x1: 3.5 / 15, y1: 0 - x2: 4.9 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 7] ), - x1: 5.7 / 15, y1: 0 - x2: 7.1 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 7] ), - x1: 7.9 / 15, y1: 0 - x2: 9.3 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 4 ) mod 7] ), - x1: 10.1 / 15, y1: 0 - x2: 11.5 / 15, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 5 ) mod 7] ), - image2: template( colors[(to_int(offset) + 6 ) mod 7] ), - x1: 12.3 / 15, y1: 0 - x2: 13.7 / 15, y2: 0 - ))))))} -] - - -card_hybrid := [ - radial: [ - 0: { template( "c") } - 1: { template( colors[0]) } - 2: card_hybrid_2 - - 3:{linear_blend( - image1: card_hybrid_2( colors: colors[(to_int(offset) + 0 ) mod 3] + - colors[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0, y1: 0.55 - x2: 0, y2: 0.77 - )} - 4:{linear_blend( - image1: card_hybrid_2( colors: colors[(to_int(offset) + 0 ) mod 4] + - colors[(to_int(offset) + 1 ) mod 4] ), - image2: card_hybrid_2( colors: colors[(to_int(offset) + 3 ) mod 4] + - colors[(to_int(offset) + 2 ) mod 4] ), - x1: 0, y1: 0.4 - x2: 0, y2: 0.62 - )} - - 5: {linear_blend( - image1: linear_blend( - image1: card_hybrid_2( colors: colors[(to_int(offset) + 0 ) mod 5] + - colors[(to_int(offset) + 1 ) mod 5] ), - image2: card_hybrid_2( colors: colors[(to_int(offset) + 4 ) mod 5] + - colors[(to_int(offset) + 2 ) mod 5] ), - x1: 0, y1: 0.19 - x2: 0, y2: 0.35 - ), - image2: template( colors[(to_int(offset) + 3 ) mod 5] ), - x1: 0, y1: 0.777 - x2: 0, y2: 0.937 - )} - - 6: {linear_blend( - image1: linear_blend( - image1: card_hybrid_2( colors: colors[(to_int(offset) + 0 ) mod 6] + - colors[(to_int(offset) + 1 ) mod 6] ), - image2: card_hybrid_2( colors: colors[(to_int(offset) + 5 ) mod 6] + - colors[(to_int(offset) + 2 ) mod 6] ), - x1: 0, y1: 0.19 - x2: 0, y2: 0.35 - ), - image2: card_hybrid_2( colors: colors[(to_int(offset) + 4 ) mod 6] + - colors[(to_int(offset) + 3 ) mod 6] ), - 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[(to_int(offset) + 0 ) mod 7] + - colors[(to_int(offset) + 1 ) mod 7] ), - image2: card_hybrid_2( colors: colors[(to_int(offset) + 6 ) mod 7] + - colors[(to_int(offset) + 2 ) mod 7] ), - x1: 0, y1: 0.34 - x2: 0, y2: 0.50 - ), - image2: card_hybrid_2( colors: colors[(to_int(offset) + 5 ) mod 7] + - colors[(to_int(offset) + 3 ) mod 7] ), - x1: 0, y1: 0.877 - x2: 0, y2: 0.937 - ), - image2: template( colors[(to_int(offset) + 4 ) mod 7] ), - 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[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: -0.51, y1: 0 - x2: 0.26, y2: 0 - )} - 4: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 4] ), - image2: template( colors[(to_int(offset) + 3 ) mod 4] ), - x1: -0.1, y1: 0 - x2: 0.6, y2: 0 - )} - 5: { linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 5] ), - image2: template( colors[(to_int(offset) + 4 ) mod 5] ), - x1: 0.08, y1: 0 - x2: 0.65, y2: 0 - )} - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 4 ) mod 6] ), - image2: template( colors[(to_int(offset) + 5 ) mod 6] ), - x1: 0.07, y1: 0 - x2: 0.7, y2: 0 - )} - 7: {linear_blend( - image1: linear_blend( - image1: template( colors[(to_int(offset) + 4 ) mod 7] ), - image2: template( colors[(to_int(offset) + 5 ) mod 7] ), - x1: -0.2, y1: 0 - x2: 0.2, y2: 0 - ), - image2: template( colors[(to_int(offset) + 6 ) mod 7] ), - 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[(to_int(offset) + 2 ) mod 3]) } - 4: { template( colors[(to_int(offset) + 2 ) mod 4]) } - 5: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 5] ), - image2: template( colors[(to_int(offset) + 3 ) mod 5] ), - x1: 0, y1: -1.5 - x2: 0, y2: 0.7 - )} - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 6] ), - image2: template( colors[(to_int(offset) + 3 ) mod 6] ), - x1: 0, y1: -1.5 - x2: 0, y2: 0.7 - )} - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_pt_hybrid - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { template( colors[(to_int(offset) + 2 ) mod 7]) } - 4: { template( colors[(to_int(offset) + 3 ) mod 7]) } - 5: { template( colors[(to_int(offset) + 4 ) mod 7]) } - 6: { template( colors[(to_int(offset) + 5 ) mod 7]) } - 7: { template( colors[(to_int(offset) + 6 ) mod 7]) } - ] - 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[(to_int(offset) + 1 ) mod 3]) } - 4: { template( colors[(to_int(offset) + 1 ) mod 4]) } - 5: {linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 5] ), - image2: template( colors[(to_int(offset) + 2 ) mod 5] ), - x1: 0, y1: -1 - x2: 0, y2: 1.8 - )} - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 6] ), - image2: template( colors[(to_int(offset) + 2 ) mod 6] ), - x1: 0, y1: -1 - x2: 0, y2: 1.8 - )} - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_pt_hybrid - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[0]) } - 3: { linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 3] ), - image2: template( colors[(to_int(offset) + 1 ) mod 3] ), - x1: 0, y1: 0 - x2: 0, y2: 2 - )} - 4: { linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 4] ), - image2: template( colors[(to_int(offset) + 1 ) mod 4] ), - x1: 0, y1: -1.5 - x2: 0, y2: 1 - )} - 5: { linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 5] ), - image2: template( colors[(to_int(offset) + 1 ) mod 5] ), - x1: 0, y1: -1.1 - x2: 0, y2: 0.2 - )} - 6: { template( colors[(to_int(offset) + 1 ) mod 6] ) } # Probably not right - 7: { template( colors[(to_int(offset) + 2 ) mod 7]) } - ] - overlay: overlay_hybrid -] - -flip_pt_hybrid2 := [ - radial: [ - 0: { template( "c") } - 1: { template( colors[0]) } - 2: { template( colors[0]) } - 3: { linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0, y1: -1 - x2: 0, y2: 1.1 - )} - 4: { template( colors[(to_int(offset) + 3 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 4 ) mod 5]) } - 6: { template( colors[(to_int(offset) + 5 ) mod 6]) } - 7: { template( colors[(to_int(offset) + 6 ) mod 7]) } - ] - horizontal: [ - 1: { template( colors[0]) } - 2: { template( colors[0]) } - 3: { template( colors[(to_int(offset) + 0 ) mod 3]) } - 4: { linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 4] ), - image2: template( colors[(to_int(offset) + 1 ) mod 4] ), - x1: 0.4, y1: 0 - x2: 1.5, y2: 0 - )} - 5: { linear_blend( - image1: template( colors[(to_int(offset) + 0 ) mod 5] ), - image2: template( colors[(to_int(offset) + 1 ) mod 5] ), - x1: 0.08, y1: 0 - x2: 0.65, y2: 0 - )} - 6: { template( colors[(to_int(offset) + 5 ) mod 6] ) } #TODO - 7: { template( colors[(to_int(offset) + 6 ) mod 7] ) } #TODO - ] - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0, y1: -1 - x2: 0, y2: 1.5 - )} - 4: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 4] ), - image2: template( colors[(to_int(offset) + 3 ) mod 4] ), - x1: 0, y1: 0.5 - x2: 0, y2: 3 - )} - 5: { template( colors[(to_int(offset) + 3 ) mod 5]) } - 6: { template( colors[(to_int(offset) + 5 ) mod 6] ) } # Probably not right - 7: { template( colors[(to_int(offset) + 6 ) mod 7]) } - ] - 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[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0, y1: 0 - x2: 0, y2: 1 - )} - 4: { template( colors[(to_int(offset) + 2 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 2 ) mod 5]) } - 6: { template( colors[(to_int(offset) + 2 ) mod 6]) } - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_pt_hybrid - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0, y1: 0 - x2: 0, y2: 1 - )} - 4: { template( colors[(to_int(offset) + 2 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 3 ) mod 5]) } - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 6] ), - image2: template( colors[(to_int(offset) + 4 ) mod 6] ), - x1: 0, y1: 0 - x2: 0, y2: 0.25 - )} - 7: { template( colors[(to_int(offset) + 5 ) mod 7]) } - ] - 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[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0, y1: 0 - x2: 0, y2: 1 - )} - 4: { template( colors[(to_int(offset) + 2 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 2 ) mod 5]) } - 6: { template( colors[(to_int(offset) + 2 ) mod 6]) } - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_pt_hybrid - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 3] ), - image2: template( colors[(to_int(offset) + 2 ) mod 3] ), - x1: 0, y1: 0 - x2: 0, y2: 1 - )} - 4: { template( colors[(to_int(offset) + 2 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 3 ) mod 5]) } - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 6] ), - image2: template( colors[(to_int(offset) + 4 ) mod 6] ), - x1: 0, y1: 0 - x2: 0, y2: 0.25 - )} - 7: { template( colors[(to_int(offset) + 5 ) mod 7]) } - ] - overlay: overlay_hybrid -] - -leveler_pt_hybrid2 := [ - radial: [ - 0: { template( "c") } - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { template( colors[(to_int(offset) + 2 ) mod 3]) } - 4: { template( colors[(to_int(offset) + 2 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 2 ) mod 5]) } - 6: { template( colors[(to_int(offset) + 2 ) mod 6]) } - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_pt_hybrid - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { template( colors[(to_int(offset) + 2 ) mod 3]) } - 4: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 4] ), - image2: template( colors[(to_int(offset) + 3 ) mod 4] ), - x1: 0, y1: 0 - x2: 0, y2: 1 - )} - 5: { linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 5] ), - image2: template( colors[(to_int(offset) + 4 ) mod 5] ), - x1: 0, y1: 0 - x2: 0, y2: 0.75 - )} - 6: { template( colors[(to_int(offset) + 4 ) mod 6]) } - 7: { template( colors[(to_int(offset) + 5 ) mod 7]) } - ] - overlay: overlay_hybrid -] - -leveler_pt_hybrid3 := [ - radial: [ - 0: { template( "c") } - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { template( colors[(to_int(offset) + 2 ) mod 3]) } - 4: { template( colors[(to_int(offset) + 2 ) mod 4]) } - 5: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 5] ), - image2: template( colors[(to_int(offset) + 3 ) mod 5] ), - x1: 0, y1: 0 - x2: 0, y2: 1 - )} - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 6] ), - image2: template( colors[(to_int(offset) + 3 ) mod 6] ), - x1: 0, y1: 0 - x2: 0, y2: 1 - )} - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_pt_hybrid - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { template( colors[(to_int(offset) + 2 ) mod 3]) } - 4: { template( colors[(to_int(offset) + 3 ) mod 4]) } - 5: { linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 5] ), - image2: template( colors[(to_int(offset) + 4 ) mod 5] ), - x1: 0, y1: 0 - x2: 0, y2: 0.5 - )} - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 4 ) mod 6] ), - image2: template( colors[(to_int(offset) + 5 ) mod 6] ), - x1: 0, y1: 0 - x2: 0, y2: 0.5 - )} - 7: { template( colors[(to_int(offset) + 5 ) mod 7]) } - ] - 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[(to_int(offset) + 2 ) mod 3]) } - 4: { card_hybrid_2( colors: colors[(to_int(offset) + 0 ) mod 4] + - colors[(to_int(offset) + 3 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 3 ) mod 5]) } - 6: { card_hybrid_2( colors: colors[(to_int(offset) + 0 ) mod 6] + - colors[(to_int(offset) + 5 ) mod 6]) } - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_card_hybrid - vertical: [ - 0: { template( "c") } - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { template( colors[(to_int(offset) + 2 ) mod 3] ) } # TODO - 4: { template( colors[(to_int(offset) + 3 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 4 ) mod 5]) } - 6: { template( colors[(to_int(offset) + 5 ) mod 6]) } - 7: { template( colors[(to_int(offset) + 6 ) mod 7]) } - ] - 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: id_mask[32]), - dark: template( colors[1] ), - mask: id_mask[33] - )} - 4: {masked_blend( - light: masked_blend( - light: masked_blend( - light: template( colors[1] ), - dark: template( colors[0] ), - mask: id_mask[42] ), - dark: template( colors[2] ), - mask: id_mask[43] ), - dark: template( colors[3] ), - mask: id_mask[44] - )} - 5: {masked_blend( - light: masked_blend( - light: masked_blend( - light: masked_blend( - light: template( colors[0] ), - dark: template( colors[4] ), - mask: id_mask[52]), - dark: template( colors[1] ), - mask: id_mask[53]), - dark: template( colors[2] ), - mask: id_mask[54]), - dark: template( colors[3] ), - mask: id_mask[55] - )} - 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[(to_int(offset) + 1 ) mod 3]) } - 4: { linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 4] ), - image2: template( colors[(to_int(offset) + 2 ) mod 4] ), - x1: -0.3, y1: 0 - x2: 1.3, y2: 0 - )} - 5: {linear_blend( - image1: template( colors[(to_int(offset) + 1 ) mod 5] ) - x1: -0.55, y1: 0 - x2: 0.2, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 5] ), - image2: template( colors[(to_int(offset) + 3 ) mod 5] ), - x1: 0.8, y1: 0 - x2: 1.55, y2: 0 - ))} - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 6] ), - image2: template( colors[(to_int(offset) + 3 ) mod 6] ), - x1: 0.1, y1: 0 - x2: 0.9, y2: 0 - )} - 7: {linear_blend( - image1: template( colors[(to_int(offset) + 2 ) mod 7] ), - x1: -0.55, y1: 0 - x2: 0.2, y2: 0 - image2: linear_blend( - image1: template( colors[(to_int(offset) + 3 ) mod 7] ), - image2: template( colors[(to_int(offset) + 5 ) mod 7] ), - x1: 0.8, y1: 0 - x2: 1.55, y2: 0 - ))} -] - -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[(to_int(offset) + 2) mod 3]) } - 4: { linear_blend( - image1: template( colors[(to_int(offset) + 3) mod 4] ), - image2: template( colors[(to_int(offset) + 2) mod 4] ), - x1: -0.3, y1: 0 - x2: 1.3, y2: 0 - )} - 5: { template( colors[(to_int(offset) + 3) mod 5]) } - 6: { linear_blend( - image1: template( colors[(to_int(offset) + 4) mod 6] ), - image2: template( colors[(to_int(offset) + 3) mod 6] ), - x1: -0.3, y1: 0 - x2: 1.3, y2: 0 - )} - 7: { template( colors[(to_int(offset) + 4 ) mod 7]) } - ] - horizontal: horizontal_stamp_hybrid - vertical: [ - 1: { template( colors[0]) } - 2: { template( colors[1]) } - 3: { template( colors[(to_int(offset) + 2 ) mod 3]) } - 4: { template( colors[(to_int(offset) + 3 ) mod 4]) } - 5: { template( colors[(to_int(offset) + 4 ) mod 5]) } - 6: { template( colors[(to_int(offset) + 5 ) mod 6]) } - # 7: { template( colors[(to_int(offset) + 6 ) mod 7]) } - ] - 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: if card_is_wedge(input) then "(wbgur)" else "(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 and color_count > 1 and mask_hybrid_with_gold() 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 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 if color_count > 1 and mask_hybrid_with_gold() then - masked_blend( - mask: "hybrid_blend_{type}.png", - dark: land_template("m"), - light: base, - ) - else base -} - -######################################################################## -# Specific types -######################################################################## - -card_background := { color_background(type:"card", base_hybrid:card_hybrid) }@(offset:0 ) -card_ptbox := { color_background(type:"pt", base_hybrid:pt_hybrid) }@(offset:0 ) -flip_ptbox := { color_background(type:"pt", base_hybrid:flip_pt_hybrid) }@(offset:0 ) -flip_ptbox2 := { color_background(type:"pt2", base_hybrid:flip_pt_hybrid2) }@(offset:0 ) -leveler_ptbox := { color_background(type:"pt", base_hybrid:leveler_pt_hybrid) }@(offset:0 ) -leveler_ptbox2 := { color_background(type:"pt", base_hybrid:leveler_pt_hybrid2) }@(offset:0 ) -leveler_ptbox3 := { color_background(type:"pt", base_hybrid:leveler_pt_hybrid3) }@(offset:0 ) -card_textbox := { color_background(type:"textbox", base_hybrid:textbox_hybrid) }@(offset:0 ) -card_typeline := { color_background(type:"typeline", base_hybrid:typeline_hybrid) }@(offset:0 ) -card_identity := { color_background(type:"identity", base_hybrid:identity_hybrid) }@(offset:0 ) -card_identity_2 := { color_background(type:"identity2", base_hybrid:identity_hybrid) }@(offset:0 ) -card_stamp := { color_background(type:"stamp", base_hybrid:stamp_hybrid) }@(offset:0 ) -card_stamp2 := { color_background(type:"stamp2", base_hybrid:stamp_hybrid) }@(offset:0 ) - -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 := { - if face == false then face := card.card_color - wmc := watermark_colors(face:face) - c1 := "/magic-watermarks.mse-include/spotlight/" + wmc.0 + (if contains(face, match:"land") then "l") + "spotlight.png" - c2 := "/magic-watermarks.mse-include/spotlight/" + wmc.1 + (if contains(face, match:"land") then "l") + "spotlight.png" - if contains(input, match:".png,") then ( - array := split_text(input+",,", match:",") - input := array.0 - l := min(to_number(array.1),500) - h := min(to_number(array.2),500) - ) - if (h != 500 or l != 500) then ( - c1 := crop(c1, height:h, width:l, offset_x:0, offset_y:0) - c2 := crop(c2, height:h, width:l, offset_x:0, offset_y:0) - ) - set_alpha( - alpha: 0.75 - input: - linear_blend( - image1: - masked_blend( - light: input - dark: c1 - mask: input - ) - image2: - masked_blend( - light: input - dark: c2 - mask: input - ) - x1: 0.4, y1: 0 - x2: 0.6, y2: 0 - ) - ) -}@(h:500,l:500,face:false) \ No newline at end of file diff --git a/data/magic.mse-game/add_cards_scripts b/data/magic.mse-game/add_cards_scripts deleted file mode 100644 index 4ef298ee..00000000 --- a/data/magic.mse-game/add_cards_scripts +++ /dev/null @@ -1,90 +0,0 @@ - -add cards script: - name: &Basic Lands - description: Adds 5 basic lands to the set (Plains, Island, Swamp, Mountain, Forest) - script: - # TODO: - #show_yes_no_dialog("This set already contains basic lands, do you want to add more?") - [ new_card([name: "Plains", super_type: "Basic Land", sub_type: "Plains", rarity: "basic land", watermark: "mana symbol white"]) - , new_card([name: "Island", super_type: "Basic Land", sub_type: "Island", rarity: "basic land", watermark: "mana symbol blue"]) - , new_card([name: "Swamp", super_type: "Basic Land", sub_type: "Swamp", rarity: "basic land", watermark: "mana symbol black"]) - , new_card([name: "Mountain", super_type: "Basic Land", sub_type: "Mountain", rarity: "basic land", watermark: "mana symbol red"]) - , new_card([name: "Forest", super_type: "Basic Land", sub_type: "Forest", rarity: "basic land", watermark: "mana symbol green"]) - ] - -add cards script: - name: &Basic Snow-Covered Lands - description: Adds 5 basic snow-covered lands to the set (Plains, Island, Swamp, Mountain, Forest) - script: - # TODO: - #show_yes_no_dialog("This set already contains basic snow-covered lands, do you want to add more?") - [ new_card([name: "Snow-Covered Plains", super_type: "Basic Snow Land", sub_type: "Plains", rarity: "common", watermark: "mana symbol white"]) - , new_card([name: "Snow-Covered Island", super_type: "Basic Snow Land", sub_type: "Island", rarity: "common", watermark: "mana symbol blue"]) - , new_card([name: "Snow-Covered Swamp", super_type: "Basic Snow Land", sub_type: "Swamp", rarity: "common", watermark: "mana symbol black"]) - , new_card([name: "Snow-Covered Mountain", super_type: "Basic Snow Land", sub_type: "Mountain", rarity: "common", watermark: "mana symbol red"]) - , new_card([name: "Snow-Covered Forest", super_type: "Basic Snow Land", sub_type: "Forest", rarity: "common", watermark: "mana symbol green"]) - ] - -#add cards script: -# name: &Many Empty Cards -# script: -# # TODO: -# #count := show_number_dialog("How many cards should be added?") -# count := 1 -# for _ from 1 to count do [new_card()] - -add cards script: - name: &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: &Design Skeleton Full - description: Basic skeleton of 19C,11U,7R,2M/color, 1U,1R/color pair, 6C,15U,8R,5M/colorless. Type "skeleton_info()" in console tab/help - script: skeleton_script() -add cards script: - name: &Design Skeleton Commons - description: Basic skeleton of 19C/color. Type "skeleton_info()" into the console tab to change the numbers. - script: skeleton_runner(count:skeleton_commons) -add cards script: - name: &Design Skeleton Uncommons - description: Basic skeleton of 11U/color. Type "skeleton_info()" into the console tab to change the numbers. - script: skeleton_runner(count:skeleton_uncommons, prefix:"U", rarity:"uncommon") -add cards script: - name: &Design Skeleton Rares - description: Basic skeleton of 7R/color. Type "skeleton_info()" into the console tab to change the numbers. - script: skeleton_runner(count:skeleton_rares, prefix:"R", rarity:"rare") -add cards script: - name: &Design Skeleton Mythics - description: Basic skeleton of 2M/color. Type "skeleton_info()" into the console tab to change the numbers. - script: skeleton_runner(count:skeleton_mythics, prefix:"M", rarity:"mythic rare") -add cards script: - name: &Design Skeleton Gold Uncommons - description: Basic skeleton of 1U/color combination. Type "skeleton_info()" into the console tab to change the numbers. - script: skeleton_runner(count:skeleton_gold_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy) -add cards script: - name: &Design Skeleton Gold Rares - description: Basic skeleton of 1R/color combination. Type "skeleton_info()" into the console tab to change the numbers. - script: skeleton_runner(count:skeleton_gold_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy) diff --git a/data/magic.mse-game/auto_replace b/data/magic.mse-game/auto_replace deleted file mode 100644 index 59a1aba5..00000000 --- a/data/magic.mse-game/auto_replace +++ /dev/null @@ -1,1447 +0,0 @@ - -############################################################## Auto replace - -# Do we need categories? -#auto replace category: text box -#auto replace category: copyright -#auto replace category: everywhere -auto replace: - match: (C) - replace: © -auto replace: - match: AE - replace: Æ - whole word: false -auto replace: - match: TM - replace: ™ - whole word: false -auto replace: - match: -- - replace: — -auto replace: - # note the spaces - match: - - - replace: - — -# -#Utility replacements -auto replace: - match: LTB - replace: leaves the battlefield -auto replace: - match: EOT - replace: end of turn -auto replace: - match: UEOT - replace: until end of turn -auto replace: - match: ueot - replace: until end of turn -auto replace: - match: UEPT - replace: until end of turn -auto replace: - match: uept - replace: until end of turn -auto replace: - match: BYES - replace: At the beginning of your end step -auto replace: - match: BNES - replace: At the beginning of the next end step -auto replace: - match: AAA - replace: As an additional cost to cast -auto replace: - match: CMC - replace: mana value -auto replace: - match: cmc - replace: mana value -auto replace: - match: MV - replace: mana value -auto replace: - match: mv - replace: mana value -auto replace: - match: ETT - replace: End the turn. -auto replace: - match: @ - replace: LEGENDNAME> -auto replace: - match: ~ - replace: CARDNAME> -auto replace: - match: ' - replace: ’ -auto replace: - match: :: - replace: • -auto replace: - match: -> - replace: • -auto replace: - match: WETB - replace: When CARDNAME enters the battlefield -auto replace: - match: CEBT - replace: CARDNAME enters the battlefield tapped. -auto replace: - match: ETB - replace: enters the battlefield -auto replace: - match: etb - replace: enters the battlefield -auto replace: - match: battlefieldA - replace: enters the battlefield or attacks, -auto replace: - match: battlefieldT - replace: battlefield tapped -auto replace: - match: WTD - replace: When CARDNAME dies -auto replace: - match: WTA - replace: Whenever CARDNAME attacks, -auto replace: - match: WTB - replace: Whenever CARDNAME blocks, -auto replace: - match: SAC - replace: Sacrifice a creature: -auto replace: - match: SAX - replace: sacrifice a creature -auto replace: - match: P&T - replace: power and toughness -auto replace: - match: BPT - replace: base power and toughness -# -#Abilities -auto replace: - match: CBC - replace: CARDNAME can't be countered. -auto replace: - match: CBSA - replace: CARDNAME can't be countered by spells or abilities. -auto replace: - match: WTT - replace: Whenever CARDNAME becomes the target of a spell -auto replace: - match: ILL - replace: When CARDNAME becomes the target of a spell or ability, sacrifice it. -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. -auto replace: - match: BLAND - replace: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library. -auto replace: - match: FLICKER - replace: Exile target creature you control, then return that card to the battlefield under your control. -auto replace: - match: BOUNCE - replace: Return target creature to its owner's hand. -auto replace: - match: FIRE - replace: [R]: CARDNAME gets +1/+0 until end of turn. -auto replace: - match: SHADE - replace: [B]: CARDNAME gets +1/+1 until end of turn. -auto replace: - match: CTS - replace: Counter target spell. -auto replace: - match: CTA - replace: Counter target ability. -auto replace: - match: CT.SA - replace: Counter target spell or ability. -auto replace: - match: CBB - replace: CARDNAME can't be blocked. -auto replace: - match: CCB - replace: CARDNAME can't block. -auto replace: - match: ATE - replace: CARDNAME attacks each turn if able. -auto replace: - match: ACE - replace: CARDNAME attacks each combat if able. -auto replace: - match: CBTT - replace: Target creature can't block this turn. -auto replace: - match: SAB - replace: Whenever CARDNAME deals combat damage to a player, -auto replace: - match: TUCK - replace: Put target creature on the bottom of its owner's library. -auto replace: - match: TOP - replace: Put target creature on top of its owner's library. -auto replace: - match: WARP - replace: The owner of target creature shuffles it into their library. -auto replace: - match: EXTRA - replace: Take an extra turn after this one. -auto replace: - match: DEA - replace: Destroy target artifact or enchantment. -auto replace: - match: DTA - replace: Destroy target artifact. -auto replace: - match: DTE - replace: Destroy target enchantment. -auto replace: - match: DAL - replace: Destroy target artifact or land. -auto replace: - match: DTF - replace: Destroy target creature with flying. -auto replace: - match: DTL - replace: Destroy target land. -auto replace: - match: CLONE - replace: You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield. -auto replace: - match: MUR - replace: Destroy target creature. -auto replace: - match: DTAC - replace: Destroy target attacking creature. -auto replace: - match: DTBC - replace: Destroy target blocking creature. -auto replace: - match: DTABC - replace: Destroy target attacking or blocking creature. -auto replace: - match: ORING - replace: When CARDNAME enters the battlefield, exile target creature an opponent controls until CARDNAME leaves the battlefield. (That creature returns under its owner's control.) -auto replace: - match: WIDE - replace: CARDNAME can block any number of creatures. -auto replace: - match: PLATINUM - replace: You can't lose the game and your opponents can't win the game. -auto replace: - match: ABYSSAL - replace: You can't win the game and your opponents can't lose the game. -auto replace: - match: ABOC - replace: at the beginning of combat -auto replace: - match: ABOY - replace: at the beginning of combat on your turn -auto replace: - match: SMITE - replace: Destroy target creature with power 4 or greater. -auto replace: - match: PAC - replace: Enchanted creature can’t attack or block. -auto replace: - match: ARR - replace: Enchanted creature can’t attack or block, and its activated abilities can’t be activated. -auto replace: - match: PTEC - replace: CARDNAME's power and toughness are equal to the number of creatures you control. -auto replace: - match: REA - replace: Put target creature card from a graveyard onto the battlefield under your control. -auto replace: - match: UNT - replace: Whenever another creature enters the battlefield, untap CARDNAME. -auto replace: - match: XATK - replace: Untap all creatures that attacked this turn. After this main phase, there is an additional combat phase followed by an additional main phase. -auto replace: - match: LTC - replace: Target land becomes the basic land type of your choice. -auto replace: - match: CUR - replace: Whenever this creature deals combat damage to an opponent, draw a card. -auto replace: - match: FREEZE - replace: Tap target creature. That creature doesn't untap during its controller's next untap step. -auto replace: - match: LOCK - replace: Enchanted creature doesn't untap. -auto replace: - match: LOOT - replace: Draw a card, then discard a card. -auto replace: - match: RUMMAGE - replace: Discard a card, then draw a card. -auto replace: - match: WIS - replace: This creature's power and toughness are equal to the number of cards in our hand. -auto replace: - match: COPYS - replace: Copy target instant or sorcery spell. You may choose new targets for the copy. -auto replace: - match: REDIRECT - replace: Change the target of target spell with a single target. -auto replace: - match: CONTROL - replace: Gain control of target creature. -auto replace: - match: STEAL - replace: Gain control of target creature until end of turn. -auto replace: - match: TOUT - replace: Tap or untap target -auto replace: - match: WINDFALL - replace: Each player discards their hand, then draws cards equal to the greatest number of cards a player discarded this way. -auto replace: - match: WHEEL - replace: Each player discards their hand, then draws seven cards. -auto replace: - match: POLYMORPH - replace: Exile target creature. Its controller reveals cards from the top of their library until they reveals a creature card. That player puts that card onto the battlefield. -auto replace: - match: CANE - replace: Shuffle your graveyard into your library. -auto replace: - match: KHABAL - replace: Whenever another creature dies, put a +1/+1 counter on this creature. -auto replace: - match: FUNERAL - replace: Whenever another creature you control dies, -auto replace: - match: LOMBOTOMY - replace: Choose a nonland card name. Search target player's graveyard hand and library for all cards with that name and exile them. -auto replace: - match: SENGIR - replace: When a creature damaged by this creature dies, put a +1/+1 counter on this creature. -auto replace: - match: SPECTER - replace: When this creature deals combat damage to an opponent, that player discards a card. -auto replace: - match: OSF - replace: Target creature you control deals damage to equal to its power to another target creature. -auto replace: - match: LURE - replace: CARDNAME must be blocked this turn if able. -auto replace: - match: WIDELURE - replace: All creatures able to block CARDNAME do so. -auto replace: - match: DAUNT - replace: CARDNAME can't be blocked by creatures with power 2 or less. -auto replace: - match: HYDRA - replace: CARDNAME enters the battlefield with X +1/+1 counters on it. -auto replace: - match: FOG - replace: Prevent all combat damage that would be dealt this turn. -auto replace: - match: STALK - replace: CARDNAME can't be blocked by more than one creature. -auto replace: - match: STRAMPLE - replace: You may have CARDNAME assign its combat damage as though it weren't blocked. -auto replace: - match: AOT - replace: Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. -auto replace: - match: FLOWSTONE - replace: Target creature gets +1/-1 until end of turn. -auto replace: - match: BOOST - replace: Put a +1/+1 counter on target creature. -auto replace: - match: WITHER - replace: Put a -1/-1 counter on target creature. -auto replace: - match: DEFLECT - replace: The next time a source of your choice would deal damage to you this turn, prevent that damage. If damage is prevented this way, CARDNAME deals that much damage to that source's controller. -auto replace: - match: TCOP - replace: target creature or player -auto replace: - match: FORATK - replace: Target creature attacks this turn if able. -auto replace: - match: MEDDLING - replace: As CARDNAME enters the battlefield, choose a nonland card name. Spells with the chosen name can't be cast. -auto replace: - match: SILENCE - replace: Your opponents can't cast spells this turn. (Spells cast before this resolves are unaffected.) -auto replace: - match: TWIST - replace: Switch target creature's power and toughness until end of turn. -auto replace: - match: PUNCH - replace: Target creature you control deals damage equal to its power to target creature you don't control. -auto replace: - match: FURNACE - replace: If a source would deal damage to a permanent or player, it deals double that damage to that permanent or player instead. -auto replace: - match: MANAFLARE - replace: Whenever a player taps a land for mana, that player adds one mana of any type that land produced. -auto replace: - match: HOWLING - replace: At the beginning of each player's draw step, that player draws an additional card. -auto replace: - match: DEATHSAC - replace: Whenever a creature you control dies, each opponent sacrifices a creature. -auto replace: - match: SHROUD - replace: can't be the target of spells or abilities. -auto replace: - match: PROWESS - replace: Whenever you cast a noncreature spell, -auto replace: - match: CCMC - replace: Counter target spell with mana value X. -auto replace: - match: UNMORPH - replace: When CARDNAME is turned face up, -auto replace: - match: SPECTER - replace: When this creature deals combat damage to an opponent, that player discards a card. -auto replace: - match: GY - replace: graveyard -auto replace: - match: RELENTLESS - replace: A deck can have any number of cards named CARDNAME. -auto replace: - match: HIFLY - replace: CARDNAME can block only creatures with flying. -# -#Ability word replacements -auto replace: - match: THRESHOLDP - replace: Threshold — {Effect} as long as seven or more cards are in your graveyard. -auto replace: - match: THRESHOLDS - replace: Threshold — If seven or more cards are in your graveyard, {Effect} -auto replace: - match: IMPRINT - replace: Imprint — When CARDNAME enters the battlefield, you may exile a {something} from {somewhere}. -auto replace: - match: CHANNEL - replace: Channel — {Cost}, discard CARDNAME: {Effect} -auto replace: - match: SWEEP - replace: Sweep — Return any number of {Basic Land Type} you control to their owner's hand. {Effect based on number returned.} -auto replace: - match: RADIANCE - replace: Radiance — Target creature and each other creature that shares a color with it -auto replace: - match: HELLBENTS - replace: Hellbent — If you have no cards in hand, {Effect} -auto replace: - match: HELLBENTP - replace: Hellbent — {Effect}, as long as you have no cards in hand. -auto replace: - match: GRANDEUR - replace: Grandeur — Discard another card named CARDNAME: {Effect} -auto replace: - match: KINSHIP - replace: Kinship — At the beginning of your upkeep, you may look at the top card of your library. If that card shares a creature type with CARDNAME, you may reveal it. If you do, {Effect}. -auto replace: - match: CHROMA - replace: Chroma — {Effect} based on the number of {Color} mana symbols {Somewhere} -auto replace: - match: DOMAIN - replace: Domain — {Effect} for each basic land type among lands you control. -auto replace: - match: LANDFALLP - replace: Landfall — Whenever a land enters the battlefield under your control, -auto replace: - match: LANDFALLS - replace: Landfall — If you had a land enter the battlefield under your control this turn, {Effect}. -auto replace: - match: METALCRAFTP - replace: Metalcraft — {Effect} as long as you control three or more artifacts. -auto replace: - match: METALCRAFTS - replace: Metalcraft — If you control three or more artifacts, {Effect}. -auto replace: - match: JOINFORCES - replace: Join Forces — Starting with you, {Effect}. -auto replace: - match: MORBID - replace: Morbid — {Effect} if a creature died this turn. -auto replace: - match: FATEFULHOURS - replace: Fateful hour — If you have 5 or less life, {Effect}. -auto replace: - match: FATEFULHOURP - replace: Fateful hour — As long as you have 5 or less life, -auto replace: - match: BLOODRUSH - replace: Bloodrush — {COST}, Discard CARDNAME: Target attacking creature gets -auto replace: - match: BATTALION - replace: Battalion — Whenever CARDNAME and at least two other creatures attack, -auto replace: - match: HEROIC - replace: Heroic — Whenever you cast a spell that targets CARDNAME, {Effect}. -auto replace: - match: TEMPTINGOFFER - replace: Tempting offer — {Do Something}. Each opponent may {Do that thing}. For each opponent who does, {Do that thing again}. -auto replace: - match: INSPIRED - replace: Inspired — Whenever CARDNAME becomes untapped, -auto replace: - match: CONSTELLATION - replace: Constellation — Whenever CARDNAME or another enchantment enters the battlefield under your control, -auto replace: - match: STRIVE - replace: Strive — CARDNAME costs {COST} more to cast for each target beyond the first. -auto replace: - match: WILLOFTHECOUNCIL - replace: Will of the Council — Starting with you, each player votes for {Blank 1} or {Blank 2}. If {Blank 1} gets more votes, {Effect 1}. If {Blank 2} gets more votes or the vote is tied, {Effect 2}. -auto replace: - match: PARLEY - replace: Parley — Each player reveals the top card of their library. For each nonland card revealed this way, {Effect}. -auto replace: - match: RAID - replace: Raid — If you attacked with a creature this turn, {Effect}. -auto replace: - match: FEROCIOUSS - replace: Ferocious — If you control a creature with power 4 or greater, {Effect}. -auto replace: - match: LIEUTENANT - replace: Lieutenant — As long as you control your commander, CARDNAME gets {Effect} and creatures you control have {Effect}. -auto replace: - match: FORMIDABLES - replace: Formidable — If creatures you control have total power 8 or greater, {Effect}. -auto replace: - match: FORMIDABLEP - replace: Formidable — As long as creatures you control have total power 8 or greater, {Effect}. -auto replace: - match: SPELLMASTERYS - replace: Spell Mastery — If there are two or more instant and/or sorcery cards in your graveyard, {Effect}. -auto replace: - match: SPELLMASTERYP - replace: Spell Mastery — As long as there are two or more instant and/or sorcery cards in your graveyard, {Effect}. -auto replace: - match: RALLY - replace: Rally — Whenever CARDNAME or another Ally enters the battlefield under your control, {Effect}. -auto replace: - match: COHORT - replace: Cohort — [T], Tap an untapped Ally you control: {Effect}. -auto replace: - match: CONVERGE - replace: Converge — {Effect} for each color of mana spent to cast CARDNAME. -auto replace: - match: DELIRIUMS - replace: Delirium — If there are four or more card types among cards in your graveyard, {Effect}. -auto replace: - match: DELIRIUMP - replace: Delirium — {Effect} as long as there are four or more card types among cards in your graveyard. -auto replace: - match: COUNCILSDILEMMA - replace: Council's dilemma — Starting with you, each player votes for {Blank 1} or {Blank 2}. For each {Blank 1} vote, {Effect 1}. For each {Blank 2} vote, {Effect 2}. -auto replace: - match: REVOLT - replace: Revolt — If a permanent you controlled left the battlefield this turn, {Effect}. -auto replace: - match: ENRAGE - replace: Enrage — Whenever CARDNAME is dealt damage, {Effect}. -auto replace: - match: ADDENDUM - replace: Addendum — If you cast this spell during your main phase, -# -#X replacements -auto replace: - match: GRIND1 - replace: Target player reveals cards from the top of their library until they reveal a land card, then puts those cards into their graveyard. -auto replace: - match: GRIND2 - replace: Target player reveals cards from the top of their library until they reveal two land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND3 - replace: Target player reveals cards from the top of their library until they reveal three land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND4 - replace: Target player reveals cards from the top of their library until they reveal four land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND5 - replace: Target player reveals cards from the top of their library until they reveal five land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND6 - replace: Target player reveals cards from the top of their library until they reveal six land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND7 - replace: Target player reveals cards from the top of their library until they reveal seven land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND8 - replace: Target player reveals cards from the top of their library until they reveal eight land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND9 - replace: Target player reveals cards from the top of their library until they reveal nine land cards, then puts those cards into their graveyard. -auto replace: - match: GRIND.10 - replace: Target player reveals cards from the top of their library until they reveal ten land cards, then puts those cards into their graveyard. -auto replace: - match: GRINDX - replace: Target player reveals cards from the top of their library until they reveal X land cards, then puts those cards into their graveyard. -auto replace: - match: SDT2 - replace: Look at the top two cards of your library, then put them back in any order. -auto replace: - match: SDT3 - replace: Look at the top three cards of your library, then put them back in any order. -auto replace: - match: SDT4 - replace: Look at the top four cards of your library, then put them back in any order. -auto replace: - match: SDT5 - replace: Look at the top five cards of your library, then put them back in any order. -auto replace: - match: DRAIN1 - replace: Each opponent loses 1 life. You gain life equal to the life lost this way. -auto replace: - match: DRAIN2 - replace: Each opponent loses 2 life. You gain life equal to the life lost this way. -auto replace: - match: DRAIN3 - replace: Each opponent loses 3 life. You gain life equal to the life lost this way. -auto replace: - match: DRAIN4 - replace: Each opponent loses 4 life. You gain life equal to the life lost this way. -auto replace: - match: DRAIN5 - replace: Each opponent loses 5 life. You gain life equal to the life lost this way. -auto replace: - match: DRAINX - replace: Each opponent loses X life. You gain life equal to the life lost this way. -auto replace: - match: PING1 - replace: [T]: CARDNAME deals 1 damage to target creature, player, or planeswalker. -auto replace: - match: PING2 - replace: [T]: CARDNAME deals 2 damage to target creature, player, or planeswalker. -auto replace: - match: PING3 - replace: [T]: CARDNAME deals 3 damage to target creature, player, or planeswalker. -auto replace: - match: FATESEAL1 - replace: Look at the top card of target opponent's library. You may put that card on the bottom of that player's library. -auto replace: - match: FATESEAL2 - replace: Look at the top two cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEAL3 - replace: Look at the top three cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEAL4 - replace: Look at the top four cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEAL5 - replace: Look at the top five cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEAL6 - replace: Look at the top six cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEAL7 - replace: Look at the top seven cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEAL8 - replace: Look at the top eight cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEAL9 - replace: Look at the top nine cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: FATESEALX - replace: Look at the top X cards of an target opponent's library, then put any number of them on the bottom of that player's library and the rest on top in any order. -auto replace: - match: ANTHEM1 - replace: Creatures you control get +1/+1. -auto replace: - match: ANTHEM2 - replace: Creatures you control get +2/+2. -auto replace: - match: ANTHEM3 - replace: Creatures you control get +3/+3. -auto replace: - match: ANTHEM4 - replace: Creatures you control get +4/+4. -auto replace: - match: ANTHEM5 - replace: Creatures you control get +5/+5. -auto replace: - match: ANTHEM6 - replace: Creatures you control get +6/+6. -auto replace: - match: ANTHEM7 - replace: Creatures you control get +7/+7. -auto replace: - match: ANTHEM8 - replace: Creatures you control get +8/+8. -auto replace: - match: ANTHEM9 - replace: Creatures you control get +9/+9. -auto replace: - match: ANTHEMX - replace: Creatures you control get +X/+X. -auto replace: - match: ANTIHEM1 - replace: Creatures your opponents control get -1/-1. -auto replace: - match: ANTIHEM2 - replace: Creatures your opponents control get -2/-2. -auto replace: - match: ANTIHEM3 - replace: Creatures your opponents control get -3/-3. -auto replace: - match: ANTIHEM4 - replace: Creatures your opponents control get -4/-4. -auto replace: - match: ANTIHEM5 - replace: Creatures your opponents control get -5/-5. -auto replace: - match: ANTIHEMX - replace: Creatures your opponents control get -X/-X. -auto replace: - match: CTX - replace: Counter target spell unless its controller pays [X]. -auto replace: - match: CT1 - replace: Counter target spell unless its controller pays [1]. -auto replace: - match: CT2 - replace: Counter target spell unless its controller pays [2]. -auto replace: - match: CT3 - replace: Counter target spell unless its controller pays [3]. -auto replace: - match: CT4 - replace: Counter target spell unless its controller pays [4]. -auto replace: - match: CT5 - replace: Counter target spell unless its controller pays [5]. -auto replace: - match: GROW1 - replace: Target creature gets +1/+1 until end of turn. -auto replace: - match: GROW2 - replace: Target creature gets +2/+2 until end of turn. -auto replace: - match: GROW3 - replace: Target creature gets +3/+3 until end of turn. -auto replace: - match: GROW4 - replace: Target creature gets +4/+4 until end of turn. -auto replace: - match: GROW5 - replace: Target creature gets +5/+5 until end of turn. -auto replace: - match: GROW6 - replace: Target creature gets +6/+6 until end of turn. -auto replace: - match: GROW7 - replace: Target creature gets +7/+7 until end of turn. -auto replace: - match: GROW8 - replace: Target creature gets +8/+8 until end of turn. -auto replace: - match: GROW9 - replace: Target creature gets +9/+9 until end of turn. -auto replace: - match: GROWX - replace: Target creature gets +X/+X until end of turn. -auto replace: - match: PUMP1 - replace: Target creature gets +1/+0 until end of turn. -auto replace: - match: PUMP2 - replace: Target creature gets +2/+0 until end of turn. -auto replace: - match: PUMP3 - replace: Target creature gets +3/+0 until end of turn. -auto replace: - match: PUMP4 - replace: Target creature gets +4/+0 until end of turn. -auto replace: - match: PUMP5 - replace: Target creature gets +5/+0 until end of turn. -auto replace: - match: PUMP6 - replace: Target creature gets +6/+0 until end of turn. -auto replace: - match: PUMP7 - replace: Target creature gets +7/+0 until end of turn. -auto replace: - match: PUMP8 - replace: Target creature gets +8/+0 until end of turn. -auto replace: - match: PUMP9 - replace: Target creature gets +9/+0 until end of turn. -auto replace: - match: PUMPX - replace: Target creature gets +X/+0 until end of turn. -auto replace: - match: IMPULSE1 - replace: Exile the top card of your library. Until end of turn, you may play that card. -auto replace: - match: IMPULSE2 - replace: Exile the top two cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE3 - replace: Exile the top three cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE4 - replace: Exile the top four cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE5 - replace: Exile the top five cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE6 - replace: Exile the top six cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE7 - replace: Exile the top seven cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE8 - replace: Exile the top eight cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE9 - replace: Exile the top nine cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSE.10 - replace: Exile the top ten cards of your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: IMPULSEALL - replace: Exile your library. Until end of turn, you may play cards exiled this way. -auto replace: - match: WEAK1 - replace: Target creature gets -1/-0 until end of turn. -auto replace: - match: WEAK2 - replace: Target creature gets -2/-0 until end of turn. -auto replace: - match: WEAK3 - replace: Target creature gets -3/-0 until end of turn. -auto replace: - match: WEAK4 - replace: Target creature gets -4/-0 until end of turn. -auto replace: - match: WEAK5 - replace: Target creature gets -5/-0 until end of turn. -auto replace: - match: WEAK6 - replace: Target creature gets -6/-0 until end of turn. -auto replace: - match: WEAK7 - replace: Target creature gets -7/-0 until end of turn. -auto replace: - match: WEAK8 - replace: Target creature gets -8/-0 until end of turn. -auto replace: - match: WEAK9 - replace: Target creature gets -9/-0 until end of turn. -auto replace: - match: WEAKX - replace: Target creature gets -X/-0 until end of turn. -auto replace: - match: SHRINK1 - replace: Target creature gets -1/-1 until end of turn. -auto replace: - match: SHRINK2 - replace: Target creature gets -2/-2 until end of turn. -auto replace: - match: SHRINK3 - replace: Target creature gets -3/-3 until end of turn. -auto replace: - match: SHRINK4 - replace: Target creature gets -4/-4 until end of turn. -auto replace: - match: SHRINK5 - replace: Target creature gets -5/-5 until end of turn. -auto replace: - match: SHRINK6 - replace: Target creature gets -6/-6 until end of turn. -auto replace: - match: SHRINK7 - replace: Target creature gets -7/-7 until end of turn. -auto replace: - match: SHRINK8 - replace: Target creature gets -8/-8 until end of turn. -auto replace: - match: SHRINK9 - replace: Target creature gets -9/-9 until end of turn. -auto replace: - match: SHRINKX - replace: Target creature gets -X/-X until end of turn. -auto replace: - match: PREVENT1 - replace: Prevent the next 1 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT2 - replace: Prevent the next 2 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT3 - replace: Prevent the next 3 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT4 - replace: Prevent the next 4 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT5 - replace: Prevent the next 5 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT6 - replace: Prevent the next 6 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT7 - replace: Prevent the next 7 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT8 - replace: Prevent the next 8 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENT9 - replace: Prevent the next 9 damage that would be dealt to target creature or player this turn. -auto replace: - match: PREVENTX - replace: Prevent the next X damage that would be dealt to target creature or player this turn. -auto replace: - match: +1C1 - replace: Put a +1/+1 counter on -auto replace: - match: +1C2 - replace: Put two +1/+1 counters on -auto replace: - match: +1C3 - replace: Put three +1/+1 counters on -auto replace: - match: +1C4 - replace: Put four +1/+1 counters on -auto replace: - match: +1C5 - replace: Put five +1/+1 counters on -auto replace: - match: +1C6 - replace: Put six +1/+1 counters on -auto replace: - match: +1C7 - replace: Put seven +1/+1 counters on -auto replace: - match: +1C8 - replace: Put eight +1/+1 counters on -auto replace: - match: +1C9 - replace: Put nine +1/+1 counters on -auto replace: - match: +1CX - replace: Put X +1/+1 counters on -auto replace: - match: -1C1 - replace: Put a -1/-1 counter on -auto replace: - match: -1C2 - replace: Put two -1/-1 counters on -auto replace: - match: -1C3 - replace: Put three -1/-1 counters on -auto replace: - match: -1C4 - replace: Put four -1/-1 counters on -auto replace: - match: -1C5 - replace: Put five -1/-1 counters on -auto replace: - match: -1C6 - replace: Put six -1/-1 counters on -auto replace: - match: -1C7 - replace: Put seven -1/-1 counters on -auto replace: - match: -1C8 - replace: Put eight -1/-1 counters on -auto replace: - match: -1C9 - replace: Put nine -1/-1 counters on -auto replace: - match: -1CX - replace: Put X -1/-1 counters on -auto replace: - match: PW+1 - replace: [+1 loyalty] -auto replace: - match: PW+2 - replace: [+2 loyalty] -auto replace: - match: PW+3 - replace: [+3 loyalty] -auto replace: - match: PW+4 - replace: [+4 loyalty] -auto replace: - match: PW+5 - replace: [+5 loyalty] -auto replace: - match: PW+6 - replace: [+6 loyalty] -auto replace: - match: PW+7 - replace: [+7 loyalty] -auto replace: - match: PW+8 - replace: [+8 loyalty] -auto replace: - match: PW+9 - replace: [+9 loyalty] -auto replace: - match: PW+0 - replace: [+1 loyalty] -auto replace: - match: PW+X - replace: [+X loyalty] -auto replace: - match: PW-1 - replace: [-1 loyalty] -auto replace: - match: PW-2 - replace: [-2 loyalty] -auto replace: - match: PW-3 - replace: [-3 loyalty] -auto replace: - match: PW-4 - replace: [-4 loyalty] -auto replace: - match: PW-5 - replace: [-5 loyalty] -auto replace: - match: PW-6 - replace: [-6 loyalty] -auto replace: - match: PW-7 - replace: [-7 loyalty] -auto replace: - match: PW-8 - replace: [-8 loyalty] -auto replace: - match: PW-9 - replace: [-9 loyalty] -auto replace: - match: PW-0 - replace: [-0 loyalty] -auto replace: - match: PW-X - replace: [-X loyalty] -auto replace: - match: PW1 - replace: [1 loyalty] -auto replace: - match: PW2 - replace: [2 loyalty] -auto replace: - match: PW3 - replace: [3 loyalty] -auto replace: - match: PW4 - replace: [4 loyalty] -auto replace: - match: PW5 - replace: [5 loyalty] -auto replace: - match: PW6 - replace: [6 loyalty] -auto replace: - match: PW7 - replace: [7 loyalty] -auto replace: - match: PW8 - replace: [8 loyalty] -auto replace: - match: PW9 - replace: [9 loyalty] -auto replace: - match: PW0 - replace: [0 loyalty] -auto replace: - match: PWx - replace: [X loyalty] -# -#Phyrexian and 2brid Mana Replacements -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]. This card's mana value is ) -auto replace: - match: twoU - replace: ([2/U] can be paid with any two mana or with [U]. This card's mana value is ) -auto replace: - match: twoB - replace: ([2/B] can be paid with any two mana or with [B]. This card's mana value is ) -auto replace: - match: twoR - replace: ([2/R] can be paid with any two mana or with [R]. This card's mana value is ) -auto replace: - match: twoG - replace: ([2/G] can be paid with any two mana or with [G]. This card's mana value is ) -auto replace: - match: twoC - replace: ([2/C] can be paid with any two mana or with [C]. This card's mana value is ) -auto replace: - match: HWU - replace: ([W/U] can be paid with either [W] or [U].) -auto replace: - match: HUB - replace: ([U/B] can be paid with either [U] or [B].) -auto replace: - match: HBR - replace: ([B/R] can be paid with either [B] or [R].) -auto replace: - match: HRG - replace: ([R/G] can be paid with either [R] or [G].) -auto replace: - match: HGW - replace: ([G/W] can be paid with either [G] or [W].) -auto replace: - match: HWB - replace: ([W/B] can be paid with either [W] or [B].) -auto replace: - match: HUR - replace: ([U/R] can be paid with either [U] or [R].) -auto replace: - match: HBG - replace: ([B/G] can be paid with either [B] or [G].) -auto replace: - match: HRW - replace: ([R/W] can be paid with either [R] or [W].) -auto replace: - match: HGU - replace: ([G/U] can be paid with either [G] or [U].) -auto replace: - match: HCW - replace: ([C/W] can be paid with either [C] or [W].) -auto replace: - match: HCU - replace: ([C/U] can be paid with either [C] or [U].) -auto replace: - match: HCB - replace: ([C/B] can be paid with either [C] or [B].) -auto replace: - match: HCR - replace: ([C/R] can be paid with either [C] or [R].) -auto replace: - match: HCG - replace: ([C/G] can be paid with either [C] or [G].) -# -#Tap to add Mana Replacements -auto replace: - match: TAM - replace: [T]: Add one mana of any color. -auto replace: - match: TAT - replace: [T]: Add one mana of any type. -auto replace: - match: TAW - replace: [T]: Add [W]. -auto replace: - match: TAU - replace: [T]: Add [U]. -auto replace: - match: TAB - replace: [T]: Add [B]. -auto replace: - match: TAR - replace: [T]: Add [R]. -auto replace: - match: TAG - replace: [T]: Add [G]. -auto replace: - match: TAC - replace: [T]: Add [C]. -auto replace: - match: TAS - replace: [T]: Add [S]. -auto replace: - match: TAD - replace: [T]: Add [C][C]. -auto replace: - match: TWU - replace: [T]: Add [W] or [U]. -auto replace: - match: TUB - replace: [T]: Add [U] or [B]. -auto replace: - match: TBR - replace: [T]: Add [B] or [R]. -auto replace: - match: TRG - replace: [T]: Add [R] or [G]. -auto replace: - match: TGW - replace: [T]: Add [G] or [W]. -auto replace: - match: TWB - replace: [T]: Add [W] or [B]. -auto replace: - match: TUR - replace: [T]: Add [U] or [R]. -auto replace: - match: TBG - replace: [T]: Add [B] or [G]. -auto replace: - match: TRW - replace: [T]: Add [R] or [W]. -auto replace: - match: TGU - replace: [T]: Add [G] or [U]. -auto replace: - match: TCW - replace: [T]: Add [C] or [W]. -auto replace: - match: TCU - replace: [T]: Add [C] or [U]. -auto replace: - match: TCB - replace: [T]: Add [C] or [B]. -auto replace: - match: TCR - replace: [T]: Add [C] or [R]. -auto replace: - match: TCG - replace: [T]: Add [C] or [G]. -auto replace: - match: twub - replace: [T]: Add [W], [U], or [B]. -auto replace: - match: tubr - replace: [T]: Add [U], [B], or [R]. -auto replace: - match: tbrg - replace: [T]: Add [B], [R], or [G]. -auto replace: - match: trgw - replace: [T]: Add [R], [G], or [W]. -auto replace: - match: tgwu - replace: [T]: Add [G], [W] or [U]. -auto replace: - match: twbg - replace: [T]: Add [W], [B], or [G]. -auto replace: - match: turw - replace: [T]: Add [U], [R], or [W]. -auto replace: - match: tbgu - replace: [T]: Add [B], [G], or [U]. -auto replace: - match: trwb - replace: [T]: Add [R], [W], or [B]. -auto replace: - match: tgur - replace: [T]: Add [G], [U], or [R]. -auto replace: - match: twbr - replace: [T]: Add [W], [B], or [R]. -auto replace: - match: turg - replace: [T]: Add [U], [R], or [G]. -auto replace: - match: tbgw - replace: [T]: Add [B], [G], or [W]. -auto replace: - match: trwu - replace: [T]: Add [R], [W], or [U]. -auto replace: - match: tgub - replace: [T]: Add [G], [U], or [B]. -# -#Token creation -auto replace: - match: TREASURE1 - replace: Create a Treasure token. (It’s an artifact with “[T], Sacrifice this artifact: Add one mana of any color.”) -auto replace: - match: TREASURE2 - replace: Create two Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) -auto replace: - match: TREASURE3 - replace: Create three Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) -auto replace: - match: TREASURE4 - replace: Create four Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) -auto replace: - match: TREASURE5 - replace: Create five Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) -auto replace: - match: TREASUREX - replace: Create X Treasure tokens. (They’re artifacts with “[T], Sacrifice this artifact: Add one mana of any color.”) -auto replace: - match: FOOD1 - replace: Create a Food token. (It’s an artifact with “[2], [T], Sacrifice this artifact: You gain 3 life.”) -auto replace: - match: FOOD2 - replace: Create two Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) -auto replace: - match: FOOD3 - replace: Create three Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) -auto replace: - match: FOOD4 - replace: Create four Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) -auto replace: - match: FOOD5 - replace: Create five Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) -auto replace: - match: FOODX - replace: Create X Food tokens. (They’re artifacts with “[2], [T], Sacrifice this artifact: You gain 3 life.”) -auto replace: - match: CLUE1 - replace: Create a Clue token. (It's an artifact with "[2], Sacrifice this artifact: Draw a card.") -auto replace: - match: CLUE2 - replace: Create two Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") -auto replace: - match: CLUE3 - replace: Create three Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") -auto replace: - match: CLUE4 - replace: Create four Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") -auto replace: - match: CLUE5 - replace: Create five Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") -auto replace: - match: CLUEX - replace: Create X Clue tokens. (They're artifacts with "[2], Sacrifice this artifact: Draw a card.") -auto replace: - match: GOBLIN - replace: create a 1/1 red Goblin creature token. -auto replace: - match: SOLDIER - replace: create a 1/1 white Soldier creature token. -auto replace: - match: WARRIOR - replace: create a 1/1 white Warrior creature token. -auto replace: - match: 11ELEMENTAL - replace: create a 1/1 red Elemental creature token. -auto replace: - match: 31ELEMENTAL - replace: create a 3/1 red Elemental creature token. -auto replace: - match: SCION - replace: create a 1/1 colorless Eldrazi Scion creature token with "Sacrifice this creature: Add [C]." -auto replace: - match: SPAWN - replace: create a 0/1 colorless Eldrazi Spawn creature token with "Sacrifice this creature: Add [C]." -auto replace: - match: BEAST - replace: create a 3/3 green Beast creature token. -auto replace: - match: WOLF - replace: create a 2/2 green Wolf creature token. -auto replace: - match: ZOMBIE - replace: create a 2/2 black Zombie creature token. -auto replace: - match: WVAMPIRE - replace: create a 1/1 white Vampire creature token. -auto replace: - match: DINOSAUR - replace: create a 3/3 green Dinosaur creature token with trample. -auto replace: - match: THOPTER - replace: create a 1/1 colorless Thopter artifact creature token with flying. -auto replace: - match: SERVO - replace: create a 1/1 colorless Servo artifact creature token. -auto replace: - match: ANGEL - replace: create a 4/4 white Angel creature token with flying. -auto replace: - match: 44DRAGON - replace: create a 4/4 red Dragon creature token with flying. -auto replace: - match: 55DRAGON - replace: create a 5/5 red Dragon creature token with flying. -auto replace: - match: WSPIRIT - replace: create a 1/1 white Spirit creature token with flying. -auto replace: - match: CSPIRIT - replace: create a 1/1 colorless Spirit creature token. -auto replace: - match: PLANT - replace: create a 0/1 green Plant creature token. -auto replace: - match: SAPROLING - replace: create a 1/1 green Saproling creature token. -auto replace: - match: MONK - replace: create a 1/1 white Monk creature token with prowess. -auto replace: - match: GERM - replace: create a 0/0 black Germ creature token. -auto replace: - match: WURM - replace: Create a 5/5 green Wurm creature token with trample. -auto replace: - match: SQUIRREL - replace: create a 1/1 green Squirrel creature token. -auto replace: - match: CENTAUR - replace: create a 3/3 green Centaur creature token. -auto replace: - match: ELFWAR - replace: create a 1/1 green Elf Warrior creature token. -auto replace: - match: ELFDRUID - replace: create a 1/1 green Elf Druid creature token with “[T]: Add [G].” -auto replace: - match: INSECT - replace: create a 1/1 green Insect creature token. -auto replace: - match: MERFOLK - replace: create a 1/1 blue Merfolk creature token with hexproof. -auto replace: - match: KNIGHT - replace: create a 2/2 white Knight creature token with vigilance. -auto replace: - match: BIRD - replace: create a 1/1 white Bird creature token with flying. -auto replace: - match: KORALLY - replace: create a 1/1 white Kor Ally creature token. -auto replace: - match: KORSOLDIER - replace: create a 1/1 white Kor Soldier creature token. -auto replace: - match: DRAKE - replace: create a 2/2 blue Drake creature token with flying. -auto replace: - match: ELDRAZIHORROR - replace: create a 3/2 colorless Eldrazi Horror creature token. -# -#Coding -auto replace: - match: CELSEP - replace: {if has_pt() then "this creature" else "this permanent"} \ No newline at end of file diff --git a/data/magic.mse-game/card-back.png b/data/magic.mse-game/card-back.png deleted file mode 100644 index 8e03b544c475c04c141db7507b844de2d55b4843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20023 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

dhD9q?yEPqgOA=-n9c9gu^vCUTt3E1tiq^5V zVjNcl{~oY1laer4rbWn6OcK|svT`jg%1(Wy&r3yV0o_m|4UBB)vr~|jk_4Sjhbn6+ z%IsFOm097mT2N{>q10%C(b|EIh5^JoIx*YP#N@Od^F0k%>~F$}{uZ1X?8J$IHZ1Yq zN8NQeBFj^UqkVNa-rvB#wP0zW35)JpEb_I*-bO6+Hsc5%m%1DI?-tB;cOlr^h~@@A zN-fQ(ciPZaZAV9q1+A41w787$I7$(<6jC-E!Vz-{CTLAj+eZjckost0GuDHc(x)O| zI)n~$0mkYm9YmA{-q*foh|Ee(Mn5epM9J^c6#%p`RzQR6S%dL>|GtZ~gNO%4a12P$!Uu$#$o9L9nQl#^Hc z>0<4MOy+)>n5s&_(W*?Gu%}?jdI)D6>6o*pV#>rM+LnfHxlyen17o%%x+i4?ElV!& znsa4frlknSgJth2{(T@brA(wv#e9PXcC7~Ox(qZBwANyNh*TZ4aw|JV$Pyv?OgM_t z(O8m-4yHe%yXs0ZX@w+x{=HAfzfm#gW`2a+G!27A5J%hl@P)q_PpGOl!BJxuqYH3Axs5{Oym!iEW0YW{&a8WjB85tXBRXru?D5sm& z7H6Z1J8P2rKoq6HrAb3kMiR2plGJ}BQk0$vU5*poWdR)T4C1D*ovObcPrWXz_?+sp zkQH)-Oa-n{d2cd(TIX8!SK#rW6HmMqcob;Dm!59SwfNCs4xuF10&P}0rg_rc)PsYi zS?DnA*WUQE)VpHL#J{Hy{f~5?4qBBqD;bp(qSk^eXvkS@ zB_E-m;FxmL`Fgf$##ZcGoQ0xQT5C>S9!v#kD5DG4&^k-9QlZH*!d2>_o*BYYhZi^c zx^Z`)6(48HgKG z(L!*-whW9i`H$18#!2AwMp}zL9o~{G`1sgQAfUvI`GBJls{lJEaEDFU0;kvX5c?{<>N<{g|KI(@g&nxn3jU< zv_mM)pcN97c7mfP05(QQ7XfK1%2khL1Xq(SSMR6MHPe|YrNWV)ME*;Mi%EGd-;Q#n)IpHi z>GDBFu_$%ZVXE_KdlLKvDnPy+GcYBiM<`yUu&y^`liSi!#VB9H%w*V}r_S$BxGt14 zts`ei!!=IJS{!_jC{-nzLm$B{x3ObH&=ycKbPy$ZlpJ|!aL@wX3;;G-T>&*)X7Ue_ zN6qLC-wP7CX{ z(1PrlN& zOK;Oa5P(JE_1ezMHE9w%b{_YufCX-~yAK7JV7@dooD7 z($7*E5;~mESe{%Xn_yNo#yD$=3FO`V?OwZ?MT1>j$guQUxEAr$?6AxhDj{5UdJV^ zb4+%b5yE+{5%L&jUyfidl6{6Fo+9N5knLm6l>2B>Z$Fkfn!L(&YbH3*s4|V+CyZAJ zWe&p*5yFXTMA>$y9h~D+pQ1TxPCM@3kcq#*XT8C3e}q9V@ll%zZUN@15a(#)G4vdi zkL8qSJL+H0QhB$~tyL_pHKkz1^6ey-&)ZUde7I*Jee>U)7I{&J44nacsD2}mxEV_ZqIv z5a#6C7U(95Cz7}x(l3${rWHwD`kfXg$+(#5lm&h#Q5s?yay`IjYM?0biBI}%#s_zo zvAfX6wFaL;1<_HOZrTsPGbK9f>%O85-2|%=7jl$g+N@Aci?*Dj94k_gLWMNeBM7(u znxQe~_9hGiX~2Y9RCn7ZD-};3DbT^IdJ_0nq97EXYwy?Tnx5xN5Jckp0bs>=Myi#n zR2jEYtx6aKVth|3rsC>7&vW3~0Tt?u@x)qRd_#NRmwI5uw?;hb18c!;#QGuatfRs8 zH$J6tWe9#9#{-9946Dze+nRv>0rLuJV_hEEqHHkFT4<@aQe!^NFmlf$aJ8bEG=1em zNa~Z^^2Qwo`TLmBJHItQz#ULN{r3Rd2lxZZm)iquudlBkjz+!*{yrL6`ScSm!TBaE SmqGjh0000= 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 - script: name_checker(value) - description: The name of the card -card field: - type: text - name: alias - card list visible: false - show statistics: false - description: The alias 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: fortress - 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 - choice: moon - choice: eldrazi - 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 - choice: basic land - choice: common - choice: uncommon - choice: rare - choice: mythic rare - choice: special - choice: masterpiece - initial: common - card list visible: true - card list column: 7 - description: The rarity of the card, to edit the symbol switch to the 'set info' tab - show statistics: false - icon: stats/rarity.png - position hint: 100 - 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: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"text") - 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 - position hint: 105 - script: - if mainframe_walker() then - mainframe_walker_text_script() - else if alt_text() then - alt_text_script() - else - combined_editor(field1: card.rule_text, separator: "\n", field2: card.flavor_text) - description: The rules and flavor text for the card; use up and down arrows to switch -######################### Watermark -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 -###############################Leveler textboxes -card field: - type: text - name: level 0 - description: The zeroth level of a creature - show statistics: false -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: level 1 - description: The first level of a card - show statistics: false -card field: - type: text - name: level 1 text - default: if transfer_levels() then card.rule_text else "" - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv1") - show statistics: false - multi line: true - position hint: 110 - description: The first level text for the card -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: level 2 - description: The second level of a card - show statistics: false -card field: - type: text - name: level 2 text - default: if transfer_levels() then card.rule_text_2 else "" - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv2") - show statistics: false - multi line: true - position hint: 120 - description: The second level text for the card -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: level 3 - description: The third level of a card - show statistics: false -card field: - type: text - name: level 3 text - default: card.rule_text_3 - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv3") - show statistics: false - multi line: true - position hint: 130 - description: The third level text for the card -card field: - type: text - name: loyalty cost 4 - show statistics: false - description: The loyalty cost for the fourth ability of a planeswalker -card field: - type: text - name: level 4 - description: The fourth level of a card - show statistics: false -card field: - type: text - name: level 4 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv4") - show statistics: false - multi line: true - position hint: 4 - description: The fourth level text for the card -############################# Notes -card field: - type: text - name: sorted notes - multi line: true - save value: false - show statistics: false - script: card.notes - description: A mirror of card notes to make it sortable. -card field: - type: text - name: custom index - save value: false - show statistics: false - position hint: 900 - script: custom_index() -############################# 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 5 - show statistics: false - description: The loyalty cost for the fifth ability of a planeswalker -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 -############################# 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: (if is_masterpiece() then set.masterpiece_set_code else 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 -card field: - type: text - name: card code text 2 - default: card.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 - show statistics: false -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) >= 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: "colorless") - show statistics: false - description: The frame of a card -card field: - type: text - name: name 2 - identifying: true - show statistics: false - description: The second name of a card -card field: - type: text - name: alias 2 - show statistics: false - description: The second alias of a card -card field: - type: text - name: name 3 - identifying: true - show statistics: false - description: The third name of a card -card field: - type: text - name: alias 3 - identifying: true - show statistics: false - description: The third alias 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: fortress - 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: type symbol 3 - default: typesymbol_type(type: card.super_type_3) - card list visible: false - show statistics: false - choice: artifact - choice: creature - choice: enchantment - choice: fotress - 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 - choice: moon - choice: eldrazi - description: On transforming cards, is this the day or the night side? - show statistics: false -card field: - type: choice - name: transformation 3 - 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: text - name: super type 3 - icon: stats/creature_type.png - show statistics: false - script: super_type_filter(value) -card field: - type: text - name: sub type 3 - icon: stats/creature_type.png - show statistics: false - script: sub_type_filter(value, type:card.super_type_3) -card field: - type: text - name: type 3 - save value: false - script: - combined_editor( - field1: card.super_type_3, - separator: language().type_separator, - field2: card.sub_type_3, - 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 - choice: masterpiece - 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: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text2") - 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: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"text3") - 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: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text4") - 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: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text5") - 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: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"text6") - 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: flavor text 3 - 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: - if mainframe_walkerb() then - mainframe_walker_text_scriptb() - else if alt_textb() then - alt_text_scriptb() - else - combined_editor(field1: card.rule_text_2, separator: "\n", field2: card.flavor_text_2) - description: The rules and flavor text of the card -card field: - type: text - name: text 3 - multi line: true - save value: false - show statistics: false - script: - combined_editor(field1: card.rule_text_3, separator: "\n", field2: card.flavor_text_3) - 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: choice - name: watermark 3 - 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: illustrator 3 - icon: stats/illustrator.png - default: set.artist - show statistics: false - description: The illustrator of the image -card field: - type: text - name: copyright 3 - default: set.copyright - show statistics: false -card field: - type: text - name: copyright line 3 - save value: false - show statistics: false - script: - if set.automatic_card_numbers then - combined_editor(field1: card.copyright_3, separator: " ", field2: card.card_number) - else - forward_editor(field: card.copyright_3) - description: The copyright and card number of the card -card field: - type: text - name: set code 2 - editable: false - save value: false - script: (if is_masterpiece() then set.masterpiece_set_code else set.set_code) + " • " + set.set_language - show statistics: false -card field: - type: text - name: set code 3 - editable: false - save value: false - script: (if is_masterpiece() then set.masterpiece_set_code else set.set_code) + " • " + set.set_language - show statistics: false -########################back Leveler textboxes -card field: - type: text - name: level 5 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv5") - show statistics: false - multi line: true - description: The fifth level text for the card -card field: - type: text - name: level 6 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv6") - show statistics: false - multi line: true - description: The sixth level text for the card -card field: - type: text - name: level 7 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv7") - show statistics: false - multi line: true - description: The seventh level text for the card -card field: - type: text - name: level 8 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv8") - show statistics: false - multi line: true - description: The eighth level text for the card -card field: - type: text - name: level 9 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv9") - show statistics: false - multi line: true - description: The ninth level text for the card -card field: - type: text - name: level 10 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv10") - show statistics: false - multi line: true - description: The tenth level text for the card -card field: - type: text - name: level 11 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv11") - show statistics: false - multi line: true - description: The eleventh level text for the card -card field: - type: text - name: level 12 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias != "" then card.alias else card.name, margin_code:"lv12") - show statistics: false - multi line: true - description: The twelvth level text for the card -card field: - type: text - name: level 13 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv13") - show statistics: false - multi line: true - description: The thirteenth level text for the card -card field: - type: text - name: level 14 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv14") - show statistics: false - multi line: true - description: The fourteenth level text for the card -card field: - type: text - name: level 15 text - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"lv15") - show statistics: false - multi line: true - description: The fifteenth level text for the card -card field: - type: text - name: level 5 - description: The fifth level of a card - show statistics: false -card field: - type: text - name: level 6 - description: The sixth level of a card - show statistics: false -card field: - type: text - name: level 7 - description: The seventh level of a card - show statistics: false -card field: - type: text - name: level 8 - description: The eighth level of a card - show statistics: false - -card field: - type: text - name: power 4 - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness 4 - icon: stats/toughness.png - show statistics: false - description: The toughness of a creature -card field: - type: text - name: pt 4 - save value: false - script: - combined_editor( - field1: card.power_4, - separator: language().pt_separator, - field2: card.toughness_4, - soft_before_empty: true, - hide_when_empty: true - ) - card list width: 50 - card list name: P/T4 - show statistics: false - description: Power/Toughness of a creature -card field: - type: text - name: power 5 - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness 5 - icon: stats/toughness.png - show statistics: false - description: The toughness of a creature -card field: - type: text - name: pt 5 - save value: false - script: - combined_editor( - field1: card.power_5, - separator: language().pt_separator, - field2: card.toughness_5, - soft_before_empty: true, - hide_when_empty: true - ) - card list width: 50 - card list name: P/T5 - show statistics: false - description: Power/Toughness of a creature -card field: - type: text - name: power 6 - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness 6 - icon: stats/toughness.png - show statistics: false - description: The toughness of a creature -card field: - type: text - name: pt 6 - save value: false - script: - combined_editor( - field1: card.power_6, - separator: language().pt_separator, - field2: card.toughness_6, - soft_before_empty: true, - hide_when_empty: true - ) - card list width: 50 - card list name: P/T6 - show statistics: false - description: Power/Toughness of a creature -card field: - type: text - name: power 7 - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness 7 - icon: stats/toughness.png - show statistics: false - description: The toughness of a creature -card field: - type: text - name: pt 7 - save value: false - script: - combined_editor( - field1: card.power_7, - separator: language().pt_separator, - field2: card.toughness_7, - soft_before_empty: true, - hide_when_empty: true - ) - card list width: 50 - card list name: P/T7 - show statistics: false - description: Power/Toughness of a creature -card field: - type: text - name: power 8 - icon: stats/power.png - show statistics: false - script: type_over_pt(value) - description: The power of a creature -card field: - type: text - name: toughness 8 - icon: stats/toughness.png - show statistics: false - description: The toughness of a creature -card field: - type: text - name: pt 8 - save value: false - script: - combined_editor( - field1: card.power_8, - separator: language().pt_separator, - field2: card.toughness_8, - soft_before_empty: true, - hide_when_empty: true - ) - card list width: 50 - card list name: P/T8 - show statistics: false - description: Power/Toughness of a creature -card field: - type: text - name: cmc - show statistics: false - position hint: 2 - script: cmc(card.casting_cost) - card list visible: true - card list column: 3 - card list alignment: right - card list width: 50 - card list name: CMC - description: The converted mana cost of the card -card field: - type: image - name: mainframe image - show statistics: false - description: An extra image of the card -card field: - type: image - name: mainframe image 2 - show statistics: false - description: An extra image of the card -card field: - type: text - name: special text - show statistics: false - script: special_text() - save value: true - description: Full text for exporting. -card field: - type: text - name: special text 2 - show statistics: false - script: special_text2() - save value: true - description: Full text for exporting. -card field: - type: text - name: time modified - show statistics: false - save value: false - script: card.time_modified -card field: - type: text - name: time created - show statistics: false - save value: false - script: card.time_created -card field: - type: text - name: chapter text - show statistics: false - multi line: true - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name, margin_code:"unknown") - default: if not a_saga() then "" else if card.rule_text != "" then card.rule_text else "(" + saga_reminder() + ")" - description: The saga reminder text -card field: - type: text - name: chapter text 2 - show statistics: false - multi line: true - script: text_filter(input: value, card_name: if set.alias_as_cardname and card.alias_2 != "" then card.alias_2 else card.name_2, margin_code:"unknown") - default: if not b_saga() then "" else "(" + saga_reminderb() + ")" - description: The saga reminder text - -############################# Exposing Internal Fields? - -card field: - type: text - name: time created - show statistics: false - save value: false - editable: false - script: card.time_created - card list visible: true - card list name: Created At - card list column: 100 - card list width: 150 -card field: - type: text - name: time modified - show statistics: false - save value: false - editable: false - script: card.time_modified - card list visible: true - card list name: Last Modified At - card list column: 101 - card list width: 150 diff --git a/data/magic.mse-game/game b/data/magic.mse-game/game deleted file mode 100644 index b0e5c924..00000000 --- a/data/magic.mse-game/game +++ /dev/null @@ -1,55 +0,0 @@ -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: 2020-04-25 -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: keywords_custom -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 - ) diff --git a/data/magic.mse-game/icons/center-all-text.png b/data/magic.mse-game/icons/center-all-text.png deleted file mode 100644 index 84d8cfe44168f05b1dc435cbc86661b5a90c11ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OEOV@Z%- zFoVOh8)-m}sHcl#NX4z>ga*dn_5p1F+2<(n@GxZev6TMS{=5;WfWgz%&t;ucLK6TX CxE#g+ diff --git a/data/magic.mse-game/icons/center-no-text.png b/data/magic.mse-game/icons/center-no-text.png deleted file mode 100644 index 8b48f3e6fd6f318c60b20a7da66af61065db758e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OEOV@Z%- zFoVOh8)-m}h^LEVNX4z>goegn@&<0qeu8Xl3{`wAZ!iBY3I)nDc)I$ztaD0e0s!>S B8>j#P diff --git a/data/magic.mse-game/icons/center-short-text.png b/data/magic.mse-game/icons/center-short-text.png deleted file mode 100644 index 731a8af468e94fc922082435b0d1a35cf4f6b51e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OEOV@Z%- zFoVOh8)-m}xTlL_NX4z>ga*cM>^vC@{;~I5WDsX&@JMEkTcvwM8>ocA)78&qol`;+ E08+sme*gdg diff --git a/data/magic.mse-game/icons/language-br.png b/data/magic.mse-game/icons/language-br.png deleted file mode 100644 index 9b1a5538b264a295021f4f717d4299bb8ed98d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0j-HAXl7XJGjM{~r+i{r~sxzrQwG-&h#_Y&p;L z=ieV7_s^f-zyJOD{rC5(+EoAn1k&)I;s3Kw&;LT?{{2}P{Pq8T&j0^^J4?LvUd;UK z&+k8ffB*XXONL(tXahh1fi?X94^$0Q>Z$uRRO)Y4)uapmB!2(-ul(c1=C+V!kAF`) z$PCo;`_FHns{jIs3Fu;wy-Z(c2YwAz{&V4aXk?bejFO*Op&u`@i~PecqBpL@DIoojb8mb+WHGK%fG2>)a3=iVf_~v+`s?*1;!`?Kmai^I3i*ZIYtpN f{g(k500bBS@lkXrGB=QAE7Oa;sEni}R=0E^OXpT$$y}qo$&7jtn7Oba1SRwXYMYg-G{}k? zRt6)ZHU^UwW9)9b=iYP9?YWE2yYukXf$rI0!y{1k<_D12H;U#c-ejSH$B_RGc%6plS;Gsj52lf)XN6M5v;W+0g2EAhz^2$uEy^My@@MArM6!A;jWQ z3WWmhC7aFSYAW3_rBrjA($eYJ_dl&2cZYn7Rdv^KQ(=4+i{x@S?2^f3Dx9fgG8x@- zOtDyq$y72L3-$E{gMl1q^KUXkBC(1uOi`Tk%&8^*%j#^nPd|&ZwNR?d>0$`3owWTgW;= RCDQ-^002ovPDHLkV1jJlA%Oq@ diff --git a/data/magic.mse-game/icons/language-fr.png b/data/magic.mse-game/icons/language-fr.png deleted file mode 100644 index 8332c4ec23c853944c29b02d7b32a88033f48a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 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 N@O1TaS?83{1OOJVkbVFF diff --git a/data/magic.mse-game/keywords b/data/magic.mse-game/keywords deleted file mode 100644 index 8d2d7978..00000000 --- a/data/magic.mse-game/keywords +++ /dev/null @@ -1,1555 +0,0 @@ - -############################################################## We have keywords - -has keywords: true - -############################################################## Keyword mode - -keyword mode: - name: old - description: Old keywords (Banding, Phasing, etc.) -keyword mode: - name: core - description: Core set keywords (Flying, Haste, etc.) -keyword mode: - name: expert - description: Expert set keywords (Cycling, Vanishing, etc.) -keyword mode: - name: pseudo - description: Pseudo keyword / Ability words (Hellbent, Threshold, etc.) -keyword mode: - name: action - description: Keyword actions, reminder text at end of line (Scry, Regenerate, etc.) -keyword mode: - is default: true - name: custom - description: Custom keywords - -############################################################## Keyword parameter types - -keyword parameter type: - name: mana - match: [HSVCTQXYZI0-9WUBRG/|]+ - refer script: - name: normal - description: No changes made - script: \{{input}\} - refer script: - name: mana value - description: Converts mana to number - # "0" left in so users can easily see how to edit script. - script: \{cmc({input})\} - refer script: - name: colored mana cost - description: Converts mana to number of colored mana - # "0" left in so users can easily see how to edit script. - script: \{colored_mana({input})\} - -# By pichoro and bunnierein -keyword parameter type: - name: cost - match: [ ][HSVECTQXYZI0-9WUBRG/|]*|[-—][^(\r\n]* - separator before is: [ —-] - separator after is: [.] - optional: false - # note: the separator is part of match - refer script: - name: normal - description: When using mana only costs, doesn't include anything extra in the reminder text - script: \{{input}\} - refer script: - name: add "pay an additional " for mana costs - description: When using mana only costs, words the reminder text as "pay an additional " - script: \{for_mana_costs(add:"pay an additional ", {input})\} - refer script: - name: add "pay " for mana costs - description: When using mana only costs, words the reminder text as "pay " - script: \{for_mana_costs(add:"pay ", {input})\} - separator script: long_dash() - -keyword parameter type: - name: number - match: [XYZ0-9]+ - refer script: - name: normal - description: (1,2,3) - script: \{{input}\} - refer script: - name: as words - description: (one, two, three) - script: \{english_number({input})\} - refer script: - name: as words, use "a" for 1 - description: (a, two, three) - script: \{english_number_a({input})\} - refer script: - name: as words, use "" for 1 - description: (, two, three) - script: \{english_number_multiple({input})\} - refer script: - name: as ordinal words - description: (first, second, third) - script: \{english_number_ordinal({input})\} - -keyword parameter type: - name: action - match: [^(:\n]+ - separator after is: [.] - reminder script: alternative_cost() - -keyword parameter type: - name: one_word - match: [A-Za-z0-9]+ -keyword parameter type: - name: p - match: [p](?!ped)(?!ment) -keyword parameter type: - name: name - match: ([^(.:;\n—]+|[ ]) - #match: [A-Za-z0-9 ',’"“”!?]+ - refer script: - name: normal - description: No changes made. - script: \{{input}\} - refer script: - name: singular - description: Removes plurality from words. - script: \{english_singular({input})\} - refer script: - name: separate words with "and/or" - description: Changes spaces to " and/or ". "Elf Warrior" becomes "Elf and/or Warrior". - script: \{separate_words(spacer: " and/or ", {input})\} - refer script: - name: separate words with "or" - description: Changes spaces to " or ". "Elf Warrior" becomes "Elf or Warrior". - script: \{separate_words(spacer: " or ", {input})\} - -keyword parameter type: - name: prefix - description: Prefix for things like "walk" - optional: false -# match: [A-Z][a-z, ]*([A-Z][a-z, ]*\xEB00) # commented out because it stopped prefix param from working, version below allows all "walks", including "Dame Judi Denchwalk", doesn't trigger #in middle of sentences, and doesn't trigger in chains of keywords. -# match: [A-Z][A-Z,a-z’ ]* # commented out due to still not working - match: [^(.,”":;\n—]+ - example: Forest -keyword parameter type: - name: english_number - match: (up to )?(a|an|one|two|three|four|five|six|seven|eight|nine|ten| ) - refer script: - name: as a numeral - description: Changes english number to numeral - script: \{digital_number({input}.value)\} -keyword parameter type: - name: a - match: [an?]* -keyword parameter type: - name: *s - match: [a-z]s? -keyword parameter type: - name: nonland - match: ( n?o?n?l?a?n?d? ?) -keyword parameter type: - name: mill - match: mills? -keyword parameter type: - name: iterate - match: [., ](t?w?i?c?e?|t?h?r?e?e?|f?o?u?r?|f?i?v?e?|s?i?x?|s?e?v?e?n?|X?)?( ?t?i?m?e?s?)? - refer script: - name: as words - description: Use the iteration word (twice, three times, etc) - script: \{iterate_fix({input})\} - refer script: - name: as number - description: Use the iteration word (twice, three times, etc) - script: \{iterate_digits({input})\} -keyword parameter type: - name: energy - match: [^>]([Pp]ays?( an additional| any amount of)?|gets?( that many)?) [E]+ - separator before is: [^>]([Pp]ays?( an additional| any amount of)?|gets?( that many)?)[ ] - reminder script: length(input) - -############################# All Magic keywords -# By JrEye and Neko_Asakami, Updated by Pichoro and Buttock1234, Continued updates by cajun - -# Alpha -keyword: - keyword: Flying - match: Flying - mode: core - reminder: {this_or_that("creature", upper:true)} can’t be blocked except by creatures with flying or reach. -keyword: - keyword: First strike - match: First strike - mode: core - reminder: {this_or_that("creature", upper:true)} deals combat damage before creatures without first strike. -keyword: - keyword: Trample - match: Trample - mode: core - reminder: {this_or_that("creature", upper:true)} can deal excess combat damage to the player or planeswalker it's attacking. -keyword: - keyword: Banding - match: Banding - mode: old - reminder: Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature’s combat damage, not its controller, among any of the creatures it’s being blocked by or is blocking. -keyword: - keyword: Landwalk - match: prefixwalk - mode: old - reminder: {this_or_that("creature", upper:true)} can't be blocked as long as defending player controls a {if match(param1.value, match: " land$") or contains(param1.value, match: "Snow") or contains(param1.value, match:"Basic") or contains(param1.value, match:"Legendary") then "{to_lower(param1)}" else "{param1}"}. -keyword: - keyword: Protection from - match: Protection from name - mode: expert - reminder: {protection_code(param1.value)}. -keyword: - keyword: Regeneration - match: Regenerate - mode: action - reminder: The next time {this_or_that("permanent")} would be destroyed this turn, it isn’t.{if has_pt() then " Instead tap it, remove all damage from it, and remove it from combat." else " Instead tap it."} -# Legends -keyword: - keyword: Bands with other - match: Bands with other name - mode: old - reminder: Any {param1} can attack in a band as long as at least one has “bands with other {param1}.” Bands are blocked as a group. If at least two {param1} you control, one of which has “bands with other {param1},” are blocking or being blocked by the same creature, you divide that creature’s combat damage, not its controller, among any of the creatures it’s being blocked by or is blocking. -keyword: - keyword: Rampage - match: Rampage number - mode: old - reminder: Whenever {this_or_that("creature")} becomes blocked, it gets +{param1}/+{param1} until end of turn for each creature blocking it beyond the first. -# Ice Age -keyword: - keyword: Cumulative upkeep - match: Cumulative upkeep cost - mode: old - reminder: At the beginning of your upkeep, put an age counter on {this_or_that("permanent")}, then sacrifice it unless you pay its upkeep cost for each age counter on it. -# Mirage -keyword: - keyword: Phasing - match: Phasing - mode: old - reminder: This phases in or out before you untap during each of your untap steps. While it’s phased out, it’s treated as though it doesn’t exist. -keyword: - keyword: Flanking - match: Flanking - mode: expert - reminder: Whenever a creature without flanking blocks {this_or_that("creature")}, the blocking creature gets -1/-1 until end of turn. -# Tempest -keyword: - keyword: Shadow - match: Shadow - mode: expert - reminder: {this_or_that("creature", upper:true)} can block or be blocked by only creatures with shadow. -keyword: - keyword: Buyback - match: Buyback cost - mode: expert - reminder: You may {for_mana_costs(add:"pay an additional ",param1)} as you cast this spell. If you do, put this card into your hand as it resolves. -# Unglued -keyword: - keyword: Denimwalk - match: Denimwalk - mode: old - reminder: If defending player is wearing any clothing made of denim, {this_or_that("creature")} is unblockable. -# Urza's Saga -keyword: - keyword: Echo - match: Echo cost - mode: expert - reminder: At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost. -keyword: - keyword: Cycling - match: Cycling cost - mode: expert - reminder: {param1}, Discard this card: Draw a card. -# Sixth Edition -keyword: - keyword: Haste - match: Haste - mode: core - reminder: {this_or_that("creature", upper:true)} can attack and T as soon as it comes under your control. -# Portal: Three Kingdoms -keyword: - keyword: Horsemanship - match: Horsemanship - mode: old - reminder: {this_or_that("creature", upper:true)} can’t be blocked except by creatures with horsemanship. -# Nemesis -keyword: - keyword: Fading - match: Fading number - mode: expert - reminder: This {if has_pt() then "creature" else "permanent"} enters the battlefield with {english_number_a(param1)} fade counter(s) on it. At the beginning of your upkeep, remove a fade counter from it. If you can’t, sacrifice it. -# Invasion -keyword: - keyword: Kicker - match: Kicker cost - mode: expert - reminder: You may {for_mana_costs(add:"pay an additional ", param1)} as you cast this spell. -# Odyssey -keyword: - keyword: Flashback - match: Flashback cost - mode: expert - reminder: You may cast this card from your graveyard for its flashback cost. Then exile it. -keyword: - keyword: Threshold - match: Threshold - mode: pseudo - rules: Threshold — [effect] as long as seven or more cards are in your graveyard. -# Torment -keyword: - keyword: Madness - match: Madness cost - mode: expert - reminder: If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard. -# Onslaught -keyword: - keyword: Morph - match: Morph cost - mode: expert - reminder: You may cast this card face down as a 2/2 creature for 3. Turn it face up any time for its morph cost. -keyword: - keyword: Fear - match: Fear - mode: old - reminder: {this_or_that("creature", upper:true)} can’t be blocked except by artifact creatures and/or black creatures. -# Legions -keyword: - keyword: Amplify - match: Amplify number - mode: expert - reminder: As {this_or_that("creature")} enters the battlefield, put {english_number_a(param1)} +1/+1 counter(s) on it for each {separate_words(spacer: " and/or ", card.sub_type)} card you reveal in your hand. -keyword: - keyword: Double strike - match: Double strike - mode: core - reminder: {this_or_that("creature", upper:true)} deals both first-strike and regular combat damage. -keyword: - keyword: Provoke - match: Provoke - mode: expert - reminder: When this attacks, you may have target creature defending player controls untap and block it if able. -# Scourge -keyword: - keyword: Typecycling - match: one_wordcycling cost - mode: action - reminder: {param2}, Discard this card: Search your library for a {param1} card, reveal it, and put it into your hand, then shuffle. -keyword: - keyword: Storm - match: Storm - mode: expert - reminder: When you cast this spell, copy it for each spell cast before it this turn.{ if is_targeted() then " You may choose new targets for the copies." } -# Mirrodin -keyword: - keyword: Affinity for - match: Affinity for name - mode: expert - reminder: This spell costs 1 less to cast for each {english_singular(param1)} you control. -keyword: - keyword: Entwine - match: Entwine cost - mode: expert - reminder: Choose both if you pay the entwine cost. -keyword: - keyword: Equip - match: Equip cost - mode: core - reminder: {param1}: Attach to target creature you control. Equip only as a sorcery. -keyword: - keyword: Equip quality - match: Equip namecost - mode: core - reminder: {param2}: Attach to target {param1} creature you control. Equip only as a sorcery. -keyword: - keyword: Imprint - match: Imprint - mode: pseudo - rules: When ~ enters the battlefield, you may exile a [something] from [somewhere]. -# Darksteel -keyword: - keyword: Modular - match: Modular number - mode: expert - reminder: This enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. When it dies, you may put its +1/+1 counters on target artifact creature. -# Fifth Dawn -keyword: - keyword: Scry - match: Scry number - mode: core - reminder: - To scry {param1}, look at the top { - if param1.value=="1" then "card of your library. You may put that card on the bottom of your library." - else "{english_number(param1)} cards of your library, then put any number of them on the bottom of your library and the rest on top in any order." - } -keyword: - keyword: Sunburst - match: Sunburst - mode: expert - reminder: This enters the battlefield with a {if has_pt() then "+1/+1" else "charge"} counter on it for each color of mana spent to cast it. -# Champions of Kamigawa -keyword: - keyword: Splice - match: Splice onto name cost - mode: expert - reminder: As you cast a {param1} spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card’s effects to that spell. -keyword: - keyword: Bushido - match: Bushido number - mode: expert - reminder: Whenever {this_or_that("creature")} blocks or becomes blocked, it gets +{param1}/+{param1} until end of turn. -keyword: - keyword: Soulshift - match: Soulshift number - mode: expert - reminder: When {this_or_that("creature")} dies, you may return target Spirit card with mana value {param1} or less from your graveyard to your hand. -keyword: - keyword: Enchant - match: Enchant name - mode: core - reminder: Target a {param1} as you cast this. This card enters the battlefield attached to that {param1}. -keyword: - keyword: Vigilance - match: Vigilance - mode: core - reminder: Attacking doesn’t cause {this_or_that("creature")} to tap. -keyword: - keyword: Defender - match: Defender - mode: core - reminder: {this_or_that("creature", upper:true)} can’t attack. -# Unhinged -keyword: - keyword: Art rampage - match: Art rampage number - mode: expert - reminder: Whenever this becomes blocked by a creature, it gets +{param1}/+{param1} for each creature in the blocker’s art beyond the first. -keyword: - keyword: Super haste - match: Super haste - mode: expert - reminder: This may attack the turn before you cast it. (You may have this card enter the battlefield from your hand, tapped and attacking, during your declare attackers step. If you do, you lose the game at the end of your next turn unless you pay this card’s mana cost during that turn.) -keyword: - keyword: Gotcha - match: Gotcha - mode: pseudo - rules: Gotcha — Whenever an opponent [does something], you may say “Gotcha!”. If you do, return [something] from your graveyard to your hand. -# Betrayers of Kamigawa -keyword: - keyword: Offering - match: prefix offering - mode: expert - reminder: You may cast this card any time you could cast an instant by sacrificing a {param1} and paying the difference in mana costs between this and the sacrificed {param1}. Mana cost includes color. -keyword: - keyword: Ninjutsu - match: Ninjutsu cost - mode: expert - reminder: {param1}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking. -# Saviors of Kamigawa -keyword: - keyword: Epic - match: Epic - mode: expert - reminder: For the rest of the game, you can’t cast spells. At the beginning of each of your upkeeps, copy this spell except for its epic ability.{ if is_targeted() then " You may choose a new target for the copy." } -keyword: - keyword: Channel - match: Channel - mode: pseudo - rules: Channel — [cost], Discard ~: [effect]. -keyword: - keyword: Sweep - match: Sweep - mode: pseudo - rules: Sweep — Return any number of [basic land type] you control to their owner’s hand. [effect based on number of lands returned]. -# Ravnica: City of Guilds -keyword: - keyword: Convoke - match: Convoke - mode: expert - reminder: Your creatures can help cast this spell. Each creature you tap while casting this spell pays for 1 or one mana of that creature’s color. -keyword: - keyword: Transmute - match: Transmute cost - mode: expert - reminder: {param1}, Discard this card: Search your library for a card with the same mana value as this card, reveal it, and put it into your hand, then shuffle. Transmute only as a sorcery. -keyword: - keyword: Dredge - match: Dredge number - mode: expert - reminder: If you would draw a card, you mill {english_number(param1)} card(s) instead. If you do, return this card from your graveyard to your hand. Otherwise, draw a card. -keyword: - keyword: Radiance - match: Radiance - mode: pseudo - rules: Radiance — [effect to target permanent or spell and all cards of same card type that share a color with it] -# Guildpact -keyword: - keyword: Haunt - match: Haunt - mode: expert - reminder: When this { if is_spell() then "spell card is put into a graveyard after resolving," else "creature dies," } exile it haunting target creature. -keyword: - keyword: Bloodthirst - match: Bloodthirst number - mode: expert - reminder: If an opponent was dealt damage this turn, this {if has_pt() then "creature" else "permanent"} enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. -keyword: - keyword: Replicate - match: Replicate cost - mode: expert - reminder: When you cast this spell, copy it for each time you paid its replicate cost.{ if is_targeted() then " You may choose new targets for the copies." } -# Dissension -keyword: - keyword: Graft - match: Graft number - mode: expert - reminder: {this_or_that("permanent", upper:true)} enters the battlefield with {english_number_a(param1)} +1/+1 counter(s) on it. Whenever {if has_pt() then "another" else "a"} creature enters the battlefield, you may move a +1/+1 counter from {this_or_that("permanent")} onto it. -keyword: - keyword: Forecast - match: Forecast — action, Reveal name from your hand: action - mode: expert - reminder: Activate this ability only during your upkeep and only once each turn. -keyword: - keyword: Hellbent - match: Hellbent - mode: pseudo - rules: Hellbent — [effect] if you have no cards in hand. -# Coldsnap -keyword: - keyword: Recover - match: Recover cost - mode: expert - reminder: When a creature is put into your graveyard from the battlefield, you may {for_mana_costs(add:"pay ",param1)}. If you do, return this card from your graveyard to your hand. Otherwise, exile this card. -keyword: - keyword: Ripple - match: Ripple number - mode: expert - reminder: When you cast this spell, you may reveal the top {english_number_multiple(param1)} card(s) of your library. You may cast any revealed cards with the same name as this spell without paying their mana costs. Put the rest on the bottom of your library. -# Time Spiral -keyword: - keyword: Flash - match: Flash - mode: core - reminder: You may cast this spell any time you could cast an instant. -keyword: - keyword: Split second - match: Split second - mode: expert - reminder: As long as this spell is on the stack, players can’t cast spells or activate abilities that aren’t mana abilities. -keyword: - keyword: Suspend - match: Suspend numbercost - mode: expert - reminder: Rather than cast this card from your hand,{if has_cc() then " you may" else ""} {for_mana_costs(add:"pay ", param2)} and exile it with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.{if has_pt() then " It has haste." } -# Planar Chaos -keyword: - keyword: Vanishing - match: Vanishing number - mode: expert - reminder: {this_or_that("permanent", upper:true)} enters the battlefield with {english_number_a(param1)} time counter(s) on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it. -# Future Sight -keyword: - keyword: Deathtouch - match: Deathtouch - mode: core - reminder: Any amount of damage this deals to a creature is enough to destroy it. -keyword: - keyword: Reach - match: Reach - mode: core - reminder: {this_or_that("creature", upper:true)} can block creatures with flying. -keyword: - keyword: Gravestorm - match: Gravestorm - mode: expert - reminder: When you cast this spell, copy it for each permanent put into a graveyard this turn.{ if is_targeted() then " You may choose new targets for the copies." } -keyword: - keyword: Lifelink - match: Lifelink - mode: core - reminder: Damage dealt by this { if has_pt() then "creature" else if is_spell() then "spell" else "permanent" } also causes you to gain that much life. -keyword: - keyword: Absorb - match: Absorb number - mode: expert - reminder: If a source would deal damage to {this_or_that("creature")}, prevent {param1} of that damage. -keyword: - keyword: Fateseal - match: Fateseal number - mode: action - reminder: - To fateseal {param1}, look at the top { - if param1.value=="1" then "card of an opponent’s library, then you may put it on the bottom of that player’s library." - else "{english_number(param1)} cards of an opponent’s library, then put any number of them on the bottom of that player’s library and the rest on top in any order." - } -keyword: - keyword: Transfigure - match: Transfigure cost - mode: expert - reminder: {param1}, Sacrifice {this_or_that("permanent")}: Search your library for a creature card with the same mana value as {this_or_that("permanent")} and put that card onto the battlefield, then shuffle. Transfigure only as a sorcery. -keyword: - keyword: Aura swap - match: Aura swap cost - mode: expert - reminder: {param1}: Exchange this Aura with an Aura card in your hand. -keyword: - keyword: Frenzy - match: Frenzy number - mode: expert - reminder: Whenever {this_or_that("creature")} attacks and isn’t blocked, it gets +{param1}/+0 until end of turn. -keyword: - keyword: Delve - match: Delve - mode: expert - reminder: Each card you exile from your graveyard while casting this spell pays for 1. -keyword: - keyword: Poisonous - match: Poisonous number - mode: expert - reminder: Whenever {this_or_that("creature")} deals combat damage to a player, that player gets {english_number_a(param1)} poison counter(s). A player with ten or more poison counters loses the game. -keyword: - keyword: Shroud - match: Shroud - mode: core - reminder: {this_or_that("permanent", upper:true)} can’t be the target of spells or abilities. -keyword: - keyword: Fortify - match: Fortify cost - mode: expert - reminder: {param1}: Attach to target land you control. Fortify only as a sorcery. This card enters the battlefield unattached and stays on the battlefield if the land leaves. -keyword: - keyword: Grandeur - match: Grandeur - mode: pseudo - rules: Grandeur — Discard another card named ~: [effect]. -# Lorwyn -keyword: - keyword: Evoke - match: Evoke cost - mode: expert - reminder: You may cast this spell for its evoke cost. If you do, it’s sacrificed when it enters the battlefield. -keyword: - keyword: Champion - match: Champion a name - mode: expert - reminder: When this enters the battlefield, sacrifice it unless you exile another {param2} you control. When this leaves the battlefield, that card returns to the battlefield. -keyword: - keyword: Clash - match: Clash - mode: action - reminder: Each clashing player reveals the top card of their library, then puts that card on the top or bottom. A player wins if their card had a higher mana value. -keyword: - keyword: Changeling - match: Changeling - mode: expert - reminder: This card is every creature type. -keyword: - keyword: Hideaway - match: Hideaway - mode: expert - reminder: {this_or_that("land", upper:true)} enters the battlefield tapped. When it does, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library. -# Morningtide -keyword: - keyword: Prowl - match: Prowl cost - mode: expert - reminder: You may cast this for its prowl cost if you dealt combat damage to a player this turn with a {separate_words(spacer: " or ", card.sub_type)}. -keyword: - keyword: Reinforce - match: Reinforce numbercost - mode: expert - reminder: {param2}, Discard this card: Put {english_number_a(param1)} +1/+1 counter(s) on target creature. -keyword: - keyword: Kinship - match: Kinship - mode: pseudo - rules: Kinship — At the beginning of your upkeep, you may look at the top card of your library. If that card shares a creature type with ~, you may reveal it. If you do, [effect]. -# Shadowmoor -keyword: - keyword: Persist - match: Persist - mode: expert - reminder: When {this_or_that("creature")} dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner’s control with a -1/-1 counter on it. -keyword: - keyword: Wither - match: Wither - mode: expert - reminder: This deals damage to creatures in the form of -1/-1 counters. -keyword: - keyword: Conspire - match: Conspire - mode: expert - reminder: As you cast this spell, you may tap two untapped creatures you control that share a color with it. When you do, copy it{ if is_targeted() then " and you may choose a new target for the copy" }. -# Eventide -keyword: - keyword: Retrace - match: Retrace - mode: expert - reminder: You may cast this card from your graveyard by discarding a land card in addition to paying its other costs. -keyword: - keyword: Chroma - match: Chroma - mode: pseudo - rules: Chroma — [effect] based on the number of [color] mana symbols [in graveyard, under your control, in cards you discard]. -# Shards of Alara -keyword: - keyword: Unearth - match: Unearth cost - mode: expert - reminder: {param1}: Return this card from your graveyard to the battlefield. {if has_pt() then "It gains haste. " else "" }Exile it at the beginning of the end step or if it would leave the battlefield. Unearth only as a sorcery. -keyword: - keyword: Devour - match: Devour number - mode: expert - reminder: As this enters the battlefield, you may sacrifice any number of creatures. {this_or_that("creature", upper:true)} enters the battlefield with { if param1.value == "1" then "" else if param1.value == "2" then "twice " else english_number(param1) + " times " }that many +1/+1 counters on it. -keyword: - keyword: Exalted - match: Exalted - mode: expert - reminder: Whenever a creature you control attacks alone, that creature gets +1/+1 until end of turn. -# Conflux -keyword: - keyword: Basic landcycling - match: Basic landcycling cost - mode: expert - reminder: {param1}, Discard this card: Search your library for a basic land card, reveal it, and put it into your hand, then shuffle. -keyword: - keyword: Domain - match: Domain - mode: pseudo - rules: Domain — [effect] for each basic land type among lands you control. -# Alara Reborn -keyword: - keyword: Cascade - match: Cascade - mode: expert - reminder: When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom in a random order. -# Magic 2010 -keyword: - keyword: Intimidate - match: Intimidate - mode: old - reminder: {this_or_that("creature", upper:true)} can’t be blocked except by artifact creatures and/or creatures that share a color with it. -# Zendikar -keyword: - keyword: Landfall - match: Landfall - mode: pseudo - rules: Landfall — Whenever a land enters the battlefield under your control, [effect]. -# Worldwake -keyword: - keyword: Multikicker - match: Multikicker cost - mode: expert - reminder: You may {for_mana_costs(add:"pay an additional ", param1)} any number of times as you cast this spell. -# Rise of the Eldrazi -keyword: - keyword: Annihilator - match: Annihilator number - mode: expert - reminder: Whenever {this_or_that("creature")} attacks, defending player sacrifices {english_number_a(param1)} permanent(s). -keyword: - keyword: Rebound - match: Rebound - mode: expert - reminder: If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost. -keyword: - keyword: Totem armor - match: Totem armor - mode: expert - reminder: If enchanted {if contains(card.text, match:"Enchant creature") then "creature" else "permanent"} would be destroyed, instead remove all damage from it and destroy this Aura. -keyword: - keyword: Level up - match: Level up cost - mode: expert - reminder: {param1}: Put a level counter on this. Level up only as a sorcery. -# Scars of Mirrodin -keyword: - keyword: Infect - match: Infect - mode: expert - reminder: {this_or_that("creature", upper:true)} deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters. -keyword: - keyword: Proliferate - match: Proliferate - mode: action - reminder: Choose any number of permanents and/or players with counters on them, then give each another counter of each kind already there. -keyword: - keyword: Metalcraft - match: Metalcraft - mode: pseudo - rules: Metalcraft — As long as you control three or more artifacts, [effect]. -# Mirrodin Besieged -keyword: - keyword: Battle cry - match: Battle cry - mode: expert - reminder: Whenever {this_or_that("creature")} attacks, each other attacking creature gets +1/+0 until end of turn. -keyword: - keyword: Living weapon - match: Living weapon - mode: expert - reminder: When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it. -# Commander -keyword: - keyword: Join forces - match: Join forces - mode: pseudo - rules: Join forces — Starting with you, each player may [effect]. -# Magic 2012 -keyword: - keyword: Hexproof from - match: Hexprooname from name - mode: core - reminder: This {if has_pt() then "creature" else "permanent"} can't be the target of {param2} spells or abilities your opponents control. -keyword: - keyword: Hexproof - match: Hexproof - mode: core - reminder: This { if has_pt() then "creature" else "permanent"} can't be the target of spells or abilities your opponents control. -# Innistrad -keyword: - keyword: Morbid - match: Morbid - mode: pseudo - rules: Morbid — If a creature died this turn, [effect]. -keyword: - keyword: Fight - match: fight - mode: action - reminder: Each deals damage equal to its power to the other. -# Dark Ascension -keyword: - keyword: Undying - match: Undying - mode: expert - reminder: When {this_or_that("creature")} dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it. -keyword: - keyword: Fateful hour - match: Fateful hour - mode: pseudo - rules: Fateful Hour — As long as you have 5 or less life, [effect]. -# Avacyn Restored -keyword: - keyword: Miracle - match: Miracle cost - mode: expert - reminder: You may cast this card for its miracle cost when you draw it if it's the first card you drew this turn. -keyword: - keyword: Soulbond - match: Soulbond - mode: expert - reminder: You may pair {this_or_that("creature")} with another unpaired creature when either enters the battlefield. They remain paired for as long as you control both of them. -# Return to Ravnica -keyword: - keyword: Detain - match: detainenglish_numbertargetnonlandone_word - mode: action - reminder: Until your next turn, {if contains(param1.value, match:"one") or param1.value == " " then "that" else "those"} {param3} can't attack or block and {if contains(param1.value, match:"one") or param1.value == " " then "its" else "their"} activated abilities can't be activated. -keyword: - keyword: Overload - match: Overload cost - mode: expert - reminder: You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each". -keyword: - keyword: Unleash - match: Unleash - mode: expert - reminder: You may have {this_or_that("creature")} enter the battlefield with a +1/+1 counter on it. It can't block as long as it has a +1/+1 counter on it. -keyword: - keyword: Scavenge - match: Scavenge cost - mode: expert - reminder: {param1}, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery. -keyword: - keyword: Populate - match: populate - mode: action - reminder: Create a token that's a copy of a creature token you control. -# Gatecrash -keyword: - keyword: Extort - match: Extort - mode: expert - reminder: Whenever you cast a spell, you may pay [W/B]. If you do, each opponent loses 1 life and you gain that much life. -keyword: - keyword: Cipher - match: Cipher - mode: expert - reminder: Then you may exile this spell card encoded on a creature you control. Whenever that creature deals combat damage to a player, its controller may cast a copy of the encoded card without paying its mana cost. -keyword: - keyword: Bloodrush - match: Bloodrush - mode: pseudo - rules: Bloodrush — [cost], Discard ~: Target attacking creature gets [effect]. -keyword: - keyword: Battalion - match: Battalion - mode: pseudo - rules: Battalion — Whenever ~ and at least two other creatures attack, [effect]. -keyword: - keyword: Evolve - match: Evolve - mode: expert - reminder: Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than {this_or_that("creature")}, put a +1/+1 counter on {this_or_that("creature")}. -# Dragon's Maze -keyword: - keyword: Fuse - match: Fuse - mode: expert - reminder: You may cast one or both halves of this card from your hand. -# Magic 2014 -keyword: - keyword: Indestructible - match: Indestructible - mode: core - reminder: {if has_pt() then "Damage and effects" else "Effects"} that say "destroy" don't destroy this {if has_pt() then "creature" else if is_artifact(card.super_type) then "artifact" else "permanent"}. -# Theros -keyword: - keyword: Hero's reward - match: Hero's Reward - mode: pseudo - rules: Hero's Reward — When ~ leaves the battlefield, each player [effect]. -keyword: - keyword: Monstrosity - match: Monstrosity number - mode: action - reminder: If {this_or_that("creature")} isn’t monstrous, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes monstrous. -keyword: - keyword: Heroic - match: Heroic - mode: pseudo - rules: Heroic — Whenever you cast a spell that targets ~, [effect]. -keyword: - keyword: Bestow - match: Bestow cost - mode: expert - reminder: If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature. -keyword: - keyword: Devotion - match: devotion to one_word - mode: action - reminder: Each {color_to_mana(param1)} in the mana costs of permanents you control counts toward your devotion to {param1}. -# Commander 2013 -keyword: - keyword: Tempting offer - match: Tempting offer - mode: pseudo - rules: Tempting offer - [do something]. Each opponent may [do the same]. For each opponent who does, [do something again]. -# Born of the Gods -keyword: - keyword: Tribute - match: Tribute number - mode: expert - reminder: As {this_or_that("creature")} enters the battlefield, an opponent of your choice may put {english_number_a(param1)} +1/+1 counter(s) on it. -keyword: - keyword: Inspired - match: Inspired - mode: pseudo - rules: Inspired — Whenever ~ becomes untapped, [effect]. -# Journey into Nyx -keyword: - keyword: Constellation - match: Constellation - mode: pseudo - rules: Constellation — Whenever ~ or another enchantment enters the battlefield under your control, [effect]. -keyword: - keyword: Strive - match: Strive - mode: pseudo - rules: Strive — ~ costs [mana] more to cast for each target beyond the first. -# Conspiracy -keyword: - keyword: Hidden agenda - match: Hidden agenda - mode: expert - reminder: Start the game with this conspiracy face down in the command zone and secretly choose a card name. You may turn this conspiracy face up any time and reveal the chosen name. -keyword: - keyword: Dethrone - match: Dethrone - mode: expert - reminder: Whenever {this_or_that("creature")} attacks the player with the most life or tied for most life, put a +1/+1 counter on it. -keyword: - keyword: Will of the council - match: Will of the council - mode: pseudo - rules: Will of the council — [some ability that involves voting, maybe between grace and condemnation] -keyword: - keyword: Parley - match: Parley - mode: pseudo - rules: Parley — Each player reveals the top card of their library. For each nonland card revealed this way, [effect]. Then each player draws a card. -# Khans of Tarkir -keyword: - keyword: Outlast - match: Outlast cost - mode: expert - reminder: {param1}, T: Put a +1/+1 counter on {this_or_that("creature")}. Outlast only as a sorcery. -keyword: - keyword: Prowess - match: Prowess - mode: core - reminder: Whenever you cast a noncreature spell, {this_or_that("creature")} gets +1/+1 until end of turn. -keyword: - keyword: Raid - match: Raid - mode: pseudo - rules: Raid — When ~ enters the battlefield, if you attacked with a creature this turn, [effect]. -keyword: - keyword: Ferocious - match: Ferocious - mode: pseudo - rules: Ferocious — [Whenever ~ attacks/When ~ spell resolves], if you control a creature with power 4 or greater, [effect]. -# Commander 2014 -keyword: - keyword: Lieutenant - match: Lieutenant - mode: pseudo - rules: Lieutenant - As long as you control your commander, [effect]. -# Fate Reforged -keyword: - keyword: Bolster - match: bolster number - mode: action - reminder: Choose a creature with the least toughness among creatures you control and put {english_number_a(param1)} +1/+1 counter(s) on it. -keyword: - keyword: Dash - match: Dash cost - mode: expert - reminder: You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step. -keyword: - keyword: Manifest - match: manifest - mode: action - reminder: To manifest a card, put it onto the battlefield face down as a 2/2 creature. Turn it face up any time for its mana cost if it's a creature card. -# Dragons of Tarkir -keyword: - keyword: Exploit - match: Exploit - mode: expert - reminder: When {this_or_that("creature")} enters the battlefield, you may sacrifice a creature. -keyword: - keyword: Formidable - match: Formidable - mode: pseudo - rules: Formidable — Stuff happens if creatures you control have total power 8 or greater. -keyword: - keyword: Megamorph - match: Megamorph cost - mode: expert - reminder: You may cast this face down as a 2/2 creature for 3. Turn it face up any time for its megamorph cost and put a +1/+1 counter on it. -# Magic Origins -keyword: - keyword: Menace - match: Menace - mode: core - reminder: {this_or_that("creature", upper:true)} can't be blocked except by two or more creatures. -keyword: - keyword: Renown - match: Renown number - mode: expert - reminder: When {this_or_that("creature")} deals combat damage to a player, if it isn't renowned, put {english_number_a(param1)} +1/+1 counter(s) on it and it becomes renowned. -keyword: - keyword: Spell mastery - match: Spell mastery - mode: pseudo - rules: Spell mastery -- If there are two or more instant and/or sorcery cards in your graveyard, [effect]. -# Battle for Zendikar -keyword: - keyword: Awaken - match: Awaken numbercost - mode: expert - reminder: If you cast this spell {for_mana_costs(add:"for ", param2)}, also put {english_number_a(param1)} +1/+1 counter(s) on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land. -keyword: - keyword: Devoid - match: Devoid - mode: expert - reminder: This card has no color. -keyword: - keyword: Ingest - match: Ingest - mode: expert - reminder: Whenever {this_or_that("creature")} deals combat damage to a player, that player exiles the top card of their library. -keyword: - keyword: Rally - match: Rally - mode: pseudo - rules: Rally -- Whenever ~ or another Ally enters the battlefield under your control, [effect]. -keyword: - keyword: Converge - match: Converge - mode: pseudo - rules: Converge -- [effect with X], where X is the number of colors of mana spent to cast ~. -# Commander 2015 -keyword: - keyword: Myriad - match: Myriad - mode: expert - reminder: Whenever {this_or_that("creature")} attacks, for each opponent other than defending player, you may create a token that's a copy of {this_or_that("creature")} that's tapped and attacking that player or a planeswalker they control. If one or more tokens are created this way, exile the tokens at end of combat. -# Oath of the Gatewatch -keyword: - keyword: Surge - match: Surge cost - mode: expert - reminder: You may cast this spell for its surge cost if you or a teammate has cast another spell this turn. -keyword: - keyword: Support - match: Support number - mode: action - reminder: Put a +1/+1 counter on {if param1.value!=1 then "each of "}up to {english_number(param1)}{if has_pt() then " other"} target creature(s). -# Shadows over Innistrad -keyword: - keyword: Investigate - match: Investigate - mode: action - reminder: Create a colorless Clue artifact token with "2, Sacrifice this artifact: Draw a card." -keyword: - keyword: Skulk - match: Skulk - mode: expert - reminder: {this_or_that("creature", upper:true)} can't be blocked by creatures with greater power. -keyword: - keyword: Delirium - match: Delirium - mode: pseudo - rules: Delirium - If there are four or more card types among cards in your graveyard, [effect]. -# Eldritch Moon -keyword: - keyword: Emerge - match: Emerge cost - mode: expert - reminder: You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's mana value. -keyword: - keyword: Escalate - match: Escalate cost - mode: expert - reminder: Pay this cost for each mode chosen beyond the first. -# Conspiracy: Take the Crown -keyword: - keyword: Double agenda - match: Double agenda - mode: expert - reminder: Start the game with this conspiracy face down in the command zone and secretly choose two different card names. You may turn this conspiracy face up any time and reveal the chosen names. -keyword: - keyword: Goad - match: goad - mode: action - reminder: Until your next turn, that creature attacks each combat if able and attacks a player other than you if able. -keyword: - keyword: Melee - match: Melee - mode: expert - reminder: Whenever {this_or_that("creature")} attacks, it gets +1/+1 until end of turn for each opponent you attacked with a creature this combat. -keyword: - keyword: Monarch - match: become the monarch - mode: action - reminder: The monarch draws a card at the beginning of their end step. Whenever the monarch is dealt combat damage by a creature, its controller becomes the monarch. -keyword: - keyword: Council's dilemma - match: Council's dilemma - mode: pseudo - rules: [May be something] starting with you, each player votes for [one thing or another]. -# Kaladesh -keyword: - keyword: Crew - match: Crew number - mode: expert - reminder: Tap any number of creatures you control with total power {param1} or greater: This {separate_words(spacer: " ", card.sub_type)} becomes an artifact creature until end of turn. -keyword: - keyword: Fabricate - match: Fabricate number - mode: expert - reminder: When {this_or_that("permanent")} enters the battlefield, you may put {english_number_a(param1)} +1/+1 counter(s) on it. If you don't, create {english_number_a(param1)} 1/1 colorless Servo artifact creature token(s). -# Commander 2016 -keyword: - keyword: Partner with - match: Partnename with name - mode: expert - reminder: When this {if has_pt() then "creature" else "permanent"} enters the battlefield, target player may put {legend_filter(param2)} into their hand from their library, then shuffle. -keyword: - keyword: Partner - match: Partner - mode: expert - reminder: You can have two commanders if both have partner. -keyword: - keyword: Undaunted - match: Undaunted - mode: expert - reminder: This spell costs 1 less to cast for each opponent. -# Aether Revolt -keyword: - keyword: Improvise - match: Improvise - mode: expert - reminder: Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for 1. -keyword: - keyword: Revolt - match: Revolt - mode: pseudo - rules: Revolt - [Something], if a permanent you controlled left the battlefield this turn, [effect]. -# Amonkhet -keyword: - keyword: Aftermath - match: Aftermath - mode: expert - reminder: Cast this spell only from your graveyard, then exile it. -keyword: - keyword: Embalm - match: Embalm cost - mode: expert - reminder: {param1}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a white Zombie {separate_words(spacer: " ", card.sub_type)} with no mana cost. Embalm only as a sorcery. -keyword: - keyword: Exert - match: exert - mode: action - reminder: An exerted {if has_pt() then "creature" else "permanent"} won't untap during your next untap step. -#Hour of Devastation -keyword: - keyword: Afflict - match: Afflict number - mode: expert - reminder: Whenever {this_or_that("creature")} becomes blocked, defending player loses {param1} life. -keyword: - keyword: Eternalize - match: Eternalize cost - mode: expert - reminder: {param1}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a 4/4 black{if not contains(card.sub_type, match: "Zombie") then " Zombie"}{ if separate_words(spacer: " ", card.sub_type) != "" then " " + separate_words(spacer: " ", card.sub_type) } {if not has_pt() then "creature "}with no mana cost. Eternalize only as a sorcery. -#Commander 2017 -keyword: - keyword: Eminence - match: Eminence - mode: pseudo - rules: Eminence - As long as this creature is on the battlefield or in your command zone, [effect]. -#Ixalan -keyword: - keyword: Enrage - match: Enrage - mode: pseudo - rules: Enrage - Whenever this creature is dealt damage, [effect]. -keyword: - keyword: Explore - match: explores - mode: action - reminder: Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on {this_or_that("creature")}, then put the card back or put it into your graveyard. -#Unstable -keyword: - keyword: Assemble a Contraption - match: Assemble - mode: action - reminder: {if contains(card.rule_text, match: "ssemble a ") then "P" else "To assemble a Contraption, p"}ut the top card of your Contraption deck face up onto one of your sprockets. - rules: This is used when the player assembles Contraptions. -keyword: - keyword: assembles a Contraption - match: assembles - mode: action - reminder: {if contains(card.rule_text, match: "ssemble a ") then "P" else "To assemble a Contraption, p"}ut the top card of your Contraption deck face up onto one of your sprockets. - rules: This is used when a permanent assembles Contraptions. -keyword: - keyword: Combine - match: Combine - mode: action - reminder: Its power is equal to their total power, its toughness is equal to their total toughness, and it has their names, mana costs, types, text boxes, etc. -keyword: - keyword: Art menace - match: Art menace - mode: expert - reminder: {this_or_that("creature", upper:true)} can't be blocked except by creatures with two or more visible figures in their art. -keyword: - keyword: Augment - match: Augment cost - mode: expert - reminder: {param1}, Reveal this card from your hand: Combine it with target host. Augment only as a sorcery. -keyword: - keyword: Blurry - match: Blurry - mode: expert - reminder: {this_or_that("creature", upper:true)} can be blocked only if defending player was wearing glasses as it was cast. -keyword: - keyword: Just a second - match: Just a second - mode: expert - reminder: As long as this spell is on the stack, players can't move cards on the battlefield. - rules: Players are also unable to cast spells and activate abilities that aren't mana abilities while this spell, even if they are able to do so without moving cards on the battlefield. -keyword: - keyword: Last strike - match: Last strike - mode: expert - reminder: {this_or_that("creature", upper:true)} deals combat damage after creatures without last strike. -keyword: - keyword: Squirrellink - match: Squirrellink - mode: expert - reminder: Damage dealt by {this_or_that("creature")} also causes you to create that many 1/1 green Squirrel creature tokens. -keyword: - keyword: Triple strike - match: Triple strike - mode: expert - reminder: {this_or_that("creature", upper:true)} deals first-strike, regular, and last-strike combat damage. -keyword: - keyword: Undeathtouch - match: Undeathtouch - mode: expert - reminder: If this would deal damage to a creature card, exile that creature card instead. -#Rivals of Ixalan -keyword: - keyword: Ascend - match: Ascend - mode: expert - reminder: If you control ten or more permanents, you get the city's blessing for the rest of the game. -#Dominaria -keyword: - keyword: Historic - match: historic - mode: action - reminder: Artifacts, legendaries, and Sagas are historic. -#Battlebond -keyword: - keyword: Assist - match: Assist - mode: expert - reminder: Another player can pay up to {if contains(card.casting_cost, match:"X") then "X" else generic_mana(card.casting_cost)} of this spell's cost.{if contains(card.casting_cost, match:"X") then " You choose the value of X."} -#Commander 2019 -keyword: - keyword: Commander ninjutsu - match: Commander ninjutsu cost - mode: expert - reminder: {param1}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand or the command zone tapped and attacking. -keyword: - keyword: Treasure token - match: Treasure toke*s - mode: core - reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "T, Sacrifice this artifact: Add one mana of any color." -#Guilds of Ravnica -keyword: - keyword: Jump-start - match: Jump-start - mode: expert - reminder: You may cast this card from your graveyard by discarding a card in addition to paying its other costs. Then exile this card. -keyword: - keyword: Mentor - match: Mentor - mode: expert - reminder: Whenever {this_or_that("creature")} attacks, put a +1/+1 counter on target attacking creature with lesser power. -keyword: - keyword: Surveil - match: Surveil number - mode: action - reminder: - Look at the top { - if param1.value=="1" then "card of your library. You may put that card into your graveyard." - else "{english_number(param1)} cards of your library, then put any number of them into your graveyard and the rest on top of your library in any order." - } -keyword: - keyword: Undergrowth - match: Undergrowth - mode: pseudo - rules: Undergrowth — [effect], where X is the number of creature cards in your graveyard. -#Ravnica Allegiance -keyword: - keyword: Adapt - match: Adapt number - mode: action - reminder: If {this_or_that("creature")} has no +1/+1 counters on it, put {english_number_a(param1)} +1/+1 counter(s) on it. -keyword: - keyword: Addendum - match: Addendum - mode: pseudo - rules: Addendum — If you cast this spell during your main phase, [effect]. -keyword: - keyword: Afterlife - match: Afterlife number - mode: expert - reminder: Whenever {this_or_that("creature")} dies, create {english_number_a(param1)} 1/1 white and black Spirit creature token(s) with flying. -keyword: - keyword: Riot - match: Riot - mode: expert - reminder: {this_or_that("creature", upper:true)} enters the battlefield with your choice of a +1/+1 counter or haste. -keyword: - keyword: Spectacle - match: Spectacle cost - mode: expert - reminder: You may cast this spell for its spectacle cost rather than its mana cost if an opponent lost life this turn. -#War of the Spark -keyword: - keyword: Amass - match: Amass number - mode: action - reminder: Put {english_number_a(param1)} +1/+1 counter(s) on an Army you control. If you don't control one, create a 0/0 black Zombie Army creature token first. -#Throne of Eldraine -keyword: - keyword: Adamant - match: Adamant - mode: pseudo - rules: Adamant — If at least three [color] mana was spent to cast this spell, [effect]. -keyword: - keyword: Food token - match: Food toke*s - mode: core - reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "2, T, Sacrifice this artifact: You gain 3 life." -#Theros Beyond Death -keyword: - keyword: Escape - match: Escape cost - mode: expert - reminder: You may cast this card from your graveyard for its escape cost. -keyword: - keyword: Gold token - match: Gold toke*s - mode: core - reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "Sacrifice this artifact: Add one mana of any color." -#Ikoria: Lair of Behemoths -keyword: - keyword: Mutate - match: Mutate cost - mode: expert - reminder: If you cast this spell for its mutate cost, put it over or under target non-Human creature you own. They mutate into the creature on top plus all abilities from under it. -keyword: - keyword: Companion - match: Companion — name - mode: expert - reminder: If this card is your chosen companion, you may put it into your hand from outside the game for [3] any time you could cast a sorcery. -#Magic 2021 -keyword: - keyword: Mill - match: mill one_word - mode: core - reminder: {if param1.value == "mills" then "They put" else "Put"} the top {if param2.value == "a" then "" else param2 + " "}{if param2.value == "a" then "card" else "cards"} of {if param1.value == "mills" then "their library into their" else "your library into your"} graveyard. -keyword: - keyword: phases out - match: phases out - mode: expert - reminder: Treat it and anything attached to it as though they don't exist until its controller's next turn. -#Zendikar Rising -keyword: - keyword: Party - match: party - mode: action - reminder: Your party consists of up to one of each of Cleric, Rogue, Warrior, and Wizard. -#Commander Legends -keyword: - keyword: Encore - match: Encore cost - mode: action - reminder: {param1}, Exile this card from your graveyard: For each opponent, create a token copy that attacks that opponent this turn if able. They gain haste. Sacrifice them at the beginning of the next end step. Activate only as a sorcery. -#Kaldheim -keyword: - keyword: Shard token - match: Shard toke*s - mode: core - reminder: {if param1.value == "ns" then "They’re enchantments" else "It’s an enchantment"} with "2, Sacrifice this enchantment: Scry ]1[, then draw a card." -keyword: - keyword: Boast - match: Boast - mode: expert - reminder: Activate this ability only if {this_or_that("creature")} attacked this turn and only once each turn. -keyword: - keyword: Foretell - match: Foretell cost - mode: expert - reminder: During your turn, you may pay [2] and exile this card from your hand face down. Cast it on a later turn for its foretell cost. -#Strixhaven -keyword: - keyword: Learn - match: learn - mode: action - reminder: You may reveal a Lesson card you own from outside the game and put it into your hand, or discard a card to draw a card. -keyword: - keyword: Ward - match: Ward cost - mode: expert - reminder: Whenever {this_or_that("permanent")} becomes the target of a spell or ability an opponent controls, counter it unless that player {for_mana_costs(add:"pays ", non:"", param1, action:true)}. -keyword: - keyword: Magecraft - match: Magecraft - mode: pseudo - rules: Magecraft — Whenever you cast or copy an instant or sorcery spell, [effect]. -# Modern Horizons 2 -keyword: - keyword: Devour type - match: Devour one_word number - mode: expert - reminder: As this enters the battlefield, you may sacrifice any number of {english_plural(param1.value)}. {this_or_that("creature", upper:true)} enters the battlefield with { if param2.value == "1" then "" else if param2.value == "2" then "twice " else english_number(param2) + " times " }that many +1/+1 counters on it. -keyword: - keyword: Trample over - match: Trample over name - mode: expert - reminder: {this_or_that("creature", upper:true)} can deal excess combat damage to the controller of {if param1.value == "planeswalkers" then "the planeswalker it's attacking" else param1.value + " blocking it"}. -# Adventures in the Forgotten Realms -keyword: - keyword: Venture into - match: Venture into name - mode: action - reminder: Enter the first room or advance to the next room. -keyword: - keyword: Pack tactics - match: Pack tactics - mode: pseudo - rules: Pack tactics — Whenever CARDNAME attacks, if you attacked with creatures with total power 6 or greater this combat, [effect]. -# Commander 2021 -keyword: - keyword: Demonstrate - match: Demonstrate - mode: expert - reminder: When you cast this spell, you may copy it. If you do, choose an opponent to also copy it. -# Midnight Hunt -keyword: - keyword: Daybound - match: Daybound - mode: expert - reminder: If a player casts no spells during their own turn, it becomes night next turn. -keyword: - keyword: Nightbound - match: Nightbound - mode: expert - reminder: If a player casts at least two spells during their own turn, it becomes day next turn. -keyword: - keyword: Disturb - match: Disturb cost - mode: expert - reminder: You may cast this card from your graveyard transformed for its disturb cost. -keyword: - keyword: Decayed - match: Decayed - mode: expert - reminder: {if contains(card.type, match:"Token") then "This creature" else "It"} can't block. When it attacks, sacrifice it at end of combat. -keyword: - keyword: Coven - match: Coven - mode: pseudo - rules: Coven — if you control three or more creatures with different powers, [effect]. -# Crimson Vow -keyword: - keyword: Cleave - match: Cleave cost - mode: expert - reminder: You may cast this spell for its cleave cost. If you do, remove the words in square brackets. -keyword: - keyword: Training - match: Training - mode: expert - reminder: Whenever this creature attacks with another creature with greater power, put a +1/+1 counter on this creature. -keyword: - keyword: Blood token - match: Blood toke*s - mode: expert - reminder: {if param1.value == "ns" then "They’re artifacts" else "It’s an artifact"} with "1, T, Discard a card, Sacrifice this artifact: Draw a card." -# Kamigawa Neon Dynasty -keyword: - keyword: Reconfigure - match: Reconfigure cost - mode: expert - reminder: {param1}: Attach to target creature you control; or unattach from a creature. Reconfigure only as a sorcery. While attached, this isn't a creature. -keyword: - keyword: modified - match: modified - mode: action - reminder: Equipment, Auras you control, and counters are modifications. -keyword: - keyword: Compleated - match: Compleated - mode: expert - reminder: {phy_reminder(card.casting_cost)} If life was paid, this planeswalker enters with two fewer loyalty counters. \ No newline at end of file diff --git a/data/magic.mse-game/keywords_custom b/data/magic.mse-game/keywords_custom deleted file mode 100644 index 5f282702..00000000 --- a/data/magic.mse-game/keywords_custom +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/data/magic.mse-game/language b/data/magic.mse-game/language deleted file mode 100644 index f9466970..00000000 --- a/data/magic.mse-game/language +++ /dev/null @@ -1,150 +0,0 @@ - - -# Language specific strings -languages := [ - English: [ - code : "en", - spellcheck_code : "en_US", - pt_separator : "/", - type_separator : " — ", - subtype_separator : " ", - is_creature : match@(match: "(?i)Creature") - is_tribal : match@(match: "(?i)Tribal") - is_artifact : match@(match: "(?i)Artifact") - is_land : match@(match: "(?i)Land") - is_enchantment : match@(match: "(?i)Enchantment") - is_spell : match@(match: "(?i)Instant|Sorcery") - is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") - is_plane : match@(match: "(?i)Plane(?!swalker)") - word_list : "word_list" - ], - Russian: [ - code : "ru", - spellcheck_code : "ru_RU", - pt_separator : "/", - type_separator : " — ", - subtype_separator : " ", - is_creature : match@(match: "(?i)Существо") - is_tribal : match@(match: "(?i)Племенное") - is_artifact : match@(match: "(?i)Артефакт") - is_land : match@(match: "(?i)Земля") - is_enchantment : match@(match: "(?i)Чары") - is_spell : match@(match: "(?i)Мгновенное заклинание|Волшебство") - is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") - is_plane : match@(match: "(?i)Plane(?!swalker)") - word_list : "word_list_ru" - ], - Italiano: [ - code : "it", - spellcheck_code : "it_IT", - pt_separator : "/", - type_separator : " — ", - subtype_separator : " ", - is_creature : match@(match: "(?i)Creatura") - is_tribal : match@(match: "(?i)Tribale") - is_artifact : match@(match: "(?i)Artefatto") - is_land : match@(match: "(?i)Terra") - is_enchantment : match@(match: "(?i)Incantesimo") - is_spell : match@(match: "(?i)Istantaneo|Stregoneria") - is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") - is_plane : match@(match: "(?i)Plane(?!swalker)") - word_list : "word_list_it" - ], - "Português do Brasil" : [ - code : "pt-br", - spellcheck_code : "pt_BR", - pt_separator : "/", - type_separator : " — ", - subtype_separator : " ", - is_creature : match@(match: "(?i)Criatura") - is_tribal : match@(match: "(?i)Tribal") - is_artifact : match@(match: "(?i)Artefato") - is_land : match@(match: "(?i)Terreno") - is_enchantment : match@(match: "(?i)Encantamento") - is_spell : match@(match: "(?i)Mágica Instantânea|Feitiço") - is_planeswalker : match@(match: "(?i)Planeswalker|Emblem") - is_plane : match@(match: "(?i)Plane(?!swalker)") - word_list : "word_list_pt" - ], - Français: [ - code : "fr", - spellcheck_code : "fr_FR", - pt_separator : "/", - type_separator : " : " - subtype_separator : " et ", - is_creature : match@(match: "(?i)Creature|Créature") - is_tribal : match@(match: "(?i)tribal") - is_artifact : match@(match: "(?i)Artefact") - is_land : match@(match: "(?i)Terrain") - is_enchantment : match@(match: "(?i)Enchantement") - is_spell : match@(match: "(?i)Éphémère|Rituel") - is_planeswalker : match@(match: "(?i)Planeswalker") - is_plane : match@(match: "(?i)Plane(?!swalker)") - word_list : "word_list_fr" - ] -] - -# The selected language -language := { languages[set.card_language] or else languages.English } -spanish_number := { - input := remove_tags(input) - espanol_ones_array := ["cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince"] - espanol_tens_array := ["cero", "diec", "viente", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa"] - function_map := [ - small: {espanol_ones_array[input]}, - large: { - ones := input mod 10 - tens := (input - ones) / 10 - final_answer := espanol_tens_array[tens] + " y " + espanol_ones_array[ones] - final_answer := replace(final_answer, match:" y cero", replace:"") ##remove redundant "and zero" - final_answer := replace(final_answer, match:"(diec|vient)e? y ", replace:"\\1i") ##16-29 are one word - final_answer - }, - oversized: {input} - ] - if input == "number" then "" - else if input < 16 then function_map["small"]() - else if input < 100 then function_map["large"]() - else function_map["oversized"]() -} -portuguese_number := { - input := remove_tags(input) - portugues_ones_array := ["zero", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez", "onze", "doze", "treze", "catorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove"] - portugues_tens_array := ["zero", "deze", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"] - function_map := [ - small: {portugues_ones_array[input]}, - large: { - ones := input mod 10 - tens := (input - ones) / 10 - final_answer := portugues_tens_array[tens] + " e " + portugues_ones_array[ones] - final_answer := replace(final_answer, match:" e zero", replace:"") ##remove redundant "and zero" - final_answer - }, - oversized: {input} - ] - if input == "number" then "" - else if input < 20 then function_map["small"]() - else if input < 100 then function_map["large"]() - else function_map["oversized"]() -} -french_number := { - input := remove_tags(input) - francais_ones_array := ["zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "nuef", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize","dix-sept","dix-huit","dix-neuf"] - francais_tens_array := ["zéro", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingts", "quatre-vingt-dix"] - function_map := [ - small: {francais_ones_array[input]}, - large: { - ones := input mod 10 - tens := (input - ones) / 10 - final_answer := francais_tens_array[tens] + "-" + francais_ones_array[ones] - final_answer := replace(final_answer, match:"-zéro", replace:"") ##remove redundant "and zero" - final_answer := replace(final_answer, match:"-un", replace:" et un") ##21, 31 et al. use "et un" - final_answer - }, - oversized: {input} - ] - if input == "number" then "" - else if input < 20 then function_map["small"]() - else if input < 100 then function_map["large"]() - else function_map["oversized"]() -} diff --git a/data/magic.mse-game/magic-words.en_US b/data/magic.mse-game/magic-words.en_US deleted file mode 100644 index 2f220b09..00000000 --- a/data/magic.mse-game/magic-words.en_US +++ /dev/null @@ -1 +0,0 @@ -merfolk \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.en_us.dic b/data/magic.mse-game/magic-words.en_us.dic deleted file mode 100644 index b2cd050e..00000000 --- a/data/magic.mse-game/magic-words.en_us.dic +++ /dev/null @@ -1,176 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 -ziziziz \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.fr_FR b/data/magic.mse-game/magic-words.fr_FR deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.fr_FR +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.fr_FR.dic b/data/magic.mse-game/magic-words.fr_FR.dic deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.fr_FR.dic +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.it_IT b/data/magic.mse-game/magic-words.it_IT deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.it_IT +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.it_IT.dic b/data/magic.mse-game/magic-words.it_IT.dic deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.it_IT.dic +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.pt_BR b/data/magic.mse-game/magic-words.pt_BR deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.pt_BR +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.pt_BR.dic b/data/magic.mse-game/magic-words.pt_BR.dic deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.pt_BR.dic +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.ru_RU b/data/magic.mse-game/magic-words.ru_RU deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.ru_RU +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/magic-words.ru_RU.dic b/data/magic.mse-game/magic-words.ru_RU.dic deleted file mode 100644 index 60ec4797..00000000 --- a/data/magic.mse-game/magic-words.ru_RU.dic +++ /dev/null @@ -1,175 +0,0 @@ -148 -mana -untap/MSDRJZG -unblockable -planeswalker -noncreature -nonland -nonenchantment -nonartifact -nonwhite -nonblue -nonblack -nonred -nongreen -unblock/USDG -precombat -postcombat -scry -plainswalk -islandwalk -swampwalk -mountainwalk -forestwalk -landwalk -desertwalk -plainshome -islandhome -swamphome -mountainhome -foresthome -landhome -soulshift -ninjitsu -bushido -lifelink -gravestorm -fateseal -bloodthirst -djinn -unattach -face-down -face-up -spell's -guerrilas -mages -exit-the-battlefield -enter-the-battlefield -havok -spectre -gargadon -gargadons -Crovax -evincar -and/or -20/20 -planeswalkers -Merfolk -deathtouch -noncombat -Urza -Karn -Ajani -Goldmane -Jace -Beleren -Liliana -Vess -Chandra -Nalaar -Garruk -Wildspeaker -Tezzeret -Elspeth -Tirel -Nicol -Bolas -Sarkhan -Vol -Nissa -Revane -Baltrice -Crucius -scryers -+1 -etherium --1 -Kothophed -wurm -Tolaria -Weatherlight -Ertai -Barrin -Dominaria -Benalish -Benalia -Sisay -golem -Keld -Maraxus -Volrath -Mirri -Multani -maro-sorcerer -Squee -Tahngarth -Crovax -Selenia -Greven -il-Vec -Argive -Samite -Orim -Argivian -Rath -Starke -Sidar -Kondo -evincar -multiverse -Eladamri -Skyshroud -guerilla -Soltari -Lyna -Rofellos -spellcasting -Korvecdal -Vuel -Takara -self-interest -Ashnod -Mishra -Fallaji -Gix -Phyrexia -Phyrexian -supremacy -Tawnos -Argoth -Xantcha -Saproling -nontoken -mage -Ashling -Jaya -Maralen -Mornsong -non-Sliver -non-Shapeshifter -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 \ No newline at end of file diff --git a/data/magic.mse-game/packs b/data/magic.mse-game/packs deleted file mode 100644 index d95ee5e5..00000000 --- a/data/magic.mse-game/packs +++ /dev/null @@ -1,209 +0,0 @@ -pack type: - name: random - select: no replace - filter: not is_token_card() -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: opening hand - item: - name: random - amount: 7 - -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 \ No newline at end of file diff --git a/data/magic.mse-game/script b/data/magic.mse-game/script deleted file mode 100644 index 066549bd..00000000 --- a/data/magic.mse-game/script +++ /dev/null @@ -1,1845 +0,0 @@ -############################################################## Localization - -include file: language -# needed by all style files anyway -include file: /magic-blends.mse-include/new-blends - -############################################################## version check -version_date := {"2022-01-30"} -############################################################## Sorting mana symbols - -# correctly sort a mana symbol (no guild mana) -mana_sort := sort_text@(order: "\\?XYZI[0123456789]VLHSCAIE(WUBRG)") -# correctly sort wedge mana -mana_sort_wedge := sort_text@(order: "\\?XYZI[0123456789]VLHSCAIE(WBGUR)") -mana_unsort := sort_text@(order:"[/\\?XYZI0123456789VLHSCAIEWUBRG]") -# correctly sort guild mana -mana_sort_guild := sort_text@(order: "[\\?XYZI01234567890VLHSCAIEWUBRG/|]") + - replace@( - # No lookbehind :( - #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 := { chosen(set.mana_cost_sorting, choice: "tarkir wedge sorting") and ( number_of_items(in: sort_text(order:"", input), filter: "") == 3 ) } -mana_has_wedge := { mana_is_wedge() and (sort_text(order:"", input) == "WUR" or sort_text(order:"", input) == "WBR" or sort_text(order:"", input) == "WBG" or sort_text(order:"", input) == "UBG" or sort_text(order:"", input) == "URG")} -# convert card.card_color to WUBRG -card_color_to_letters := { - color_string := trim_colors(input) - out_string := (if contains(color_string, match:"white") then "W" else "")+(if contains(color_string, match:"blue") then "U" else "")+(if contains(color_string, match:"black") then "B" else "")+(if contains(color_string, match:"red") then "R" else "")+(if contains(color_string, match:"green") then "G" else "") - out_string -} -card_is_wedge := { - color_string := card_color_to_letters(input) - if color_string == "WUR" or color_string == "WBR" or color_string == "WBG" or color_string == "UBG" or color_string == "URG" then true else false -} -list_colors := { - list := trim_colors(input) - cc := length(comma_count(list)) - if cc == 1 then - list := replace(list, match:", ", replace:" and ") - if cc > 1 then - list := replace(list, match:", ", replace:", and ", in_context:"[^ ]+$") - list -} -# A mana cost can contain both normal and guild mana -mana_filter := to_upper + { - if chosen(set.mana_cost_sorting, choice: "unsorted") then mana_unsort() - else if mana_has_guild() then mana_sort_guild() - else if mana_has_wedge(input) then mana_sort_wedge(input) - else mana_sort() -} -# Like mana filter, only also allow tap symbols: -tap_reduction := - replace@(match:"T+", replace:"T")+ - replace@(match:"Q+", replace:"Q") -tap_filter := sort_text@(order: "") -mana_filter_t := replace@( # Remove [] used for forcing mana symbols - match: "[\\[\\]]", - replace: "" - ) + { tap_reduction(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 "" -} -mana_name := { - if input == "white" then "W" - else if input == "blue" then "U" - else if input == "black" then "B" - else if input == "red" then "R" - else if input == "green" then "G" - else "C" -} -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: "") -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: "]*>[^<]+]*>" - in_context: "(?ix) (\\n|^)[^:]*(,|:) | (pays?|additional|costs?)[ ]", - replace: "" - ) + - # keep only mana - filter_text@(match: "]*>([^<]+)") + color_filter; -# get the land frame for a "WUBRG"-style input. -land_multicolor := { - count := number_of_items(in: colors) - if count == 0 then "land" - else if count == 1 then color_names_1() + ", land" - else if count == 2 then color_names_2() + ", land" - else "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: rules)) -}@(rules: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 + " is") 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)+"()* \\.") - if text != "" then ( - if contains(text, match: "all colors") then ( - colors := "WUBRG" - if land == "true" 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 == "true" then land_multicolor() - else mana_to_color(hybrid: "") - ) - ) - else "" - ) - else "" -} - -is_creature := match@(match: "(?i)Creature") -is_creaturish := match@(match: "(?i)(Creature|Vehicle)") -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_aura := match@(match: "(?i)Aura") -is_spell := match@(match: "(?i)Instant|Sorcery") -is_sorcery := match@(match: "(?i)Sorcery") -is_instant := match@(match: "(?i)Instant") -is_planeswalker := match@(match: "(?i)Planeswalker") -is_legendary := match@(match: "(?i)Legendary") -match_vehicle := contains@(match:"Vehicle") -match_snow := contains@(match:"Snow") - -# The color of a card -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, rules:rules_text) - 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 -}; -##todo check nil -has_two_names := {contains(card.shape, match:"split") or contains(card.shape, match:"adventure") or contains(card.shape, match:"flip") or contains(card.shape, match:"double faced") or contains(card.shape, match:"aftermath")} -# 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 -} - - -############################################################## Card number -# exportname - exporter_name_filter := filter_text@(match:"!exporte?r?name [^\n!]+") - exporter_name_grabber := replace@(match:"!exporte?r?name ", replace:"") - export_name := { exporter_name_grabber(exporter_name_filter(card.notes))} - -# 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 "An" at the beginning - replace@(match: "^(The|An?) ", replace: "") + - # Remove commas and apostrophes - replace@(match: "(,|'|’)", replace: "") + - # Remove bold and italic tags - replace@(match: "(|||)", 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: "") - 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: "") - 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: "") - 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() } - else 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_offset := {pull_comma_array(set.card_number_offsets, cell:0, end:false, default:0)} -set_number_offset := {pull_comma_array(set.card_number_offsets, cell:1, end:false, default:0)} -card_number := { - position ( - of: card - in: set - order_by: { rarity_sort() + sort_index() + sort_name(card.name) + sort_name(export_name())} - filter: set_filter() - ) + 1 + to_number(card_number_offset()) -} -card_count := { - number_of_items(in: set, filter: set_filter()) + to_number(set_number_offset()) -} - -#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 - -trim_reminder_x := replace@(match: ". X can’t be 0.", replace: "") - -# If the 'input' parameter is a mana costs, then adds 'add' -for_mana_costs := { - if input.separator_before == "—" and contains(input.param, match: " ") then ( ##multi word - if comma_count(input.param) == "," then ( ##two part - if match(match: "^[VLHSCAIETQ\\?XYZIWUBRG0-9/|]+,", input.param) then ##starts with mana - "{add}{alternative_cost(input.param, trim:combined_cost, s:action)}" ##"add" mana - else "{alternative_cost(input.param, trim:combined_cost, s:action)}{non}" ## else cost "non" - ) else if contains(input.param, match: ",") then ( ##three+ parts - if match(match: "^[VLHSCAIETQ\\?XYZIWUBRG0-9/|]+,", input.param) then ##starts with mana - "{add}{alternative_cost(input.param, trim:long_cost, s:action)}" ##"add" mana with long formatting - else "{alternative_cost(input.param, trim:long_nomana_cost, s:action)}{non}" ## else cost "non" with long formatting - ) else - "{alternative_cost(input.param, s:action, trim:lower_first)}{non}" ##one, nonmana, part - ) else if match(match: "^[VLHSCAIETQ\\?XYZIWUBRG0-9/|]+$", input.param) then ##one word - "{add}{input.param}" ##mana - else - "{alternative_cost(input.param, trim:combined_cost, s:action)}{non}" ##nonmana -}@(non:" in addition to any other costs", action:false) - -# Convert extra costs -long_cost := replace@(match:", [A-Z]", replace: { to_lower() } ) -long_nomana_cost := replace@(match:"[A-Z]", replace: { to_lower() }) -# Convert first character to lower case -lower_first := replace@(match:"^[A-Z]", replace: { to_lower() }) -combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+ - replace@(match:",", replace:" and")+ - replace@(match:"^[VLHSCETQ\\?XYZIWUBRG0-9/|]+", in_context: "(^|[[:space:]])(?![a-z])", replace: "&")+ - replace@(match:"^[A-Z]", replace: { to_lower() }) -alternative_cost := { - input := trim(input) - if s then - input := actionize(input) - input -}@(trim: lower_first, s:false, trim:{input}) -actionize := replace@(match:"(activate|ante|cast|choose|create|destroy|discard|double|draw|exchange|exile|fight|mill|play|put|regenerate|return|reveal|sacrifice|shuffle|tap|untap|transform|vote|exert|pay)(?=($| |,|\\.))", replace:"\\1s") - +replace@(match:"(attach)", replace:"\\1es") - +replace@(match:"scry", replace:"scries") - +replace@(match:"your", replace:"their") -# -protection_code := { - output := if match(input, match:"(artifacts|creatures|enchantments|instants|lands|planeswalkers|sorceries|tribals|planes|schemes|emblems|conspiracies|^[A-Z]|^[^ ]* named)") then replace(input, match:"and from", replace:"or", in_context:" ") - else if match(input, match:"^(converted|mana|power|toughness)") then "anything with " + replace(input, match:"and from", replace:"or", in_context:" ") - else if contains(input, match:"the chosen player") then "anything " + replace(input, match:"the chosen", replace:"controlled by that") - else if contains(input, match:"the chosen") then "anything with " + replace(input, match:"the chosen", replace:"that") - else if contains(input, match:"all colors") then "anything " + replace(input, match:"all colors", replace:"that's white, blue, black, red, or green") - else if match(input, match:"^you$") then "anything you control" - else if match(input, match:"^its owner$") then "anything its owner controls" - else if match(input, match:"^(each of )?your opponents$") then "anything " + replace(input, match:"(each of )?your opponents", replace:"controlled by those players") - else if match(input, match:"(the|a) [^\n]* of your choice") then "anything " + replace(input, match:"(the|a) ([^\n]*) of your choice", replace:"of that \\2") - else if input == "colorless" then "anything colorless" - else "anything " + replace(english_singular(input), match:"and from", replace:"or", in_context:" ") - output := " targeted, dealt damage, enchanted, equipped by " + output - if match(output, match:"(artifacts|creatures|instants|lands|planeswalkers|sorceries|tribals|planes|schemes|emblems|conspiracies|by [A-Z])") and not match(output, match:"(enchantmentsAura|Curse)") then - output := replace(output, match:", enchanted", replace:"") - else output := output - if match(output, match:"(enchantments|creatures|instants|lands|planeswalkers|sorceries|tribals|planes|schemes|emblems|conspiracies|by [A-Z])") and not match(output, match:"(artifacts|Equipment)") then - output := replace(output, match:" equipped", replace:"") - else output := output - if match(output, match:"equipped by") then output := replace(output, match:"equipped by", replace:"or equipped by") - else if match(output, match:"enchanted, by") then output := replace(output, match:"enchanted, by", replace:"or enchanted by") - else if match(output, match:"dealt damage, by") then output := replace(output, match:"dealt damage, by", replace:"or dealt damage by") - else "" - if match(output, match:"^ targeted, or dealt damage by") then output := replace(output, match:"^ targeted, or dealt damage by", replace:" targeted or dealt damage by") - if match(output, match:"anything [A-Z]") then output := replace(output, match:"anything ", replace:"") - if match(output, match:"or les") then output := replace(output, match:"or les$", replace:"or less") - if match(output, match:"(anything )?everything") then output := replace(output, match:"(anything )?everything", replace:"anything") - output := (if self_pro_check(card.text) then "You can't be" else if is_spell(card.type) then "It can't be blocked," else if is_creaturish(card.type) then "This creature can't be blocked," else "This permanent can't be") + output - output -} -self_pro_check := match@(match:"You ha(ve|s) protection") -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]|^)targets?([^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]") - -iterate_fix := remove_tags - +replace@(match: "^\\.", replace:"") - +replace@(match: "^,", replace:"") - +replace@(match: "^[ ]$", replace:"") -iterate_trim := replace@(match:" times", replace:""); -iterate_digits := { - if iterate_trim(iterate_fix(input)) == "" then "1" - else if iterate_trim(iterate_fix(input)) == " one" then "1" - else if iterate_trim(iterate_fix(input)) == " once" then "1" - else if iterate_trim(iterate_fix(input)) == " two" then "2" - else if iterate_trim(iterate_fix(input)) == " twice" then "2" - else if iterate_trim(iterate_fix(input)) == " three" then "3" - else if iterate_trim(iterate_fix(input)) == " four" then "4" - else if iterate_trim(iterate_fix(input)) == " five" then "5" - else if iterate_trim(iterate_fix(input)) == " six" then "6" - else if iterate_trim(iterate_fix(input)) == " seven" then "7" - else if iterate_trim(iterate_fix(input)) == " eight" then "8" - else if iterate_trim(iterate_fix(input)) == " nine" then "9" - else if iterate_trim(iterate_fix(input)) == " ten" then "10" - else if iterate_trim(iterate_fix(input)) == " eleven" then "11" - else if iterate_trim(iterate_fix(input)) == " twelve" then "12" - else if iterate_trim(iterate_fix(input)) == " thirteen" then "13" - else if iterate_trim(iterate_fix(input)) == " fourteen" then "14" - else if iterate_trim(iterate_fix(input)) == " fifteen" then "15" - else if iterate_trim(iterate_fix(input)) == " sixteen" then "16" - else if iterate_trim(iterate_fix(input)) == " seventeen" then "17" - else if iterate_trim(iterate_fix(input)) == " eighteen" then "18" - else if iterate_trim(iterate_fix(input)) == " nineteen" then "19" - else if iterate_trim(iterate_fix(input)) == " twenty" then "20" - else iterate_trim(iterate_fix(input)) -} -digital_number := { - input := replace(input, match:"up to ", replace:"") - if input == "zero" then 0 - else if input == "one" or input == "a" or input == "an" then 1 - else if input == "two" then 2 - else if input == "three" then 3 - else if input == "four" then 4 - else if input == "five" then 5 - else if input == "six" then 6 - else if input == "seven" then 7 - else if input == "eight" then 8 - else if input == "nine" then 9 - else if input == "ten" then 10 - else if input == "eleven" then 11 - else if input == "twelve" then 12 - else if input == "thirteen" then 13 - else if input == "fourteen" then 14 - else if input == "fifteen" then 15 - else if input == "sixteen" then 16 - else if input == "seventeen" then 17 - else if input == "eighteen" then 18 - else if input == "nineteen" then 19 - else if input == "twenty" then 20 - else input -} -reverse_elements := {for element from 1 to length(input) do input[length(input) - element] + " "} -######################## Level Margins -#### these will be determined by the style affecting the margins and otherwise be 0 -margin_left := {0} -margin_right := {0} -margin_top := {0} -remove_margins := replace@( - match: "", - replace:"" -) -##remove 0 margins and margins with no text -cull_margins := replace@(match:"", replace:"")+ - replace@(match:"", replace:"") - -#### this gives a big array so we can grab_margins["lv1"] etc anywhere -grab_margins := {[ lv1: [margin_left("lv1"), margin_right("lv1"), margin_top("lv1")], - lv2: [margin_left("lv2"), margin_right("lv2"), margin_top("lv2")], - lv3: [margin_left("lv3"), margin_right("lv3"), margin_top("lv3")], - lv4: [margin_left("lv4"), margin_right("lv4"), margin_top("lv4")], - lv5: [margin_left("lv5"), margin_right("lv5"), margin_top("lv5")], - lv6: [margin_left("lv6"), margin_right("lv6"), margin_top("lv6")], - lv7: [margin_left("lv7"), margin_right("lv7"), margin_top("lv7")], - lv8: [margin_left("lv8"), margin_right("lv8"), margin_top("lv8")], - text: [margin_left("text"), margin_right("text"), margin_top("text")], - text2: [margin_left("text2"), margin_right("text2"), margin_top("text2")], - text3: [margin_left("text3"), margin_right("text3"), margin_top("text3")], - text4: [margin_left("text4"), margin_right("text4"), margin_top("text4")], - text5: [margin_left("text5"), margin_right("text5"), margin_top("text5")], - text6: [margin_left("text6"), margin_right("text6"), margin_top("text6")], - unknown: [0,0,0] -]} -#### then with apply_margins(field, name:fieldname), add the margins into the text -apply_margins := { - margin_data := grab_margins()[name] or else [0,0,0] - cull_margins("" + remove_margins(input) + "") -} -is_modal := contains@(match:"

  • ") - -bump_text := { - blocks := split_text(input, match:"\n"); - new_text := blocks[0]; - for x from 1 to length(blocks)-1 do new_text := new_text + "\n" + bumper(blocks[x]) - new_text -} -bumper := { - #if this text isn't modal, at a 5 px margin - if is_modal(input) then input else - cull_margins("" + remove_margins(input) + "") - -} -inserts_values := { - split_text(set.inserts+";;;;;;;;;", match:";") -} -############################################################## The text box - -# Filters for the text box -# context in which mana symbols are found -mana_context := - "(?ix) # case insensitive, ignore whitespace - (^|[[:space:]\"(“']) # start of a word - ( - : # G: something - | , # G, tap: something - | or[ ] # Add X, Y, or Z. - | [ ]to[ ]your # Add X, Y, or Z to your mana pool. - | [ ]was[ ]spent # if G was spent to cast - | [ ]can[ ]be[ ]paid - | (pays?|additional|costs?|the|adds?|pay(ed)?[ ](with|using)) # pay X. creatures cost 1 less. pay an additional G. - ([ ]either)? # pay either X or Y - ([ ](]*>)?[-+=]?[VLHSCETQ\\?XYZIEWUBRG0-9/|]+(]*>)?,)* # pay X, Y or Z - ([ ](]*>)?[-+=]?[VLHSCETQ\\?XYZIEWUBRG0-9/|]+(]*>)?[ ](and|or|and/or))* # pay X or Y - [ ] - ([,.)\"”]|$ # (end of word) - |[ ][^ .,]*$ # still typing... - |[ ]( or | and | in | less | more | to ) # or next word is ... - ) - ) - | # keyword argument that is declared as mana - | [ ]* # keyword argument that is declared as cost - | , # keyword argument that is declared as cost - "; -mana_un_context := "(converted mana costs? | life)" - -# 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 - ]*>.*?]*> # cardnames and stuff - | [+-]?[0-9X]+ / [+-]?[0-9X]+ # '3/3', '+X/+X' - )$") - -# the rule text filter -# - adds mana symbols -# - makes text in parentheses italic -equip_filter := - replace@(match:"This creature", replace:"It") - +replace@(match:"this creature", replace:"it") -this_or_that := { - this := "this" - that := "that" - type := input - if is_creaturish(card.type) then type := "creature" - if upper then ( - this := "This" - that := "That" - ) - if(type == "land" and not is_land(card.type)) then type := "permanent" - this_that := this - if ((input == "creature" and not is_creaturish(card.type)) or is_spell(card.type)) - then this_that := that - this_that + " " + type -}@(upper:false) -softline_ripper := - replace@(match:"", replace:"") -auto_correct := - replace@(match:" it’s (controller|owner|power|toughness|converted|other)", replace:" its \\1") - +replace@(match:"Then, if" replace:"Then if") - +replace@(match:"([Ff]irst|[Dd]ouble) Strike" replace:"\\1 strike") - +replace@(match:"Splice (Ont|unt|int)" replace:"Splice ont") - +replace@(match:"(ecomes?) the Monarch" replace:"\\1 the monarch") - +replace@(match:"does (combat|[X0-9]+) damage" replace:"deals \\1 damage") - +replace@( - match: "(gains |gain |have |has )" # preceded by this - + "()" # inside a kw - + "([A-Z])" # match this - replace: { _1 + _2 + to_lower(_3)}) -auto_errata := - replace@(match:"converted mana cost", replace:"mana value") - +replace@(match:"hen shuffle your library", replace:"hen shuffle") - +replace@(match:"this (?:ability )?(?:only )?(?:any ?time you could cast|as) a", in_context: "(Activate|Play) n? (instant|sorcery)", replace:"only as a") -ex_test := { - expand_keywords( - input, - condition: { - correct_case or (mode != "pseudo" and not used_placeholders) - } - default_expand: { - chosen(choice:if correct_case or mode == "action" then mode else "lower case", set.automatic_reminder_text) and chosen(choice:mode, set.automatic_reminder_text) - }, - combine: { - keyword := "{keyword}" - reminder := process_english_hints(if has_pt() then reminder else equip_filter(reminder)) - if mode == "pseudo" then "{keyword}" - else keyword + if expand then " ({reminder})" else "" - - }, - margin_code: margin_code - ) -} -text_filter := - # step 1 : remove all automatic tags - remove_tag@(tag: "") + - remove_tag@(tag: "") + - remove_tag@(tag: "") + - remove_tag@(tag: "") + - remove_tag@(tag: "") + - remove_tag@(tag: "", - replace:"BOLDAROUND" - )+ - replace@( - match:"", - replace:"ITALAROUND" - )+ - replace@( - match:"", - replace:"SYMAROUND" - )+ - # 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 or mode == "action" then mode else "lower case", set.automatic_reminder_text) and chosen(choice:mode, set.automatic_reminder_text) - }, - combine: { - keyword := "{keyword}" - reminder := process_english_hints(reminder) - if mode == "pseudo" then "{keyword}" - else keyword + if expand then " ({reminder})" else "" - }) + - # step 2ba : apply face_code - replace@( - match: "face_(.*?)_end", - replace: {face_code(_1)} - )+ - # step 2b : move action keywords' reminder text to the end of the line - replace@( - match: "(]+> (?:(?!]+>]*>)([^\n]*)", #######removed "| ?]+> (?:(?!]+>]*>)([^\n]*?)(]+> (?:(?!]+>]*>)([^\n]*)", - replace: "\\2\\4\\3\\1" - ) + - # step 2c : allow a sentence after lowercase reminder text for equips etc. - #replace@( - # match: "(]+>[a-z][^<]+)((?:(?!]*>)([^\n]+)$", - # replace: "\\1\\3\\2" - # ) + - # step 2d : remove duplicate reminder text - replace@( - match: "(]*>[^)]+[)]]*>)([^\n]+)\\1" - replace: "\\2\\1" - ) + - # step 2e : combine reminder texts - replace@( - match: "[)](]+>]>]+> )[(]" - replace: "\\1" - ) + - # step 2f : temp fix for formatting buttons - replace@( - match:"BOLDAROUND", - replace:"" - )+ - replace@( - match:"ITALAROUND", - replace:"" - )+ - replace@( - match:"SYMAROUND", - replace:"" - )+ - replace@( - match:"-\n-" - replace:"\n" - )+ - # step 3a : expand shortcut word CARDNAME - replace@( - match: "CARDNAME>?", - in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'|‘|-|—|/|​)", # TODO: Allow any punctuation before - replace: "" - ) + - # step 3b : expand shortcut word LEGENDNAME - replace@( - match: "LEGENDNAME>?", - in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'|‘|/|​)", # TODO: Allow any punctuation before - replace: "" - ) + - # step 3c : fill in atom fields - tag_contents@( - tag: "", - contents: { "" + (if card_name=="" then "CARDNAME" else strip_card_codes(card_name)) + "" } - ) + - tag_contents@( - tag: "", - contents: { "" + (if card_name=="" then "LEGENDNAME" else legend_filter(strip_card_codes(card_name))) + "" } - ) + - replace@( - match: "INS([1-9])", - in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'|‘|/|​)", - replace: "" - ) + - { - out := input - for x from 1 to 9 do - out := tag_contents(out, - tag: "", - contents: { "" + (if inserts_values()[x-1] == "" then "INS"+x else inserts_values()[x-1]) + "" } - ) - out - } + - # step 4 : explict non mana symbols - replace@( - match: "\\][-+=]?[VLHSCETQ\\?XYZIWUBRG0-9/|]+\\[", - replace: {"" + mana_filter_t() + ""} ) + - # step 5 : add mana & tap symbols - replace@( - match: "([+=-][XYZ0-9/|]+)", - in_context: mana_context, - replace: {"" + _1 + ""} ) + - replace@( - match: "\\b[VLHSCETQ\\?XYZIWUBRG0-9/|]+\\b", - in_context: mana_context, - replace: {"" + mana_filter_t() + ""} ) + - # step 5b : remove false positive mana & tap symbols - replace@( - match: "([VLHSCETQ\\?XYZIWUBRG0-9/|]+)", - in_context: mana_un_context, - replace: "\\1" ) + - # step 5c : add explicit mana symbols - replace@( - match: "\\[[-+=]?[VLHSCETQE\\?XYZIWUBRG0-9/|]+\\]", - replace: {"" + mana_filter_t() + ""} ) + - # step 6 : curly quotes - {if set.curly_quotes then curly_quotes(input) else input} + - # step 7 : italicize text in parenthesis - replace@( - match: "[(]([^)\n]|[(][^)\n]*[)])*[)]?", - in_context: "(^|[[:space:]])|&") + - # step 7b : indent bullets - replace@( - match: "^(• )([^•]+)", - replace: {"
  • " + _1 + "" + _2 + "
  • "} - )+ - # step 7c : clean up modals - { - if is_modal(input) - then bump_text(softline_ripper(input)) - else input - }+ - # 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.auto_correct then - auto_correct(input) - else input } + - { - if set.auto_errata then - auto_errata(input) - else input } + - { 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 - } - -modal_lines := replace@(match:"", replace:"") - +replace@(match:"(.+)", replace:"\\1") - -modal_text_filter := text_filter + modal_lines - -############################################################## Other boxes - -# the flavor text filter -# - makes all text italic -flavor_text_filter := - # step 1 : remove italic tags - remove_tag@(tag: "") + - # step 2 : surround by tags - { "" + input + "" } + - # curly quotes - {if set.curly_quotes then curly_quotes(input) else input} + - # 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: "{input}" -} - -break_subtypes := split_text@(match: " +|[^<]*", include_empty:false) -sub_type_filter := { - input := remove_tag(tag: "{part}" - else - lang.subtype_separator + "{part}" - ) + - (if length(parts) > 0 then - # Add a new box at the end - "{lang.subtype_separator}" - else - "" - ) - ) 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)) else "" -} -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)) - else "" -} -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))) - else "" -} - -# Determine a rarity code for M15 styles. -rarity_code := { - if not set.rarity_codes then "" - else 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_half_generic := match@(match: "1/2") -is_colored_mana := match@(match: "[WUBRG]") -only_numbers := filter_text@(match: "^[0123456789]+") -cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRGC] | [0-9](/[WUBRGCVLHSCETQ2]) | [0-9]+(?!/[WUBRGCVLHSCETQ2]) | [WUBRGCVLHS0-9](/[WUBRGCVLHS])\{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 - )) -} -mana_value := cmc -write_wubrg := { - (if match(input, match:"white") then "W" else "")+ - (if match(input, match:"blue") then "U" else "")+ - (if match(input, match:"black") then "B" else "")+ - (if match(input, match:"red") then "R" else "")+ - (if match(input, match:"green") then "G" else "") -} -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 - )) -} -generic_mana := {to_number( - for each sym in cmc_split(to_text()) do ( - numbers := only_numbers(sym) - if is_half_generic(sym) then 0.5 - else if numbers != "" then to_int(numbers) - else 0 # all other symbols are 1 - )) -} - -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") - multi_color := count_chosen(choices:"white, blue, black, red, green") - if land then "land" - else if multi then "multicolor" - else if multi_color == 2 and chosen(choice:"artifact") then "hybrid" ##hybrid artifacts would show as their first color - 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") } -is_legend := { true } -mainframe_walker := {false} -mainframe_walker_text_script := {combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text)} -mainframe_walkerb := {false} -mainframe_walker_text_scriptb := {combined_editor(field1: card.level_5_text, separator1: "\n", field2: card.level_6_text, separator2: "\n", field3: card.level_7_text)} -alt_text := {false} -alt_text_script := {false} -alt_textb := {false} -alt_text_scriptb := {false} - -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: "^", replace: "")+ - replace@(match: "[ ]+", in_context: "$", replace: "") -remove_type := replace@(match: "(Artifact|Creature|Enchantment|Instant|Land|Planeswalker|Sorcery)", replace: "")+ - replace@(match: "[ ]+", in_context: "^", replace: "")+ - replace@(match: "[ ]+", in_context: "$", replace: "") -node_script := { if card.shape == "double faced" then "transform day" 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 "" -} - -ancestral_mana := { card.pt != "" and card.pt == "" } -is_unsorted := {"false"} -special_text := { "" } -special_text2 := { "" } -exporter_name_filter := filter_text@(match:"!exporte?r?name [^\n!]+") -exporter_name_grabber := replace@(match:"!exporte?r?name ", replace:"") -card_name := { replace(if exporter_name_grabber(exporter_name_filter(card.notes)) != "" then exporter_name_grabber(exporter_name_filter(card.notes)) else card.name, match:" $", replace:"") } -exporter_num_filter := filter_text@(match:"!num [^\n!]+") -exporter_num_grabber := replace@(match:"!num ", replace:"") -trim_zeroes := replace@(match: "^00?", replace: "")+ - replace@(match: "a?/[0-9b]+", replace: "") -corrected_card_number := { if exporter_num_grabber(exporter_num_filter(card.notes)) != "" then exporter_num_grabber(exporter_num_filter(card.notes)) else if card.custom_card_number != "" then trim_zeroes(card.custom_card_number) else card_number() } - -comma_count := filter_text@(match:",") -round_up := {to_int(0.99999999999998+input)} -round_near := {to_int(0.5+input)} -to_title := replace@(match:"(^| )([A-z])([^ ]*)", replace:{_1+ to_upper(_2) + to_lower(_3)}) -to_sentence := replace@(match:"(^|\n)([A-z])([^\n]*)", replace:{_1+ to_upper(_2) + to_lower(_3)}) -join := { - string := "" - if length(input) == 2 then spacer := " " - if length(input) == 1 then closing := "" - for x from 0 to length(input)-1 do - string := string + (if x == length(input)-1 then closing else "") + input[x] + (if x == length(input)-1 then "" else spacer) - string -}@(spacer:", ", closing:"and ") -includes := { flagged := false - for x from 0 to length(array)-1 do - if array[x] == input then flagged := true; - flagged -} -pull_comma_array := { - array := split_text(input, match:divider) - length := length(comma_count(input)) - ending := to_number(end) - if (cell >= (length + (1-ending))) - then default - else if array[cell] == "" or array[cell] == nil or array[cell] == "-" - then default - else array[cell] -}@(default:0, end: 1, divider:",", cell:0) -##todo check nil -#### standard is pull_comma_array("X,Y,Z,", cell: 0) -#### returns "X" -#### ending true for coordinates (requires a final divider to ensure element is complete) -#### ending false for moving (doesn't require divider, moving 1 then 11 is fine) -#### divider is "," by default, can change -#### can also add default to return in case of errors - -##a workaround for the crop offset function that doesn't appear to work -##slice_chop(input:image, height:(final height), width:(final width), distance:(length from bottom to top of final image)) -slice_crop := { - img := flip_vertical(input) - img := crop(img, height:distance, width:width, offset_x:0, offset_y:0) - img := flip_vertical(img) - img - if(height != 0 and height != distance) then - img := crop(img, height:height, width:width, offset_x:0, offset_y:0) - img -}@(height:0) - -#juryrig fix for level defaults. janky because MSE hates {true} -transfer_levels := {true} -transfer_levels_2 := {true} -a_saga := {false} -saga_reminder := { "As this Saga enters and after your draw step, add a lore counter. Sacrifice after III." } -b_saga := {false} -saga_reminderb := { "As this Saga enters and after your draw step, add a lore counter. Sacrifice after III." } -############################################################## Watermark Updates -card_spotlight := { "/magic-mainframe-watermarks.mse-include/spotlight/" + card_new_color() + "spotlight.png" } -custom_watermark_1 := { if set.custom_watermark_1 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_1 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_2 := { if set.custom_watermark_2 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_2 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_3 := { if set.custom_watermark_3 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_3 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_4 := { if set.custom_watermark_4 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_4 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_5 := { if set.custom_watermark_5 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_5 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_6 := { if set.custom_watermark_6 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_6 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_7 := { if set.custom_watermark_7 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_7 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_8 := { if set.custom_watermark_8 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_8 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_9 := { if set.custom_watermark_9 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_9 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_10 := { if set.custom_watermark_10 != "" then "/magic-watermarks.mse-include/" + set.custom_watermark_10 else "/magic-watermarks.mse-include/planeswalker.png" } -custom_watermark_a := {"/magic-watermarks.mse-include/planeswalker.png"} -custom_watermark_b := {"/magic-watermarks.mse-include/planeswalker.png"} -############################################################## Flavor Bar Equation - - -chop_top := {0} -chop_bot := {0} -bar_offset := {0} -offset_lines := {0} -chop_top2 := {0} -chop_bot2 := {0} -bar_offset2 := {0} -offset_lines2 := {0} - -##### Set chop_top(), chop_bot(), bar_offset(), and offset_lines to 0 to reduce replacements in chopping frames -##### Full equations to use in chopping templates below -##### chop_top := {if styling.chop_top == "" then 0 else if comma_count(styling.chop_top) == "," or comma_count(styling.chop_top) == ",," then split_text(match:",", styling.chop_top).0 else styling.chop_top} -##### chop_bot := {if comma_count(styling.chop_top) == ",," then split_text(match:",", styling.chop_top).1 else if styling.chop_bottom == "" then 0 else styling.chop_bottom} -##### bar_offset := {if styling.flavor_bar_offset == "-" or styling.flavor_bar_offset == "+" then 0 else to_number(styling.flavor_bar_offset)} -##### offset_lines := {offset_counter(styling.flavor_bar_offset)} - -top_of_textbox := {card_style.text.top } -bottom_of_textbox := {card_style.text.bottom } -top_of_textbox2 := {card_style.text_2.top } -bottom_of_textbox2 := {card_style.text_2.bottom } -offset_counter := {length(filter_text(input, match:"u")) - length(filter_text(input, match:"d"))} -paragraph_count := filter_text@(match:"\n") -hard_paragraph_count := - replace@(match:"\n", replace:"")+ #count hard breaks for their extra space - filter_text@(match:"\n") -soft_break_filter := - filter_text @(match:"<", in_context: "soft-line>") #count soft breaks for quotes -word_split := split_text@(match:" ") #split words to better calculate line lengths -small_filter := filter_text@(match:"[\\.,\\?!il’]") #grab the tiny characters -fb_length := {length(input) - 0.3 * length(small_filter(input))}#reduce the effect of tiny characters -calc_lines := { sum := 0 #estimate lines by character limit - lines := 1 #minimum of 1 - for e from 0 to length(input)-1 do ( - sum := sum + fb_length(input[e]); - if sum > char then ( #if new word is over the limit - lines := lines + 1; #add new line - sum := fb_length(input[e])) #reset the sum - else - sum := sum + 1; #else add it and a space to the sum - ) - lines #return number of lines -} -lines_of_text := { #estimate lines in break blocks - lines := 0 #further improves the previous eq - for x from 0 to length(input)-1 do - if input[x] or else "" != "" then #if the break isn't empty, check it - lines := lines + calc_lines(word_split(input[x]), char:char) - lines -} -flavor_text := {split_text(match:"\n", remove_tags(card.flavor_text+"\n"))} #remove tags, add \n so .1 doesn't explode -hard_flavor_break := { if not contains(card.flavor_text, match:"\n") then 0 else if contains(card.flavor_text, match:"\n") then 0 else if lines_of_rules() >= 3 then -3 else -2} -font_size := {min(14,round_near(card_style.text.content_height / card_style.text.content_lines) - 8)} #approximate font size -adj_char_width := {7.35 * min(14, font_size()+0.95) / 14} #average char width, adjusted for font size -char_per_line := {min(52,round_up(card_style.text.content_width / adj_char_width())+1.5)} #approximate character limit. very rarely over 52 but standard eq can reach 60+ -lines_of_flavor := {lines_of_text(flavor_text(), char:char_per_line())} -lines_of_rules := { card_style.text.content_lines - lines_of_flavor() } #rules of lines for ratio weirdness -line_height := {(card_style.text.content_height / card_style.text.content_lines)} -padding_height := { 0.5*(bottom_of_textbox() - top_of_textbox() - card_style.text.content_height) } #space between top of textbox and text -linebreak_height := { 2*length(hard_paragraph_count(card.rule_text)) } -###correction for ratio of rules/flavor causing weirdness -uneven_correction := { if lines_of_flavor() == 1 then max(4, (card_style.text.content_lines - (2*lines_of_flavor()))) else (card_style.text.content_lines - (2*lines_of_flavor())) } -###add it all up -###old_bar_equation is compatibilty for 2.0.0 -old_bar_equation := { top_of_textbox() + padding_height() + card_style.text.content_height - line_height()*(lines_of_flavor() + offset_lines()) + linebreak_height() - uneven_correction() + front_corr() + bar_offset() + hard_flavor_break() +1 } -bar_equation := {if card_style.text.layout.blocks[1].bottom or else 0 > 0 then card_style.text.top + 0.5*(card_style.text.layout.blocks[0].bottom+card_style.text.layout.blocks[1].top) else old_bar_equation()} - -flavor_text2 := {split_text(match:"\n", remove_tags(card.flavor_text_2+"\n"))} #remove tags, add \n so .1 doesn't explode -hard_flavor_break2 := { if not contains(card.flavor_text_2, match:"\n") then 0 else if contains(card.flavor_text_2, match:"\n") then 0 else if lines_of_rules2() >= 3 then -3 else -2} -font_size2 := {min(14,round_near(card_style.text_2.content_height / card_style.text_2.content_lines) - 8)} #approximate font size -adj_char_width2 := {7.35 * min(14, font_size2()+0.95) / 14} #average char width, adjusted for font size -char_per_line2 := {min(52,round_up(card_style.text_2.content_width / adj_char_width2())+1.5)} #approximate character limit. very rarely over 52 but standard eq can reach 60+ -lines_of_flavor2 := {lines_of_text(flavor_text2(), char:char_per_line2())} -lines_of_rules2 := { card_style.text_2.content_lines - lines_of_flavor2() } #rules of lines for ratio weirdness -line_height2 := {(card_style.text_2.content_height / card_style.text_2.content_lines)} -padding_height2 := { 0.5*(bottom_of_textbox2() - top_of_textbox2() - card_style.text_2.content_height) } #space between top of textbox and text -linebreak_height2 := { 2*length(hard_paragraph_count(card.rule_text_2)) } -###correction for ratio of rules/flavor causing weirdness -uneven_correction2 := { if lines_of_flavor2() == 1 then max(4, (card_style.text_2.content_lines - (2*lines_of_flavor2()))) else (card_style.text_2.content_lines - (2*lines_of_flavor2())) } -###add it all up -old_bar_equation2 := { top_of_textbox2() + padding_height2() + card_style.text_2.content_height - line_height2()*(lines_of_flavor2() + offset_lines2()) + linebreak_height2() - uneven_correction2() + back_corr() + bar_offset2() + hard_flavor_break2() +1 } -bar_equation2 := {if card_style.text_2.layout.blocks[0].bottom or else 0 > 0 then card_style.text_2.top + 0.5*(card_style.text_2.layout.blocks[0].bottom+card_style.text_2.layout.blocks[1].top) else old_bar_equation2()} - -##### long correction coefficient based off several sets of data -front_corr := {correction_coeff(lof:lines_of_flavor(), lor:lines_of_rules(), lbh:linebreak_height())} -back_corr := {correction_coeff(lof:lines_of_flavor2(), lor:lines_of_rules2(), lbh:linebreak_height2())} -correction_coeff := { - (if lor == 1 then - (if lof == 1 then 3 - else if lof == 2 then 1 - else if lof == 3 then 1.5 - else if lof == 4 then 0 - else 5 - lof) - else if lor == 2 and lbh == 2 then - (if lof == 1 then 1 - else if lof == 2 then 1 - else if lof == 3 then 2 - else if lof == 4 then 2 - else 3) - else if lor == 2 then - (if lof == 1 then 1 - else if lof == 2 then 0 - else if lof == 3 then 0 - else if lof == 4 then 0 - else -1) - else if lor == 3 and lbh == 2 then - (if lof == 1 then 0 - else if lof == 2 then 0 - else if lof == 3 then 1 - else if lof == 4 then 1 - else 2) - else if lor == 3 then - (if lof == 1 then 0 - else if lof == 2 then -1 - else if lof == 3 then -0.5 - else if lof == 4 then -1 - else 0) - else if lor == 4 and lbh == 2 then - (-2 + lof) - else if lor == 4 then - (if lof == 1 then -1 - else if lof == 2 then 0 - else if lof == 3 then -0.5 - else -1) - else if lor == 5 and lbh == 4 then - (-5 + lof) - else if lor == 5 and lbh == 2 then - (-2 + lof) - else if lor == 5 then - (2 - lof) - else if lor == 6 and lbh == 2 then - (-1 - lof) - else if lor == 6 then - (2 - lof) - else 0) + (if lbh >= 4 then 0.5*lbh-1) -} -######################## Modal DFC hints -auto_flags := {true} -front_modal_hint := { - if not auto_flags() then ["", "", 10.5] - else if remove_tags(card.sub_type_2) != "" then [card.sub_type_2, ""+card.casting_cost_2+"", 10.5] - else if card.casting_cost_2 != "" then [main_type(card.super_type_2), ""+card.casting_cost_2+"", 10.5] - else [main_type(card.super_type_2), mana_ability(card.rule_text_2), 10.5] -} -back_modal_hint := { - if not auto_flags() then ["", "", 10.5] - else if remove_tags(card.sub_type) != "" then [card.sub_type, ""+card.casting_cost+"", 10.5] - else if card.casting_cost != "" then [main_type(card.super_type), ""+card.casting_cost+"", 10.5] - else [main_type(card.super_type), mana_ability(card.rule_text), 10.5] -} -mana_ability := { - abils := break_text(input, match:"()?T()?: Add ()?(W|U|B|R|G|C)()?(, | or )?()?(W|U|B|R|G|C)?()?(, or )?()?(W|U|B|R|G|C)?()?.") - abils[0] or else "" -} -main_type := { - types := main_types(input) - if includes("Creature", array:types) - then "Creature" - else if includes("Land", array:types) - then "Land" - else types[0] -} -main_types := { - types := break_text(input, match:"(Land|Instant|Sorcery|Artifact|Enchantment|Creature|Planeswalker)") - types or else [""] -} -######################## Mainframe mana -use_v_mana := {contains(set.custom_mana_symbol_name, match:".png")} -use_large_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"enable in casting costs")} -use_small_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"enable in text boxes")} -use_color_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"colored mana symbols") and not use_hybrid_v_mana()} -use_hybrid_v_mana := { use_v_mana() and chosen(set.mana_symbol_options, choice:"hybrid with colors")} -v_mana_name := {if not use_v_mana() then "" else replace(set.custom_mana_symbol_name, match:"(.+/|\\.png)", replace:"")} -v_mana_loc := {if not use_v_mana() then "" else replace(set.custom_mana_symbol_name, match:"{v_mana_name()}\\.png", replace:"")} -v_mana_num := {max(to_number(set.number_hybrid_variants),0) or else -1} - -searchPull := filter_text@(match:"search(name|mana|type|rules|flavor|text|notes)") -searchSnip := replace@(match:"search(name|mana|type|rules|flavor|text|notes)_", replace:"") - -custom_index := { - sortIndex := split_text(set.custom_index, match:",") - for each field in sortIndex do - applyIndex(to_lower(field)) - or else ( - searchIndex(to_lower(searchPull(field)), query:searchSnip(field)) - ) - or else "" -} -applyIndex := { - [ - name: { - fill_len(to_string(position ( - of: card - in: set - order_by: { sort_name(card.name) + sort_name(export_name())} - filter: set_filter() - )), lead:"0", fill_to:3) - }, - alias: { - fill_len(to_string(position ( - of: card - in: set - order_by: { sort_name(card.alias) + sort_name(export_name())} - filter: set_filter() - )), lead:"0", fill_to:3) - } - name2: { - fill_len(to_string(position ( - of: card - in: set - order_by: { sort_name(card.name_2) + sort_name(export_name())} - filter: set_filter() - )), lead:"0", fill_to:3) - }, - alias2: { - fill_len(to_string(position ( - of: card - in: set - order_by: { sort_name(card.alias_2) + sort_name(export_name())} - filter: set_filter() - )), lead:"0", fill_to:3) - } - color: {fill_len(color_of_card(), lead:"A")}, - artist: {fill_len(substring(card.illustrator, end:7), follow:" ", fill_to:7)}, - artist2: {fill_len(substring(card.illustrator_2, end:7), follow:" ", fill_to:7)}, - design: {fill_len(substring(card.card_code_text, end:7), follow:" ", fill_to:7)}, - mv: {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, - "mana value": {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, - cmc: {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, - "converted mana cost": {fill_len(to_string(cmc(card.casting_cost)), lead:"0")}, - rarity: {index_of_rarity()}, - power: {fill_len(card.power, lead:"0")}, - toughness: {fill_len(card.toughness, lead:"0")}, - pt: {fill_len(card.power, lead:"0") + fill_len(card.toughness, lead:"0")}, - loyalty: {fill_len(card.loyalty, lead:"0")}, - type: {fill_len(filter_text(match:"[A-Z][A-Z]?[A-Z]?", filter_text(match:"[A-Z]", card.super_type)), follow:"0", fill_to:3)}, - hasrules: {if remove_tags(card.rule_text) != "" then "A" else "B"}, - hasflavor: {if remove_tags(card.flavor_text) != "" then "A" else "B"}, - hasrules2: {if remove_tags(card.rule_text_2) != "" then "A" else "B"}, - hasflavor2: {if remove_tags(card.flavor_text_2) != "" then "A" else "B"}, - ][input]() -} -searchIndex := { - [ - searchname: { if contains(card.name, match:query) or contains(card.name_2, match:query) then "A" else "B"}, - searchmana: { if contains(card.casting_cost, match:query) or contains(card.casting_cost_2, match:query) then "A" else "B"}, - searchtype: { if contains(card.type, match:query) or contains(card.type_2, match:query) then "A" else "B"}, - searchrules: { if contains(card.rule_text, match:query) or contains(card.rule_text_2, match:query) then "A" else "B"}, - searchflavor: { if contains(card.flavor_text, match:query) or contains(card.flavor_text_2, match:query) then "A" else "B"}, - searchartist: { if contains(card.illustrator, match:query) or contains(card.illustrator_2, match:query) then "A" else "B"}, - searchdesign: { if contains(card.card_code_text, match:query) then "A" else "B"}, - searchtext: { if contains(card.text, match:query) or contains(card.text_2, match:query) then "A" else "B"}, - searchnotes: { if contains(card.notes, match:query) then "A" else "B"}, - unsearchname: { if contains(card.name, match:query) or contains(card.name_2, match:query) then "B" else "A"}, - unsearchmana: { if contains(card.casting_cost, match:query) or contains(card.casting_cost_2, match:query) then "B" else "A"}, - unsearchtype: { if contains(card.type, match:query) or contains(card.type_2, match:query) then "B" else "A"}, - unsearchrules: { if contains(card.rule_text, match:query) or contains(card.rule_text_2, match:query) then "B" else "A"}, - unsearchflavor: { if contains(card.flavor_text, match:query) or contains(card.flavor_text_2, match:query) then "B" else "A"}, - unsearchartist: { if contains(card.illustrator, match:query) or contains(card.illustrator_2, match:query) then "B" else "A"}, - unsearchdesign: { if contains(card.card_code_text, match:query) then "B" else "A"}, - unsearchtext: { if contains(card.text, match:query) or contains(card.text_2, match:query) then "B" else "A"}, - unsearchnotes: { if contains(card.notes, match:query) then "B" else "A"} - ][input]() -} -index_of_rarity := { - if card.rarity == "basic land" then "A" - else if card.rarity == "common" then "C" - else if card.rarity == "uncommon" then "D" - else if card.rarity == "rare" then "E" - else if card.rarity == "mythic rare" then "F" - else if card.rarity == "special" then "G" - else "J" -} -fill_len := { - output := to_string(input) - if output == "" then output := "0" - fill := max(0,fill_to - length(output)) - for x from 1 to fill do output := lead + output + follow; - output -}@(fill_to:2, lead:"", follow:"") - -skeleton_commons := 19 -skeleton_uncommons := 11 -skeleton_rares := 7 -skeleton_mythics := 2 -skeleton_land_commons := 1 -skeleton_land_uncommons := 5 -skeleton_land_rares := 0 -skeleton_gold_commons := 0 -skeleton_gold_uncommons := 1 -skeleton_gold_rares := 1 -skeleton_shard_commons := 0 -skeleton_shard_uncommons := 0 -skeleton_shard_rares := 0 -skeleton_wedge_commons := 0 -skeleton_wedge_uncommons := 0 -skeleton_wedge_rares := 0 -skeleton_artifact_commons := 5 -skeleton_artifact_uncommons := 5 -skeleton_artifact_rares := 0 -skeleton_blank_commons := 0 -skeleton_blank_uncommons := 5 -skeleton_blank_rares := 8 -skeleton_blank_mythics := 5 -#### generates a set of CC00 Skeleton cards for each color -#### by insertnamehere and cajun -skeleton_runner := { - cards:=[] - for x from 0 to length(letter_list)-1 do - ( - for y from 1 to count do - if mana_list == "nope" then - (cards := cards + [new_card([name:prefix+letter_list[x]+fill_len(y, lead:"0"), rarity:rarity, card_color:color_list[x], super_type:super_type])];) - else - (cards := cards + [new_card([name:prefix+letter_list[x]+fill_len(y, lead:"0"), rarity:rarity, super_type:super_type, casting_cost:mana_list[x]])];) - ) - cards -}@(count:1, rarity:"common", type:"", prefix:"C", super_type:"", color_list:["white", "blue", "black", "red", "green"], letter_list:["W", "U", "B", "R", "G"], mana_list:"nope") -###outside to make singleton scripts easier -blank_list_5 := ["","","","",""] -blank_list_10 := ["","","","","","","","","",""] -mana_list_ally := ["WU","UB","BR","RG","GW"] -mana_list_enemy := ["WB","UR","BG","RW","GU"] -mana_list_shard := ["WUB","UBR","BRG","RGW","GWU"] -mana_list_wedge := ["WBG","URW","BGU","RWB","GUR"] -skeleton_script := { - cards := []; - cards := cards + skeleton_runner(count:skeleton_commons); - cards := cards + skeleton_runner(count:skeleton_uncommons, prefix:"U", rarity:"uncommon"); - cards := cards + skeleton_runner(count:skeleton_rares, prefix:"R", rarity:"rare"); - cards := cards + skeleton_runner(count:skeleton_mythics, prefix:"M", rarity:"mythic rare"); - cards := cards + skeleton_runner(count:skeleton_gold_commons, prefix:"CM", rarity:"common", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy); - cards := cards + skeleton_runner(count:skeleton_gold_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy); - cards := cards + skeleton_runner(count:skeleton_gold_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_10, mana_list:mana_list_ally+mana_list_enemy); - cards := cards + skeleton_runner(count:skeleton_shard_commons, prefix:"CM", rarity:"common", letter_list:blank_list_5, mana_list:mana_list_shard); - cards := cards + skeleton_runner(count:skeleton_shard_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_5, mana_list:mana_list_shard); - cards := cards + skeleton_runner(count:skeleton_shard_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_5, mana_list:mana_list_shard); - cards := cards + skeleton_runner(count:skeleton_wedge_commons, prefix:"CM", rarity:"common", letter_list:blank_list_5, mana_list:mana_list_wedge); - cards := cards + skeleton_runner(count:skeleton_wedge_uncommons, prefix:"UM", rarity:"uncommon", letter_list:blank_list_5, mana_list:mana_list_wedge); - cards := cards + skeleton_runner(count:skeleton_wedge_rares, prefix:"RM", rarity:"rare", letter_list:blank_list_5, mana_list:mana_list_wedge); - for i from 1 to skeleton_artifact_commons do cards := cards + [new_card([name:"CA"+fill_len(i, lead:"0"), rarity:"common", super_type:"Artifact"])]; - for i from 1 to skeleton_artifact_uncommons do cards := cards + [new_card([name:"UA"+fill_len(i, lead:"0"), rarity:"uncommon", super_type:"Artifact"])]; - for i from 1 to skeleton_artifact_rares do cards := cards + [new_card([name:"RA"+fill_len(i, lead:"0"), rarity:"rare", super_type:"Artifact"])]; - for i from 1 to skeleton_land_commons do cards := cards + [new_card([name:"CL"+fill_len(i, lead:"0"), super_type:"Land", rarity:"common"])]; - for i from 1 to skeleton_land_uncommons do cards := cards + [new_card([name:"UL"+fill_len(i, lead:"0"), super_type:"Land", rarity:"uncommon"])]; - for i from 1 to skeleton_land_rares do cards := cards + [new_card([name:"RL"+fill_len(i, lead:"0"), super_type:"Land", rarity:"rare"])]; - for i from 1 to skeleton_blank_commons do cards := cards + [new_card([name:"CX"+fill_len(i, lead:"0"), rarity:"common"])]; - for i from 1 to skeleton_blank_uncommons do cards := cards + [new_card([name:"UX"+fill_len(i, lead:"0"), rarity:"uncommon"])]; - for i from 1 to skeleton_blank_rares do cards := cards + [new_card([name:"RX"+fill_len(i, lead:"0"), rarity:"rare"])]; - for i from 1 to skeleton_blank_mythics do cards := cards + [new_card([name:"MX"+fill_len(i, lead:"0"), rarity:"mythic rare"])]; - cards -} -skeleton_info := { - trace("Set Skeleton Generator Help:" - +"\nSet variables here to modify the Skeleton Add Cards script, for example 'skeleton_commons := 10'" - +"\nCurrent variables:\n" - +"skeleton_commons: " + skeleton_commons + " (of each color)\n" - +"skeleton_uncommons: " + skeleton_uncommons + " (of each color)\n" - +"skeleton_rares: " + skeleton_rares + " (of each color)\n" - +"skeleton_mythics: " + skeleton_mythics + " (of each color)\n" - +"skeleton_gold_commons: " + skeleton_gold_commons + " (of each color pair)\n" - +"skeleton_gold_uncommons: " + skeleton_gold_uncommons + " (of each color pair)\n" - +"skeleton_gold_rares: " + skeleton_gold_rares + " (of each color pair)\n" - +"skeleton_artifact_commons: " + skeleton_artifact_commons + "\n" - +"skeleton_artifact_uncommons: " + skeleton_artifact_uncommons + "\n" - +"skeleton_artifact_rares: " + skeleton_artifact_rares + "\n" - +"skeleton_land_commons: " + skeleton_land_commons + "\n" - +"skeleton_land_uncommons: " + skeleton_land_uncommons + "\n" - +"skeleton_land_rares: " + skeleton_land_rares + "\n" - +"skeleton_blank_commons: " + skeleton_blank_commons + "\n" - +"skeleton_blank_uncommons: " + skeleton_blank_uncommons + "\n" - +"skeleton_blank_rares: " + skeleton_blank_rares + "\n" - +"skeleton_blank_mythics: " + skeleton_blank_mythics + "\n" - +"skeleton_shard_commons: " + skeleton_shard_commons + "\n" - +"skeleton_shard_uncommons: " + skeleton_shard_uncommons + "\n" - +"skeleton_shard_rares: " + skeleton_shard_rares + "\n" - +"skeleton_wedge_commons: " + skeleton_wedge_commons + "\n" - +"skeleton_wedge_uncommons: " + skeleton_wedge_uncommons + "\n" - +"skeleton_wedge_rares: " + skeleton_wedge_rares) -} -##number of chapter symbols each chapter textbox has -##example, symbols on abilities 2,2,3 returns [0,2,1] -saga_lore_count := { - one := 0 - two := 0 - three := 0 - four := 0 - five := 0 - six := 0 - seven := 0 - eight := 0 - for x from 0 to length(input)-1 do - if input[x] == "1" then one := one +1 - else if input[x] == "2" then two := two +1 - else if input[x] == "3" then three := three +1 - else if input[x] == "4" then four := four +1 - else if input[x] == "5" then five := five +1 - else if input[x] == "6" then six := six +1 - else if input[x] == "7" then seven := seven +1 - else eight := eight +1 - [one, two, three, four, five, six, seven] -} -##index of given chapter number in above array -##example, 2,2,3, returns 1,2,1 -##i tried to make this shorter but this is the only one that deigned to function -saga_ch_placement := { - box1 := 0 - box2 := 0 - box3 := 0 - box4 := 0 - one := 0 - two := 0 - three := 0 - four := 0 - five := 0 - six := 0 - seven := 0 - len := length(input) - if len >= 1 then ( - if input[0] == "1" then ( - box1 := box1 +1 - one := box1+0 - )else if input[0] == "2" then ( - box2 := box2 +1 - one := box2+0 - )else if input[0] == "3" then ( - box3 := box3 +1 - one := box3+0 - )else if input[0] == "4" then ( - box4 := box4 +1 - one := box4+0 - )else (one := one) - )else (one := one) - if len >= 2 then ( - if input[1] == "1" then ( - box1 := box1 +1 - two := box1+0 - )else if input[1] == "2" then ( - box2 := box2 +1 - two := box2+0 - )else if input[1] == "3" then ( - box3 := box3 +1 - two := box3+0 - )else if input[1] == "4" then ( - box4 := box4 +1 - two := box4+0 - )else (two := two) - )else (two := two) - if len >= 3 then ( - if input[2] == "1" then ( - box1 := box1 +1 - three := box1+0 - )else if input[2] == "2" then ( - box2 := box2 +1 - three := box2+0 - )else if input[2] == "3" then ( - box3 := box3 +1 - three := box3+0 - )else if input[2] == "4" then ( - box4 := box4 +1 - three := box4+0 - )else (three := three) - )else (three := three) - if len >= 4 then ( - if input[3] == "1" then ( - box1 := box1 +1 - four := box1+0 - )else if input[3] == "2" then ( - box2 := box2 +1 - four := box2+0 - )else if input[3] == "3" then ( - box3 := box3 +1 - four := box3+0 - )else if input[3] == "4" then ( - box4 := box4 +1 - four := box4+0 - )else (four := four) - )else (four := four) - if len >= 5 then ( - if input[4] == "1" then ( - box1 := box1 +1 - five := box1+0 - )else if input[4] == "2" then ( - box2 := box2 +1 - five := box2+0 - )else if input[4] == "3" then ( - box3 := box3 +1 - five := box3+0 - )else if input[4] == "4" then ( - box4 := box4 +1 - five := box4+0 - )else (five := five) - )else (five := five) - if len >= 6 then ( - if input[5] == "1" then ( - box1 := box1 +1 - six := box1+0 - )else if input[5] == "2" then ( - box2 := box2 +1 - six := box2+0 - )else if input[5] == "3" then ( - box3 := box3 +1 - six := box3+0 - )else if input[5] == "4" then ( - box4 := box4 +1 - six := box4+0 - )else (six := six) - )else (six := six) - if len >= 7 then ( - if input[6] == "1" then ( - box1 := box1 +1 - seven := box1+0 - )else if input[6] == "2" then ( - box2 := box2 +1 - seven := box2+0 - )else if input[6] == "3" then ( - box3 := box3 +1 - seven := box3+0 - )else if input[6] == "4" then ( - box4 := box4 +1 - seven := box4+0 - )else (seven := seven) - )else (seven := seven) - [one, two, three, four, five, six, seven] -} - -card_face := { - trace(margin_code) - front := card[input] - back := if card[input+"_2"] or else "" != "" then card[input+"_2"] else card[input] - if match(margin_code, match:"(text[2456]|lv[5678])") then back else front -} -strip_card_codes := replace@(match:"^[CURMSL][WUBRGMZACL][0-9]+ ?[-—]? ?", replace:"") -name_checker := {if not set.remove_card_codes then input else strip_card_codes(input)} - -face_code := { - face := "" - if margin_code == "text2" or margin_code == "lv5" or margin_code == "lv6" or margin_code == "lv7" or margin_code == "lv8" then face := "_2" - output := face_scripts[input](face) or else if_parse(input, face:face) or else input - output -} -face_scripts := [ - iscreature: {is_creature(card["type"+face])}, - iscreaturish: {is_creaturish(card["type"+face])}, - isenchantment: {is_enchantment(card["type"+face])}, - isartifact: {is_artifact(card["type"+face])}, - island: {is_land(card["type"+face])}, - isspell: {is_spell(card["type"+face])}, - istarget: {is_targeted(card["text"+face])}, - subtypes: {separate_words(card["sub_type"+face], spacer: " ")} - contains: { - contains(card[field+face], match:query) - }, - notcontains: {not contains(card[field+face], match:query)}, -] -expand_facecodes := [ - subtype: "sub_type", - castingcost: "casting_cost", - manacost: "casting_cost" -] -if_parse := replace@( - match: "if_(.*)_then_(.*)_else_(.*)", - replace: {if_scripts(_1, t:_2, f:_3)} -) -if_scripts := { - contCheck := split_text(input, match:"_") - func := contCheck[0] - field := "" - query := "^$" - if length(contCheck) == 3 then ( - field := contCheck[0] - func := contCheck[1] - query := contCheck[2] - ) - field := expand_facecodes[field] or else field - if face_scripts[func](face, field:field, query:query) or else false then t else f -} - -white_text := {false} -phy_reminder := { - phy_match := filter_text(input, match:"(/[WUBRG])+", in_context:"H") - letters := split_text(phy_match, match:"/") - reminder_text := "" - if length(letters) == 2 then - reminder_text := "[H/" + letters[1] + "] can be paid with [" + letters[1] + "] or 2 life." - else if length(letters) > 2 then - reminder_text := "[H/" + letters[1] + "/" + letters[2] + "] can be paid with [" + letters[1] + "], " + "[" + letters[2] + "], or 2 life." - else - reminder_text := "" - reminder_text -} diff --git a/data/magic.mse-game/set_fields b/data/magic.mse-game/set_fields deleted file mode 100644 index b75e3255..00000000 --- a/data/magic.mse-game/set_fields +++ /dev/null @@ -1,414 +0,0 @@ - -############################################################## Set fields - -set field: - type: info - name: Set Information -set field: - type: text - name: title - identifying: true -set field: - type: text - name: description - multi line: true -set field: - type: text - name: artist -set field: - type: text - name: copyright -set field: - type: 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: boolean - name: shorten types for rarity - description: Makes the typeline not run into the rarity symbol. Disable if you don't use rarity symbols. -set field: - type: info - name: Watermark links -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: text - name: custom watermark 6 - description: Set this image in magic-watermarks.mse-include as Custom Watermark 6 -set field: - type: text - name: custom watermark 7 - description: Set this image in magic-watermarks.mse-include as Custom Watermark 7 -set field: - type: text - name: custom watermark 8 - description: Set this image in magic-watermarks.mse-include as Custom Watermark 8 -set field: - type: text - name: custom watermark 9 - description: Set this image in magic-watermarks.mse-include as Custom Watermark 9 -set field: - type: text - name: custom watermark 10 - description: Set this image in magic-watermarks.mse-include as Custom Watermark 10 -set field: - type: boolean - name: blend with colors - initial: no - description: Only works for 500x500 px watermarks. For best results, use a solid black watermark. Blend watermarks with card colors instead of a solid color. -set field: - type: info - name: Defaults and Automation -set field: - type: text - name: inserts - description: List of strings, separated by ;, that replaces INS1, INS2, ... INS9. May need to reload MSE for changes to take effect. -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(200,200,200) - 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, lower case - # Convert from older mse versions - script: - if value == "yes" then "old, core, expert, custom, lower case" - 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: text - name: card number offsets - description: Add this number to the card numbers. Formatted as "start,total" -set field: - type: boolean - name: automatic copyright - description: Should the copyright line above be shown on the cards? -set field: - type: boolean - name: rarity codes - description: Show rarity codes on M15 frames? -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: choice - name: mana cost sorting - description: Should mana costs be sorted by Tarkir standard (WBG), Apocalypse standard (BGW), or left unsorted? - choice: tarkir wedge sorting - choice: apocalypse wedge sorting - choice: unsorted - #typo that stood for way too long - script: - if value == "apocalype wedge sorting" then "apocalypse wedge sorting" else value -set field: - type: choice - name: card language - description: Language for the cards - choice: English - choice: Français - choice: Italiano - choice: Português do Brasil - choice: Russian - 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: boolean - name: auto correct - description: Applies auto correct for a few common syntax errors. -set field: - type: boolean - name: auto errata - description: Applies auto errata for a changed rules text. - initial: no -set field: - type: boolean - name: remove card codes - description: Remove card codes from all card names. - initial: no -set field: - type: boolean - name: alias as cardname - description: Replaces CARDNAME with a card's alias instead of card name. -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 -set field: - type: boolean - name: wedge mana costs - description: Depreciated. Should three color mana costs sort in wedge order like in Khans block? - initial: no -set field: - type: info - name: Mainframe Template Options -set field: - type: text - name: mainframe rarity name - description: Use rarity symbols from magic-mainframe-extras.mse-include. Input NAME.png here, save the images as NAMEc.png, NAMEu.png, NAMEr.png, NAMEm.png, NAMEs.png, and NAMEmp.png -set field: - type: boolean - name: use flavor bar - description: Enables the flavor bar on Mainframe templates. -set field: - type: boolean - name: auto legends - description: Automatically apply the Legendary frame on Mainframe templates. -set field: - type: text - name: custom index - description: Order of card fields for the custom index sorting - script: replace(value, match:"\n", replace:"") -set field: - type: text - name: custom mana symbol name - description: Use mana symbols from magic-mainframe-extras.mse-include. Input NAME.png here, check help below for file instructions. -set field: - type: multiple choice - name: mana symbol options - choice: enable in casting costs - choice: enable in text boxes - choice: colored mana symbols - choice: hybrid with colors -set field: - type: text - name: number hybrid variants - description: Change 1/X 2/X etc to a variant symbol instead of a hybrid symbol -set field: - type: choice - name: mana symbol help - choice: Click here for mana symbol help! - choice: In your mainframe-extras folder, create folders named "large" and/or "small" depending on your usage - choice: Large is for only mana costs, small for only text, create both if you use both - choice: Additionally, you can create a "future" folder for M15 Future mana costs - choice: Save NAME.png to the relevant folders. Remember that large symbols have dropshadows - choice: For the name option above, set the address of the image, minus mainframe-extras and large/small/future - choice: Ex: magic-mainframe-extras/cajun/large/hazard.png would use cajun/hazard.png - choice: Standard size is 160x160 for small, 200x200 for small hybrid and future, 165x178 for large, 205x218 for large hybrid - choice: If your symbol mixes with colors (such as Phyrexian mana): Save NAME_w.png, NAME_u.png, etc to those folders too. - choice: If your symbol hybrids with colors (like 2/W): [Note, doesn't work on M15 Future mana costs.] - choice: Save NAME_h.png to those folders too. See mana_bb.png and similar for how this image should look. - choice: Your mana symbol will now be keyed to V (and V/W, V/U, etc. for colored/hybrid symbols). - choice: You can change number hybrids (2/V etc) to different mana symbols for even more custom symbols. - choice: Put the highest number to change (from 0 to 11) in "number hybrid variants" and save as NAME_0.png etc. -############################# 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) -##purple -##fill color 1: rgb(224,170,247) -##fill color 2: rgb(58,7,80) -##green -##fill color 1: rgb(3,146,50) -##fill color 2: rgb(114,252,158) -##brown -##fill color 1: rgb(177,150,131) -##fill color 2: rgb(83,67,53) -##border color 1: rgb(0, 0, 0) -##border color 2: rgb(0, 0, 0) - 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 - Português_do_Brasil: /magic.mse-game/icons/language-br.png - mana symbol options: - render style: checklist - direction: vertical diff --git a/data/magic.mse-game/statistics b/data/magic.mse-game/statistics deleted file mode 100644 index fbed7225..00000000 --- a/data/magic.mse-game/statistics +++ /dev/null @@ -1,291 +0,0 @@ - -############################################################## 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 a_saga() or mainframe_walker() then word_count(to_text(card.level_1_text))+word_count(to_text(card.level_2_text))+word_count(to_text(card.level_3_text))+word_count(to_text(card.level_4_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 a_saga() or mainframe_walker() then line_count(to_text(card.level_1_text))+line_count(to_text(card.level_2_text))+line_count(to_text(card.level_3_text))+line_count(to_text(card.level_4_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 \ No newline at end of file diff --git a/data/magic.mse-game/stats/card_color.png b/data/magic.mse-game/stats/card_color.png deleted file mode 100644 index 53c71a58fad3db29508274634f834d051c9ca7f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 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 D;hB?) diff --git a/data/magic.mse-game/stats/color_colored_cost.png b/data/magic.mse-game/stats/color_colored_cost.png deleted file mode 100644 index 24b7ff331cb91eb096a93690817e521617c3a17a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1262 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 Z1OPXVVA;c{XPW>3002ovPDHLkV1m1{1JnQj diff --git a/data/magic.mse-game/stats/colored_casting_cost.png b/data/magic.mse-game/stats/colored_casting_cost.png deleted file mode 100644 index 28c71867812336795e13ae9fe2e9a121eaacb3e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmVpF33NqRbVF}#ZDnqB004<9jRpV!1CvQaK~#90rPNzYn{^n+@dtM@ z%ALktsL6=YD@BKg8<$;~c;ST?#9I@ii7_$JEZN2MVligAVWitKqz8C=paX&O_Ar3~ zLk?!6wH#aoM#8CY+tK!&KWq$N2b8h?2pmsX;altt(X2EOJNxos}bfy?qm{@_;^cT8L)o(z*Ouu8+f&CzwA zm$V55<_cR$jz}a&CAy-vy*zh!d^Up+3Q(oeIYdv6L^r8L$xusRo7}Ss(XSJuG(7L3 zo=7V>VlATQIHm7SJA&ycn7S7)`+VV8UYA;=Y!y6ONcEEvwQlD)QWxaBcnvtb_)UOs`^kej4pd zaqw+wlNyx#?iNs)b>nR46y!SsHK8YBLjR&3i%uOPtqlm-b(rjTK>pE+o`FF~3mecY zIT!;u#`6`?0M)}#i+FEwDxcpjULXEZe0{5=Lb%mws*a)$+-ZZ|A96`Yvc*(`^8 zKREIj;+9Jqs8yI!ykF7laP=>!sLx?Xzo!e&zxScH9QyI&JnilJcd&8h%LgDQrd>2% zfYWAt2<_tU+?`fbS64TdL#xHZdiUT#sGog=_0uOy;BOE%G{S8&Xo#bLcUcWETsVi? zmtM^Cxo?(3#j5A$R&gc) zAK$kRf!Y@|bgSheqIMHTotM!kUq)|F8+6~EMorBT@iPi=HI=~PdXzH@So9X-(xF3W zJNy)mzfz0WUaiBk&peF-2lk8O3*6Cv0!t@;pPS-R#S0YTzaa{9I_~hl1xweH+!x#& kx6P@Xm3!mAVE=3V2}RE}G@+Xk{_!NAHotq% z@7wb`zwasVKLoRI(cIjuNzyPS4A}h)qz6S&N@5s>l9({dGM5=nQ9a|DwilF?c$Xw9 z3;KB1i=rsL%_$USiC!7>%b-*$G41ilDUw2=a2bup>WIW08tkc-i6uOSqzViLakCmtJNaIYQ=qdxmaIZ zgs3Q{neNb6kB*MPZm&nbPx;CThv?Xo$$p$rX;*t+79INm0ve45&+pg{9f=*QJ&Bgq zHl(Gc!B$X!Xf%odZCO`TYS_GaBbKkc2d%sw0+i7Fq@rN;O zVx7%~ai}YH2K(dadidD#YrW})8Dx`Vuh;v`538MV8r@OnSN0fVdeQX@3 zzo>`BVu9I|jt#|+;NF}Zoc#PVJYG_YfIo;SzX*{889EIsO0iQ>C=x{7Zujv9dy{uy zU=WQzU!WhE#-wX%?#NyrQjE!1ZPX*fY=%~&hWctNQ~{pEL=u)AE!}P@3VVA;XW5ta zXCK>FzMD+12Tc>m?9i!{u=u*gcR)z;y_uANXtBM3zzxBYqegF(#FDBn1L=8u09 zjmIc){Kk=rvdq+ExC22Pxj!3PNuXqE961D{IA5s%p6BuA`yWc=^RE{ZjYY3FP*Qom zNtwMOgR-bgQ2`3N4UXezNw6%8DMp++eFlGZ_k2%VTH#x zAq`zd5{;#7OR`db{~&5k)M037c!bi6iJ`?r<#GL$D3BK$$yPh4G9`Jn)@nhJEHyzB zCr@1@5|uCKS)vn52sa@Rmx<8)CB}&o*NJMvyc97x*354%C(?-5i5_Bxa1nLHLyHOg Y1A9Bp+xhuPc>n+a07*qoM6N<$f|80VP5=M^ diff --git a/data/magic.mse-game/stats/creature_class.png b/data/magic.mse-game/stats/creature_class.png deleted file mode 100644 index c8a6da57046459fb7d0dcf53850b8421bd844e29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 672 zcmV;R0$=@!P)zpl;Q zxt2_af9Eok2xPqsdJshXLk~fvup&VSM3j(%pn6Hc9(zfBl6pyeQ9%%bkf;!XqOhoe zC<*y6Tv3=0LZPPK&e=V;{kXf^OzObr-t#->{Lb%p@9%dGkP;`-q@@7c=~fb**hy63 z1P|8jB4YB65Mfp-h%dzIXb~ch3UI_W@xG*#SP*@QA9X}G@y5DG1`}o2F^yh+w0jXh z(83z=nz)!LpjFnqF5^ZSpSA|F@tx>f#Gl_B3!(qhQQWtiFwe@>LQM7h@jmBfYn@om z8I(a>xdOU~$3$VKfB_hL4lA|?#F!fNo%l)Q$#{-fv}Q^Wd!nC|tk+Cu+zk)Ehs43> z+b8-JcD(f9@KOlN@gR=#cvhSb<=w=_u@XF=DaWvN>1PsDbvYjuH~r8DeWX?l5i1l0em3Vh)$#qP?cgLiY&!a zPkcnGP$!9i;y*;3Bc2jJh-nz@#8w($TqjP%SE^m{ajW4^{w4lVWVyKJ)?>=fMigHg z@lEWzM2~fHyc8v?)wq#3h9`;YWM4}D=+8>Raf!XH*fxkuW|9uTFJdV>d>&F~|t966{d#j=^_cw0^$X59(Rh?TfS1mZ$Ks^RA@gCUqdm8 z)m-c;hr8@QC|8dG5)yexN;rXtxu02*3nT%G-)yL&OsE1L21rP#fjHZtlJlXoBUI5| zAfABkk3CRDvJ8;)3t}r{^YBXsNTPOuDpJFy2pJ>+aXKMIR0hB-E_%q{N&HYi9}v$J zI_RrHx*@Z*IfU1_hly_UxgfsR{|zuH#4sQt5E%#qaR?A&&n#T|I#zs@MmGf-&Hf8^ zS^ftmnHB8Q%tVlsFaxn45bp-!uRy$p0TRfVfW<-5mcv{AEmw&0f9@EyZ=A^*fk@Jz zqNWdse=|U0XF3pLPq+}LF$gosa$jUo6Zp@nFZ`d?Ol%^OYyc3yf*SM}h|{o`AO^%G zK)e%(LFEzyD4?G)Ff;yV3}82g(qj(#{#1TiKwR zJ|P+OAF2VC^*{!d0r3w8Na^c_X$&R+#pofZVK;$T4l3>s#P^`$pfX;D7{idg1j?0; oNMg&OhJjq?M2caA00*fW0Q>!tcrVBnga7~l07*qoM6N<$g6)SUeEz$4YF-24yP=DJzng(r6?L z`G~NXqVYM7Gw)0@yrwC?&HFp&KKI;v&V3=VQn5v>CR91rKE0(8r7TS9%RBgAq=dq4YZ_;abrJ@x$r@bSP$(Y5HVvjgj*CtSNBA zoPIBxqMsu1Eu4$@ zQeggzIJo6epU)}XhqwrLY$mG=C)~`UfI%8aLLQl74@t_-|Mdms18l+qC==@d0000< KMNUMnLSTa4`nY@m diff --git a/data/magic.mse-game/stats/illustrator.png b/data/magic.mse-game/stats/illustrator.png deleted file mode 100644 index be298035b736399261ecea3a5148c2216dac7e7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@X~P)M@L5|FE6isOO`D8)zQ)MKQlA)yS26TV;&x!8^XfE=dfz#<>lp*m6cV}(b2KA zu&@ZTw6v_$*Vmt`qM~xWzP|ozT3XtFE-tSBe0+TWfy&`nQd06~KtMnn1JHC~BO{|| zD=VuGAiYLGLE$XW(3e0(|By9+Fvt)&Il0ezdU{V36%~InF){rIy6lIIjm?Ewvu0Jl ze*Ieg|9_y;#>U2(Y;0`*nVFgYi-?H)1iJ3Ar>EzM?Ck87y}iAiD_5?}KX~w9_|>ad z9iKmcuKVT77a5>N{tq8M7+$$@#regH7wZ51{bL6i2Ez<5U%nKdI(4eUvSrJRfQqDn onz)b^kb^1GJZk8up>#4701~I6gdXDMrvLx|07*qoM6N<$f*~ZZ5C8xG diff --git a/data/magic.mse-game/stats/keywords.png b/data/magic.mse-game/stats/keywords.png deleted file mode 100644 index 12ec4d97b65cfc176865bc020c43023544018a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 674 zcmV;T0$u%yP)pF33NqRbVF}#ZDnqB004<9jRpV!0zXMaK~#90wNy<{6Hyc;{+c#* zp~Hua3W-IdE;RlDmo8knbAyVMR7)F7O{5|5lei)@hL9KyB@zsn0#Z|h(+0s>3mRLU z>2x|XEgd<&_nKDAv=b__xRZJJojG&gx#zwX04e{7Fx0o zCRl3XWT2FLRl7lwP=qcB*X`ync7}D*P$QspHAz}hPB>jo(h8LLc`SN4arREf5=$n7 z&gBI!C++@6e+Q+k{L~U`6h46#Q}{lORM3g_5w5;OsmW8=5`$1boAO#h^4H2pCv4(CNBErM` zOatH`(^cPeAsgw0aLr!p018UaUnMT!3Gfo61rD)(huMb3^f=jcKu>z{a-elB?mh_9 zVYZ|Y#CaR^FK#^d@%J0bqi5!ze|?N8|IxeqBlw>C{a;BdgFt;wqn;ghOWl&?CX8B);uhq;A0rk`1?Bu_(G^+8=fi(iFVtojd```&=?0If7VcZHDM zgdFW6Q+p9w;xd%j1xU+nYp5L;wH)07*qo IM6N<$f?e|?!~g&Q diff --git a/data/magic.mse-game/stats/power.png b/data/magic.mse-game/stats/power.png deleted file mode 100644 index 085e438175d5f378ad4a5cda8ce68e6bb1f9671e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 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 Mr>mdKI;Vst0J(l5p8x;= diff --git a/data/magic.mse-game/stats/toughness.png b/data/magic.mse-game/stats/toughness.png deleted file mode 100644 index c5043473b73c56000bfebb3dde64e7de41ffd59a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmV;v0zv(WP)*dDrHm}C`4U2q}-LDR^SiFUmyyCf+dkL)^tWW zL#)Zbrl5%KyYswkV-BZJJMe{<=Q-!|KIc5oIU)d}QL5MLucOgujK1&l_zzlqOqwD+ z>vTGAj*gD@R4P?Zp-{kXw^z&Mvc1>qy`=poKQ$V9etw=(tJToybRZavMk5M^0+{*z zerUB?uzkH=FZggl6N$v3!C=7E)fHN;mH?yF;qiEcHD--Q1DBVV&}cN@xuBs?=yYvu z4Zp12ZewzCk~~Flxm@_uOePZ_)a&(rUSD7T9Z2;S*?RF2;_VzZeudlJVxY*%>Rw@+@)vE1uI)yq8()jo| zPEJm+u(0rr3)<~=r-}LyN`YEA|4I{sxN0V&rl;)>&O@f=Ap? zs_O#^YNS#rOiWDlL8qsuaeRCXv)P;@-&@>Jrp?XGXe<`P?CfkGbZ2J=8yg$g-`^jY z`cP=8RC+N#KaXTGiLtRU0VtQt!QL+ony-}2y&FSGx9Poppk@#zl~gK4Hk*aTVqrfr z4~ZKJ6;-R%=Srngm`=@R6M;a0wdP0KyZhfzCK}RaO1I5UOYQrK#^J+JF(aW&wOZ{h kUCev>e#+y|1-+?$03n>+i`8KgAOHXW07*qoM6N<$f?M547ytkO diff --git a/data/magic.mse-game/stats/watermark.png b/data/magic.mse-game/stats/watermark.png deleted file mode 100644 index c6d437ca65eb8c123208690857d7c7db92950017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmVccK~#90WBC97KLbAe{p&Y| zpI^T-{Qrkv9Wur%dF0SxhO~kl*TQ8Jr)90`U%cYNf%bp@{)v%n=%uS=Hwq@umy zOWSsuH>Dn8D0e%O-oB-WC%At#Zch}(OBVu zY9Kl;ayZklYw?;tfB$mhG&DFkn1dn8^b|w27kRIWDS zv_f_GDTYdqGg_q)2RTw5kD;goMquXpDSJ>1J+ON(1EZP36oy)F6ql*j#++2Ej5x(s z>3xQ$${#4^ekNl^>rTlG&%-FbDRVm`(GmrWw9g1buV1;!z^|iF#aQlvVkk$I?`gj3 zfYZp{7pM(7!&vEchPe#cP}eh>ohheZyn2Z+^vJK;M=`Sw0}5C6GOsf-wgx>61~PLP@}1AHRr|tyAXFQCM#sap!qdlF za$;{ELvcYN1Gk23j*x+B-kjO98GzXsVkn4FQ(48pr7m5{$|ZfA$=P30*x5 zZ0b^-@JK0jITJLiZp*zJw@|b8jhhTNuU=#L`}Z$q;=cpT_t!67VR-WJ5nRm9$w7`G z)drF_foZaC^Snv_|NbMdlmglQ>HPdHWXy@+c$3+UO#`yaQEhI1`PvU zBMno7Okq=vNe<3VE^JydE#@xvLDtUp@+D=ZOs`(OBCX^H;U|wDGh7G8?1Fjo8SdY^ m$8Z!_8(ahCK(eb7axnl&CDzdf9NjGd0000