[274/274] magic-modules rollout (#51)

Add Magic-Modules support to all frames
This commit is contained in:
cajun
2024-09-10 22:21:23 -05:00
committed by GitHub
parent 65bfc8fcd6
commit 6d617985ce
5491 changed files with 37088 additions and 66467 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -354,64 +354,153 @@
remove_tag@(tag: "<b-auto>") +
remove_tag@(tag: "<error-spelling") +
remove_tag@(tag: "<nospellcheck") +
# step 2 : reminder text for keywords
remove_tag@(tag: "<li>") +
remove_tag@(tag: "<bullet>") +
remove_tag@(tag: "<align") +
remove_tag@(tag: "<margin") +
#### step 1b : remove zero-width space used for level spacers
replace@(match:"", replace:"") +
#### step 2a : temp fix for formatting buttons
replace@(
match:"<b></b>",
replace:"BOLDAROUND"
) +
replace@(
match:"<i></i>",
replace:"ITALAROUND"
) +
replace@(
match:"<sym></sym>",
replace:"SYMAROUND"
) +
#### step 2a : reminder text for keywords
expand_keywords@(
condition: {
correct_case or (mode != "pseudo" and not used_placeholders)
}
default_expand: {
chosen(choice:if correct_case then mode else "lower case", set.automatic_reminder_text)
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 := "<nospellcheck>{keyword}</nospellcheck>"
keyword := "<nospellcheck>{keyword}</nospellcheck>"
reminder := process_english_hints(reminder)
if mode == "pseudo" then "<i-auto>{keyword}</i-auto>"
else keyword + if expand then "<atom-reminder-{mode}> ({reminder})</atom-reminder-{mode}>"
}) +
# step 2b : move action keywords' reminder text to the end of the line
else keyword + if expand then "<atom-reminder-{mode}> ({reminder})</atom-reminder-{mode}>" else ""
}
) +
#### step 2b : apply face_code
replace@(
match: "(<atom-reminder-action>(?:(?!<kw-).)*</atom-reminder-action></kw[^>]*>)(((?!<atom-reminder| ?<kw-)[^\n(])+)",
match: "face_(.*?)_end",
replace: {face_code(_1)}
) +
#### step 2c : move action keywords' reminder text to the end of the line
replace@(
match: "(<atom-reminder-[^>]+> (?:(?!</kw).*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*)", #### removed "| ?<kw-" from lookahead
replace: "\\2\\1"
) +
# step 2c : remove duplicate reminder text
) +
#### step 2d : when there's an action keyword and another one, then move that to the end of the line
replace@(
match: "(<atom-reminder-[^>]+> (?:(?!</kw)[^\n]*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*?)(<atom-reminder-[^>]+> (?:(?!</kw).*?)</atom-reminder-[^>]+></kw[^>]*>)([^\n]*)",
replace: "\\2\\4\\3\\1"
) +
#### step 2e : allow a sentence after lowercase reminder text for equips etc.
#replace@(
# match: "(<kw[^>]+><nospellcheck>[a-z][^<]+</nospellcheck>)(<atom-reminder-(?:expert|custom|old|core)>(?:(?!<kw-).)*</atom-reminder-(?:expert|custom|old|core)></kw[^>]*>)([^\n]+)$",
# replace: "\\1\\3\\2"
# ) +
#### step 2f : remove duplicate reminder text
replace@(
match: "(<atom-reminder-[^>]*>[^)]+[)]</atom-reminder-[^>]*>)([^\n]+)\\1"
replace: "\\2\\1"
) +
# step 3a : expand shortcut word CARDNAME
) +
#### step 2g : combine reminder texts
replace@(
match: "CARDNAME",
in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
match: "[)](</atom-reminder-[^>]+></kw-[^>]><atom-reminder-[^>]+> )[(]"
replace: "\\1"
) +
#### step 2h : temp fix for formatting buttons
replace@(
match:"BOLDAROUND",
replace:"<b></b>"
) +
replace@(
match:"ITALAROUND",
replace:"<i></i>"
) +
replace@(
match:"SYMAROUND",
replace:"<sym></sym>"
) +
replace@(
match:"-\n-"
replace:"<soft-line>\n</soft-line>"
) +
#### step 3a : expand shortcut word CARDNAME
replace@(
match: "CARDNAME>?", #### >? is here so after replacement, the mouse snaps to the end of </atom>
in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'||-|—|/|)<match>", #### TODO: Allow any punctuation before
replace: "<atom-cardname></atom-cardname>"
) +
# step 3b : expand shortcut word LEGENDNAME
) +
#### step 3b : expand shortcut word LEGENDNAME
replace@(
match: "LEGENDNAME",
in_context: "(^|[[:space:]]|\\()<match>", # TODO: Allow any punctuation before
match: "LEGENDNAME>?",
in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'||/|)<match>", #### TODO: Allow any punctuation before
replace: "<atom-legname></atom-legname>"
) +
# step 3c : fill in atom fields
) +
#### step 3c : fill in atom fields
tag_contents@(
tag: "<atom-cardname>",
contents: { "<nospellcheck>" + (if card_name=="" then "CARDNAME" else card_name) + "</nospellcheck>" }
) +
contents: { "<nospellcheck>" + (if card_name=="" then "CARDNAME" else strip_card_codes(card_name, atom:true)) + "</nospellcheck>" }
) +
tag_contents@(
tag: "<atom-legname>",
contents: { "<nospellcheck>" + (if card_name=="" then "LEGENDNAME" else legend_filter(card_name)) + "</nospellcheck>" }
) +
contents: { "<nospellcheck>" + (if card_name=="" then "LEGENDNAME" else legend_filter(strip_card_codes(card_name, atom:true))) + "</nospellcheck>" }
) +
replace@(
match: "INS([1-9])",
in_context: "(^|[[:space:]]|\\(|,|\\.|:|“|\"|'||/|)<match>",
replace: "<atom-insert\\1></atom-insert\\1>"
) +
{
out := input
for x from 1 to inserts_count() do
out := tag_contents(out,
tag: "<atom-insert"+x+">",
contents: { "<nospellcheck>" + (if inserts_values()[x-1] == "" then "INS"+x else inserts_values()[x-1]) + "</nospellcheck>" }
)
out
} +
# step 4 : explict non mana symbols
replace@(
match: "\\][HSCATQXYZ∞WUBRGPK0-9/|]+\\[",
match: "\\][-+=]?[VHSCATQXYZ∞WUBRGPK0-9/|]+\\[",
replace: {"<nosym>" + mana_filter_t() + "</nosym>"} ) +
# step 5 : add mana & tap symbols
#### step 5 : add mana & tap symbols
replace@(
match: "\\b[HSCATQXYZ∞WUBRGPK0-9/|]+\\b",
match: "(?<!\\/)([+=-][XYZ0-9|]+)(?!\\/)",
in_context: mana_context,
replace: {"<sym-auto>" + mana_filter_t() + "</sym-auto>"} ) +
# step 5b : add explict mana symbols
replace: {"<sym-auto>" + _1 + "</sym-auto>"}
) +
replace@(
match: "\\[[HSCATQXYZ∞WUBRGPK0-9/|]+\\]",
replace: {"<sym>" + mana_filter_t() + "</sym>"} ) +
match: "\\b((TK)+)(T)?\\b",
in_context: mana_context,
replace: {"<sym-auto>" + _1 + "</sym-auto>" + _3}
) +
replace@(
match: "\\b[VHSCATQXYZ∞WUBRGPK0-9/|]+\\b",
in_context: mana_context,
replace: {"<sym-auto>" + mana_filter_t() + "</sym-auto>"}
) +
#### step 5b : remove false positive mana & tap symbols
replace@(
match: "<sym-auto>([VHSCATQXYZ∞WUBRGPK0-9/|]+)</sym-auto>",
in_context: mana_un_context,
replace: "\\1"
) +
#### step 5c : add explicit mana symbols
replace@(
match: "\\[[-+=]?[VHSCATQXYZ∞WUBRGPK0-9/|]+\\]",
replace: {"<sym>" + mana_filter_t() + "</sym>"}
) +
# step 6a : curly double quotes
replace@(
match: "[[.quotation-mark.]]|”",
@@ -425,21 +514,43 @@
match: "[(]([^)\n]|[(][^)\n]*[)])*[)]?",
in_context: "(^|[[:space:]])<match>|<atom-keyword><match></",
replace: "<i-auto>&</i-auto>") +
# step 8 : automatic capitalization, but not after "("
#### step 7b : indent bullets
replace@(
match: "([ ]*: |—| — )" # preceded by this
+ "([[:lower:]])" # match this
+ "(?![)])", # not followed by this
replace: { _1 + to_upper(_2) }) +
#curly_quotes +
# step 9 : spellcheck
{ if set.mark_errors then
match: "^(• |[+] ?)([^\n]+\n?)",
replace: {"<li><bullet>" + _1 + "</bullet>" + _2 + "</li>"}
) +
#### 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 language().code == "ja" or language().code == "zht" or language().code == "zhs" then input
else if set.mark_errors then
check_spelling(
language: language().spellcheck_code,
extra_dictionary: "/magic.mse-game/dictionary/magic-words",
extra_match: additional_text_words
)
else input
else input
}
############################################################## Other boxes

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -6,7 +6,7 @@ icon: card-sample.png
installer group: magic/m15 style/normal cards/with extra features
position hint: 050
version: 2018-02-09
version: 2024-06-06
depends on:
package: magic.mse-game
version: 2015-04-08
@@ -22,6 +22,9 @@ depends on:
depends on:
package: magic-pt-symbols-extra-m15.mse-symbol-font
version: 2014-03-20
depends on:
package: magic-modules.mse-include
version: 2024-05-20
card width: 375
card height: 523
@@ -49,12 +52,25 @@ init script:
#Should multicolor lands with basic land types have a colored name?
mask_multi_land_with_color := { contains(styling.regular_options, match:"colored multicolor land names") }
template_prefix := [card: "" pt: "" stamp: "" identity: ""]
template_suffix := [card: "card.jpg" pt: "pt.png" stamp: "stamp.jpg" identity: "identity.png"]
template_prefix := [
card: ""
pt: ""
stamp: "stamps/"
ubstamp: "ubstamps/"
identity: ""
]
template_suffix := [
card: "card.jpg"
pt: "pt.png"
stamp: "stamp.png"
ubstamp: "stamp.png"
identity: "identity.png"
]
template := { template_prefix[type] + input + template_suffix[type] }
land_template := { template_prefix[type] + (if input == "a" or input == "s" then "c" else input) + "l" + template_suffix[type] }
# Use land templates for previews because they show more contrast
hybrid_previews := "land,hybrid"
card_ubstamp := { color_background(type:"ubstamp", base_hybrid:stamp_hybrid) }
# Use the normal tap symbol
mana_t := {
@@ -126,10 +142,6 @@ styling field:
type: text
name: chop text
description: Shrinks the textbox, formatted as "top,bottom". This must end in a comma.
styling field:
type: text
name: flavor bar offset
description: Move the flavor bar down X pixels. Use negative to move up.
styling field:
type: choice
name: font style
@@ -144,11 +156,9 @@ styling field:
name: regular options
description: Which regular styling options would you like to use?
choice: center text
choice: color indicator dot
choice: colored multicolor land names
choice: grey hybrid names
choice: guild mana symbols
choice: holofoil stamped rares
choice: promo rarity
choice: inverted common symbol
choice: remove from autocount
@@ -264,13 +274,15 @@ styling style:
render style: checklist
direction: vertical
############################################################## Card fields
include file: /magic-modules.mse-include/information/card_fields
include file: /magic-modules.mse-include/corners/card_fields
include file: /magic-modules.mse-include/stamps/card_fields
card style:
border color:
left: 0
top : 0
width: 375
height: 523
radius: 18
left width: 17
right width: 17
top width: 17
@@ -315,15 +327,15 @@ card style:
card symbol:
left:
{if card.card_symbol == "none" then 20
else if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 30
else if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 26
else 50}
top: {if card.card_symbol == "none" then 40 else 29}
height: 20
width: 14
top: 29
height: 21
width: 23
z index: 1
render style: image
choice images:
tombstone: tombstone.png
include file: /magic.mse-game/card-symbols/menu_choice_images
image: { card_symbol_image(face: 1) }
type symbol:
left: {if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 18 else 27}
top: {if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 20 else 30}
@@ -356,7 +368,7 @@ card style:
top: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).1 else "0"}
width: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).2 else "0"}
height: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).3 else "0"}
z index: 1
z index: 1010
############################# Card type
indicator:
left: 31
@@ -389,21 +401,7 @@ card style:
z index: 2
render style: image
alignment: middle right
choice images:
# Images based on the set symbol
basic land:
script:
if contains(styling.regular_options, match:"inverted common symbol") then symbol_variation(symbol: set.symbol, variation: "invertedcommon")
else symbol_variation(symbol: set.symbol, variation: "common")
common:
script:
if contains(styling.regular_options, match:"inverted common symbol") then symbol_variation(symbol: set.symbol, variation: "invertedcommon")
else symbol_variation(symbol: set.symbol, variation: "common")
uncommon: script: symbol_variation(symbol: set.symbol, variation: "uncommon")
rare: script: symbol_variation(symbol: set.symbol, variation: "rare")
mythic rare: script: symbol_variation(symbol: set.symbol, variation: "mythic rare")
special: script: symbol_variation(symbol: set.symbol, variation: "special")
masterpiece: script: symbol_variation(symbol: set.masterpiece_symbol, variation: "mythic rare")
include file: /magic-modules.mse-include/rarities/choice_images
############################# Text box
text:
left: 29
@@ -450,59 +448,7 @@ card style:
name: {styling.pt_box_symbols}
size: 8
alignment: middle right
############################# Card sorting / numbering
set code:
left: 24
top: 498
width: 40
height: 10
z index: 1
font:
name: Relay-Medium
size: 7
color: white
weight: bold
############################# Copyright stuff
illustrator:
left: { 44 + card_style.set_code.content_width }
top: 497.5
width: 200
height: 10
z index: 1
font:
name: Beleren Small Caps Bold
size: 7.5
color: white
copyright:
right: 350
top: { if card.pt != "" then 500 else 488 }
width: 140
height: 10
z index: 2
visible: {not set.automatic_copyright}
alignment: middle right shrink-overflow
font:
name: MPlantin
size: 6.5
color: white
weight: bold
############################################################## Extra card fields
extra card field:
type: text
name: card code
save value: false
script:
if set.automatic_card_numbers and not is_unsorted() then
forward_editor(prefix: card_number_m15() + "/" + card_count_m15() + " " + rarity_code() + " ", field: card.card_code_text)
else
combined_editor(field1: card.custom_card_number, separator: " " + rarity_code() + " ", field2: card.card_code_text)
extra card field:
type: choice
name: artist arrow
editable: false
save value: false
choice: white
save value: false
extra card field:
type: multiple choice
name: stamp
@@ -583,12 +529,6 @@ extra card field:
name: reversed
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)
extra card field:
type: choice
name: foil stamp
choice: stamp
save value: false
editable: false
extra card field:
type: choice
name: foil layer
@@ -685,13 +625,6 @@ extra card field:
save value: false
editable: false
script: "runes"
extra card field:
type: text
name: auto copyright
script: set.copyright
save value: false
editable: false
show statistics: false
extra card field:
type: choice
name: flavor bar
@@ -700,34 +633,15 @@ extra card field:
save value: false
show statistics: false
extra card style:
card code:
left: 24
top: 488
width: 120
height: 10
z index: 1
font:
name: Relay-Medium
size: 7
color: white
weight: bold
artist arrow:
left: { 28 + card_style.set_code.content_width }
top: 500
width: 12
height: 7
z index: 1
render style: image
image: artist_arrow.png
stamp:
left: 165
top: 472
width: 46
left: 159
top: 471
width: 56
height: 26
z index: 1
visible: { is_rare() and contains(styling.regular_options, match:"holofoil stamped rares") }
visible: { card.card_stamp != "none" and not card_stamp_disabled_1() }
render style: image
image: { card_stamp() }
image: { if stamp_shape() == "triangle" then card_ubstamp() else card_stamp() }
pt box:
left: 273
top: 466
@@ -737,24 +651,15 @@ extra card style:
visible: { card.pt != "" }
render style: image
image: { card_ptbox() }
foil stamp:
left: 165
top: 472
width: 46
height: 26
z index: 1
visible: { is_rare() and contains(styling.regular_options, match:"holofoil stamped rares") }
render style: image
image: foil_stamp.png
foil layer:
left: 0
top : 0
width: 375
height: 523
z index: 3
z index: 1050
render style: image
image: {if styling.overlay == "" then nil else styling.overlay + "/overlay.png"}
mask: { if is_rare() then "masks/foil_mask_rare.png" else "masks/foil_mask.png" }
mask: { if is_stamped() then "masks/foil_mask_rare.png" else "masks/foil_mask.png" }
emblem:
left: { if contains(styling.extras, match:"double watermarks") then 48 else 117 }
top: 321
@@ -857,19 +762,6 @@ extra card style:
image: runes.png
visible: { contains(styling.extras, match: "runes") }
mask: masks/rune_mask.png
auto copyright:
right: 350
top: { if card.pt != "" then 500 else 488 }
width: 140
height: 10
z index: 2
alignment: middle right shrink-overflow
visible: {set.automatic_copyright}
font:
name: MPlantin
size: 6.5
color: white
weight: bold
flavor bar:
left: 0
top: { bar_equation() }

