mse version: 2.0.0
game: magic
short name: M15 Sagas
full name: Saga, Class, Case
installer group: magic/m15 style/sagas
icon: card-sample.png
position hint: 010
version: 2024-09-23
depends on:
package: magic.mse-game
version: 2014-06-25
depends on:
package: magic-modules.mse-include
version: 2024-10-01
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
############################################################## Extra scripts
init script:
# Should hybrids have a grey name?
mask_hybrid_with_land := { styling.grey_hybrid_name }
template_prefix := [
card: "/magic-modules.mse-include/cards/375 m15 saga/"
pt: "/magic-modules.mse-include/pts/375 m15/"
mark: "bookmark/"
nyx:"/magic-modules.mse-include/trims/nyx/",
snow:"/magic-modules.mse-include/trims/snow/",
beyond:"/magic-modules.mse-include/trims/beyond/",
crown:"/magic-modules.mse-include/crowns/375/",
star: "/magic-modules.mse-include/trims/star/",
identity: "/magic-modules.mse-include/indicators/"
]
template_suffix := [
card: "card.jpg"
snow:"snow.png"
pt:"pt.png"
mark: "mark.png"
stamp: "stamp.png"
nyx:"nyx.png"
beyond:"beyond.png"
crown:"crown.png"
star: "star.png"
identity: "identity.png"
]
template := {
if type_name(harder_script[type] or else nil) != type_name(nil)
then harder_script[type](input, land:false)
else template_prefix[type] + input + template_suffix[type]
}
land_template := {
if type_name(harder_script[type] or else nil) != type_name(nil)
then harder_script[type](input, land:true)
else template_prefix[type] + (if input == "a" then "c" else input) + (if landless(type) then "" else "l") + template_suffix[type]
}
# Use land templates for previews because they show more contrast
hybrid_previews := "land,hybrid"
landless := { landless_ar[input] or else false }
landless_ar := [
nyx: true,
crown: true,
star:true
]
watermark_include := "/magic-modules.mse-include/watermarks"
is_unsorted := {styling.remove_from_autocount}
# 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 }
paintbrush_color := {
if to_int(card.border_color) < 96 then "white" else "black"
}
# Loyalty cost arrows
loyalty_image := {
if contains(input, match: "+") then "loyalty up"
else if contains(input, match: "-") then "loyalty down"
else "loyalty naught"
}
card_shape := { if contains(styling.other_options, match: "class") then "class" else "saga" }
# Is the card a promo card?
is_promo := { styling.promo }
starting_loyalty := {chosen(styling.other_options, choice:"use starting loyalty")}
split_12 := {to_number(pull_comma_array(styling.chapter_divider_coordinates, cell:0, end:true, default:(if one_box() then 437 else if two_boxes() then 296 else if four_boxes() then 225 else 249)))}
split_23 := {to_number(pull_comma_array(styling.chapter_divider_coordinates, cell:1, end:true, default:(if one_box() then 437 else if two_boxes() then 437 else if four_boxes() then 296 else 343)))}
split_34 := {to_number(pull_comma_array(styling.chapter_divider_coordinates, cell:2, end:true, default:(if one_box() then 437 else if three_boxes() then 437 else if four_boxes() then 367 else 437)))}
coords_map := [
1: {[card_style.level_1_text.top, card_style.level_1_text.bottom-card_style.level_1_text.top]},
2: {[card_style.level_2_text.top, card_style.level_2_text.bottom-card_style.level_2_text.top]},
3: {[card_style.level_3_text.top, card_style.level_3_text.bottom-card_style.level_3_text.top]},
4: {[card_style.level_4_text.top, card_style.level_4_text.bottom-card_style.level_4_text.top]},
5: {[card_style.level_5_text.top, card_style.level_5_text.bottom-card_style.level_5_text.top]}
]
auto_snap := {
snap_array := split_text(styling.snap_chapter_to_box, match:",", end:false)
abil := to_number(pull_comma_array(styling.snap_chapter_to_box, cell:input-1, end:false)) ###textbox to snap to
if abil == 0 then 600 else snap_calc(input, snap_array:snap_array, abil:abil)
}
snap_calc := {
out := 0
abil_array := saga_lore_count(snap_array) ###chapters in each box
ch_count := abil_array[abil-1] ###chapters in this box
self_index := saga_ch_placement(snap_array)[input-1] ###input's index
box_deets := coords_map[abil]() ###[top, height]
remain := box_deets[1] - 30*ch_count ###remaining space after chapter hexes
excess := remain - 10*(ch_count-1) ###remaining after 10px gaps
if excess >= 0 then out := box_deets[0] + excess/2 + 40*(self_index-1) ###top + buffer*index + hex*index-1
else ( ###may not be enough room to ten-gap the middle
inner_gap := 10
squeeze := 0
outer_gap := (remain - inner_gap * (ch_count-1))/2
if outer_gap < -6 then (
squeeze := 2*(outer_gap+6)/(ch_count-1);
outer_gap := -6
)
inner_gap := inner_gap + squeeze
out := box_deets[0] + outer_gap + (self_index-1)*(30+inner_gap)
)
out
}
snapping_chapters := {
splits := split_comma(styling.snap_chapter_to_box)
len := length(splits)
if styling.snap_chapter_to_box == ""
then 0
else if splits[len-1] == ""
then len - 1
else len
}
chapter0 := { if styling.reminder_coordinate != "" then max(60,min(to_number(styling.reminder_coordinate),438)) else 155}
chapter1 := { if snapping_chapters() > 0 then auto_snap(1) else to_number(pull_comma_array(styling.chapter_number_coordinates, cell:0, end:true, default:(if two_boxes() then 183 else 185))) }
chapter2 := { if snapping_chapters() > 1 then auto_snap(2) else to_number(pull_comma_array(styling.chapter_number_coordinates, cell:1, end:true, default:(if two_boxes() then 223 else 279))) }
chapter3 := { if snapping_chapters() > 2 then auto_snap(3) else to_number(pull_comma_array(styling.chapter_number_coordinates, cell:2, end:true, default:(if two_boxes() then 329 else 373))) }
chapter4 := { if snapping_chapters() > 3 then auto_snap(4) else to_number(pull_comma_array(styling.chapter_number_coordinates, cell:3, end:true, default:600)) }
chapter5 := { if snapping_chapters() > 4 then auto_snap(5) else to_number(pull_comma_array(styling.chapter_number_coordinates, cell:4, end:true, default:600)) }
chapter6 := { if snapping_chapters() > 5 then auto_snap(6) else to_number(pull_comma_array(styling.chapter_number_coordinates, cell:5, end:true, default:600)) }
chapter_custom := { if snapping_chapters() > 6 then auto_snap(7) else to_number(pull_comma_array(styling.custom_chapter_coordinate, cell:0, end:false, default:600)) }
custom_chapter_node := {if contains(styling.custom_chapter_location, match:".png") then "/magic-mainframe-extras.mse-include/" + styling.custom_chapter_location else "chapter6.png"}
custom_name := {if styling.custom_chapter_name == "" then "C" else styling.custom_chapter_name}
comma_count := filter_text@(match:",")
shrink_type := {if styling.shrink_typeline_text != "" then to_int(styling.shrink_typeline_text) else 0 }
shrink_name := {if styling.shrink_name_text != "" then to_int(styling.shrink_name_text) else 0 }
text_size := { 13 -(if styling.separated_text_size == "" then 0 else to_number(styling.separated_text_size))}
build_array := {
if input > 523 or input < 0 then 0
else if four_boxes() and input +17 >= (if split_34() != "" then split_34() else 600) then 4
else if (four_boxes() or three_boxes()) and input +17 >= (if split_23() != "" then split_23() else 343) then 3
else if not one_box() and input +17 >= (if split_12() != "" then split_12() else 249) then 2
else if input +17 <= (if split_12() != "" then split_12() else 249) then 1
else 0
}
alt_leaders := {
alt := ["I,","II,","III,","IV,","V,","VI,"]
if match(card.notes, match:"!altleader [^,]+,") then
alt := break_text(split_text(card.notes, match:"!altleader ").1, match:"[^,]+,")
alt
}
level_leader := {
alt := alt_leaders()
(if build_array((if chapter1() != "" then chapter1() else 185)) == input then alt.0 + " " else "")
+(if build_array((if chapter2() != "" then chapter2() else 279)) == input then alt.1 + " " else "")
+(if build_array((if chapter3() != "" then chapter3() else 373)) == input then alt.2 + " " else "")
+(if build_array((if chapter4() != "" then chapter4() else 600)) == input then alt.3 + " " else "")
+(if build_array((if chapter5() != "" then chapter5() else 600)) == input then alt.4 + " " else "")
+(if build_array((if chapter6() != "" then chapter6() else 600)) == input then alt.5 + " " else "")
+(if build_array((if chapter_custom() != "" then chapter_custom() else 600)) == input then custom_name() + ", " else "")
}
end_leader := replace@(match:", $", replace:" — ")
special_text := {
if is_class() then
(
(if card.chapter_text == "" then saga_reminder() else card.chapter_text)
+(if card.level_1_text != "" then "\n" + card.level_1_text)
+(if card.level_2_text != "" then "\n" + card.level_9_text + (if card.level_2 == "" then " Level 2" else " " + card.level_2) + "\n" + card.level_2_text)
+(if card.level_3_text != "" then "\n" + card.level_10_text + (if card.level_3 == "" then " Level 3" else " " + card.level_3) + "\n" + card.level_3_text)
+(if card.level_4_text != "" then "\n" + card.level_11_text + (if card.level_4 == "" then " Level 4" else " " + card.level_4) + "\n" + card.level_4_text)
)
else if is_case() then (
card.level_1_text + "\n"
+card.level_2_text + "\n"
+card.level_3_text
)
else
(
card.chapter_text
+(if card.level_1_text != "" then "\n" + end_leader(level_leader(1)) + card.level_1_text)
+(if card.level_2_text != "" then "\n" + end_leader(level_leader(2)) + card.level_2_text)
+(if card.level_3_text != "" then "\n" + end_leader(level_leader(3)) + card.level_3_text)
+(if card.level_4_text != "" then "\n" + end_leader(level_leader(4)) + card.level_4_text)
)
}
saga_rules_text := { chapter3() + "|" + (if split_12() != "" then split_12() else 249) + "|" + (if split_23() != "" then split_23() else 343) }
one_box := {styling.chapter_textboxes == "one" }
two_boxes := {styling.chapter_textboxes == "two" }
three_boxes := {styling.chapter_textboxes == "three" or comma_count(styling.chapter_divider_coordinates) == ",,"}
four_boxes := {styling.chapter_textboxes == "four" or comma_count(styling.chapter_divider_coordinates) == ",,,"}
use_main_rarity := { contains(set.mainframe_rarity_name, match: ".png")}
un_png := replace@(match:".png", replace: "")
a_saga := {true}
saga_reminder := { if styling.alternate_reminder != "" then styling.alternate_reminder else if is_class() then "Gain the next level as a sorcery to add its ability." else "As this Saga enters and after your draw step, add a lore counter. Sacrifice after III." }
is_class := {contains(styling.other_options, match:"class") or lang_setting("is_class")(remove_tags(card.sub_type))}
is_case := {contains(styling.other_options, match:"case") or lang_setting("is_case")(remove_tags(card.sub_type))}
is_saga := {not is_class() and not is_case()}
un_marked := {is_class() or is_case() or contains(styling.other_options, match:"remove bookmark")}
is_legend := { auto_legend() }
is_vehicle := { auto_vehicle() or contains(styling.other_options, match:"vehicle") }
is_nyx := { auto_nyx() or contains(styling.other_options, match:"nyx") }
is_snow := { auto_snow() or contains(styling.other_options, 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 := {
is_ench := lang_setting("is_enchantment")(card.super_type)
if not is_ench
then false ## not an enchantment
else if not set.auto_nyx
then false ## set auto disabled
else if not chosen(styling.auto_frames, choice:"nyx")
then false ## style auto disabled
else true ## auto nyx
}
auto_snow := { contains(styling.auto_frames, match:"snow") and lang_setting("is_snow")(card.super_type) }
is_beyond := {
chosen(styling.other_options, choice:"universes beyond")
or (chosen(styling.auto_frames, choice:"universes beyond") and (card.card_stamp == "universes beyond" or card.card_stamp == "flatstamped universes beyond"))
}
nyx_background := { color_background(type:"nyx", base_hybrid:card_hybrid) }
snow_background := { color_background(type:"snowtexture", base_hybrid:card_hybrid) }
bookmark_background := { color_background(type:"mark", base_hybrid:card_hybrid) }
beyond_background := { color_background(type:"beyond", base_hybrid:card_hybrid, folder:template_prefix["beyond"]) }
crown_background := { color_background(type:"crown", base_hybrid: card_hybrid)}
custom_border_blend := { color_background(type:"custom_border", base_hybrid:card_hybrid) }
alt_loc := { if styling.replacement_chapter_location != "" then styling.replacement_chapter_location else "no"}
alt_chapters := { (if match(styling.replacement_chapter_location, match:"/$") then "/magic-mainframe-extras.mse-include/" + styling.replacement_chapter_location else "") + "chapter" + input + ".png"}
alt_text := {is_class() or is_case()}
alt_text_script := {
if is_class()
then combined_editor(field1: card.chapter_text, separator1:"\n", field2: card.level_1_text, separator2: "\n", field3: card.level_2_text, separator3: "\n", field4: card.level_3_text, separator4: "\n", field5: card.level_4_text)
else combined_editor(field1: card.level_1_text, separator1:"\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text)
}
lev0 := {
if card_style.text.layout.separator[0] or else 0 > 0 then card_style.text.top+card_style.text.layout.separator[0]-1 else 600
}
lev2 := {
if card_style.text.layout.separator[1] or else 0 > 0 then card_style.text.top+card_style.text.layout.separator[1]-13 else 600
}
lev3 := {
if card_style.text.layout.separator[2] or else 0 > 0 then card_style.text.top+card_style.text.layout.separator[2]-13 else 600
}
lev4 := {
if card_style.text.layout.separator[3] or else 0 > 0 then card_style.text.top+card_style.text.layout.separator[3]-13 else 600
}
text_filter := text_filter + {apply_margins(input, name:margin_code)} + {add_spacers(input, name:margin_code)}
margin_top := {
if is_saga() then 0 else if input == "lv2" or (input == "lv3" and card.level_3_text != "") or (input == "lv4" and card.level_4_text != "") then 30 else 0
}
###add blank spaces to inner levels so they still are clickable while "empty"
add_spacers := { if input == "" and (margin_code == "lv1" or margin_code == "lv2" or margin_code == "lv3") then "" else input}
class_bar := {
if styling.class_levels == "custom" and has_png(styling.custom_class_bar)
then "/magic-mainframe-extras.mse-include/" + styling.custom_class_bar
else if styling.class_levels == "line"
then "levelline.png"
else if styling.class_levels == "cyber"
then "levelcyber.png"
else if styling.class_levels == "unnotched"
then "levelbar.png"
else "level.png"
}
level_label_font_size := {
if styling.level_label_font_size != "" then styling.level_label_font_size else 11
}
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
}
is_custom := {contains(styling.other_options, match:"custom border") and contains(styling.custom_border_source, match:".png")}
# this goes at the very end
harder_script := [
crown: module_crown_template,
custom_border: custom_border_image,
alt_nyx: alt_nyx_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: choice
name: chapter textboxes
description: How many textboxes does this Saga have?
choice: one
choice: two
choice: three
choice: four
initial: three
styling field:
type: text
name: snap chapter to box
description: Sets the chapter symbols to the given textbox, fo example "1,1,2," for I, II - Ability 1; III - Ability 2
styling field:
type: text
name: chapter divider coordinates
description: Sets the position of the chapter breaks. Formatted as "1,2," Defaults are "296," for two "249,343," for three and "225,296,367," for four.
styling field:
type: text
name: reminder coordinate
description: Sets the position of the chapter breaks. Formatted as "1,2," Defaults are "296," for two "249,343," for three and "225,296,367," for four.
styling field:
type: text
name: separated text size
description: Use to standardize the font size of separated abilities. Default is size 13.
styling field:
type: text
name: reminder text size
description: Use to give the reminder text a different font size from the main abilities. Default is size 13.
styling field:
type: text
name: alternate reminder
description: Change the reminder text that is generated for new cards
styling field:
type: text
name: custom chapter location
description: The location of the custom chapter symbol inside magic-mainframe-extras
styling field:
type: text
name: custom chapter name
description: Set how this symbol will be called in text exports (ie I, II...). Default is C.
styling field:
type: multiple choice
name: auto frames
description: Automatically applies frames for multi-typed enchantments, snow, or Vehicles.
choice: nyx
choice: vehicle
choice: snow
choice: universes beyond
initial: nyx, vehicle, snow, universes beyond
styling field:
type: multiple choice
name: other options
choice: nyx
choice: vehicle
choice: snow
choice: class
choice: case
choice: universes beyond
choice: custom border
choice: use starting loyalty
choice: remove bookmark
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: choice
name: class levels
description: Which type of level bar should classes use?
choice: notched
choice: unnotched
choice: line
choice: cyber
choice: custom
styling field:
type: text
name: custom class bar
description: Location of 158x25 image in magic-mainframe-extras to use as class bars
styling field:
type: text
name: shrink name text
description: Reduces the name text N points.
styling field:
type: text
name: shrink typeline text
description: Reduces the typeline text N points.
styling field:
type: text
name: level label font size
description: The font size for the class level labels. Default is 11.
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 field:
type: choice
name: legend crown
choice: standard
choice: nyx
choice: companion
choice: custom
description: The type of legend crown to use for this card.
styling field:
type: text
name: custom crown location
description: location of custom legend crown images in magic-mainframe-extras
styling field:
type: text
name: replacement chapter location
description: location of replacement chapter symbols in magic-mainframe-extras, formatted as "folder/"
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: text
name: chapter number coordinates
description: Sets the chapter symbols at the given height. Formatted as "1,2,3," Defaults are "183,223,329," for two and "185,279,373," for three. Use 40px offset.
styling field:
type: text
name: custom chapter coordinate
description: Set the custom symbol at the given height
styling field:
type: boolean
name: wider watermarks
description: Use the full watermark size for custom full-size backgrounds.
initial: no
include file: /magic-modules.mse-include/rarities/styling_fields
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: 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: package choice
name: casting cost mana symbols
match: magic-mana-*.mse-symbol-font
initial: magic-mana-large.mse-symbol-font
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: 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: 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") }
auto frames:
render style: checklist
direction: vertical
other options:
render style: checklist
direction: vertical
############################################################## Card fields
include file: /magic-modules.mse-include/corners/card_fields
include file: /magic-modules.mse-include/information/card_fields
include file: /magic-modules.mse-include/card-symbols/card_fields
include file: /magic-modules.mse-include/stamps/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: 500
mask: { (if is_legend() then "crown_border" else "border_mask") + (if card.border_color == rgb(200,200,200) then "_silver" else "") + ".png" }
card color:
left: 0
top: 0
width: 375
height: 523
z index: 100
render style: image
popup style: in place
image: { module_card() }
############################# Name line
name:
left: { if card.card_symbol=="none" then 32 else 50 }
top: 30
right: { 341 - card_style.casting_cost.content_width }
height: { 23- (0.5 * shrink_name())}
alignment: bottom shrink-overflow
padding bottom: 0
z index: 900
font:
name: Beleren Bold
size: {16 - shrink_name()}
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: { styling.casting_cost_mana_symbols }
size: 15
alignment: middle right
always symbol: true
z index: 920
padding top: 0
level 9 text:
left: 190
width: {if not is_class() or card.level_2_text == "" then 0 else 80}
top: {lev2()+4}
height: 20
z index: 900
font:
name: MPlantin
size: 12
symbol font:
name: magic-mana-small
size: 12
alignment: middle left
level 2:
left: 270
width: {if not is_class() or card.level_2_text == "" then 0 else 70}
top: {lev2()+3}
height: 20
z index: 900
font:
name: MPlantin
size: {level_label_font_size()}
weight: bold
symbol font:
name: magic-mana-small
size: {level_label_font_size()}
alignment: middle right
level 10 text:
left: 190
width: {if not is_class() or card.level_3_text == "" then 0 else 80}
top: {lev3()+4}
height: 20
z index: 900
font:
name: MPlantin
size: 12
symbol font:
name: magic-mana-small
size: 12
alignment: middle left
level 3:
left: 270
width: {if not is_class() or card.level_3_text == "" then 0 else 70}
top: {lev3()+3}
height: 20
z index: 900
font:
name: MPlantin
size: {level_label_font_size()}
weight: bold
symbol font:
name: magic-mana-small
size: {level_label_font_size()}
alignment: middle right
level 11 text:
left: 190
width: {if not is_class() or card.level_4_text == "" then 0 else 80}
top: {lev4()+4}
height: 20
z index: 900
font:
name: MPlantin
size: 12
symbol font:
name: magic-mana-small
size: 12
alignment: middle left
level 4:
left: 270
width: {if not is_class() or card.level_4_text == "" then 0 else 70}
top: {lev4()+3}
height: 20
z index: 900
font:
name: MPlantin
size: {level_label_font_size()}
weight: bold
symbol font:
name: magic-mana-small
size: {level_label_font_size()}
alignment: middle right
card symbol:
left: {if card.card_symbol=="none" then 20 else 28}
top : 31
height: 21
width: 23
z index: 810
render style: image
include file: /magic.mse-game/card-symbols/menu_choice_images
image: { card_symbol_image(face: 1) }
############################# Image
image:
left: {if is_saga() then 188 else 29}
top: 59
width: 157
height: 379
z index: 200
mainframe image:
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: 1010
############################# Card type
indicator:
left: 30
top: 449
width: 17
height: 17
z index: 810
render style: image
visible: { has_identity()}
image: { module_identity() }
type:
left: { if has_identity() then "53" else "33" }
top: { 444 + shrink_type() }
width: { 309 - rare_width() }
height: { 20 - shrink_type() }
alignment: top shrink-overflow
z index: 900
padding top: 2
font:
name: Beleren Bold
size: { 13 - shrink_type() }
color: black
separator color: red
rarity:
right: 345
top: 445
width: 42
height: 21
z index: 950
render style: image
alignment: middle right
include file: /magic-modules.mse-include/rarities/choice_images
############################# Text box
watermark:
left: { (if styling.wider_watermarks then 29 else 45)+(if is_saga() then 0 else 158)}
top: 60
width: { if styling.wider_watermarks then 157 else 133 }
height: 378
z index: 720
render style: image
popup style: in place
alignment: middle center
include file: /magic.mse-game/watermarks/menu_choice_images
image: { watermark_image_1() }
text:
left: 188
top: 60
width: {if is_saga() then 0 else 153}
bottom: 437
z index: 900
font:
name: MPlantin
italic name: MPlantin-Italic
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
scale down to: 6
color: black
symbol font:
name: { styling.text_box_mana_symbols }
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.rule_text) and
card_style.text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
padding left: 3
padding right: 1
line height hard: {if is_modal(card.rule_text) then 0.9 else 1.2 }
line height line: 1.5
line height soft: 0.85
line height hard max: {if is_modal(card.rule_text) then 1.0 else 1.3 }
line height line max: 1.6
chapter text:
left: {30+(if is_class() then 158 else 0)}
top: 60
width: {if is_case() then 0 else 153}
bottom: {if un_marked() then 60 else chapter0()}
z index: 900
font:
name: MPlantin
italic name: MPlantin-Italic
size: { if styling.reminder_text_size != "" then styling.reminder_text_size else if styling.separated_text_size != "" then styling.separated_text_size else 13 }
scale down to: 6
color: black
symbol font:
name: { styling.text_box_mana_symbols }
size: { if styling.reminder_text_size != "" then styling.reminder_text_size else if styling.separated_text_size != "" then styling.separated_text_size else 13 }
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.chapter_text) and
card_style.text.chapter_text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
mask: {if un_marked() then "" else crop(to_image("textmask.png"), height:chapter0()-60, width:153, offset_x:0, offset_y:0)}
padding left: 3
padding right: 1
line height hard: 1.2
line height line: 1.5
line height soft: 0.85
line height hard max: 1.3
line height line max: 1.6
############################# Levels
level 1 text:
left: {if un_marked() then 30 else 45}
top: { if un_marked() then 60 else chapter0()}
width: { if is_class() or is_case() then 0 else if un_marked() then 153 else 138}
bottom: { if split_12() == "" then 249 else split_12() }
font:
name: MPlantin
italic name: MPlantin-Italic
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
scale down to: 6
color: black
symbol font:
name: { styling.text_box_mana_symbols }
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.level_1_text) and
card_style.level_1_text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
z index: 900
padding left: 6
padding right: 4
padding top: 3
padding bottom: 3
line height hard: {if is_modal(card.level_1_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.level_1_text) then 0.9 else 1.3 }
line height line max: 1.6
level 2 text:
left: {if un_marked() then 30 else 45}
top: { if split_12() == "" then 249 else split_12() }
width: { if is_class() or is_case() then 0 else if un_marked() then 153 else 138}
bottom: { if split_23() == "" then 343 else split_23() }
font:
name: MPlantin
italic name: MPlantin-Italic
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
scale down to: 6
color: black
symbol font:
name: { styling.text_box_mana_symbols }
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.level_2_text) and
card_style.level_2_text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
z index: 900
padding left: 6
padding right: 4
padding top: 3
padding bottom: 3
line height hard: {if is_modal(card.level_2_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.level_2_text) then 0.9 else 1.3 }
line height line max: 1.6
level 3 text:
left: {if un_marked() then 30 else 45}
top: { if split_23() == "" then 343 else split_23() }
width: { if is_class() or is_case() then 0 else if un_marked() then 153 else 138}
bottom: {if split_34() == "" then 437 else split_34() }
font:
name: MPlantin
italic name: MPlantin-Italic
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
scale down to: 6
color: black
symbol font:
name: { styling.text_box_mana_symbols }
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.level_3_text) and
card_style.level_3_text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
z index: 900
padding left: 6
padding right: 4
padding top: 3
padding bottom: 3
line height hard: {if is_modal(card.level_3_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.level_3_text) then 0.9 else 1.3 }
line height line max: 1.6
level 4 text:
left: {if un_marked() then 30 else 45}
top: {if split_34() == "" then 437 else split_34() }
width: { if is_class() then 0 else if un_marked() then 153 else 138}
bottom: 437
font:
name: MPlantin
italic name: MPlantin-Italic
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
scale down to: 6
color: black
symbol font:
name: { styling.text_box_mana_symbols }
size: { if styling.separated_text_size != "" then styling.separated_text_size else 13 }
alignment:
script:
if (styling.center_text == "short text only" and
not contains(match:"\n", card.level_4_text) and
card_style.level_4_text.content_lines <= 2) or
styling.center_text == "always"
then "middle center"
else "middle left"
z index: 900
padding left: 6
padding right: 4
padding top: 3
padding bottom: 3
line height hard: {if is_modal(card.level_4_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.level_4_text) then 0.9 else 1.3 }
line height line max: 1.6
############################# PT
pt:
z index: 900
left: 286
top: 469
width: {if starting_loyalty() then 0 else 60}
height: 28
alignment: center middle shrink-overflow
font:
name: Beleren Bold
size: 16
color: black
separator color: red
loyalty:
z index: 900
left: 326
top: 468
width: {if starting_loyalty() then 13.16 else 0}
height: 34.63
alignment: center middle
font:
name: Beleren Bold
size: 14
color: white
############################################################## Extra card fields
extra card field:
type: choice
name: pt box
script: card.card_color
editable: false
save value: false
extra card field:
type: choice
name: loyalty box
editable: false
choice: loyalty
save value: false
extra card field:
type: choice
name: stamp backing
choice: stamp
editable: false
save value: false
extra card field:
type: choice
name: foil layer
choice: foil
save value: false
editable: false
extra card field:
type: choice
name: clear frame
choice: frame
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: bookmark
script: card.card_color
editable: false
save value: false
extra card field:
type: choice
name: chapter 1
choice: chapter
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: chapter 2
choice: chapter
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: chapter 3
choice: chapter
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: chapter 4
choice: chapter
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: chapter 5
choice: chapter
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: chapter 6
choice: chapter
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: chapter custom
choice: chapter
editable: false
save value: false
show statistics: false
extra card field:
type: text
name: filler text
editable: true
save value: true
show statistics: false
multi line: true
script:
forward_editor(field: card.special_text)
special_text()
extra card field:
type: choice
name: linebreak 1
choice: line
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: linebreak 2
choice: line
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: linebreak 3
choice: line
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: linebreak 4
choice: line
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: linebreak 5
choice: line
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: linebreak 6
choice: line
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: linebreak 7
choice: line
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: snow overlay
choice: snow
save value: false
editable: false
script: card.card_color
extra card field:
type: choice
name: vehicle overlay
choice: car door
save value: false
editable: false
extra card field:
type: choice
name: nyx overlay
choice: nyx
save value: false
editable: false
script: card.card_color
extra card field:
type: choice
name: crown
script: card.card_color
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: stripe
choice: stripe
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: paper
choice: paper
editable: false
save value: false
show statistics: false
extra card field:
type: text
name: default level 2
script: "Level 2"
editable: false
save value: false
show statistics: false
extra card field:
type: text
name: default level 3
script: "Level 3"
editable: false
save value: false
show statistics: false
extra card field:
type: text
name: default level 4
script: "Level 4"
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: custom overlay
script: card.card_color
save value: false
editable: false
extra card field:
type: choice
name: ub tweaker
choice: white
save value: false
editable: false
extra card field:
type: choice
name: ub overlay
script: card.card_color
editable: false
save value: false
extra card style:
pt box:
left: 273
top: 466
width: 81
height: 42
z index: 840
visible: { card.pt != "" and not starting_loyalty() }
render style: image
image: { module_ptbox() }
loyalty box:
right: 362
top: 466
width: 60
height: 38
z index: 840
render style: image
visible: { starting_loyalty() and card.loyalty != "" }
choice images:
loyalty: loyalty.png
stamp backing:
left: 165
top: 472
width: 46
height: 26
z index: 850
visible: { card.card_stamp != "none" }
render style: image
image: { "/magic-modules.mse-include/stamps/backs/" + (if stamp_shape(field:1) == "triangle" then "triangle_stamp.png" else "stamp.png") }
foil layer:
left: 0
top : 0
width: 375
height: 523
z index: 1050
render style: image
image: {if styling.overlay == "" then nil else styling.overlay + "/overlay.png"}
chapter 1:
left: 14
top: { if chapter1() == "" then 185 else chapter1() }
width: 30
height: 34
render style: image
z index: 840
image: {alt_chapters("1")}
visible: {not un_marked()}
chapter 2:
left: 14
top: { if chapter2() == "" then 279 else chapter2() }
width: 30
height: 34
render style: image
z index: 840
image: {alt_chapters("2")}
visible: {not un_marked()}
chapter 3:
left: 14
top: { if chapter3() == "" then 373 else chapter3() }
width: 30
height: 34
render style: image
z index: 840
image: {alt_chapters("3")}
visible: {not un_marked()}
chapter 4:
left: 14
top: { if chapter4() == "" then 600 else chapter4() }
width: 30
height: 34
render style: image
z index: 840
image: {alt_chapters("4")}
visible: {not un_marked()}
chapter 5:
left: 14
top: { if chapter5() == "" then 600 else chapter5() }
width: 30
height: 34
render style: image
z index: 840
image: {alt_chapters("5")}
visible: {not un_marked()}
chapter 6:
left: 14
top: { if chapter6() == "" then 600 else chapter6() }
width: 30
height: 34
render style: image
z index: 840
image: {alt_chapters("6")}
visible: {not un_marked()}
chapter custom:
left: 14
top: { if chapter_custom() == "" then 600 else chapter_custom() }
width: 30
height: 34
render style: image
z index: 840
image: {custom_chapter_node()}
visible: {not un_marked()}
linebreak 1:
left: {30+(if is_class() or is_case() then 158 else 0)}
top: {if is_class() or is_case() then lev0() else chapter0()}
width: 156
height: {if is_case() or is_class() then 2 else 3}
render style: image
z index: 720
image: {if is_case() then "bar.png" else if is_class() then class_bar() else "line.png"}
visible: {(is_class() and card.chapter_text != "" and card.level_1_text != "") or is_case() or not un_marked()}
linebreak 2:
left: {30+if is_class() or is_case() then 158 else 0}
top: {if is_class() or is_case() then lev2() else if split_12() == "" then 248 else split_12()-1}
width: {if is_class() and card.level_2_text == "" then 0 else 156}
height: {if is_class() or is_case() then 25 else 3}
render style: image
z index: 720
image: {if is_case() then "levelline.png" else if is_class() then class_bar() else "line.png"}
linebreak 3:
left: {30+if is_class() then 158 else 0}
top: {if is_class() then lev3() else if split_23() == "" then 342 else split_23()-1}
width: {if is_class() and card.level_3_text == "" then 0 else 156}
height: {if is_class() then 25 else 3}
render style: image
z index: 720
image: {if is_class() then class_bar() else "line.png"}
visible: {three_boxes() or four_boxes() and not is_case()}
linebreak 4:
left: {30+if is_class() then 158 else 0}
top: {if is_class() then lev4() else if split_34() == "" then 600 else split_34()-1}
width: {if is_class() and card.level_4_text == "" then 0 else 156}
height: {if is_class() then 25 else 3}
render style: image
z index: 720
image: {if is_class() then class_bar() else "line.png"}
visible: {is_class() or four_boxes() and not is_case()}
linebreak 5:
left: {30+if is_class() then 158 else 0}
top: {to_number(pull_comma_array(styling.chapter_divider_coordinates, cell:3, end:true, default:600))}
width: 156
height: 3
render style: image
z index: 720
image: line.png
visible: {four_boxes()}
linebreak 6:
left: {30+if is_class() then 158 else 0}
top: {to_number(pull_comma_array(styling.chapter_divider_coordinates, cell:4, end:true, default:600))}
width: 156
height: 3
render style: image
z index: 720
image: line.png
visible: {four_boxes()}
linebreak 7:
left: {30+if is_class() then 158 else 0}
top: {to_number(pull_comma_array(styling.chapter_divider_coordinates, cell:5, end:true, default:600))}
width: 156
height: 3
render style: image
z index: 720
image: line.png
visible: {four_boxes()}
nyx overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: {module_nyx()}
z index: 330
visible: {is_nyx()}
mask: {"trim_masks/" + (if is_vehicle() or is_snow() then "double_") + "mask.png"}
custom overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: { custom_border_blend() }
z index: 320
visible: {is_custom()}
mask: {"trim_masks/" + (if is_vehicle() or is_snow() then "double_") + "mask.png"}
snow overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: {module_snow()}
z index: 310
visible: {is_snow()}
mask: trim_masks/mask.png
vehicle overlay:
left: 0
top: 0
width: 375
height: 523
render style: image
image: { if is_beyond() then "/magic-modules.mse-include/trims/" + (if is_beyond() then "beyond/vbeyond.png" else "vehicle.png") }
mask: trim_masks/mask.png
z index: 300
visible: {is_vehicle()}
crown:
left: 0
top: 0
width: 375
height: 523
render style: image
image: {module_crown()}
z index: 840
visible: {is_legend()}
mask: {"crown_masks/" + (if is_saga() then "saga.png" else "class.png")}
bookmark:
left: 15
top: 60
width: 27
height: 372
render style: image
image: {bookmark_background()}
z index: 810
visible: {not un_marked()}
stripe:
left: 15
top: 60
width: 27
height: 372
render style: image
image: bookmark/stripe.png
z index: 820
visible: {length(write_wubrg(card.card_color))==2 and not un_marked()}
paper:
left: {if is_saga() then 28 else 186}
top: 58
width: 160
height: 380
z index: 210
render style: image
image: paper.png
default level 2:
left: 270
width: {if not is_class() or (is_class() and card.level_2_text == "") then 0 else 70}
top: {lev2()+3}
height: 20
z index: 7
font:
name: MPlantin
size: 11
weight: bold
symbol font:
name: magic-mana-small
size: 11
alignment: middle right
visible: {is_class() and card.level_2 == ""}
default level 3:
left: 270
width: {if not is_class() or (is_class() and card.level_3_text == "") then 0 else 70}
top: {lev3()+3}
height: 20
z index: 7
font:
name: MPlantin
size: 11
weight: bold
symbol font:
name: magic-mana-small
size: 11
alignment: middle right
visible: {is_class() and card.level_3 == ""}
default level 4:
left: 270
width: {if not is_class() or (is_class() and card.level_4_text == "") then 0 else 70}
top: {lev4()+3}
height: 20
z index: 7
font:
name: MPlantin
size: 11
weight: bold
symbol font:
name: magic-mana-small
size: 11
alignment: middle right
visible: {is_class() and card.level_4 == ""}
ub tweaker:
left: 0
top: 0
width: 375
height: 523
z index: 110
render style: image
visible: { is_beyond() }
image: { card_background() }
mask: {invert_image(template_prefix["card"] + "hybrid_blend_card.png") }
ub overlay:
left: 0
top: 0
width: 375
height: 523
z index: 290
render style: image
image: { beyond_background() }
mask: beyond_mask.png
visible: { is_beyond() }