Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions data/magic-cockatrice-v2.mse-export-template/README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ The description of the set under “Set Type” in Cockatrice, such as Promo or
Export Images
Whether to export images and at what quality. JPG images are lower quality but smaller file sizes. PNG images can’t be uploaded to Planesculptors anymore.

Ensure Unique Image Names
Adds the set code and number to the end of image files, allowing different printings to have unique art.
This requires at least the cockatrice 3.0 update which adds the option to differentiate custom images by using the format [cardname]_[setcode]_[setnumber].[extension].
Custom images using this option are able to work next to canon printings, as well as having multiple printings in one set for eg promos.

Tokens in Separate XML
Separates the tokens into their own file. This is no longer necessary but is still supported.

Expand Down
59 changes: 41 additions & 18 deletions data/magic-cockatrice-v2.mse-export-template/export-template
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
mse version: 2.5.0
short name: Cockatrice
full name: Exporter v2.2
full name: Exporter v2.3
position hint: 100
icon: icon.png
version: 2024-09-23
version: 2026-05-13
installer group: magic/Export/cockatrice

depends on:
Expand Down Expand Up @@ -35,6 +35,11 @@ option field:
choice: JPG
choice: PNG
initial: no
option field:
type: boolean
name: ensure Unique Image Names
description: Adds the set code and number to the end of image files, allowing different printings to have unique art (requires cockatrice 3.0 or newer)
initial: no
option field:
type: boolean
name: tokens In Separate XML
Expand All @@ -47,8 +52,8 @@ option field:
initial: no
option field:
type: text
name: append String To Names
description: Appended to the front of all card names and image names.
name: prepend String To Names
description: Added to the front of all card names and image names.
option field:
type: multiple choice
name: rarities to export
Expand Down Expand Up @@ -112,6 +117,9 @@ script:
# escaped set code
setcode := xml_escape(set.set_code)

# cardnumber, simply use card_number() as it needs to be unique
cardnumber := xml_escape(card_number())

#functions for the !exportname command
exporter_name_filter := filter_text@(match:"!exporte?r?name [^\n\<]+")
exporter_name_grabber := replace@(match:"!exporte?r?name ", replace:"")
Expand Down Expand Up @@ -225,14 +233,15 @@ script:
write_normal := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))+"\</name>"
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))+"\</name>"
# Set
+"\n "+"\<set rarity="
+(if contains(card.rarity,match:"uncommon") then "\"uncommon\""
else if contains(card.rarity,match:"common") then "\"common\""
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\""+cardnumber+"\""
+ ">"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
Expand Down Expand Up @@ -268,7 +277,9 @@ script:
# Name
+"\n "+"\<name>"+xml_escape(strip_card_name(card_name())+(if options.append_Set_Code_To_Tokens then " " + setcode else ""))+"\</name>"
# Set
+"\n "+"\<set>"+setcode+"\</set>"
+"\n "+"\<set"
+ " num=\""+cardnumber+"\""
+ ">"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
+"\n "+"\<colors>"
Expand Down Expand Up @@ -301,7 +312,7 @@ script:
write_flip := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))
#+" // "+strip_card_name(card.name_2)
+"\</name>"
# Set
Expand All @@ -311,6 +322,7 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\""+cardnumber+"\""
+ ">"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
Expand Down Expand Up @@ -373,7 +385,7 @@ script:
write_double := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))
#+" | ("+strip_card_name(card.name_2)+")"
+"\</name>"
# Set
Expand All @@ -383,7 +395,8 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " splitterPath=\""+"/"+options.append_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+options.prepend_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
+"\n "+"\<colors>"
Expand Down Expand Up @@ -426,6 +439,7 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+strip_card_name(card.name_2)+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color II
Expand Down Expand Up @@ -464,14 +478,15 @@ script:
write_walker := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))+"\</name>"
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))+"\</name>"
# Set
+"\n "+"\<set rarity="
+(if contains(card.rarity,match:"uncommon") then "\"uncommon\""
else if contains(card.rarity,match:"common") then "\"common\""
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\"" + card_number() + "\""
+ ">"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
Expand Down Expand Up @@ -517,7 +532,7 @@ script:
write_double_walker := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))
#+" | ("+strip_card_name(card.name_2)+")"
+"\</name>"
# Set
Expand All @@ -527,7 +542,8 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " splitterPath=\""+"/"+options.append_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+options.prepend_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
+"\n "+"\<colors>"
Expand Down Expand Up @@ -584,6 +600,7 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+strip_card_name(card.name_2)+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color II
Expand Down Expand Up @@ -632,7 +649,7 @@ script:
write_sparker := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))
#+" | ("+strip_card_name(card.name_2)+")"
+"\</name>"
# Set
Expand All @@ -642,7 +659,8 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " splitterPath=\""+"/"+options.append_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+options.prepend_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
+"\n "+"\<colors>"
Expand Down Expand Up @@ -684,6 +702,7 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+strip_card_name(card.name_2)+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color II
Expand Down Expand Up @@ -732,7 +751,7 @@ script:
write_sacrificer := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))
#+" | ("+strip_card_name(card.name_2)+")"
+"\</name>"
# Set
Expand All @@ -742,7 +761,8 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " splitterPath=\""+"/"+options.append_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+options.prepend_String_To_Names+strip_card_name(card_name())+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
+"\n "+"\<colors>"
Expand Down Expand Up @@ -800,6 +820,7 @@ script:
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\""+cardnumber+"\""
+ " splitterPath=\""+"/"+strip_card_name(card.name_2)+"." + file_type() + "\" >"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color II
Expand Down Expand Up @@ -833,14 +854,15 @@ script:
write_leveler := {
"\n "+"\<card>"
# Name
+"\n "+"\<name>"+xml_escape(options.append_String_To_Names+strip_card_name(card_name()))+"\</name>"
+"\n "+"\<name>"+xml_escape(options.prepend_String_To_Names+strip_card_name(card_name()))+"\</name>"
# Set
+"\n "+"\<set rarity="
+(if contains(card.rarity,match:"uncommon") then "\"uncommon\""
else if contains(card.rarity,match:"common") then "\"common\""
else if contains(card.rarity,match:"mythic") then "\"mythic\""
else if contains(card.rarity,match:"rare") then "\"rare\""
else "\"\"")
+ " num=\""+cardnumber+"\""
+ ">"+setcode+"\</set>"
+"\n "+"\<prop>"
# Color
Expand Down Expand Up @@ -907,9 +929,10 @@ script:
else write_single_image()
}
format_file_name := {
options.append_String_To_Names
options.prepend_String_To_Names
+ input
+ (if is_token() and options.append_Set_Code_To_Tokens then " " + set.set_code else "")
+ (if options.ensure_Unique_Image_Names then "_" + set.set_code + "_" + card_number() else "")
+ "." + file_type()
}
write_single_image := {
Expand Down