View File

@@ -1,828 +0,0 @@
mse version: 2.0.0
game: magic
short name: M15 Extra
full name: M15 with Extra Features
icon: card-sample.png
installer group: magic/m15 style/normal cards/with extra features
position hint: 008
version: 2015-07-01
depends on:
package: magic.mse-game
version: 2015-04-08
depends on:
package: magic-default-image.mse-include
version: 2007-09-23
depends on:
package: magic-mana-large-extra-m15.mse-symbol-font
version: 2014-03-11
depends on:
package: magic-mana-small-extra-m15.mse-symbol-font
version: 2014-03-11
depends on:
package: magic-pt-symbols-extra-m15.mse-symbol-font
version: 2014-03-20
card width: 375
card height: 523
card dpi: 150
############################################################## Extra scripts
init script:
# Load scripts that are redefined from the game file
include file: game_scripts
# Load scripts that are redefined from the blends package
include file: blends_scripts
# Load scripts for image box
include file: /magic-default-image.mse-include/scripts
# Load font profiles
include file: font_new
include file: font_phyrexian
include file: font_old
include file: font_m15
# Should hybrids have a grey name?
mask_hybrid_with_land := { contains(styling.regular_options, match:"grey hybrid names") }
#Should multicolor lands with basic land types have a colored name?
mask_multi_land_with_color := { contains(styling.regular_options, match:"colored multicolor land names") }
template_prefix := [card: "" pt: "" stamp: "" identity: ""]
template_suffix := [card: "card.jpg" pt: "pt.png" stamp: "stamp.jpg" identity: "identity.png"]
template := { template_prefix[type] + input + template_suffix[type] }
land_template := { template_prefix[type] + (if input == "a" or input == "s" then "c" else input) + "l" + template_suffix[type] }
# Use land templates for previews because they show more contrast
hybrid_previews := "land,hybrid"
# Use the normal tap symbol
mana_t := {
if styling.tap_symbol == "old" then "old"
else if styling.tap_symbol == "diagonal T" then "older"
else "new"
}
# Use guild mana symbols?
guild_mana := { contains(styling.regular_options, match:"guild mana symbols") }
# Filter to commas, so they can be counted to see if field is complete
comma_count := filter_text@(match:",")
# Interpret the font profile choice.
font_profile := {
if styling.font_style == "Phyrexian" then "phyrexian"
else if styling.font_style == "Before 8th Edition" then "old"
else if styling.font_style == "After 8th Edition" then "new"
else "m15"
}
font_field := {
if font_profile() == "m15" then (
if field == "name" then font_name_m15[value]
else if field == "type" then font_type_m15[value]
else if field == "text" then font_text_m15[value]
else if field == "pt" then font_pt_m15[value]
)
else if font_profile() == "new" then (
if field == "name" then font_name_new[value]
else if field == "type" then font_type_new[value]
else if field == "text" then font_text_new[value]
else if field == "pt" then font_pt_new[value]
)
else if font_profile() == "phyrexian" then (
if field == "name" then font_name_phyrexian[value]
else if field == "type" then font_type_phyrexian[value]
else if field == "text" then font_text_phyrexian[value]
else if field == "pt" then font_pt_phyrexian[value]
)
else if font_profile() == "old" then (
if field == "name" then font_name_old[value]
else if field == "type" then font_type_old[value]
else if field == "text" then font_text_old[value]
else if field == "pt" then font_pt_old[value]
)
}
# Is the card a promo card?
is_promo := { styling.promo }
############################################################## Set info fields
set info style:
symbol:
variation:
name: invertedcommon
border radius: 0.10
fill type: solid
fill color: rgb(255,255,255)
border color: rgb(0,0,0)
############################################################## Extra style options
styling field:
type: choice
name: font style
description: Which font style should be used?
choice: After Magic 2015
choice: After 8th Edition
choice: Before 8th Edition
choice: Phyrexian
initial: After Magic 2015
styling field:
type: multiple choice
name: regular options
description: Which regular styling options would you like to use?
choice: center text
choice: color indicator dot
choice: colored multicolor land names
choice: grey hybrid names
choice: guild mana symbols
choice: holofoil stamped rares
choice: promo rarity
choice: inverted common symbol
initial: colored multicolor land names, grey hybrid names, holofoil stamped rares
styling field:
type: multiple choice
name: extras
description: Which extra options would you like to use?
choice: pichoro's alchemist watermark
choice: alpha style dual lands
choice: card creator credit field
choice: takeabow's clock watermark
choice: advent's colored xyz mana
choice: circeus' colorless-colored hybrid
choice: anuttymous' frost effect
choice: holiday promo text
choice: dark nova's runes
choice: lesurgo's spell-land hybrid
choice: circeus' tinged artifact hybrid
choice: type symbol with name
choice: unsorted casting cost
styling field:
type: choice
name: tap symbol
description: What tap and untap symbols should be used on cards?
initial: modern
choice: modern
choice: old
choice: diagonal T
styling field:
type: package choice
name: text box mana symbols
match: magic-mana-*.mse-symbol-font
initial: magic-mana-small-extra-m15.mse-symbol-font
styling field:
type: package choice
name: pt box symbols
match: magic-pt-symbols-*.mse-symbol-font
initial: magic-pt-symbols-extra.mse-symbol-font
styling field:
type: package choice
name: overlay
description: Should there be an overlay applied, such as foil?
match: magic-overlay-*.mse-include
required: false
styling field:
type: symbol
name: mythic rare accent
description: This symbol field is used to hold the white accent that should appear on mythic rares.
styling field:
type: choice
name: outer color
description: Should the outside of the frame be a special color?
choice: default
choice: white
choice: blue
choice: black
choice: red
choice: green
choice: purple
choice: pink
choice: artifact
choice: snow
choice: multicolor
choice: spectral
choice: colorless
styling field:
type: choice
name: trim color
description: Should the trim of the frame be a special color?
choice: default
choice: white
choice: blue
choice: black
choice: red
choice: green
choice: purple
choice: pink
choice: artifact
choice: snow
choice: multicolor
choice: spectral
choice: colorless
styling field:
type: choice
name: inner color
description: Should the inside of the frame be a special color?
choice: default
choice: white
choice: blue
choice: black
choice: red
choice: green
choice: purple
choice: pink
choice: artifact
choice: snow
choice: multicolor
choice: spectral
choice: colorless
styling field:
type: text
name: popout image style
description: The styling instructions for the popout image field, formatted as "left,top,width,height,". The text MUST end with a comma.
styling style:
tap symbol:
render style: both
choice images:
modern: /magic-mana-large-extra-m15.mse-symbol-font/mana_t.png
old: /magic-mana-large-extra-m15.mse-symbol-font/mana_t_old.png
diagonal T: /magic-mana-large-extra-m15.mse-symbol-font/mana_t_older.png
regular options:
render style: checklist
direction: vertical
extras:
render style: checklist
direction: vertical
############################################################## Card fields
card style:
############################# Background stuff
############################# Name line
name:
left:
{ if card.card_symbol=="none" and (card.type_symbol=="none" or not contains(styling.extras, match:"type symbol with name")) then 32
else if card.card_symbol == "none" then 49
else if card.type_symbol == "none" or ( not contains(styling.extras, match:"type symbol with name")) then 49
else 67}
top: { font_field(field: "name", value: "top")}
right: { 341 - card_style.casting_cost.content_width }
height: 23
alignment: bottom shrink-overflow
padding bottom: 0
z index: 1
font:
name: { font_field(field: "name", value: "name")}
size: { font_field(field: "name", value: "size")}
weight: { font_field(field: "name", value: "weight")}
color: black
casting cost:
right: 346
top: 29
width: { max(30, card_style.casting_cost.content_width) + 5 }
height: 23
alignment: middle right
font:
name: MPlantin
size: 15
symbol font:
name: magic-mana-large-extra-m15
size: 15
alignment: middle right
always symbol: true
z index: 2
padding top: 0
card symbol:
left:
{if card.card_symbol == "none" then 20
else if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 30
else 50}
top: {if card.card_symbol == "none" then 40 else 29}
height: 20
width: 14
z index: 1
render style: image
choice images:
tombstone: tombstone.png
type symbol:
left: {if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 18 else 27}
top: {if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 20 else 30}
width: 21
height: 20
z index: 5
render style: image
alignment: middle center
visible: { contains(styling.extras, match:"type symbol with name") }
choice images:
artifact: type-symbols/artifact_black.png
creature: type-symbols/creature_black.png
enchantment: type-symbols/enchantment_black.png
instant: type-symbols/instant_black.png
land: type-symbols/land_black.png
multitype: type-symbols/multitype_black.png
sorcery: type-symbols/sorcery_black.png
planeswalker: type-symbols/planeswalker_black.png
structure: type-symbols/structure_black.png
############################# Image
image:
left: 29
top: 60
width: 316
height: 231
z index: 1
default: {default_image(card.card_color)}
image 2:
left: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).0 else "0"}
top: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).1 else "0"}
width: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).2 else "0"}
height: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).3 else "0"}
z index: 1
############################# Card type
indicator:
left: 31
top: 300
width: 17
height: 17
z index: 2
render style: image
visible: { has_identity() }
image: { card_identity() }
type:
left: { if has_identity() then "52" else "32" }
top: { font_field(field: "type", value: "top")}
width: { (if has_identity() then "290" else "310") - max(22,card_style.rarity.content_width) }
height: 20
alignment: top shrink-overflow
z index: 2
padding top: 2
font:
name: { font_field(field: "type", value: "name")}
size: { font_field(field: "type", value: "size")}
weight: { font_field(field: "type", value: "weight")}
color: black
separator color: red
rarity:
right: 344
top: 297
width: 44
height: 22
z index: 2
render style: image
alignment: middle right
choice images:
# Images based on the set symbol
basic land:
script:
if contains(styling.regular_options, match:"inverted common symbol") then symbol_variation(symbol: set.symbol, variation: "invertedcommon")
else symbol_variation(symbol: set.symbol, variation: "common")
common:
script:
if contains(styling.regular_options, match:"inverted common symbol") then symbol_variation(symbol: set.symbol, variation: "invertedcommon")
else symbol_variation(symbol: set.symbol, variation: "common")
uncommon: script: symbol_variation(symbol: set.symbol, variation: "uncommon")
rare: script: symbol_variation(symbol: set.symbol, variation: "rare")
mythic rare: script: symbol_variation(symbol: set.symbol, variation: "mythic rare")
special: script: symbol_variation(symbol: set.symbol, variation: "special")
############################# Text box
text:
left: 29
top: 327
width: 314
height: 154
font:
name: { font_field(field: "text", value: "name")}
italic name: { font_field(field: "text", value: "italic")}
size: { font_field(field: "text", value: "size")}
weight: { font_field(field: "text", value: "weight")}
scale down to: 6
color: black
symbol font:
name: { styling.text_box_mana_symbols }
size: 14
alignment:
script:
if contains(styling.regular_options, match:"center text") then "middle center"
else "middle left"
z index: 2
padding left: 6
padding right: 4
line height hard: 1.2
line height line: 1.5
line height soft: 0.9
line height hard max: 1.3
line height line max: 1.6
############################# PT
pt:
z index: 2
left: 286
top: 469
width: 60
height: 28
alignment: center middle shrink-overflow
font:
name: { font_field(field: "pt", value: "name")}
size: { font_field(field: "pt", value: "size")}
weight: { font_field(field: "pt", value: "weight")}
color: black
separator color: red
symbol font:
name: {styling.pt_box_symbols}
size: 8
alignment: middle right
############################# Card sorting / numbering
set code:
left: 24
top: 498
width: 40
height: 10
z index: 1
font:
name: Relay-Medium
size: 7
color: white
weight: bold
############################# Copyright stuff
illustrator:
left: { 44 + card_style.set_code.content_width }
top: 497.5
width: 200
height: 10
z index: 1
font:
name: Beleren Small Caps Bold
size: 7.5
color: white
copyright:
right: 350
top: { if card.pt != "" then 500 else 488 }
width: 140
height: 10
z index: 2
alignment: middle right shrink-overflow
font:
name: Matrix
size: 7
color: white
weight: bold
############################################################## Extra card fields
extra card field:
type: choice
name: mythic rare accent
save value: false
editable: false
choice: accent
extra card field:
type: text
name: card code
save value: false
script: forward_editor(prefix: card_number_m15() + "/" + card_count_m15() + " " + rarity_code() + " ", field: card.card_code_text)
extra card field:
type: choice
name: artist arrow
editable: false
save value: false
choice: white
save value: false
extra card field:
type: multiple choice
name: stamp
empty choice: colorless
choice: white
choice: blue
choice: black
choice: red
choice: green
choice: purple
choice:
name: pink
line below: true
choice: artifact
choice: snow
choice: land
choice: multicolor
choice: spectral
choice:
name: hybrid
line below: true
choice:
name: horizontal
type: radio
choice:
name: vertical
type: radio
choice:
name: radial
type: radio
choice:
name: diagonal
type: radio
choice:
name: overlay
type: radio
choice:
name: reversed
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)
extra card field:
type: multiple choice
name: pt box
empty choice: colorless
choice: white
choice: blue
choice: black
choice: red
choice: green
choice: purple
choice:
name: pink
line below: true
choice: artifact
choice: snow
choice: land
choice: multicolor
choice: spectral
choice:
name: hybrid
line below: true
choice:
name: horizontal
type: radio
choice:
name: vertical
type: radio
choice:
name: radial
type: radio
choice:
name: diagonal
type: radio
choice:
name: overlay
type: radio
choice:
name: reversed
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)
extra card field:
type: choice
name: foil stamp
choice: stamp
save value: false
editable: false
extra card field:
type: choice
name: foil layer
choice: foil
save value: false
editable: false
extra card field:
type: choice
name: emblem
include file: watermarks/watermark-names
extra card field:
type: text
name: creator computer
save value: false
editable: false
show statistics: false
script: ":"
extra card field:
type: text
name: creator
save value: true
show statistics: false
editable: true
extra card field:
type: text
name: promo label
save value: true
description: The golden promo label.
extra card field:
type: multiple choice
name: frame
empty choice: colorless
choice: white
choice: blue
choice: black
choice: red
choice: green
choice: purple
choice:
name: pink
line below: true
choice: artifact
choice: snow
choice: land
choice: multicolor
choice: spectral
choice:
name: hybrid
line below: true
choice:
name: horizontal
type: radio
choice:
name: vertical
type: radio
choice:
name: radial
type: radio
choice:
name: diagonal
type: radio
choice:
name: overlay
type: radio
choice:
name: reversed
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)
extra card field:
type: choice
name: clock watermark
save value: false
editable: false
script: "clock"
extra card field:
type: choice
name: alchemist watermark
save value: false
editable: false
script: "alchemy"
extra card field:
type: choice
name: frost effect
save value: false
editable: false
script: "frost"
extra card field:
type: choice
name: runes
save value: false
editable: false
script: "runes"
extra card style:
mythic rare accent:
right: 344
top: 297
width: 44
height: 22
z index: 3
render style: image
visible: {card.rarity == "mythic rare"}
alignment: middle right
choice images:
# Images based on the set symbol
accent:
script:
symbol_variation(
symbol: styling.mythic_rare_accent,
border_radius: 0,
fill_type: "solid",
border_color: rgb(255,255,255),
fill_color: rgba(0,0,0,0)
)
card code:
left: 24
top: 488
width: 120
height: 10
z index: 1
font:
name: Relay-Medium
size: 7
color: white
weight: bold
artist arrow:
left: { 28 + card_style.set_code.content_width }
top: 500
width: 12
height: 7
z index: 1
render style: image
image: artist_arrow.png
stamp:
left: 165
top: 472
width: 46
height: 26
z index: 1
visible: { is_rare() and contains(styling.regular_options, match:"holofoil stamped rares") }
render style: image
image: { card_stamp() }
pt box:
left: 273
top: 466
width: 81
height: 42
z index: 1
visible: { card.pt != "" }
render style: image
image: { card_ptbox() }
foil stamp:
left: 165
top: 472
width: 46
height: 26
z index: 1
visible: { is_rare() }
render style: image
image: foil_stamp.png
foil layer:
left: 0
top : 0
width: 375
height: 523
z index: 3
render style: image
image: {if styling.overlay == "" then nil else styling.overlay + "/overlay.png"}
mask: { if is_rare() then "masks/foil_mask_rare.png" else "masks/foil_mask.png" }
emblem:
left: 117
top: 321
width: 138
height: 166
z index: 1
render style: image
popup style: in place
alignment: middle center
include file: watermarks/watermarks
creator computer:
left: { 48 + card_style.set_code.content_width + card_style.illustrator.content_width }
top: 497.5
width: 10
height: 10
z index: 1
visible: { contains(styling.extras, match:"card creator credit field") }
font:
name: Wingdings
size: 8.5
weight: bold
color: white
creator:
left: { 62 + card_style.set_code.content_width + card_style.illustrator.content_width }
top: 497.5
width: 100
height: 10
z index: 1
visible: { contains(styling.extras, match:"card creator credit field") }
font:
name: Beleren Small Caps Bold
size: 7.5
color: white
promo label:
left: 40
top: 262
width: 295
height: 29
alignment: middle right
z index: 4
font:
name: { if contains(styling.extras, match:"holiday promo text") then "MagicMedieval" else "ModMatrix" }
size: 14
color: { if contains(styling.extras, match:"holiday promo text") then rgb(217,0,0) else rgb(223,169,41) }
frame:
left: 0
top: 0
width: 375
height: 523
z index: 0
render style: image
popup style: in place
image: { card_background() }
clock watermark:
left: 28
top: 326
width: 318
height: 157
z index: 4
render style: image
image: clock_watermark.png
visible: { contains(styling.extras, match: "clock watermark") }
mask: { if is_rare() and contains(styling.regular_options, match:"holofoil stamped rares") then "masks/mask_fullsize_watermarks.png" else nil }
alchemist watermark:
left: 28
top: 326
width: 318
height: 157
z index: 4
render style: image
image: alchemy_watermark.png
visible: { contains(styling.extras, match: "alchemist watermark") }
mask: { if is_rare() and contains(styling.regular_options, match:"holofoil stamped rares") then "masks/mask_fullsize_watermarks.png" else nil }
frost effect:
left: 0
top: 0
width: 375
height: 523
z index: 4
render style: image
image: frost.png
visible: { contains(styling.extras, match: "frost effect") }
runes:
left: 0
top: 0
width: 375
height: 523
z index: 4
render style: image
image: runes.png
visible: { contains(styling.extras, match: "runes") }
mask: masks/rune_mask.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB