From 57875fa24cf35a69dc92e3cb5ac308e53d7738bb Mon Sep 17 00:00:00 2001 From: cajun <12363371+CajunAvenger@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:49:16 -0500 Subject: [PATCH] field test updates --- .../export-template | 286 ++++++++++++++++++ .../icon.png | Bin 0 -> 15350 bytes data/magic-m15-mainframe-dfc.mse-style/style | 54 ++-- 3 files changed, 318 insertions(+), 22 deletions(-) create mode 100644 data/magic-field-test.mse-export-template/export-template create mode 100644 data/magic-field-test.mse-export-template/icon.png diff --git a/data/magic-field-test.mse-export-template/export-template b/data/magic-field-test.mse-export-template/export-template new file mode 100644 index 000000000..fc1453f1e --- /dev/null +++ b/data/magic-field-test.mse-export-template/export-template @@ -0,0 +1,286 @@ +mse version: 2.0.0 +short name: Field Test +full name: version 0.4 +position hint: 120 +icon: icon.png +version: 2018-02-09 +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 Cajun +option field: + type: text + name: set code + description: The set code for the set +option field: + type: text + name: v mana replacement + description: exports V mana as a replacement text string +script: + # replace shenanigans + fix_tm := replace@(match:"™", replace:"TM") + fixed_set_code := { + trim(fix_tm(if options.set_code != "" then options.set_code else set.set_code)) + } + v_rep := { + if input != "V" + then input + else if options.v_mana_replacement == "" + then input + else + options.v_mana_replacement + } + apos_fix := replace@(match:"’", replace:"'") + type_trim := replace@(match:"Basic ", replace:"")+ + replace@(match:"Legendary", replace:"")+ + replace@(match:"Snow ", replace:"")+ + replace@(match:"World ", replace:"")+ + replace@(match:"Token ", replace:"") + + # process the name + exporter_name_filter := filter_text@(match:"!subname [^\n!]+") + exporter_name_grabber := replace@(match:"!subname ", replace:"") + card_name := { if exporter_name_grabber(exporter_name_filter(card.notes)) != "" then exporter_name_grabber(exporter_name_filter(card.notes)) else remove_tags(card.name) } + database_name := { + if exporter_name_grabber(exporter_name_filter(card.notes)) != "" + then exporter_name_grabber(exporter_name_filter(card.notes)) + else if card.name_2 != "" and match(card.shape, match:"(double|adventure|split|aftermath)") + then remove_tags(card.name) + "//" + remove_tags(card.name_2) + else remove_tags(card.name) + } + + # process type + token_export := {contains(card.shape, match:"token") or contains(card.shape, match:"emblem") or contains(card.shape, match:"rulestip")} + + # process rarity + use_promo := match@(match:"!promo\\b") + use_bonus := { card.rarity == "special" and not use_promo(card.notes) } + rarity_name := { if use_bonus() then "Bonus" else if card.rarity == "special" then "Promo" else if token_export() then "Token" else if card.rarity == "mythic rare" then "M" else if card.rarity == "rare" then "R" else if card.rarity == "uncommon" then "U" else if card.rarity == "common" then "C" else "L" } + lb_rarity_code := { "*" + fixed_set_code() + " " + rarity_name() + "*" } + + # !addtoken !replacetoken !tokentag !addconjure + add_token_filter := filter_text@(match:"!addtoken [^\n!]+") + add_token_grabber := replace@(match:"!addtoken ", replace:"") + replace_token_filter := filter_text@(match:"!replacetoken [^\n!]+") + replace_token_grabber := replace@(match:"!replacetoken ", replace:"") + token_tag_filter := filter_text@(match:"!tokentag [^\n!]+") + token_tag_grabber := replace@(match:"!tokentag ", replace:"") + add_spellbook_filter := filter_text@(match:"!spellbook [^\n!]+") + add_spellbook_grabber := replace@(match:"!spellbook ", replace:"") + token_scripts := { + add_token_argument := add_token_grabber(add_token_filter(card.notes)) + replace_token_argument := replace_token_grabber(replace_token_filter(card.notes)) + token_tag_argument := token_tag_grabber(token_tag_filter(card.notes)) + spellbook_tag_argument := add_spellbook_grabber(add_spellbook_filter(card.notes)) + output := "" + if add_token_argument != "" then output := output + "\"aa\": \"" + add_token_argument + "\"" + (if replace_token_argument != "" or token_tag_argument != "" then ", " else "") + if replace_token_argument != "" then output := output + "\"rr\": \"" + replace_token_argument + "\"" + (if token_tag_argument != "" then ", " else "") + if token_tag_argument != "" then output := output + "\"t\": \"" + token_tag_argument + "\"" + if spellbook_tag_argument != "" then output := output + "\"c\": \"" + spellbook_tag_argument + "\"" + if output != "" then output := "\"tokenscripts\": \{" + output + "\}, " + output + } + + # !notes tag + notes_filter := filter_text@(match:"!notes? [^\n!]+") + notes_grabber := replace@(match:"!notes? ", replace:"") + +replace@(match:"([^,]+)", replace:{"\"" + _1 + "\""}) + +replace@(match:"italics", replace:"italic") + card_note_array := { "[" + (if notes_grabber(notes_filter(card.notes)) != "" then notes_grabber(notes_filter(card.notes)) else "") + "]" } + + # process text for LackeyBot + lackey_bot_rule_filter := replace@(match:"’", replace:"'")+ + replace@(match:"\n", replace:"\\\\n")+ + replace@(match:"[(]", replace:"*(")+ + replace@(match:"[)]", replace: ")*")+ + replace@(match:"\"", replace:"”") + quote_replace := replace@(match:"\"", replace:"\\\\\"") + break_cleaner := replace@(match:"\n", replace:"") + mana_script := replace@(match:"(2|H|W|U|B|R|G|S|C)/(W|U|B|R|G|S|C|I)", replace:{"\{"+_1+"/"+_2+"\}"})+ + replace@(match:"(X|Y|Z|W|U|B|R|G|S|C|I)", in_context:"(?", replace:{"\{"+_1+"\}"})+ + replace@(match:"([1-9][0-9])", in_context:"(?", replace:{"\{"+_1+"\}"})+ + replace@(match:"([0-9])", in_context:"(?(?!})", replace:{"\{"+_1+"\}"})+ + replace@(match:"V", replace:{"\{"+v_rep("V")+"\}"}) + + lackey_bot_mana_filter := replace@(match:"([0-9WUBRGCSHEQTXYZEDV/]+)", replace:{"\{"+_2+"}"})+ + replace@(match:"([0-9HSCWUBRGXYZEDV/])", in_context:"\{[0-9HSCWUBRGXYZEDV/]*[0-9HSCWUBRGXYZEDV/]*}", replace:{"\{"+v_rep(_1)+"}"})+ + replace@(match:"}\{/}\{", replace:"/")+ + replace@(match:"\{([0-9])}\{([0-9])}", replace:{"\{"+_1+_2+"}"})+ + replace@(match:"\{\{", replace:"\{")+ + replace@(match:"}}", replace:"}") + + color_condense := replace@(match:"(, )?(artifact|multicolor|land|hybrid|horizontal|vertical|radial|overlay)", replace: "") + indicator_color_name := { + cond := color_condense(input) + if cond == "white" then "\{White\} " + else if cond == "blue" then "\{Blue\} " + else if cond == "black" then "\{Black\} " + else if cond == "red" then "\{Red\} " + else if cond == "green" then "\{Green\} " + else if cond == "white, blue" then "\{White/Blue\} " + else if cond == "blue, black" then "\{Blue/Black\} " + else if cond == "black, red" then "\{Black/Red\} " + else if cond == "red, green" then "\{Red/Green\} " + else if cond == "white, green" then "\{Green/White\} " + else if cond == "white, black" then "\{White/Black\} " + else if cond == "blue, red" then "\{Blue/Red\} " + else if cond == "black, green" then "\{Black/Green\} " + else if cond == "white, red" then "\{Red/White\} " + else if cond == "blue, green" then "\{Green/Blue\} " + else if cond == "white, black, red" then "\{White/Black/Red\} " + else if cond == "blue, red, green" then "\{Blue/Red/Green\} " + else if cond == "white, black, green" then "\{Black/Green/White\} " + else if cond == "white, blue, red" then "\{Red/White/Blue\} " + else if cond == "blue, black, green" then "\{Green/Blue/Black\} " + else if cond == "white, blue, black" then "\{White/Blue/Black\} " + else if cond == "blue, black, red" then "\{Blue/Black/Red\} " + else if cond == "black, red, green" then "\{Black/Red/Green\} " + else if cond == "white, red, green" then "\{Red/Green/White\} " + else if cond == "white, blue, green" then "\{Green/White/Blue\} " + else "" + } + silver_patch := { + is_silver := contains(card.casting_cost, match:"I") + if not is_silver then input + else if input == "" then "{Silver} " + else replace(input, match:"\{", replace:"\{Silver/") + } + trim_zeroes := replace@(match: "^00?", 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()) + + (if card.rarity == "special" and set.sort_special_rarity == "separate numbering" then "s" else "") + } + lackey_bot_flavor := {"*" + input + "*" } + apos_filter := replace@(match:"’", replace:"'") + paragraph_count := replace@(match:"\n", replace:"~")+ + filter_text@(match:"~") + text_script := { + replace( + remove_tags(input) + (if card.rule_text_3 != "" then "\\n" + card.rule_text_3 else ""), + match:"[ ][ ]+•", + replace: "\\n•" + ) + } + leveler_text := { + card.rule_text + "\\n" + + "[LEVEL " + card.level_1 + "] " + card.rule_text_2 + "\\n" + + "[LEVEL " + card.level_2 + "] " + card.rule_text_3 + "\\n" + } + flavor_script := { if input == "" then "" + else replace(italic_filter(input), match:"\n", replace:"\\\\n") + "\\n" + } + italic_filter := replace@(match:"", replace:"*")+ + replace@(match:" *", replace:"*")+ + replace@(match:" ", replace:"* ")+ + replace@(match:" ", replace:"* ")+ + replace@(match:" ", replace:"* ")+ + replace@(match:"", replace:"*")+ + replace@(match:"", replace:"*")+ + replace@(match:"", replace:"*")+ + replace@(match:" ", replace:" *")+ + replace@(match:" ", replace:" *")+ + replace@(match:" ", replace:" *")+ + replace@(match:"", replace:"*")+ + replace@(match:"", replace:"*")+ + replace@(match:"", replace:"*")+ + replace@(match:"\\*\\*+", replace:"") + + walker_text := { + lackey_bot_mana_filter( + lackey_bot_rule_filter( + (if card.loyalty_cost_1 != "" then "[" + card.loyalty_cost_1 + "]: ") + + (if card.level_1_text != "" then card.level_1_text else split_text(match:"\n", card.rule_text).0) + + "\\n" + + "[" + card.loyalty_cost_2 + "]" + (if card.loyalty_cost_2 !="" then ": ") + (if card.level_2_text != "" then card.level_2_text+"\\n" else if contains(paragraph_count(card.rule_text), match:"~") then split_text(match:"\n", card.rule_text).1+"\\n") + + "[" + card.loyalty_cost_3 + "]" + (if card.loyalty_cost_3 !="" then ": ") + (if card.level_3_text != "" then card.level_3_text+"\\n" else if contains(paragraph_count(card.rule_text), match:"~~") then split_text(match:"\n", card.rule_text).2+"\\n") + + ( if card.loyalty_cost_4 != "" then "[" + card.loyalty_cost_4 + "]" +": ") + (if card.level_4_text != "" then card.level_4_text+"\\n" else if contains(paragraph_count(card.rule_text), match:"~~~") then split_text(match:"\n", card.rule_text).3+"\\n") + + ( if card.loyalty_cost_5 != "" then "[" + card.loyalty_cost_5 + "]" +": ") + (if card.level_5_text != "" then card.level_5_text+"\\n" else if contains(paragraph_count(card.rule_text), match:"~~~~") then split_text(match:"\n", card.rule_text).4+"\\n") + + ( if card.loyalty_cost_6 != "" then "[" + card.loyalty_cost_6 + "]" +": ") + (if card.level_6_text != "" then card.level_6_text+"\\n" else if contains(paragraph_count(card.rule_text), match:"~~~~") then split_text(match:"\n", card.rule_text).5+"\\n") + ) + ) + } + walker_text_2 := { + lackey_bot_mana_filter( + lackey_bot_rule_filter( + (if card.loyalty_cost_9 != "" then "[" + card.loyalty_cost_9 + "]: ") +(if card.level_9_text != "" then card.level_9_text else split_text(match:"\n", card.rule_text_2).0)+"\\n" + + "[" + card.loyalty_cost_10 + "]" +(if card.loyalty_cost_10 !="" then ": ") +(if card.level_10_text != "" then card.level_10_text+"\\n" else if contains(paragraph_count(card.rule_text_2), match:"~") then split_text(match:"\n", card.rule_text_2).1+"\\n") + + "[" + card.loyalty_cost_11 + "]" +(if card.loyalty_cost_11 !="" then ": ") +(if card.level_11_text != "" then card.level_11_text+"\\n" else if contains(paragraph_count(card.rule_text_2), match:"~~") then split_text(match:"\n", card.rule_text_2).2+"\\n") + + ( if card.loyalty_cost_12 != "" then "[" + card.loyalty_cost_12 + "]" +": ") +(if card.level_12_text != "" then card.level_12_text+"\\n" else if contains(paragraph_count(card.rule_text_2), match:"~~~") then split_text(match:"\n", card.rule_text_2).3+"\\n") + + ( if card.loyalty_cost_13 != "" then "[" + card.loyalty_cost_13 + "]" +": ") +(if card.level_13_text != "" then card.level_13_text+"\\n" else if contains(paragraph_count(card.rule_text_2), match:"~~~~") then split_text(match:"\n", card.rule_text_2).4+"\\n") + + ( if card.loyalty_cost_14 != "" then "[" + card.loyalty_cost_14 + "]" +": ") +(if card.level_14_text != "" then card.level_14_text+"\\n" else if contains(paragraph_count(card.rule_text_2), match:"~~~~") then split_text(match:"\n", card.rule_text_2).5+"\\n") + ) + ) + } + + write_normal:= { + " \{" + + "\"fullName\": \"" + break_cleaner(apos_fix(database_name())) + "\", " + + "\"cardName\": \"" + break_cleaner(remove_tags(card.name)) + "\", " + + "\"manaCost\": \"" + mana_script(card.casting_cost) + "\", " + + "\"typeLine\": \"" + break_cleaner(card.type) + "\", " + + "\"rarityLine\": \"" + lb_rarity_code() + "\", " + + "\"rulesText\": \"" + (if card.special_text != "" then lackey_bot_rule_filter(text_script(lackey_bot_mana_filter(card.special_text))) else if card.shape == "leveler" then lackey_bot_mana_filter(lackey_bot_rule_filter(leveler_text())) else if card.loyalty != "" then walker_text() else lackey_bot_rule_filter(text_script(lackey_bot_mana_filter(card.rule_text)))) + "\", " + + "\"flavorText\": \"" + flavor_script(card.flavor_text) + "\", " + + "\"power\": " + (if card.power == "*" then "\"★\"" else if card.power == "" then "\"\"" else if (to_number(card.power) or else false != card.power) then "\"" + card.power + "\"" else card.power) + ", " + + "\"toughness\": " + (if card.toughness == "*" then "\"★\"" else if card.toughness == "" then "\"\"" else if (to_number(card.toughness) or else false != card.toughness) then "\"" + card.toughness + "\"" else card.toughness) + ", " + + "\"loyalty\": " + (if (to_number(card.loyalty) or else false != card.loyalty) then "\"" + card.loyalty + "\"" else card.loyalty) + ", " + + "\"color\": \"" + (if contains(card.super_type, match:"Land") then "" else silver_patch(indicator_color_name(card.card_color))) + "\", " + + "\"cmc\": " + cmc(card.casting_cost) + ", " + + "\"cardType\": \"" + type_trim(card.super_type) + "\", " + + (if contains(card.shape, match: "split") or contains(card.shape, match:"double") or contains(card.shape, match:"adventure") or contains(card.shape, match:"aftermath") then secondCard()) + + "\"rarity\": \"" + (if rarity_name() == "Token" then "token" else if rarity_name() == "Bonus" then "bonus" else if rarity_name() == "Masterpiece" then "masterpiece" else card.rarity) + "\", " + + "\"shape\": \"" + (if contains(card.shape, match: "adventure") then "adventure" else if contains(card.shape, match: "aftermath") or contains(card.shape, match: "split") then "split" else if contains(card.shape, match:"double") then "doubleface" else "normal") + "\", " + + "\"setID\": \"" + (if token_export() then "tokens" else fixed_set_code()) + "\", " + + "\"cardID\": \"" + (if token_export() then fixed_set_code() else "") + position(of:card, in:set) + "\", " + + (if token_export() then "\"parentSet\": \"" + fixed_set_code() + "\", " else "") + + "\"notes\": " + card_note_array() + ", " + + token_scripts() + + "\"artist\": \"" + break_cleaner(quote_replace(card.illustrator)) + + (if contains(card.shape, match: "split") or contains(card.shape, match:"double") and card.illustrator != card.illustrator_2 and card.illustrator_2 != "" then + "\", \"artist2\": \"" + quote_replace(break_cleaner(card.illustrator_2))) + + "\"\},\n" + } + secondCard := { + ( + if card.alias_2 != "" then + "\"cardName2\": \"" + break_cleaner(card.alias_2) + "\", " + + "\"alias2\": \"" + break_cleaner(remove_tags(card.name_2)) + "\", " + else "\"cardName2\": \"" + break_cleaner(remove_tags(card.name_2)) + "\", " + ) + + "\"manaCost2\": \"" + mana_script(card.casting_cost_2) + "\", " + + "\"typeLine2\": \"" + break_cleaner(card.type_2) + "\", " + + "\"rarityLine2\": \"" + lb_rarity_code() + "\", " + + "\"rulesText2\": \"" + (if card.special_text_2 != "" then lackey_bot_rule_filter(text_script(lackey_bot_mana_filter(card.special_text_2))) else if card.loyalty_2 != "" then walker_text_2() else lackey_bot_rule_filter(text_script(lackey_bot_mana_filter(card.rule_text_2)))) + "\", " + + "\"flavorText2\": \"" + flavor_script(card.flavor_text_2) + "\", " + + "\"power2\": " + (if card.power_2 == "*" then "\"★\"" else if card.power_2 == "" then "\"\"" else if (to_number(card.power_2) or else false != card.power_2) then "\"" + card.power_2 + "\"" else card.power_2) + ", " + + "\"toughness2\": " + (if card.toughness_2 == "*" then "\"★\"" else if card.toughness_2 == "" then "\"\"" else if (to_number(card.toughness_2) or else false != card.toughness_2) then "\"" + card.toughness_2 + "\"" else card.toughness_2) + ", " + + "\"loyalty2\": " + (if (to_number(card.loyalty_2) or else false != card.loyalty_2) then "\"" + card.loyalty_2 + "\"" else card.loyalty_2) + ", " + + "\"color2\": \"" + (if contains(card.super_type, match:"Land") then "" else silver_patch(indicator_color_name(card.card_color_2))) + "\", " + + "\"cmc2\": " + cmc(card.casting_cost_2) + ", " + + "\"cardType2\": \"" + type_trim(card.super_type_2) + "\", " + } + + write_update := {write_normal()} + write_cards := to_text(for each card in cards do write_update()) + clean_cards := replace@(match:",\n$", replace: "\n") + +replace@(match:"’", replace:"'") + write_set := "\"meta\":\{\"setID\": \"{fixed_set_code()}\", \"title\": \"{quote_replace(set.title)}\"\}," + #################################### + file_name := { + ( + if token_export() then fixed_set_code()+corrected_card_number() + else corrected_card_number() + ) + +".jpg" + } + write_images := for each card in cards do write_image_file(card, directory: "{fixed_set_code()}", file:(if token_export() then fixed_set_code() else "") + position(of:card, in:set)+".jpg") + + to_string("\{" + write_set + "\n\"cards\":[\n"+clean_cards(write_cards) +"]\n\}") diff --git a/data/magic-field-test.mse-export-template/icon.png b/data/magic-field-test.mse-export-template/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5f55ccc4c1205d22a5b6625ec26e6667cd2a20e3 GIT binary patch literal 15350 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 aD#tm#|SJOhYVR4`ya7jr)y#B7v=R=hlt1y|oed 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