Files
magic-set-editor-fork/data/magic-m15-adventure.mse-style/style
cajun e43fb95077 Adventure Overhaul +custom border +paritions (#47)
ADVENTURE OVERHAUL
* Adventures can now customize both halves of the card, allowing for two pages.
* Each side can be an Adventure page, an Adventure page with only a name, a full text page, a flattened Adventure page, a flattened page with only the name, or blank.
* A decorations field has been set up, which allows adding additional flair around the pages to help set variants apart.
* Also we have better page images now.

PARTITIONS
* Partitions are finally live!
* Frames can add the card field "partition select" to access partition code, no additional scripting is needed.
* MSE handles partitions 0-9 and A-Z. Assign cards partitions 0-9 to sort before the default count at A, B-M to sort after it, and N-Z to sort after it and not be counted in the main set count, for card numbers like 301/300.
* The Set field "last main partition" allows the user to change the behavior by putting a replacement for M in the option.
* Card numbers default to the March of the Machine numbering of "0001" now
* But 001/099, 001, 1/99, 1, and 1000/0099 are now supported, with a second option to set overcounted cards to display with or without the main set count.
* Currently this is supported on M15 Mainframe and M15 Adventures. The rest are coming soon.

EXTRA THING
* Added Custom Border support to M15 Mainframe and M15 Adventures, which let you use magic-mainframe-extras to set up an additional border frame akin to Nyx and Vehicle. This is the finalized version used for Revolution's Ruin and Colorless frames.

BACKEND STUFF
* Adventures is trying out some new backend stuff that will get expanded upon in the coming patches:
* retooled the Landless array to be less jank
* retooled the template script a little to make it easier to hook out images with complicated links, most notably user-submitted ones like custom crowns and custom borders
* blend masks are now in their own folder
* discovered that 'styling.name or else ""' is legal code in script, which means we can make adding style options to frames *way* easier. the entire custom font code is now offloaded to scripts, and templates can access it without needing to copy paste anything beyond the styling field.

---------

Co-authored-by: cajun <12363371+CajunAvenger@users.noreply.github.com>
2024-05-11 03:08:50 -05:00

1473 lines
44 KiB
Plaintext

mse version: 2.0.0
game: magic
short name: M15 Adventure
full name: Mainframe
icon: card-sample.png
installer group: magic/m15 style/split cards
position hint: 011
version: 2024-05-24
depends on:
package: magic.mse-game
version: 2014-06-25
depends on:
package: magic-default-image.mse-include
version: 2007-09-23
depends on:
package: magic-watermarks.mse-include
version: 2007-09-23
depends on:
package: magic-identity-new.mse-include
version: 2012-01-22
depends on:
package: magic-mana-large.mse-symbol-font
version: 2007-09-23
depends on:
package: magic-mana-small.mse-symbol-font
version: 2007-09-23
depends on:
package: magic-mainframe-extras.mse-include
version: 2018-01-01
card width: 375
card height: 523
card dpi: 150
###### Credits
###### Standard blanks by kebelqwa
###### Spotlight blanks by Femme Fatale
###### Cleanup and coding by cajun
###### Reverse Adventures by BA Start
############################################################## Extra scripts
init script:
# Load scripts for image box
include file: /magic-default-image.mse-include/scripts
# Should hybrids have a grey name?
mask_hybrid_with_land := { styling.grey_hybrid_name }
#Should multicolor lands with basic land types have a colored name?
mask_multi_land_with_color := { styling.colored_multicolor_land_name }
template_prefix := [
card: "cards/",
double_page: "double_page/",
single_page: "single_page/",
null_page: "null_page/",
binding: "binding/",
double_flat: "double_flat/",
single_flat: "single_flat/",
pt: "pts/",
stamp: "stamps/",
spot: "spotlight/",
spotpt: "spotlight/",
spotpage: "spotlight/",
crown: "legend/",
nyx: "nyx/",
snowtexture: "snow/",
alias: "alias/",
identity: "/magic-identity-new.mse-include/",
identity2: "/magic-identity-new.mse-include/"
]
template_suffix := [
card: "card.jpg",
double_page: "page.png",
single_page: "page.png",
null_page: "page.png",
binding: "block.jpg",
double_flat: "page.png",
single_flat: "page.png",
pt: "pt.png",
stamp: "stamp.jpg",
spot: "card.png",
spotpt: "pt.png",
spotpage: "card2.png",
crown: "crown.png",
nyx: "nyx.png",
alias: "alias.png",
snowtexture: "snow.png",
identity: "identity.png",
identity2: "identity.png"
]
template := {
if type_name(harder_script[type] or else nil) == "function"
then harder_script[type](input, land:false)
else template_prefix[type] + input + template_suffix[type]
}
land_template := {
if type == "decoration"
then page_decoration_template(input, land:true)
else template_prefix[type] + input + (if landless(type) or input == "a" then "" else "l") + template_suffix[type]
}
landless := {
landless_ar[input] or else false
}
landless_ar := [
alias: true,
binding: true,
double_flat: true,
double_page: true,
null_page: true,
nyx: true,
single_flat: true,
single_page: true,
spot: true,
spotpage: true,
spotpt: true
]
# Use land templates for previews because they show more contrast
hybrid_previews := "land,hybrid"
card_background := { color_background(type:"card", base_hybrid:card_hybrid, folder:"blend_masks/") }@(offset:0 )
card_ptbox := { color_background(type:"pt", base_hybrid:pt_hybrid, folder:"blend_masks/") }@(offset:0 )
card_identity := { color_background(type:"identity", base_hybrid:identity_hybrid, folder:"blend_masks/") }@(offset:0 )
card_identity_2 := { color_background(type:"identity2", base_hybrid:identity_hybrid, folder:"blend_masks/") }@(offset:0 )
card_stamp := { color_background(type:"stamp", base_hybrid:stamp_hybrid, folder:"blend_masks/") }@(offset:0 )
null_page_blend := { color_background(type:"null_page", base_hybrid:card_hybrid, folder:"blend_masks/") }
single_page_blend := { color_background(type:"single_page", base_hybrid:card_hybrid, folder:"blend_masks/") }
double_page_blend := { color_background(type:"double_page", base_hybrid:card_hybrid, folder:"blend_masks/") }
binding_background := { color_background(type:"binding", base_hybrid:card_hybrid, folder:"blend_masks/") }
double_flat_page_blend := { color_background(type:"double_flat", base_hybrid:card_hybrid, folder:"blend_masks/") }
single_flat_page_blend := { color_background(type:"single_flat", base_hybrid:card_hybrid, folder:"blend_masks/") }
page_spread_blend := { color_background(type:"pages", base_hybrid:card_hybrid, folder:"blend_masks/") }
decoration_background := { color_background(type:"decoration", base_hybrid:card_hybrid, folder:"blend_masks/")}
spot_background := { color_background(type:"spot", base_hybrid:card_hybrid, folder:"blend_masks/") }
spot_page_background := { color_background(type:"spotpage", base_hybrid:card_hybrid, folder:"blend_masks/") }
spot_pt := { color_background(type:"spotpt", base_hybrid:card_hybrid, folder:"blend_masks/") }
alias_bar := { color_background(type:"alias", base_hybrid:card_hybrid, folder:"blend_masks/") }
crown_background := { color_background(type:"crown", base_hybrid: card_hybrid, folder:"blend_masks/")}
nyx_background := { color_background(type:"nyx", base_hybrid:card_hybrid, folder:"blend_masks/") }
snow_background := { color_background(type:"snowtexture", base_hybrid:card_hybrid, folder:"blend_masks/") }
# 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 := { styling.use_guild_mana_symbols }
# Is the card a promo card?
is_promo := { styling.promo }
has_identity := { styling.color_indicator_dot }
has_identity2 := { styling.color_indicator_dot_2 }
is_spot := {contains(styling.frames, match:"Spotlight")}
is_reversed := { not is_spot() and contains(styling.frames, match:"Reversed")}
is_legend := { not is_spot() and auto_legend() }
is_vehicle := { not is_spot() and (auto_vehicle() or contains(styling.frames, match:"vehicle")) }
is_nyx := { not is_spot() and (auto_nyx() or contains(styling.frames, match:"nyx")) }
is_snow := { not is_spot() and (auto_snow() or contains(styling.frames, match:"snow")) }
auto_legend := { set.auto_legends and lang_setting("is_legendary")(card.super_type) }
auto_vehicle := { contains(styling.auto_frames, match:"vehicle") and lang_setting("is_vehicle")(card.sub_type) }
auto_nyx := { contains(styling.auto_frames, match:"nyx") and lang_setting("is_nyx")(card.super_type) }
auto_snow := { contains(styling.auto_frames, match:"snow") and lang_setting("is_snow")(card.super_type) }
##### flavor bar stuff
chop_correction := { chop_bot() }
top_of_textbox := {327-(-chop_top())}
bottom_of_textbox := {(if is_spot() then 464 else 481)-chop_bot()}
top_of_textbox2 := {375-(-back_chop_top())}
bottom_of_textbox2 := {(if is_spot() then 464 else 481)-back_chop_bot()}
chop_top := {to_number(pull_comma_array(styling.chop_main, cell:0, end:false))}
chop_bot := {to_number(pull_comma_array(styling.chop_main, cell:1, end:false))}
back_chop_top := {to_number(pull_comma_array(styling.chop_adventure, cell:0, end:false))}
back_chop_bot := {to_number(pull_comma_array(styling.chop_adventure, cell:1, end:false))}
##### backface bar
flavor_text2 := {remove_tags(card.flavor_text_2) + "\n"}
chop_correction2 := { 0 }
is_unsorted := {styling.remove_from_autocount}
shrink_type := {if styling.shrink_typeline_text != "" then to_number((if comma_count(styling.shrink_typeline_text) == "" then styling.shrink_typeline_text else split_text(match:",", styling.shrink_typeline_text).0)) else 0 }
shrink_name := {if styling.shrink_name_text != "" then to_number((if comma_count(styling.shrink_name_text) == "" then styling.shrink_name_text else split_text(match:",", styling.shrink_name_text).0)) else 0 }
shrink_type2 := {if styling.shrink_typeline_text != "" then to_number((if comma_count(styling.shrink_typeline_text) != "" then split_text(match:",", styling.shrink_typeline_text).1)) else 0 }
shrink_name2 := {if styling.shrink_name_text != "" then to_number((if comma_count(styling.shrink_name_text) != "" then split_text(match:",", styling.shrink_name_text).1)) else 0 }
use_main_rarity := { contains(set.mainframe_rarity_name, match: ".png")}
un_png := replace@(match:".png", replace: "")
use_evobar := {contains(styling.other_options, match:"pokemon evobar")}
is_skinned := {contains(styling.other_options, match:"godzilla style alias")}
card_shape := {"adventure"}
### Customize fonts
swap_fonts_name2_default := [
name: {"Beleren Bold"},
size: {12},
color: {"white"},
vertical: {0},
italic: {""}
]
swap_fonts_type2_default := [
name: {"Beleren Bold"},
size: {11},
color: {"white"},
vertical: {0},
italic: {""}
]
swap_fonts_pt_default := [
name: {"Beleren Bold"},
size: {16},
color: {if is_vehicle() then "white" else "black"},
vertical: {0},
italic: {""}
]
page_decoration_template := {
src := "/magic-mainframe-extras.mse-include/"
str := styling.page_decoration
if not contains(str, match:".png") then (
src := ""
str := ""
)
c := ""
pt := ""
l := ""
if contains(str, match:";color") then c := input
if contains(str, match:";pt")
and (right_name() and card.pt != "") then pt := "_pt";
if land and contains(str, match:";land") then l := "l"
replace(
str,
match:"([^;]*/)?([^/;]+)([.]png)(;.+)?",
replace:{src + _1 + c + l + _2 + pt + _3}
)
}
page_script := {
flip := if input == "none"
then false
else if input == "blank page" then
if side == "left" then true else false
else if side == "right" then
true
else false;
adj_color := if flip then color + ", reversed" else color
img := case input of
"name and type page": double_page_blend(adj_color),
"name page": single_page_blend(adj_color),
"blank page": null_page_blend(adj_color),
"name and type flat": mask_dblflat(double_flat_page_blend(adj_color)),
"name flat": mask_sngflat(single_flat_page_blend(adj_color)),
else: "";
if flip then flip_horizontal(img) else img
}
mask_dblflat := {
if no_divider() then
set_mask(image: input, mask:"double_mask.png")
else input
}
mask_sngflat := {
if no_divider() then
set_mask(image:input, mask:"single_mask.png")
else input
}
named_page := contains@(match:"name")
left_name := {
style_check := if is_spot() then "name and type page" else if is_reversed() then styling.right_style else styling.left_style
named_page(style_check)
}
right_name := {
style_check := if is_spot() then "none" else if is_reversed() then styling.left_style else styling.right_style
named_page(style_check)
}
left_page_img := {
page_script(
if is_spot() then "name and type page" else if is_reversed() then styling.right_style else styling.left_style,
color: (if left_name() then card.card_color_2 else card.card_color),
side: "left"
)
}
right_page_img := {
page_script(
if is_spot() then "none" else if is_reversed() then styling.left_style else styling.right_style,
color: (if right_name() then (if left_name() then card.card_color_3 else card.card_color_2) else card.card_color),
side: "right"
)
}
page_1_side := {
## the main text of the card
## two pages, gone
## left side page, on the right
## right side page or no pages, on the left
if left_name() and right_name() then "none"
else if left_name() then "right"
else "left"
}
page_2_side := {
## the adventure text of the card
## two pages, left (check reverse)
## left side page, left
## right side page, right
## no pages, gone
if left_name() and right_name() then
if is_reversed() then "right" else "left"
else if left_name() then "left"
else if right_name() then "right"
else "none"
}
page_3_side := {
## the second adventure text of the card
## two pages, right (check reverse)
## else, gone
if left_name() and right_name() then
if is_reversed() then "left" else "right"
else if left_name() == right_name() then
if is_reversed() then "left" else "right"
else "none"
}
reverser := ["left":"right", "right":"left"]
page_style := {
str := if input == "none" then ""
else if is_reversed() then styling[reverser[input] + "_style"]
else styling[input + "_style"]
if is_spot() then
"double"
else if contains(str, match:"type") then
"double"
else if contains(str, match:"name") then
"single"
else "null"
}
page_flat := {
str := if input == "none" then ""
else if is_reversed() then styling[reverser[input] + "_style"]
else styling[input + "_style"]
if is_spot() then false else contains(str, match:"flat")
}
page_1_flat := {page_flat(page_1_side())}
page_2_flat := {page_flat(page_2_side())}
page_3_flat := {page_flat(page_3_side())}
page_top := [
"double": 375,
"single": 358,
"null": 332
]
page_1_top := {page_top[page_style(page_1_side())]}
page_2_top := {page_top[page_style(page_2_side())]}
page_3_top := {page_top[page_style(page_3_side())]}
page_coords := [
"left": [
"page": 18,
"name_left": 32,
"name_right": 178,
"cost": 180,
"type": 32,
"text": 27,
"decoration": 0,
"flavor bar": 10,
"watermark": 20,
"spot_watermark": 30
],
"right": [
"page": 188,
"name_left": 197,
"name_right": 28,
"cost": 345,
"type": 197,
"text": 190,
"decoration": 175,
"flavor bar": 175
"watermark": 188,
"spot_watermark": 195
],
"none": [
"page": 500,
"name_left": 500,
"name_right": -10,
"cost": 500,
"type": 500,
"text": 500,
"decoration": 500,
"flavor bar": 500
"watermark": 500,
"spot_watermark": 500
]
]
no_divider := {chosen(styling.other_options, choice:"no flat page divider")}
custom_border_image := {
src := styling.custom_border_source
ps := split_text(src, match:"-color-")
if length(ps) > 1 then
"/magic-mainframe-extras.mse-include/" + ps[0] + input + (if land then "l" else "") + ps[1]
else
"/magic-mainframe-extras.mse-include/" + src
}
custom_border_blend := { color_background(type:"custom_border", base_hybrid:card_hybrid, folder:"blend_masks/") }
is_custom := {contains(styling.frames, match:"custom border") and contains(styling.custom_border_source, match:".png")}
# this goes at the very end
harder_script := [
custom_border: custom_border_image,
decoration: page_decoration_template
]
############################################################## 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: text
name: chop main
description: Format as "X,Y". Shrinks main textbox X pixels from the top and Y from bottom.
styling field:
type: text
name: chop adventure
description: Format as "X,Y". Shrinks adventure textbox X pixels from the top and Y from bottom.
styling field:
type: text
name: shrink name text
description: Format as "X,Y". Shrinks main name X pixels and adventure name Y pixels.
styling field:
type: text
name: shrink typeline text
description: Format as "X,Y". Shrinks main type X pixels and adventure type Y pixels.
styling field:
type: multiple choice
name: frames
description: Frames to use. Higher choices may override lower choices.
choice: Spotlight
choice: Reversed
choice: nyx
choice: vehicle
choice: snow
choice: custom border
styling field:
type: text
name: custom border source
description: Use this file from magic-mainframe-extras as a custom vehicle-like frame. if colored, name images like "wborder.png" and put "-color-border.png" here.
styling field:
type: multiple choice
name: auto frames
description: Automatically applies frames for multi-typed enchantments, snow, or Vehicles on the main card.
choice: nyx
choice: vehicle
choice: snow
initial: nyx, vehicle, snow
styling field:
type: multiple choice
name: other options
description: Other options for the frame
choice: godzilla style alias
choice: pokemon evobar
choice: prerelease stamp
choice: no flat page divider
styling field:
type: choice
name: left style
description: Choose the type of the page section.
choice: name and type page
choice: name page
choice: blank page
choice: name and type flat
choice: name flat
choice: none
initial: name and type page
styling field:
type: choice
name: right style
description: Choose the type of the page section.
choice: name and type page
choice: name page
choice: blank page
choice: name and type flat
choice: name flat
choice: none
initial: blank page
styling field:
type: text
name: page decoration
description: Image link from magic-mainframe-extras to layer over the adventure. Add ";color" for color dependent or ";pt" for pt dependent.
styling field:
type: boolean
name: remove from autocount
description: Removes the automatic card number for specific cards, to allow for overcounted cards like in Planeswalker Decks.
initial: no
styling field:
type: boolean
name: color indicator dot
description: Use the color indicator dot
initial: no
styling field:
type: boolean
name: color indicator dot 2
description: Use the color indicator dot for the adventure half
initial: no
styling field:
type: boolean
name: use holofoil stamps
description: Use holofoil stamps on rares and mythics
styling field:
type: text
name: alt rarity color
description: Use a custom color for the rarity symbol. Formatted as "R1,G1,B1:R2,G2,B2:...:X:" 1 and 2 are fill color, 3 and 4 border color, X is border thickness. For example, rare is 214,196,94:95,84,40:0,0,0:0,0,0:0.07
styling field:
type: boolean
name: apply custom fonts
description: Enable to attempt to use custom fonts given below
initial: no
styling field:
type: text
name: custom name font
description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers.
styling field:
type: text
name: custom type font
description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers.
styling field:
type: text
name: custom body font
description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers.
styling field:
type: text
name: custom pt font
description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers.
styling field:
type: text
name: custom name 2 font
description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers.
styling field:
type: text
name: custom type 2 font
description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers.
styling field:
type: boolean
name: grey hybrid name
description: Use a grey background for the name and type line on hybrid cards. This is done on real cards.
styling field:
type: boolean
name: colored multicolor land name
description: Use a colored background for the name and type on multicolor land cards with a basic land type. This is done on real cards.
styling field:
type: boolean
name: use guild mana symbols
description: Use the Ravnica guild symbols instead of the official half/half circles for hybrid mana.
initial: no
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.mse-symbol-font
styling field:
type: choice
name: center text
description: When to center text (short text only means only on one-line cards with no flavor text)
choice: always
choice: short text only
choice: never
initial: never
styling field:
type: boolean
name: promo
description: Is this card a promo card, with the "P" rarity?
initial: no
styling field:
type: boolean
name: inverted common symbol
description: Should the common rarity symbol be inverted, like in Coldsnap?
initial: no
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 style:
use guild mana symbols:
choice images:
yes: /magic-mana-small.mse-symbol-font/mana_guild_rg.png
no: /magic-mana-small.mse-symbol-font/mana_rg.png
tap symbol:
render style: both
choice images:
modern: /magic-mana-large.mse-symbol-font/mana_t.png
old: /magic-mana-large.mse-symbol-font/mana_t_old.png
diagonal T: /magic-mana-large.mse-symbol-font/mana_t_older.png
center text:
render style: both
choice images:
always: /magic.mse-game/icons/center-all-text.png
short text only: /magic.mse-game/icons/center-short-text.png
never: /magic.mse-game/icons/center-no-text.png
inverted common symbol:
choice images:
no: { symbol_variation(symbol: set.symbol, variation: "common") }
yes: { symbol_variation(symbol: set.symbol, variation: "invertedcommon") }
frames:
render style: checklist
direction: vertical
auto frames:
render style: checklist
direction: vertical
other options:
render style: checklist
direction: vertical
############################################################## Card fields
card style:
############################# Background stuff
border color:
left: 0
top : 0
width: 375
height: 523
radius: 18
left width: 17
right width: 17
top width: 17
bottom width: 18
z index: 4
mask: { (if is_spot() then "spot_" else "") + (if is_legend() then "crown" else "border") + "_mask" + (if not is_spot() and card.border_color == rgb(200,200,200) then "_silver") + ".png"}
card color:
left: 0
top: 0
width: 375
height: 523
z index: -1
render style: image
popup style: in place
image: { if is_spot() then spot_background() else card_background() }
card color 2:
left: {if is_spot() then 21 else page_coords[page_2_side()]["page"]}
top: {if is_spot() then 319 else 327}
width: 170
height: {if is_spot() then 170 else 156.5}
z index: 1
render style: image
popup style: in place
image: { if is_spot() then spot_page_background() else if left_name() then left_page_img() else right_page_img() }
card color 3:
left: {page_coords[page_3_side()]["page"]}
top: 327
width: 170
height: 156.5
z index: 1
render style: image
image: {right_page_img()}
visible: {left_name() and right_name()}
############################# Name line
name:
left: { (if is_spot() then 22 else 0) + (if card.card_symbol=="none" then 32 else 50) }
top: {30 + name_font_vertical()}
right: { 341 - card_style.casting_cost.content_width }
height: { 23 - 0.5*shrink_name() }
alignment: bottom shrink-overflow
padding bottom: 0
z index: 1
font:
name: { name_font() }
italic name: { name_font_italic() }
size: { name_font_size() }
color: { name_font_color() }
name 2:
left: { page_coords[page_2_side()]["name_left"] }
top: { (if is_spot() or not page_2_flat() then 330 else 328) + (if is_spot() then 2 else 0)+ name2_font_vertical()}
right: { page_coords[page_2_side()]["name_right"] - card_style.casting_cost_2.content_width }
height: { 20 - shrink_name2() }
alignment: bottom shrink-overflow
z index: 2
font:
name: { name2_font() }
italic name: { name2_font_italic() }
size: { name2_font_size() }
color: { name2_font_color() }
name 3:
left: { page_coords[page_3_side()]["name_left"] }
top: { (if is_spot() or not page_3_flat() then 330 else 328) + (if is_spot() then 2 else 0)+ name2_font_vertical()}
right: { page_coords[page_3_side()]["name_right"] - card_style.casting_cost_3.content_width }
height: {if page_style(page_3_side()) == "null" then 0 else 20 - shrink_name2() }
alignment: bottom shrink-overflow
z index: 2
font:
name: { name2_font() }
italic name: { name2_font_italic() }
size: { name2_font_size() }
color: { name2_font_color() }
alias:
left: {if is_skinned() then 45 else 33}
top: 53
width: {if is_skinned() then 285 else if use_evobar() then max(100, card_style.alias.content_width) else 0}
height: 20
alignment: { (if is_skinned() then "center") + "bottom shrink-overflow"}
padding bottom: 0
z index: 3
font:
name: {if use_evobar() then "Matrix" else "MPlantin-Italic"}
size: {if use_evobar() then 10 else 9}
style: {if use_evobar() then "italic" else "bold"}
weight: {if use_evobar() then "italic" else "bold"}
color: {if use_evobar() then "black" else "white"}
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
size: 15
alignment: middle right
always symbol: true
z index: 2
padding top: 0
casting cost 2:
right: {page_coords[page_2_side()]["cost"]}
top: { if is_spot() then 330 else if page_2_flat() then 328 else 329}
width: { max(30, card_style.casting_cost_2.content_width) + 5 }
height: 23
alignment: middle right
symbol font:
name: magic-mana-large
size: 12
alignment: middle right
always symbol: true
z index: 2
padding top: 0
casting cost 3:
right: {page_coords[page_3_side()]["cost"]}
top: { if is_spot() then 330 else if page_3_flat() then 328 else 329}
width: { max(30, card_style.casting_cost_3.content_width) + 5 }
height: {if page_style(page_3_side()) == "null" then 0 else 23}
alignment: middle right
symbol font:
name: magic-mana-large
size: 12
alignment: middle right
always symbol: true
z index: 2
padding top: 0
card symbol:
left: {if card.card_symbol=="none" then 20 else 30}
top: 29
height: 20
width: 14
z index: 1
render style: image
choice images:
tombstone: tombstone.png
############################# Image
image:
left: {if is_spot() then 10 else 29}
top: {if is_spot() then 13 else 59}
width: { if is_spot() then 354 else 316}
height: { if is_spot() then 298 else 231}
z index: 1
default: {default_image(card.card_color)}
mask: { if is_spot() then "imagemask.png" else ""}
############################# Card type
indicator:
left: { if is_spot() then 80 else 31 }
top: { if is_spot() then 303 else 300 }
width: 17
height: 17
z index: 1
render style: image
visible: { has_identity() }
image: { card_identity() }
type:
left: { (if is_spot() then 50 else 0) + (if has_identity() then (if is_spot() then 50 else 52) else 32) }
top: { shrink_type() + type_font_vertical() + if is_spot() then 298 else 296}
width: { (if has_identity() then "290" else "310") - rare_width() - (if is_spot() then 73 else 0) }
height: { 20 - shrink_type() }
alignment: { if is_spot() then "top center shrink-overflow" else "top shrink-overflow"}
z index: 1
padding top: 2
font:
name: { type_font() }
italic name: { type_font_italic() }
size: { type_font_size() }
color: { type_font_color() }
separator color: red
indicator 2:
left: {(if is_reversed() then 165 else 0) + (if has_identity2() then 30 else 0)}
top: {355 + (if is_spot() then 2 else 0) }
width: 15
height: 15
z index: 2
render style: image
visible: {has_identity2()}
image: {card_identity_2()}
type 2:
left: {page_coords[page_2_side()]["type"] + (if has_identity2() then 20 else 0)}
top: {shrink_type2() + (if is_spot() or not page_2_flat() then 353 else 352)}
width: {155 - (if has_identity2() then 20 else 0)}
height: { if page_style(page_2_side()) == "double" then 20 - shrink_type2() else 0}
alignment: top shrink-overflow
z index: 1
padding top: 2
font:
name: { type2_font() }
italic name: { type2_font_italic() }
size: { type2_font_size() }
color: { type2_font_color() }
separator color: red
type 3:
left: {page_coords[page_3_side()]["type"] + (if has_identity2() then 20 else 0)}
top: {shrink_type2() + (if is_spot() or not page_3_flat() then 353 else 352)}
width: {155 - (if has_identity2() then 20 else 0)}
height: { if page_style(page_3_side()) == "double" then 20 - shrink_type2() else 0 }
alignment: top shrink-overflow
z index: 1
padding top: 2
font:
name: { type2_font() }
italic name: { type2_font_italic() }
size: { type2_font_size() }
color: { type2_font_color() }
separator color: red
rarity:
right: { if is_spot() then 342 else 344}
top: { if is_spot() then 299 else 297}
width: { if is_spot() then 22 else 44}
height: 22
z index: 2
render style: image
alignment: { if is_spot() then "middle center" else "middle right"}
choice images:
# Images based on the set symbol
basic land:
script:
if use_main_rarity() then "/magic-mainframe-extras.mse-include/" + un_png(set.mainframe_rarity_name) + "c.png"
else if use_alt_rarity() then alt_symbol()
else if styling.inverted_common_symbol then symbol_variation(symbol: set.symbol, variation: "invertedcommon")
else symbol_variation(symbol: set.symbol, variation: "common")
common:
script:
if use_main_rarity() then "/magic-mainframe-extras.mse-include/" + un_png(set.mainframe_rarity_name) + "c.png"
else if use_alt_rarity() then alt_symbol()
else if styling.inverted_common_symbol then symbol_variation(symbol: set.symbol, variation: "invertedcommon")
else symbol_variation(symbol: set.symbol, variation: "common")
uncommon:
script:
if use_main_rarity() then "/magic-mainframe-extras.mse-include/" + un_png(set.mainframe_rarity_name) + "u.png"
else if use_alt_rarity() then alt_symbol()
else symbol_variation(symbol: set.symbol, variation: "uncommon")
rare:
script:
if use_main_rarity() then "/magic-mainframe-extras.mse-include/" + un_png(set.mainframe_rarity_name) + "r.png"
else if use_alt_rarity() then alt_symbol()
else symbol_variation(symbol: set.symbol, variation: "rare")
mythic rare:
script:
if use_main_rarity() then "/magic-mainframe-extras.mse-include/" + un_png(set.mainframe_rarity_name) + "m.png"
else if use_alt_rarity() then alt_symbol()
else symbol_variation(symbol: set.symbol, variation: "mythic rare")
special:
script:
if use_main_rarity() then "/magic-mainframe-extras.mse-include/" + un_png(set.mainframe_rarity_name) + "s.png"
else if use_alt_rarity() then alt_symbol()
else symbol_variation(symbol: set.symbol, variation: "special")
masterpiece:
script:
if use_main_rarity() then "/magic-mainframe-extras.mse-include/" + un_png(set.mainframe_rarity_name) + "mp.png"
else symbol_variation(symbol: set.masterpiece_symbol, variation: "mythic rare")
############################# Text box
text:
left: {page_coords[page_1_side()]["text"]}
top: { (if is_spot() then 335 else page_1_top()) + to_int(chop_top()) + body_font_vertical() }
width: {if is_spot() then 157 else if page_style(page_1_side()) == "null" then 157 else 143}
bottom: { (if is_spot() then 464 else 481) - to_int(chop_bot()) }
font:
name: { body_font() }
italic name: { body_font_italic() }
size: { body_font_size() }
scale down to: 6
color: { body_font_color() }
symbol font:
name: { styling.text_box_mana_symbols }
size: 13
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.rule_text) and
card.flavor_text == "<i-flavor></i-flavor>" and
card_style.text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
z index: 2
padding left: 6
padding right: 4
line height hard: {if is_modal(card.rule_text) then 0.9 else 1.2 }
line height line: 1.5
line height soft: 0.9
line height hard max: {if is_modal(card.rule_text) then 1.0 else 1.3 }
line height line max: 1.6
text 2:
left: {page_coords[page_2_side()]["text"]}
top: { page_2_top() + to_int(back_chop_top()) + body_font_vertical()}
width: {if is_spot() then 157 else if page_style(page_1_side()) == "null" then 157 else 143}
bottom: { (if is_spot() then 464 else 481) - to_int(back_chop_bot()) }
font:
name: { body_font() }
italic name: { body_font_italic() }
size: { body_font_size() }
scale down to: 6
color: { body_font_color() }
symbol font:
name: { styling.text_box_mana_symbols }
size: 14
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.rule_text) and
card.flavor_text == "<i-flavor></i-flavor>" and
card_style.text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
z index: 2
padding left: 6
padding right: 4
line height hard: {if is_modal(card.rule_text_2) then 0.9 else 1.2 }
line height line: 1.5
line height soft: 0.9
line height hard max: {if is_modal(card.rule_text_2) then 1.0 else 1.3 }
line height line max: 1.6
text 3:
left: {page_coords[page_3_side()]["text"]}
top: { page_3_top() + to_int(chop_top()) + body_font_vertical() }
width: {if page_style(page_1_side()) == "null" then 157 else 143}
bottom: { (if is_spot() then 464 else 481) - to_int(chop_bot()) }
font:
name: { body_font() }
italic name: { body_font_italic() }
size: { body_font_size() }
scale down to: 6
color: { body_font_color() }
symbol font:
name: { styling.text_box_mana_symbols }
size: 13
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.rule_text) and
card.flavor_text == "<i-flavor></i-flavor>" and
card_style.text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
z index: 2
padding left: 6
padding right: 4
line height hard: {if is_modal(card.rule_text) then 0.9 else 1.2 }
line height line: 1.5
line height soft: 0.9
line height hard max: {if is_modal(card.rule_text) then 1.0 else 1.3 }
line height line max: 1.6
watermark:
left: { min(page_coords[page_1_side()][(if is_spot() then "spot_watermark" else "watermark")], page_coords[page_3_side()][(if is_spot() then "spot_watermark" else "watermark")]) }
top: { if is_spot() then 330 else max(page_1_top(), page_3_top()) }
width: { if is_spot() then 150 else 168}
bottom: {if is_spot() then 470 else 481}
z index: 1
render style: image
popup style: in place
alignment: middle center
include file: /magic-watermarks.mse-include/watermarks
watermark 2:
left: { min(page_coords[page_2_side()][(if is_spot() then "spot_watermark" else "watermark")], page_coords[page_3_side()][(if is_spot() then "spot_watermark" else "watermark")]) }
top: { page_2_top() }
width: { if is_spot() then 154 else 167}
bottom: {if is_spot() then 470 else 481}
z index: 1
render style: image
popup style: in place
alignment: middle center
include file: /magic-watermarks.mse-include/watermarks
############################# PT
pt:
z index: 2
left: { if is_spot() then 293 else 286}
top: {(if is_spot() then 466 else 469)+(pt_font_vertical())}
width: 60
height: 28
alignment: center middle shrink-overflow
font:
name: {pt_font()}
italic name: {pt_font_italic()}
size: {pt_font_size()}
color: {pt_font_color()}
separator color: red
############################# 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.25
color: white
copyright:
right: 350
top: { if card.pt != "" then 500 else 488 }
width: {if set.automatic_copyright then 0 else 140}
height: 10
z index: 2
alignment: middle right
font:
name: Matrix
size: 7
color: white
weight: bold
partition select:
left: 24
top: 488
width: {if not use_auto_numbers() then 0 else if contains(set.card_number_style, match:"/0") then 50 else 35}
height: 10
z index: 3
render style: hidden
############################################################## Extra card fields
extra card field:
type: choice
name: color page
script: card.card_color
save value: false
editable: false
extra card field:
type: choice
name: backup page
script: card.card_color
save value: false
editable: false
extra card field:
type: choice
name: left decoration
script: card.card_color_2
save value: false
editable: false
extra card field:
type: choice
name: right decoration
script: if left_name() then card.card_color_3 else card.card_color_2
save value: false
editable: false
extra card field:
type: choice
name: binding
script: card.card_color
save value: false
editable: false
extra card field:
type: text
name: card code
save value: false
script: card_number_script_core()
extra card field:
type: choice
name: artist arrow
editable: false
save value: false
choice: white
extra card field:
type: choice
name: alias bar
script: card.card_color
save value: false
editable: false
extra card field:
type: choice
name: pt box
script: card.card_color
editable: false
save value: false
extra card field:
type: choice
name: stamp
script: card.card_color
editable: false
save value: false
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: flavor bar
choice: bar
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: flavor bar 2
choice: bar
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: crown
choice: crown
editable: false
save value: false
show statistics: false
script: card.card_color
extra card field:
type: choice
name: snow overlay
choice: overlay
editable: false
save value: false
show statistics: false
script: card.card_color
extra card field:
type: choice
name: vehicle overlay
choice: overlay
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: custom overlay
choice: car door
save value: false
editable: false
extra card field:
type: choice
name: nyx overlay
choice: overlay
editable: false
save value: false
show statistics: false
script: card.card_color
extra card field:
type: choice
name: evobar tip
choice: evo
save value: false
editable: false
extra card field:
type: choice
name: evobar start
choice: evo
save value: false
editable: false
extra card field:
type: choice
name: evobar
choice: evo
save value: false
editable: false
extra card field:
type: text
name: auto copyright
script: set.copyright
save value: false
editable: false
show statistics: false
extra card field:
type: text
name: vorthos box
save value: true
editable: true
description: Where they put mtgstory.com on story spotlights.
extra card field:
type: text
name: promo label
save value: true
description: The golden promo label.
extra card field:
type: choice
name: list icon
choice: no icon
choice: the list
save value: true
editable: true
extra card style:
color page:
left: {page_coords[page_1_side()]["page"]}
top: 327
width: 170
height: 156.5
z index: 1
render style: image
image: {if not left_name() then left_page_img() else right_page_img()}
visible: {not (left_name() and right_name())}
backup page:
left: {page_coords[page_3_side()]["page"]}
top: 327
width: 170
height: 156.5
z index: 1
render style: image
image: {right_page_img()}
visible: {not left_name() and not right_name()}
binding:
left: {if (styling.left_style == "none" and not is_reversed()) or (styling.right_style == "none" and is_reversed()) then 188 else 28 }
top: 326
width: {if styling.left_style == "none" or styling.right_style == "none" then 160 else 321}
height:{if is_spot() then 0 else 10}
render style: image
z index: -1
image: {binding_background()}
visible: {not (styling.left_style == "none" and styling.right_style == "none")}
card code:
left: 24
top: 488
width: 120
height: 10
z index: 1
font:
name: Relay-Medium
size: 7
color: white
weight: bold
promo label:
left: {if is_spot() then 65 else 40}
top: 262
width: {if chosen(styling.other_options, choice:"prerelease stamp") then (if is_spot() then 245 else 295) else 0}
height: 29
alignment: middle right
z index: 4
font:
name: ModMatrix
size: 14
color: rgb(223,169,41)
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
pt box:
left: {if is_spot() then 290 else 273}
top: {if is_spot() then 460 else 466}
width: {if is_spot() then 68 else 81}
height: { if is_spot() then 38 else 42}
z index: 1
visible: { card.pt != "" }
render style: image
image: { if is_spot() then spot_pt() else if is_vehicle() then "pts/vpt.png" else card_ptbox() }
stamp:
left: 165
top: 472
width: 46
height: 26
z index: 5
render style: image
image: { card_stamp() }
mask: { if is_spot() then "spotmask.jpg" else "stampmask.jpg"}
visible: {is_rare() and styling.use_holofoil_stamps}
foil stamp:
left: 165
top: 472
width: 46
height: 26
z index: 5
visible: { is_rare() and styling.use_holofoil_stamps }
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 "foil_mask_rare.png" else "foil_mask.png" }
flavor bar:
left: { page_coords[page_1_side()]["flavor bar"]}
top: { bar_equation() }
width: 188
height: 1
z index: 1
render style: image
image: bar.png
visible: { card.rule_text != "" and remove_tags(card.flavor_text) != "" and set.use_flavor_bar }
flavor bar 2:
left: {page_coords[page_2_side()]["flavor bar"]}
top: { bar_equation2() }
width: 188
height: 1
z index: 1
render style: image
image: bar.png
visible: { card.rule_text_2 != "" and remove_tags(card.flavor_text_2) != "" and set.use_flavor_bar }
crown:
left: 0
top: 0
width: 375
height: 523
render style: image
image: {crown_background()}
z index: 3
visible: {is_legend() and not is_spot()}
vehicle overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: {"voverlay.png" }
z index: 0
visible: {is_vehicle()}
custom overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: { custom_border_blend() }
z index: 0
visible: {is_custom()}
mask: {(if is_vehicle() or is_snow() or is_nyx() then "double_") + "frame_border_mask.png"}
nyx overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: {nyx_background()}
z index: 0
visible: {is_nyx()}
mask: {(if is_vehicle() or is_snow() then "double_") + "frame_border_mask.png"}
snow overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: {snow_background()}
z index: 0
visible: {is_snow()}
mask: {"frame_border_mask.png"}
evobar:
left: 27
top: 57
width: {card_style.alias.content_width}
height: 27
z index: 2
render style: image
image: evobar.png
visible: {use_evobar()}
evobar tip:
left: {26.6 + card_style.alias.content_width}
top: 57
width: 36
height: 27
z index: 2
render style: image
image: evobar_tip.png
visible: {use_evobar()}
auto copyright:
right: 350
top: { if card.pt != "" then 500 else 488 }
width: {if set.automatic_copyright then 140 else 0}
height: 10
z index: 4
alignment: middle right shrink-overflow
font:
name: Matrix
size: 7
color: white
weight: bold
alias bar:
left: 38
top: 57
width: 298
height: 21
z index: 2
render style: image
image: {alias_bar()}
visible: {is_skinned() and not use_evobar()}
vorthos box:
right: { if card.pt != "" then 275 else 350 }
top: 488
left: 210
height: 10
z index: 3
alignment: middle right
font:
name: Relay-Medium
size: 7
color: white
weight: bold
list icon:
left: 0
top: 487
width: 29
height: 36
render style: image
choice images:
the list: /magic-mainframe-extras.mse-include/mfsfiles/list.png
z index: 1
left decoration:
left: {page_coords["left"]["decoration"]}
top: 293
width: 200
height: 230
z index: 4
render style: image
image: {decoration_background()}
visible: {left_name()}
right decoration:
left: {page_coords["right"]["decoration"]}
top: 293
width: 200
height: 230
z index: 4
render style: image
image: {decoration_background()}
visible: {right_name()}