Files
magic-set-editor-fork/data/magic-lackeyccg.mse-export-template/export-template
cajun 9a7b7949e8 [wip] updating exporters for 2.5 (#75)
* Add Card Regions to DFCs
* Add Hashes
* Add crop_multi_image to help crop with card regions
* bugfix exporters and organize the list
* add dfc splitter support for Cockatrice and Lackey exporters
* fix sizing bugs on Planesculptors exporter
* update icons on exporters missing them
* update namecheck exporter and improve near checking

---------

Co-authored-by: cajun <12363371+CajunAvenger@users.noreply.github.com>
2024-09-24 09:52:17 -05:00

786 lines
51 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
mse version: 2.5.0
short name: Lackey
full name: Lackey Exporter
position hint: 900
icon: icon.png
version: 2024-09-24
installer group: magic/Export/LackeyCCG
depends on:
package: magic.mse-game
version: 2009-07-23
game: magic
create directory: true
file type: *.txt|*.txt|*.*|*.*
# By Pichoro and Innuendo
# Based on code by Idle Muse and Seeonee
# Fixes and autoscripting Updates by Cajun
option field:
type: choice
name: Remember!
choice: Edit your setlist.txt file in LackeyCCG to add your new set!
option field:
type: choice
name: Notice!
choice: Remember to rearrange the images and set list file to make your plugin work!
option field:
type: text
name: set code
description: The three letter extension of your set name.
option field:
type: boolean
name: unkeyworded clues
initial: no
description: check yes if you use Clue tokens but not Investigate
option field:
type: choice
name: export size
choice: LackeyCCG Large
choice: LackeyCCG Medium
choice: MSE Standard
description: LackeyCCG Large is 312x445. LackeyCCG Medium is 200x285. MSE Standard is 375x523.
option field:
type: boolean
name: export images
description: Export images?
script:
exporter_name_filter := filter_text@(match:"!exporte?r?name [^\n]+")
exporter_name_grabber := replace@(match:"!exporte?r?name ", replace:"")
card_name := { if exporter_name_grabber(exporter_name_filter(card.notes)) != "" then exporter_name_grabber(exporter_name_filter(card.notes)) else card.name }
last_replace := replace@(match:"", replace:"'")+
replace@(match:"—", replace:"-")+
replace@(match:"Æ", replace:"Ae")
no_investigate := { options.unkeyworded_clues }
####################### triggers the 'Spawn 5' option
x_tokens := {
contains(card.rule_text, match:"create X")
or contains(card.level_1_text, match:"create X")
or contains(card.level_2_text, match:"create X")
or contains(card.level_3_text, match:"create X")
or contains(card.level_4_text, match:"create X")
or contains(card.rule_text, match:"Create X")
or contains(card.level_1_text, match:"Create X")
or contains(card.level_2_text, match:"Create X")
or contains(card.level_3_text, match:"Create X")
or contains(card.level_4_text, match:"Create X")
}
token_pt_fix := { (if card.power == "*" then "X" else card.power) + (if card.power != "" and card.toughness != "" then "/") + (if card.toughness == "*" then "X" else card.toughness) }
trim_zeroes := replace@(match: "^[0]+", replace: "")+
replace@(match: "a?/[0-9b]+", replace: "")
corrected_card_number := { if card.custom_card_number != "" then trim_zeroes(card.custom_card_number) else card_number() }
####################### Image Exporting
large_resizer := [
752: 626,
523: 445,
375: 312
]
medium_resizer := [
752: 402
523: 285
375: 200
]
image_export_width := {
base_width := if contains(card.shape, match:"split")
or contains(card.shape, match:"plane")
or contains(card.shape, match:"battle")
then 523
else if contains(card.shape, match:"double")
then 752
else 375
convert_size(base_width)
}
image_export_height := {
base_height := if contains(card.shape, match:"split")
or contains(card.shape, match:"plane")
or contains(card.shape, match:"battle")
then 375
else 523
convert_size(base_height)
}
convert_size := {
if options.export_size == "LackeyCCG Medium"
then medium_resizer[input] or else input
else if options.export_size == "LackeyCCG Large"
then large_resizer[input] or else input
else input
}
####################### Lackey Columns
mse_to_lackeyccg_trim_duplicate_color := {to_text(if contains(input, match:"W") then "W")
+to_text(if contains(input, match:"U") then "U")
+to_text(if contains(input, match:"B") then "B")
+to_text(if contains(input, match:"R") then "R")
+to_text(if contains(input, match:"G") then "G")
+to_text(if contains(input, match:"A") then "A")
}
mse_to_lackeyccg_gold_format := {to_text(if contains(card.casting_cost, match:"W") then "W")
+to_text(if contains(card.casting_cost, match:"U") then "U")
+to_text(if contains(card.casting_cost, match:"B") then "B")
+to_text(if contains(card.casting_cost, match:"R") then "R")
+to_text(if contains(card.casting_cost, match:"G") then "G")
}
mse_to_lackeyccg_color_filter := replace@(match:",", replace:"")+
replace@(match:" ", replace:"")+
replace@(match:"multicolor", replace:mse_to_lackeyccg_gold_format)+
replace@(match:"hybrid", replace:mse_to_lackeyccg_gold_format)+
replace@(match:"horizontal", replace:"")+
replace@(match:"vertical", replace:"")+
replace@(match:"radial", replace:"")+
replace@(match:"overlay", replace:"")+
replace@(match:"colorless", replace:"")+
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")+
replace@(match:"artifact", replace:"A")
mse_to_lackeyccg_rules_filter := replace@(match:"\n", replace:" ")
####################### Failed attempt to remove the scry reminder text from the scry filter. Scry 10+ needs this fixed or a special script.
scry_replacement := replace@(match: "To scry [0-9]", replace: "stahp")
####################### Used to name tokens
color_condense := replace@(match:"(, )?(artifact|multicolor|land|hybrid|horizontal|vertical|radial|overlay)", replace: "")
token_color_name := { if color_condense(card.card_color) == "colorless" then "colorless"
else if color_condense(card.card_color) == "" and contains(card.type, match:"Artifact") or contains(card.type, match:"Land") then "colorless"
else if color_condense(card.card_color) == "white" then "white"
else if color_condense(card.card_color) == "blue" then "blue"
else if color_condense(card.card_color) == "black" then "black"
else if color_condense(card.card_color) == "red" then "red"
else if color_condense(card.card_color) == "green" then "green"
else if color_condense(card.card_color) == "white, blue" then "white and blue"
else if color_condense(card.card_color) == "blue, black" then "blue and black"
else if color_condense(card.card_color) == "black, red" then "black and red"
else if color_condense(card.card_color) == "red, green" then "red and green"
else if color_condense(card.card_color) == "white, green" then "green and white"
else if color_condense(card.card_color) == "white, black" then "white and black"
else if color_condense(card.card_color) == "blue, red" then "blue and red"
else if color_condense(card.card_color) == "black, green" then "black and green"
else if color_condense(card.card_color) == "white, red" then "red and white"
else if color_condense(card.card_color) == "blue, green" then "green and blue"
else ""
}
####################### These scripts split each line of a card's text for linked scripting. Cards with 5+ lines will need the extras added by hand, or additional scripts added.
paragraph_count := replace@(match:"\n", replace:"~")+
filter_text@(match:"~")
walker_one := { card.rule_text + "\n"}
walker_two := { card.rule_text_2 +"\n" }
check_one := { contains(paragraph_count(walker_one()), match:"~") }
check_two := { contains(paragraph_count(walker_one()), match:"~~") }
check_three := { contains(paragraph_count(walker_one()), match:"~~~") }
check_four := { contains(paragraph_count(walker_one()), match:"~~~~")}
check_five := { contains(paragraph_count(walker_two()), match:"~") }
check_six := { contains(paragraph_count(walker_two()), match:"~~")}
check_seven := { contains(paragraph_count(walker_two()), match:"~~~") }
check_eight := { contains(paragraph_count(walker_two()), match:"~~~~") }
paragraph_one := { if card.level_1_text != "" and card.level_1_text != card.rule_text then card.level_1_text else if check_one() then split_text(match:"\n", walker_one()).0 else card.rule_text }
paragraph_two := { if card.level_2_text != "" then card.level_2_text else if check_two() then split_text(match:"\n", walker_one()).1 else "" }
paragraph_three := { if card.level_3_text != "" then card.level_3_text else if check_three() then split_text(match:"\n", walker_one()).2 else "" }
paragraph_four := { if card.level_4_text != "" then card.level_4_text else if check_four() then split_text(match:"\n", walker_one()).3 else "" }
paragraph_five := { if card.level_5_text != "" and card.level_5_text != card.rule_text_2 then card.level_5_text else if check_five() then split_text(match:"\n", walker_two()).0 else card.rule_text_2 }
paragraph_six := { if card.level_6_text != "" then card.level_6_text else if check_six() then split_text(match:"\n", walker_two()).1 else "" }
paragraph_seven := { if card.level_7_text != "" then card.level_7_text else if check_seven() then split_text(match:"\n", walker_two()).2 else "" }
paragraph_eight := { if card.level_8_text != "" then card.level_8_text else if check_eight() then split_text(match:"\n", walker_two()).3 else "" }
####################### These check if a card uses simultaneous Lackey scrips to add commas and semicolons where needed
semi_search := {
if check == "init" and etbt_function() != "" and counter_function() != "" then ";"
else if check == "loyalty1" and card.loyalty_cost_1 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "loyalty2" and card.loyalty_cost_2 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "loyalty3" and card.loyalty_cost_3 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "loyalty4" and card.loyalty_cost_4 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "loyalty5" and card.loyalty_cost_5 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "loyalty6" and card.loyalty_cost_6 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "loyalty7" and card.loyalty_cost_7 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "loyalty8" and card.loyalty_cost_8 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "special" and special_function() != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "token1" and token_function_1(input) != "" and (token_function_2(input) != "" or token_function_3(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "token2" and token_function_2(input) != "" and (token_function_3(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "token3" and token_function_3(input) != "" and (scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "scry" and scry_function(input) != "" and (look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "looktop" and look_top_function(input) != "" and (reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "revealtop" and reveal_top_function(input) != "" and (look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "lookbot" and look_bot_function(input) != "" and (reveal_bot_function(input) != "" or emblem_function(input) != "") then ";"
else if check == "revealbot" and reveal_bot_function(input) != "" and (emblem_function(input) != "") then ";"
else ""
}
comma_search := {
if check == "init" and etbt_function() != "" and counter_function() != "" then ";"
else if check == "loyalty1" and card.loyalty_cost_1 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "loyalty2" and card.loyalty_cost_2 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "loyalty3" and card.loyalty_cost_3 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "loyalty4" and card.loyalty_cost_4 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "loyalty5" and card.loyalty_cost_5 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "loyalty6" and card.loyalty_cost_6 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "loyalty7" and card.loyalty_cost_7 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "loyalty8" and card.loyalty_cost_8 != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "special" and special_function() != "" and (token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "token1" and token_function_1(input) != "" and (token_function_2(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "token2" and token_function_2(input) != "" and (token_function_3(input) != "" or add_function(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "token3" and token_function_3(input) != "" and (scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "scry" and scry_function(input) != "" and (look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "looktop" and look_top_function(input) != "" and (reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "revealtop" and reveal_top_function(input) != "" and (look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "lookbot" and look_bot_function(input) != "" and (reveal_bot_function(input) != "" or emblem_function(input) != "") then ", "
else if check == "revealbot" and reveal_bot_function(input) != "" and (emblem_function(input) != "") then ", "
else ""
}
####################### SCRIPTS
####################### Filters for special tokens
filter_investigate := filter_text@(match: "[Ii]nvestigate(\</nospellcheck>)?(\</kw-0>)?( twice| three| four| five)?")
filter_morph := filter_text@(match: "M(etam)?orph", in_context: "(^<match>|\n<match>)")
filter_manifest := filter_text@(match: "[Mm]anifest")
special_label := { if filter_manifest(card.rule_text) != "" then "Manifest Overlay"
else if filter_manifest(card.rule_text) != "" then "Morph Overlay"
else if filter_investigate(card.rule_text) != "" then "Investigate"
else ""
}
special_function := { if filter_manifest(card.rule_text) != "" then "/spawn Manifest"
else if filter_manifest(card.rule_text) != "" then "/spawn Morph"
else if filter_investigate(card.rule_text) != "" then "/spawn colorless Clue " + options.set_code
else ""
}
####################### TOKENS
####################### Filters for normal token scripts
filter_tokens := filter_text@(match: "(reate [A-Za-z,'-]+(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?, )?(X|a|an|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twenty)( tapped)?( and attacking)?( snow)?( legendary)? ?([XYZ0-9]+/[XYZ0-9]+ )?(colorless|white|blue|black|red|green)?( and white| and blue| and black| and red| and green)? ?[A-Z][a-z]+( [A-Z][a-z]+)?( [A-Z][a-z]+)? ?(enchantment )?(artifact )?(land )?(creature )?tokens?( with [^\n]+)?( named [^\n]+)?( with)?")
multi_filter := filter_text@(match: "token")
filter_number := filter_text@(match: "(X |a |an |two |three |four |five |six |seven |eight |nine |ten |eleven |twelve |thirteen |fourteen |fifteen |sixteen |seventeen |eighteen |nineteen |twenty )", in_context: "<match>(tapped )?(legendary )?([XYZ0-9]+/[XYZ0-9]+ )?(colorless|white|blue|black|red|green)?( and white| and blue| and black| and red| and green)? ?[A-Z][a-z]+( [A-Z][a-z]+)?( [A-Z][a-z]+)? (enchantment )?(artifact )?(land )?(creature )?")
filter_adds := filter_text@(match: "(one |two |three |four |five |six |seven |eight |nine |ten |eleven |twelve |thirteen |fourteen |fifteen |sixteen |seventeen |eighteen |nineteen |twenty )", in_context: "[Cc]reate <match>of those tokens")
filter_name := filter_text@(match: "([X0-9]+/[X0-9]+ )?(colorless|white|blue|black|red|green)?( and white| and blue| and black| and red| and green)? ?[A-Z][a-z]+( [A-Z][a-z]+)?( [A-Z][a-z]+)?", in_context: "<match> (enchantment )?(artifact )?(land )?(creature )?token")
filter_type := filter_text@(match: "[A-Z][a-z]+( [A-Z][a-z]+)?( [A-Z][a-z]+)?", in_context: "([XYZ0-9]+/[XYZ0-9]+)? ?(colorless|white|blue|black|red|green)?( and white| and blue| and black| and red| and green)? <match>")
filter_legend := filter_text@(match: "reate [A-Za-z,'-]+(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?(,? [A-Za-z,'-]+)?, a legendary")+
replace@(match:"reate ", replace:"")+
replace@(match:", a legendary", replace:"")
filter_emblem := filter_text@(match: "gets? an emblem")
####################### These allows for spawning up to 20 of up to 3 different tokens, and up to ten 'spawn that many instead' tokens
convert_digits := {
if input == "two " then "x2 "
else if input == "three " then "x3 "
else if input == "four " then "x4 "
else if input == "five " then "x5 "
else if input == "six " then "x6 "
else if input == "seven " then "x7 "
else if input == "eight " then "x8 "
else if input == "nine " then "x9 "
else if input == "ten " then "x10 "
else if input == "eleven " then "x11 "
else if input == "twelve " then "x12 "
else if input == "thirteen " then "x13 "
else if input == "fourteen " then "x14 "
else if input == "fifteen " then "x15 "
else if input == "sixteen " then "x16 "
else if input == "seventeen " then "x17 "
else if input == "eighteen " then "x18 "
else if input == "nineteen " then "x19 "
else if input == "twenty " then "x20 "
else " "
}
convert_digit_1 := { convert_digits(filter_number(first_token(input)))}
convert_digit_2 := { convert_digits(filter_number(second_token(input)))}
convert_digit_3 := { convert_digits(filter_number(third_token(input)))}
convert_adds := { convert_digits(filter_adds(input))}
####################### These scripts determine the names of the three tokens, the label on Lackey, and the script to generate them
first_token := { if contains(multi_filter(filter_tokens(input)), match: "token") then split_text(match: "tokens?( with)?", filter_tokens(input)).0 + "token" else "" }
second_token := { if contains(multi_filter(filter_tokens(input)), match: "tokentoken") then split_text(match: "tokens?( with)?", filter_tokens(input)).1 + "token" else "" }
third_token := { if contains(multi_filter(filter_tokens(input)), match: "tokentokentoken") then split_text(match: "tokens?( with)?", filter_tokens(input)).2 + "token" else "" }
token_function_1 := { if first_token(input) == "" then "" else if filter_name(first_token(input)) == "colorless Clue" and not no_investigate() then "" else "/spawn" + convert_digit_1(input) + (if filter_legend(first_token(input)) != "" then filter_legend(first_token(input)) else filter_name(first_token(input))) + " " + options.set_code }
token_function_2 := { if second_token(input) == "" then "" else if filter_name(second_token(input)) == "colorless Clue" and not no_investigate() then "" else "/spawn" + convert_digit_2(input) + (if filter_legend(second_token(input)) != "" then filter_legend(second_token(input)) else filter_name(second_token(input))) + " " + options.set_code }
token_function_3 := { if third_token(input) == "" then "" else if filter_name(third_token(input)) == "colorless Clue" and not no_investigate() then "" else "/spawn" + convert_digit_3(input) + (if filter_legend(third_token(input)) != "" then filter_legend(third_token(input)) else filter_name(third_token(input))) + " " + options.set_code }
add_function := { if filter_adds(card.rule_text) == "" then "" else "/spawn" + convert_adds(input) + (if filter_legend(first_token(input)) != "" then filter_legend(first_token(input)) else filter_name(first_token(input))) + " " + options.set_code }
token_label_1 := { if first_token(input) == "" then "" else (if contains(filter_type(first_token(input)), match: "Kraken") then "Release the " else "Spawn ") + (if filter_legend(first_token(input)) != "" then filter_legend(first_token(input)) else filter_type(first_token(input))) + (if convert_digit_1(input) != " " then " tokens")}
token_label_2 := { if second_token(input) == "" then "" else "Spawn " + (if filter_legend(second_token(input)) != "" then filter_legend(second_token(input)) else filter_type(second_token(input))) + (if convert_digit_2(input) != " " then " tokens")}
token_label_3 := { if third_token(input) == "" then "" else "Spawn " + (if filter_legend(third_token(input)) != "" then filter_legend(third_token(input)) else filter_type(third_token(input))) + (if convert_digit_3(input) != " " then " tokens")}
add_label := { if filter_adds(card.rule_text) == "" then "" else "Spawn many " + (if filter_legend(first_token(input)) != "" then filter_legend(first_token(input)) else filter_type(first_token(input))) + (if convert_adds() != " " then " tokens")}
emblem_function := { if filter_emblem(input) == "" then "" else "/spawn " + (if contains(card.type_2, match:"Planeswalker") then card.sub_type_2 else card.sub_type) + "Emblem " + options.set_code }
emblem_label := { if filter_emblem(input) == "" then "" else "Emblem Get" }
####################### MANIPULATION
####################### Filters for library manipulation scripts
filter_scry := filter_text@(match: "[1-9]", in_context: "[Ss]cry[^,]+<match>")
filter_look := filter_text@(match: "(card|two cards|three cards|four cards|five cards|six cards|seven cards|eight cards|nine cards|ten cards|eleven cards|twelve cards|thirteen cards|fourteen cards|fifteen cards|sixteen cards|seventeen cards|eighteen cards|nineteen cards|twenty cards)", in_context: "[Ll]ooks? at the top <match> of")
filter_reveal := filter_text@(match: "(card|two cards|three cards|four cards|five cards|six cards|seven cards|eight cards|nine cards|ten cards|eleven cards|twelve cards|thirteen cards|fourteen cards|fifteen cards|sixteen cards|seventeen cards|eighteen cards|nineteen cards|twenty cards)", in_context: "([Rr]eveals?|[Ee]xiles?) the top <match> of")
filter_bottom := filter_text@(match: "(card|two cards|three cards|four cards|five cards|six cards|seven cards|eight cards|nine cards|ten cards|eleven cards|twelve cards|thirteen cards|fourteen cards|fifteen cards|sixteen cards|seventeen cards|eighteen cards|nineteen cards|twenty cards)", in_context: "([Ll]ooks? at|[Pp]uts?) the bottom <match> of")
filter_reveal_bottom := filter_text@(match: "(card|two cards|three cards|four cards|five cards|six cards|seven cards|eight cards|nine cards|ten cards|eleven cards|twelve cards|thirteen cards|fourteen cards|fifteen cards|sixteen cards|seventeen cards|eighteen cards|nineteen cards|twenty cards)", in_context: "([Rr]eveals?|[Ee]xile)s? the bottom <match> of")
library_numbers:= { if input == "card" then "1"
else if input == "two cards" then "2"
else if input == "three cards" then "3"
else if input == "four cards" then "4"
else if input == "five cards" then "5"
else if input == "six cards" then "6"
else if input == "seven cards" then "7"
else if input == "eight cards" then "8"
else if input == "nine cards" then "9"
else if input == "ten cards" then "10"
else if input == "eleven cards" then "11"
else if input == "twelve cards" then "12"
else if input == "thirteen cards" then "13"
else if input == "fourteen cards" then "14"
else if input == "fifteen cards" then "15"
else if input == "sixteen cards" then "16"
else if input == "seventeen cards" then "17"
else if input == "eighteen cards" then "18"
else if input == "ninteen cards" then "19"
else if input == "twenty cards" then "20"
else "1"
}
####################### Scry often has reminder text, so we only take the first digit of the scry filter
scry_label := { if filter_scry(scry_replacement(input)) == "" then "" else "Scry " + filter_scry(scry_replacement(input)).0 }
scry_function := { if filter_scry(scry_replacement(input)) == "" then "" else "/vp1pt" + filter_scry(scry_replacement(input)).0 }
look_top_label := { if filter_look(input) == "" then "" else if filter_scry(input) != "" then "" else "Look at top " + library_numbers(filter_look(input)) }
look_top_function := { if look_top_label(input) == "" then "" else "/vp1pt" + library_numbers(filter_look(input)) }
look_bot_label := { if filter_bottom(input) == "" then "" else "Look at bottom " + library_numbers(filter_bottom(input)) }
look_bot_function := { if filter_bottom(input) == "" then "" else "/vp1pb" + library_numbers(filter_bottom(input)) }
reveal_top_label := { if filter_reveal(input) == "" then "" else "Reveal top " + library_numbers(filter_reveal(input)) }
reveal_top_function := { if filter_reveal(input) == "" then "" else "/vp1at" + library_numbers(filter_reveal(input)) }
reveal_bot_label := { if filter_reveal_bottom(input) == "" then "" else "Reveal bottom " + library_numbers(filter_reveal_bottom(input)) }
reveal_bot_function := { if filter_reveal_bottom(input) == "" then "" else "/vp1ab" + library_numbers(filter_reveal_bottom(input)) }
####################### COUNTERS
####################### Initial counter script scripts
####################### Currently goes to ten
vanishing_filter := filter_text@(match: "[0-9]+", in_context: "Vanishing[^(]+<match>")
minus_filter := filter_text@(match: "(a|two|three|four|five|six|seven|eight|nine|ten)", in_context: "enters the battlefield (tapped )?with <match> -1/-1 counters?")
plus_filter := filter_text@(match: "(a|an|two|three|four|five|six|seven|eight|nine|ten)", in_context: "enters the battlefield with <match> (additional )? +1/+1 counters?")
counter_numbers := { if contains(input, match: "ten") then "10"
else if contains(input, match: "nine") then "9"
else if contains(input, match: "eight") then "8"
else if contains(input, match: "seven") then "7"
else if contains(input, match: "six") then "6"
else if contains(input, match: "five") then "5"
else if contains(input, match: "four") then "4"
else if contains(input, match: "three") then "3"
else if contains(input, match: "two") then "2"
else if contains(input, match: "a") then "1"
else "1"
}
loyalty_check := { contains(input, match:"+") or contains(input, match:"-") }
etbt_function := { if contains(card.rule_text, match: "enters the battlefield tapped") then "/cr90" else "" }
counter_function := { if vanishing_filter(card.rule_text) != "" then ("/ccred=" + vanishing_filter(card.rule_text))
else if minus_filter(card.rule_text) != "" then ("/ccred=" + counter_numbers(minus_filter(card.rule_text)))
else if plus_filter(card.rule_text) != "" then ("/ccgreen=" + counter_numbers(plus_filter(card.rule_text)))
else if card.loyalty != "" then ("/ccgreen=" + card.loyalty)
else ""
}
use_scripts := { token_function_1(input) != "" or scry_function(input) != "" or look_top_function(input) != "" or reveal_top_function(input) != "" or look_bot_function(input) != "" or reveal_bot_function(input) != "" or emblem_function(input) != "" }
normal_script := { "\<s>\<l>"
+ (if walker == "one" and loyalty_check(card.loyalty_cost_1) then card.loyalty_cost_1 + comma_search(check: "loyalty1", input) else "")
+ (if walker == "two" and loyalty_check(card.loyalty_cost_2) then card.loyalty_cost_2 + comma_search(check: "loyalty2", input) else "")
+ (if walker == "three" and loyalty_check(card.loyalty_cost_3) then card.loyalty_cost_3 + comma_search(check: "loyalty3", input) else "")
+ (if walker == "four" and loyalty_check(card.loyalty_cost_4) then card.loyalty_cost_4 + comma_search(check: "loyalty4", input) else "")
+ (if walker == "five" and loyalty_check(card.loyalty_cost_5) then card.loyalty_cost_5 + comma_search(check: "loyalty5", input) else "")
+ (if walker == "six" and loyalty_check(card.loyalty_cost_6) then card.loyalty_cost_6 + comma_search(check: "loyalty6", input) else "")
+ (if walker == "seven" and loyalty_check(card.loyalty_cost_7) then card.loyalty_cost_7 + comma_search(check: "loyalty7", input) else "")
+ (if walker == "eight" and loyalty_check(card.loyalty_cost_8) then card.loyalty_cost_8 + comma_search(check: "loyalty8", input) else "")
+ token_label_1(input) + comma_search(check: "token1", input)
+ token_label_2(input) + comma_search(check: "token2", input)
+ token_label_3(input) + comma_search(check: "token3", input)
+ scry_label(input) + comma_search(check: "scry", input)
+ look_top_label(input) + comma_search(check: "looktop", input)
+ reveal_top_label(input) + comma_search(check: "revealtop", input)
+ look_bot_label(input) + comma_search(check: "lookbot", input)
+ reveal_bot_label(input) + comma_search(check: "revealbot", input)
+ emblem_label(input)
+ "\</l>\<f>"
+ (if walker == "one" and loyalty_check(card.loyalty_cost_1) then "/ccgreen" + card.loyalty_cost_1 + semi_search(check: "loyalty1", input) else "")
+ (if walker == "two" and loyalty_check(card.loyalty_cost_2) then "/ccgreen" + card.loyalty_cost_2 + semi_search(check: "loyalty2", input) else "")
+ (if walker == "three" and loyalty_check(card.loyalty_cost_3) then "/ccgreen" + card.loyalty_cost_3 + semi_search(check: "loyalty3", input) else "")
+ (if walker == "four" and loyalty_check(card.loyalty_cost_4) then "/ccgreen" + card.loyalty_cost_4 + semi_search(check: "loyalty4", input) else "")
+ (if walker == "five" and loyalty_check(card.loyalty_cost_5) then "/ccgreen" + card.loyalty_cost_5 + semi_search(check: "loyalty5", input) else "")
+ (if walker == "six" and loyalty_check(card.loyalty_cost_6) then "/ccgreen" + card.loyalty_cost_6 + semi_search(check: "loyalty6", input) else "")
+ (if walker == "seven" and loyalty_check(card.loyalty_cost_7) then "/ccgreen" + card.loyalty_cost_7 + semi_search(check: "loyalty7", input) else "")
+ (if walker == "eight" and loyalty_check(card.loyalty_cost_8) then "/ccgreen" + card.loyalty_cost_8 + semi_search(check: "loyalty8", input) else "")
+ token_function_1(input) + semi_search(check: "token1", input)
+ token_function_2(input) + semi_search(check: "token2", input)
+ token_function_3(input) + semi_search(check: "token3", input)
+ scry_function(input) + semi_search(check: "scry", input)
+ look_top_function(input) + semi_search(check: "looktop", input)
+ reveal_top_function(input) + semi_search(check: "revealtop", input)
+ look_bot_function(input) + semi_search(check: "lookbot", input)
+ reveal_bot_function(input) + semi_search(check: "revealbot", input)
+ emblem_function(input)
+ "\</f>\</s>"
+ (if x_tokens() then "\<s>\<l>" + "Spawn five " + filter_type(first_token(input)) + " tokens\</l>\<f>" + "/spawnx5 " + filter_name(first_token(input)) + " " + options.set_code + "\</f>\</s>")
}
five_replace := replace@(match: "Spawn", "Spawn five")
x_replace := replace@(match: "/spawn ", "/spawnx5 ")
walker_scripts := {
(if etbt_function() != "" or counter_function() != "" then "\<s>\<a>y\</a>\<l>Initialize\</l>\<f>" + etbt_function() + semi_search(check: "init", card.rule_text) + counter_function() + "\</f>\</s>" else "")
+(if special_label() != "" then "\<s>\<l>" + special_label() + "\</l>\<f>" + special_function() + "\</f>\</s>" else "")
+(if loyalty_check(card.loyalty_cost_1) or use_scripts(paragraph_one()) then normal_script(walker: "one", paragraph_one()) else "")
+(if loyalty_check(card.loyalty_cost_2) or use_scripts(paragraph_two()) then normal_script(walker: "two", paragraph_two()) else "")
+(if loyalty_check(card.loyalty_cost_3) or use_scripts(paragraph_three()) then normal_script(walker: "three", paragraph_three()) else "")
+(if loyalty_check(card.loyalty_cost_4) or use_scripts(paragraph_four()) then normal_script(walker: "four", paragraph_four()) else "")
+(if loyalty_check(card.loyalty_cost_5) or use_scripts(paragraph_five()) then normal_script(walker: "five", paragraph_five()) else "")
+(if loyalty_check(card.loyalty_cost_6) or use_scripts(paragraph_six()) then normal_script(walker: "six", paragraph_six()) else "")
+(if loyalty_check(card.loyalty_cost_7) or use_scripts(paragraph_seven()) then normal_script(walker: "seven", paragraph_seven()) else "")
+(if loyalty_check(card.loyalty_cost_8) or use_scripts(paragraph_eight()) then normal_script(walker: "eight", paragraph_eight()) else "")
}
normal_scripts := {
(if etbt_function() != "" or counter_function() != "" then "\<s>\<a>y\</a>\<l>Initialize\</l>\<f>" + etbt_function() + semi_search(check: "init", card.rule_text) + counter_function() + "\</f>\</s>" else "")
+(if special_label() != "" then "\<s>\<l>" + special_label() + "\</l>\<f>" + special_function() + "\</f>\</s>" else "")
+(if use_scripts(paragraph_one()) then normal_script(walker: "no", paragraph_one()) else "")
+(if use_scripts(paragraph_two()) then normal_script(walker: "no", paragraph_two()) else "")
+(if use_scripts(paragraph_three()) then normal_script(walker: "no", paragraph_three()) else "")
+(if use_scripts(paragraph_four()) then normal_script(walker: "no", paragraph_four()) else "")
+(if use_scripts(paragraph_five()) then normal_script(walker: "no", paragraph_five()) else "")
+(if use_scripts(paragraph_six()) then normal_script(walker: "no", paragraph_six()) else "")
+(if use_scripts(paragraph_seven()) then normal_script(walker: "no", paragraph_seven()) else "")
+(if use_scripts(paragraph_eight()) then normal_script(walker: "no", paragraph_eight()) else "")
+(if add_label(card.rule_text) != "" then "\<s>\<l>" + add_label(card.rule_text) + "\</l>\<f>" + add_function(card.rule_text) + "\</f>\</s>" )
}
write_normal := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Basic Land") then "0"
else if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.power+" "
+card.toughness+" "
+substring(to_upper(if card.rarity == "basic land" then "l" else card.rarity),end:1)+" "
+normal_scripts()+" "
+mse_to_lackeyccg_rules_filter(card.rule_text)
+"\n"
}
write_split := {card_name()+" // "+card.name_2+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color))
+mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color_2)))+" "
+card.casting_cost+" // "+card.casting_cost_2+" "
+cmc(card.casting_cost)+" // "+cmc(card.casting_cost_2)+" "
+card.type+(if card.type != card.type_2 then " // " +card.type_2 else "")+" "
+card.power+" "
+card.toughness+" "
+substring(to_upper(card.rarity),end:1)+" "
+normal_scripts()+" "
+mse_to_lackeyccg_rules_filter(card.rule_text)+" // "+mse_to_lackeyccg_rules_filter(card.rule_text_2)
+"\n"
}
write_flip := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.power+" "
+card.toughness+" "
+substring(to_upper(card.rarity),end:1)+" "
+normal_scripts()+" "
+mse_to_lackeyccg_rules_filter(card.rule_text)
+" ----- "
+card.name_2+" "
+card.type_2+" "
+card.power_2+(if card.power_2 != "" then "/" else "")+card.toughness_2+(if card.power_2 != "" then " " else "")
+mse_to_lackeyccg_rules_filter(card.rule_text_2)
+"\n"
}
write_dfc := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "as" else "a")+","+corrected_card_number()+(if card.rarity == "special" then "bs" else "b")+" "
+(if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+(if card.casting_cost_2 != "" then "//"+card.casting_cost_2 else "")+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.power+" "
+card.toughness+" "
+substring(to_upper(card.rarity),end:1)+" "
+normal_scripts()+" "
+mse_to_lackeyccg_rules_filter(card.rule_text)
+" ----- "
+card.name_2+"|"
+card.type_2+" "
+"["+card.power_2+(if card.power_2 != "" then "/" else "")+card.toughness_2+"] "
+mse_to_lackeyccg_rules_filter(card.rule_text_2)
+"\n"
}
write_walker := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.loyalty+" "
+substring(to_upper(card.rarity),end:1)+" "
+walker_scripts()+" "
+card.loyalty_cost_1
+(if card.loyalty_cost_1 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_one())+" "
+card.loyalty_cost_2
+(if card.loyalty_cost_2 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_two())+" "
+card.loyalty_cost_3
+(if card.loyalty_cost_3 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_three())+" "
+card.loyalty_cost_4
+(if card.loyalty_cost_4 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_four())
+"\n"
}
write_sparker := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "as" else "a")+","+corrected_card_number()+(if card.rarity == "special" then "bs" else "b")+" "
+(if contains(card.type, match:"Land") then "L" else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+(if card.casting_cost_2 != "" then "//"+card.casting_cost_2 else "")+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.power+" "
+card.toughness+" "
+substring(to_upper(card.rarity),end:1)+" "
+normal_scripts()+"\<s>\<l>Ascend\</l>\<f>/cf;/ccgreen=" + card.loyalty_2 + "\</f>\</s>"+walker_scripts()
+" "
+mse_to_lackeyccg_rules_filter(card.rule_text)
+" ----- "
+card.name_2+"|"
+card.type_2+" "
+"["+card.loyalty_2+"] "
+card.loyalty_cost_5
+(if card.loyalty_cost_5 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_five())+" "
+card.loyalty_cost_6
+(if card.loyalty_cost_6 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_six())+" "
+card.loyalty_cost_7
+(if card.loyalty_cost_7 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_seven())+" "
+card.loyalty_cost_8
+(if card.loyalty_cost_8 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_eight())
+"\n"
}
write_sacrificer := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.loyalty+" "
+substring(to_upper(card.rarity),end:1)+" "
+normal_scripts()+" "
+card.loyalty_cost_1
+(if card.loyalty_cost_1 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_one())+" "
+card.loyalty_cost_2
+(if card.loyalty_cost_2 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_two())+" "
+card.loyalty_cost_3
+(if card.loyalty_cost_3 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_three())+" "
+card.loyalty_cost_4
+(if card.loyalty_cost_4 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_four())
+" ----- "
+card.name_2+"|"
+card.type_2+" "
+"["+card.power_2+(if card.power_2 != "" then "/" else "")+card.toughness_2+"] "
+mse_to_lackeyccg_rules_filter(card.rule_text_2)
+"\n"
}
write_dfc_walker := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.loyalty+" "
+substring(to_upper(card.rarity),end:1)+" "
+walker_scripts()+"\<s>\<l>Transform\</l>\<f>/cf;/ccgreen=" + card.loyalty_2 + "\</f>\</s>"+" "
+card.loyalty_cost_1
+(if card.loyalty_cost_1 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_one())+" "
+card.loyalty_cost_2
+(if card.loyalty_cost_2 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_two())+" "
+card.loyalty_cost_3
+(if card.loyalty_cost_3 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_three())+" "
+card.loyalty_cost_4
+(if card.loyalty_cost_4 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_four())
+" ----- "
+card.name_2+"|"
+card.type_2+" "
+"["+card.loyalty_2+"] "
+card.loyalty_cost_5
+(if card.loyalty_cost_5 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_five())+" "
+card.loyalty_cost_6
+(if card.loyalty_cost_6 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_six())+" "
+card.loyalty_cost_7
+(if card.loyalty_cost_7 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_seven())+" "
+card.loyalty_cost_8
+(if card.loyalty_cost_8 !="" then ": ")
+mse_to_lackeyccg_rules_filter(paragraph_eight())
+"\n"
}
write_leveler := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.power+" "
+card.toughness+" "
+substring(to_upper(card.rarity),end:1)+" "
+legal_script()+" "
+normal_scripts()+" "
+card.rule_text+" "
+"[LEVEL "+card.level_1+"]: "
+card.rule_text_2
+(if card.pt_2 !="" then " ("+card.pt_2+") ")
+(if card.level_2 !="" then "[LEVEL "+card.level_2+"]: ")
+card.rule_text_2
+(if card.pt_3 !="" then " ("+card.pt_2+") ")
+"\n"
}
write_token := {
(
if contains(card.type, match:"Legendary")
then card_name() + " " + options.set_code
else if card_name() == "Clue" or card_name() == "Gold"
then "colorless " + card_name() + " " + options.set_code
else if card_name() == "Morph" or card_name() == "Manifest"
then card_name()
else (
if contains(card.type, match:"Emblem")
then card.sub_type
else (if card.pt != "" then token_pt_fix(card.pt) + " " else "") + token_color_name()+ " "
) + card_name() + " " + options.set_code
)
+ " "
+ "tokens "
+ options.set_code + corrected_card_number() + (if card.rarity == "special" then "s" else "") + " "
+ (
if contains(card.type, match:"Basic Land")
then "0"
else if contains(card.type, match:"Land")
then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color))
)
+ " "
+ card.casting_cost + " "
+ cmc(card.casting_cost) + " "
+ "Token "
+ card.power + " "
+ card.toughness + " "
+ "T "
+ " "
+ normal_scripts() + " "
+ mse_to_lackeyccg_rules_filter(card.rule_text)
+ "\n"
}
write_saga := {card_name()+(if card.rarity == "special" then ".")+" "
+options.set_code+" "
+corrected_card_number()+(if card.rarity == "special" then "s" else "")+" "
+(if contains(card.type, match:"Basic Land") then "0"
else if contains(card.type, match:"Land") then "L"
else mse_to_lackeyccg_trim_duplicate_color(mse_to_lackeyccg_color_filter(card.card_color)))+" "
+card.casting_cost+" "
+cmc(card.casting_cost)+" "
+card.type+" "
+card.power+" "
+card.toughness+" "
+substring(to_upper(if card.rarity == "basic land" then "l" else card.rarity),end:1)+" "
+normal_scripts()+" "
+mse_to_lackeyccg_rules_filter(card.special_text)
+"\n"
}
write_card := { if contains(card.shape, match:"token") or contains(card.shape, match:"emblem") or contains(card.super_type, match:"Token") or contains(card.super_type, match:"Emblem") or contains(card.type, match:"Reminder") then write_token()
else if contains(card.shape, match:"rulestip") then ""
else if contains(card.shape, match:"counter") then write_token()
else if contains(card.shape, match:"split") then write_split()
else if contains(card.shape, match:"saga") then write_saga()
else if contains(card.shape, match:"double faced") and card.loyalty == "" and card.loyalty_2 != "" then write_sparker()
else if contains(card.shape, match:"double faced") and card.loyalty != "" and card.loyalty_2 == "" then write_sacrificer()
else if contains(card.shape, match:"double faced") and card.loyalty != "" and card.loyalty_2 != "" then write_dfc_walker()
else if contains(card.shape, match:"double faced") then write_dfc()
else if card.name_2 != "" then write_flip()
else if card.loyalty != "" then write_walker()
else if contains(card.shape, match:"leveler") then write_leveler()
else write_normal()
}
image_file_name := {
(
if contains(card.super_type, match:"Token")
or contains(card.super_type, match:"Emblem")
or contains(card.shape, match:"token")
or contains(card.shape, match:"emblem")
or card_name() == "Morph"
or card_name() == "Manifest"
then options.set_code
else ""
)
+ corrected_card_number()
+ fillin
+ (if card.rarity == "special" then "s" else "")
+ ".jpg"
}@(fillin:"")
write_card_image := {
if length(card.stylesheet.card_regions) > 0
then write_multi_images();
write_image_file(
card,
directory: to_lower(options.set_code),
file: image_file_name(),
width: image_export_width(),
height: image_export_height()
)
}
write_multi_images := {
card_image := to_card_image(card)
for i from 0 to length(card.stylesheet.card_regions)-1 do (
region_info := card.stylesheet.card_regions[i]
region_name := region_info.name
fillin := if region_name == "front" or region_name == "minifront" or region_name == "meldpair"
then "a"
else if region_name == "back" or region_name == "meldback" or region_name == "meld"
then "b"
else if region_name == "thirdcard"
then "c"
else region_name
region := crop(
card_image,
height: region_info.height,
width: region_info.width,
offset_x: region_info.x,
offset_y: region_info.y
)
write_image_file(
region,
directory: to_lower(options.set_code),
file: image_file_name(fillin:fillin),
width: convert_size(region_info.width),
height: convert_size(region_info.height)
)
)
}
write_cards := to_text(for each card in cards do write_card())
write_images := if options.export_images then (for each card in sort_list(cards, order_by: {card.card_number}) do write_card_image()) else ""
to_string("Name Set ImageFile Color Cost ConvertedCost Type Power Toughness Rarity Script Text\n"+last_replace(write_cards))