Add prototype to M15 Mainframe (#165)
--------- Co-authored-by: cajun <12363371+CajunAvenger@users.noreply.github.com>
@@ -6,7 +6,7 @@ icon: card-sample.png
|
||||
installer group: magic/m15 style/normal cards
|
||||
position hint: 001
|
||||
|
||||
version: 2024-09-23
|
||||
version: 2025-10-05
|
||||
depends on:
|
||||
package: magic.mse-game
|
||||
version: 2020-04-25
|
||||
@@ -119,7 +119,9 @@ init script:
|
||||
curtains: "curtains/"
|
||||
season: "season/"
|
||||
|
||||
|
||||
proto_box: "/magic-modules.mse-include/protoboxes/box/",
|
||||
proto_cost: "/magic-modules.mse-include/protoboxes/cost/",
|
||||
proto_pt: "/magic-modules.mse-include/protoboxes/pt/"
|
||||
]
|
||||
template_suffix := [
|
||||
card: "card.jpg",
|
||||
@@ -171,7 +173,9 @@ init script:
|
||||
puma: "puma.png"
|
||||
puma_shift: "puma.png"
|
||||
|
||||
|
||||
proto_box: "box.png",
|
||||
proto_cost: "cost.png",
|
||||
proto_pt: "pt.png"
|
||||
]
|
||||
template := {
|
||||
if type_name(harder_script[type] or else nil) != type_name(nil)
|
||||
@@ -237,8 +241,11 @@ init script:
|
||||
chosen(styling.frames, choice:"frameless art")
|
||||
}
|
||||
auto_station := {
|
||||
chosen(styling.other_options, choice:"auto spacecraft") and (lang_setting("is_spacecraft")(card.sub_type) or lang_setting("is_planet")(card.sub_type))
|
||||
or (chosen(styling.frames, choice:"leveler") and sta_leveler())
|
||||
not is_prototype() and
|
||||
(
|
||||
chosen(styling.other_options, choice:"auto spacecraft") and (lang_setting("is_spacecraft")(card.sub_type) or lang_setting("is_planet")(card.sub_type))
|
||||
or (chosen(styling.frames, choice:"leveler") and sta_leveler())
|
||||
)
|
||||
}
|
||||
mini_arts := {
|
||||
chosen(styling.other_options, choice:"de-fullart special frames")
|
||||
@@ -255,12 +262,19 @@ init script:
|
||||
is_dka := {
|
||||
chosen(styling.frames, choice:"fullart") and not is_map() and not uses_clear_frame()
|
||||
}
|
||||
#### PUMA and Mutate add things on top
|
||||
#### PUMA, Mutate, Prototype add things on top
|
||||
is_puma := {
|
||||
chosen(styling.frames, choice:"puma") and not is_map() and not uses_expanded_art() and not uses_clear_frame() and not is_dka()
|
||||
}
|
||||
is_prototype := {
|
||||
chosen(styling.frames, choice:"prototype")
|
||||
}
|
||||
## use a separate box for prototype rather than adaptive
|
||||
is_snap_prototype := { is_prototype() }
|
||||
## using the pt box and not the typebar
|
||||
prototype_pt := { styling.prototype_secondary == "pt" and is_prototype() }
|
||||
is_mutate := {
|
||||
chosen(styling.frames, choice:"mutate") and not is_map()
|
||||
chosen(styling.frames, choice:"mutate") and not is_map() and not is_prototype()
|
||||
}
|
||||
mutate_image := {
|
||||
is_mutate() and not uses_expanded_art() and not is_dka() and not uses_clear_frame() and not clear_tops()
|
||||
@@ -307,7 +321,7 @@ init script:
|
||||
or (lang_setting("is_enchantment")(card.super_type) and set.auto_nyx and not auto_custom_border())
|
||||
}
|
||||
is_leveler := {
|
||||
chosen(styling.frames, choice:"leveler") or auto_station()
|
||||
not is_prototype() and (chosen(styling.frames, choice:"leveler") or auto_station())
|
||||
}
|
||||
|
||||
is_custom_border := {
|
||||
@@ -629,10 +643,10 @@ init script:
|
||||
}
|
||||
top_of_textbox := {
|
||||
(
|
||||
if is_map() then 340
|
||||
else if is_dka() and is_mutate() then 395
|
||||
else if is_dka() then 359
|
||||
if is_snap_prototype() then (if is_dka() then 359 else 329) + 8 + prototype_height()
|
||||
else if is_map() then 340
|
||||
else if is_mutate() then 395
|
||||
else if is_dka() then 359
|
||||
else 327
|
||||
) - (-chop_top()) + body_font_vertical()
|
||||
}
|
||||
@@ -672,7 +686,18 @@ init script:
|
||||
cw := if cw > 44 then (if set.print_fix != "" then set.print_fix else 22) else if cw < 22 then 22 else cw
|
||||
if card_style.rarity.width == 0 then 0 else cw
|
||||
}
|
||||
special_text := {if is_leveler() then ((if card.level_0 != "" then "[" + level_label(0) + " " + card.level_0 + "] " else "") + card.level_1_text + (if card.pt != "" and not lone_pt() then " [" + card.pt + "]" else "") + "\n"
|
||||
clean_type := replace@(match: " — $", replace:"")
|
||||
+replace@(match: " $", replace:"")
|
||||
prototype_special_text := {
|
||||
# (card.level_1_text + " " + card.casting_cost_2 + " — " + card.pt_2 + "\n" + card.level_2_text)
|
||||
inject := "<sym>" + card.casting_cost_2 + "</sym> — " + (if styling.prototype_secondary == "type" then clean_type(remove_tags(card.type_2)) else remove_tags(card.pt_2)) + " "
|
||||
hold := replace(card.level_1_text, match:"(.*)(<i(?:-auto)?>[(].*)", replace:{_1 + inject + _2})
|
||||
if hold == card.level_1_text then card.level_1_text + " " + inject else hold
|
||||
}
|
||||
special_text := {
|
||||
if is_prototype()
|
||||
then prototype_special_text() + "\n" + card.rule_text
|
||||
else if is_leveler() then ((if card.level_0 != "" then "[" + level_label(0) + " " + card.level_0 + "] " else "") + card.level_1_text + (if card.pt != "" and not lone_pt() then " [" + card.pt + "]" else "") + "\n"
|
||||
+ (if card.level_1 != "" then "[" + level_label(1) + " " + card.level_1 + "] " else "") + card.level_2_text + (if card.pt_2 != "" then " [" + card.pt_2 + "]" else "") + "\n"
|
||||
+ (if card.level_2 != "" then "[" + level_label(2) + " " + card.level_2 + "] " else "") + card.level_3_text + (if card.pt_3 != "" then " [" + card.pt_3 + "]" else "") + (if card.level_4_text != "" then "\n" else "")
|
||||
+ (if card.level_3 != "" then "[" + level_label(3) + " " + card.level_3 + "] " else "") + card.level_4_text + (if card.pt_7 != "" then " [" + card.pt_7 + "]" else "")
|
||||
@@ -890,11 +915,18 @@ init script:
|
||||
]
|
||||
swap_fonts_body_default := [
|
||||
name: {"MPlantin"},
|
||||
size: {if styling.font_cap != "" then to_number(styling.font_cap) else if is_mutate() then 12 else 14},
|
||||
size: {if styling.font_cap != "" then to_number(styling.font_cap) else if is_snap_prototype() then 11.5 else if is_mutate() then 12 else 14},
|
||||
color: {if is_map() then "black" else if is_dka() or is_fnm() or is_inverted() then "white" else "black"},
|
||||
vertical: {0},
|
||||
italic: {"MPlantin-Italic"}
|
||||
]
|
||||
swap_fonts_body2_default := [
|
||||
name: {"MPlantin"},
|
||||
size: {if styling.font_cap != "" then to_number(styling.font_cap) else if is_snap_prototype() then 11.5 else if is_mutate() then 12 else 14},
|
||||
color: {if is_map() or is_prototype() then "black" else if is_dka() or is_fnm() or is_inverted() then "white" else "black"},
|
||||
vertical: {0},
|
||||
italic: {"MPlantin-Italic"}
|
||||
]
|
||||
swap_fonts_pt_default := [
|
||||
name: {"Beleren Bold"},
|
||||
size: {if is_map() then 14 else if auto_station() then 13 else 16},
|
||||
@@ -907,6 +939,19 @@ init script:
|
||||
vertical: {0},
|
||||
italic: {""}
|
||||
]
|
||||
swap_fonts_pt2_default := [
|
||||
name: {"Beleren Bold"},
|
||||
size: {if is_prototype() then 15 else if is_map() then 14 else if auto_station() then 13 else 16},
|
||||
color: {
|
||||
if is_prototype() then "white"
|
||||
else if is_map() then "black"
|
||||
else if is_planeshifted() or is_fnm() or is_inverted() then "white"
|
||||
else if is_vehicle() or auto_station() then "white"
|
||||
else "black"
|
||||
},
|
||||
vertical: {0},
|
||||
italic: {""}
|
||||
]
|
||||
loyalty_font_size := {
|
||||
swap_font_size(
|
||||
src:styling.custom_pt_font,
|
||||
@@ -958,6 +1003,81 @@ init script:
|
||||
override_filter := replace@(match:"\\[([^\\]]+)]", replace: "<code><b><color:black>[\\1]</color></b></code>")
|
||||
text_filter := text_filter + override_clear + d20_filter + {if chosen(styling.other_options, choice:"override-style text") then override_filter(input) else input}
|
||||
|
||||
prototype_height := { 53 + to_number(pull_comma_array(styling.level_offset, cell:0, end:0)) }
|
||||
protobox_template := {
|
||||
base := template_prefix[type] + input + template_suffix[type]
|
||||
internal_crop(img:base, height:162, width:324, top:4, bottom:156, distance:prototype_height())
|
||||
}
|
||||
protocost_template := {
|
||||
base := template_prefix[type] + input + template_suffix[type]
|
||||
## double sized
|
||||
## 8 [cost min 5] 4; doubled
|
||||
dist := 2*(max(8, card_style.casting_cost_2.content_width)-3)
|
||||
internal_crop(img:base, height: 48, width: 130, left:16, right:122, distance:dist)
|
||||
}
|
||||
prototype_template := {
|
||||
base := template_prefix[type] + input + template_suffix[type]
|
||||
## double sized
|
||||
## 8 [cost min 5] 4; doubled
|
||||
dist := 2*(max(20, card_style.type_2.content_width))
|
||||
internal_crop(img:base, height: 48, width: 130, left:16, right:122, distance:dist)
|
||||
}
|
||||
prototype_box_image := {
|
||||
template := protobox_template
|
||||
land_template := protobox_template
|
||||
color_background(
|
||||
type: "proto_box",
|
||||
base_hybrid: card_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
prototype_cost_image := {
|
||||
template := protocost_template
|
||||
land_template := protocost_template
|
||||
color_background(
|
||||
type: "proto_cost",
|
||||
base_hybrid: pt_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
prototype_type_image := {
|
||||
template := prototype_template
|
||||
land_template := prototype_template
|
||||
color_background(
|
||||
type: "proto_cost",
|
||||
base_hybrid: pt_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
prototype_pt_image := {
|
||||
color_background(
|
||||
type: "proto_pt",
|
||||
base_hybrid: pt_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
|
||||
## once we combined_editor levelers
|
||||
alt_text_script := {
|
||||
if is_prototype()
|
||||
then combined_editor(
|
||||
field1: card.level_1_text,
|
||||
separator1: "<line>\n</line>",
|
||||
field2: card.rule_text,
|
||||
separator2: "<line>\n</line>",
|
||||
field3: card.flavor_text
|
||||
)
|
||||
else
|
||||
combined_editor(field1: card.rule_text, separator: "<line>\n</line>", field2: card.flavor_text)
|
||||
}
|
||||
############################################################## Set info fields
|
||||
set info style:
|
||||
symbol:
|
||||
@@ -1003,6 +1123,7 @@ styling field:
|
||||
choice: frameless art
|
||||
choice: fullart
|
||||
choice: puma
|
||||
choice: prototype
|
||||
choice: mutate
|
||||
choice: fnm promo
|
||||
choice: inverted
|
||||
@@ -1102,6 +1223,11 @@ styling field:
|
||||
type: text
|
||||
name: level offset
|
||||
description: Formatted as 1,2,3,. Move the level boxes down X pixels. Use negative to move up. For 4 equal levels, use -14,-25,-38,
|
||||
styling field:
|
||||
type: choice
|
||||
name: prototype secondary
|
||||
choice: pt
|
||||
choice: type
|
||||
include file: /magic-modules.mse-include/rarities/styling_fields
|
||||
include file: /magic-modules.mse-include/fonts/styling_fields
|
||||
styling field:
|
||||
@@ -1302,7 +1428,34 @@ card style:
|
||||
always symbol: true
|
||||
z index: 920
|
||||
padding top: 0
|
||||
|
||||
casting cost 2:
|
||||
right: 343
|
||||
top: {(if is_dka() then 359 else 329)+3}
|
||||
width: { max(30, card_style.casting_cost_2.content_width) }
|
||||
height: { if is_prototype() then 20 else 0 }
|
||||
alignment: middle right
|
||||
font:
|
||||
name: MPlantin
|
||||
size: 13
|
||||
symbol font:
|
||||
name: {styling.casting_cost_mana_symbols}
|
||||
size: 13
|
||||
alignment: middle right
|
||||
always symbol: true
|
||||
z index: 920
|
||||
padding top: 0
|
||||
type 2:
|
||||
right: 341
|
||||
bottom: { (if is_dka() then 359 else 329) + 3 + prototype_height() }
|
||||
height: { if is_prototype() and styling.prototype_secondary == "type" then 24 else 0 }
|
||||
width: { max(20, card_style.type_2.content_width) }
|
||||
z index: 920
|
||||
font:
|
||||
name: { type_font() }
|
||||
italic name: { type_font_italic() }
|
||||
size: { type_font_size() }
|
||||
color: { "white" }
|
||||
separator color: red
|
||||
############################# Image
|
||||
image:
|
||||
left:
|
||||
@@ -1442,22 +1595,22 @@ card style:
|
||||
############################# leveler
|
||||
level 1 text:
|
||||
left: { if is_leveler() and card.level_0 != "" then (if loy_leveler() then 57 else if cir_leveler() then 43 else if box_leveler() then 78 else 75) else if is_map() then 40 else 29}
|
||||
top: { if is_dka() and is_mutate() then 359 else if is_mutate() then 329 else top_of_textbox() }
|
||||
right: { if is_leveler() then (if lone_pt() or card.pt == "" then 342 else (if cir_leveler() then 291 else 287)) else if is_mutate() then 342 else if is_map() then 40 else 29}
|
||||
bottom: { if is_mutate() then 392 else if is_leveler() then (327+lv_1_height()) else bottom_of_textbox() }
|
||||
top: { if is_mutate() or is_snap_prototype() then (if is_dka() then 359 else 329) else top_of_textbox() }
|
||||
right: { if is_leveler() then (if lone_pt() or card.pt == "" then 342 else (if cir_leveler() then 291 else 287)) else if is_snap_prototype() then 290 else if is_mutate() then 342 else if is_map() then 40 else 29}
|
||||
bottom: { if is_snap_prototype() then (if is_dka() then 359+prototype_height() else 329+prototype_height()) else if is_mutate() then 392 else if is_leveler() then (327+lv_1_height()) else bottom_of_textbox() }
|
||||
font:
|
||||
font:
|
||||
name: { body_font() }
|
||||
italic name: { body_font_italic() }
|
||||
size: { body_font_size() }
|
||||
name: { body2_font() }
|
||||
italic name: { body2_font_italic() }
|
||||
size: { body2_font_size() }
|
||||
scale down to: 6
|
||||
color: { body_font_color() }
|
||||
shadow color: {if is_map() then rgba(0,0,0,0) else if is_dka() or is_fnm() then "black" else rgba(0,0,0,0)}
|
||||
color: { body2_font_color() }
|
||||
shadow color: {if is_map() or is_prototype() then rgba(0,0,0,0) else if is_dka() or is_fnm() then "black" else rgba(0,0,0,0)}
|
||||
shadow displacement x: -1
|
||||
shadow displacement y: 1
|
||||
symbol font:
|
||||
name: { styling.text_box_mana_symbols }
|
||||
size: {body_font_size()}
|
||||
size: {body2_font_size()}
|
||||
scale down to: 6
|
||||
alignment:
|
||||
script:
|
||||
@@ -1672,16 +1825,16 @@ card style:
|
||||
shadow displacement y: 1
|
||||
pt 2:
|
||||
z index: 900
|
||||
left: {leveler_pt_left()}
|
||||
top: {(l2_center() - 12 + leveler_pt_top_offset())+(if is_map() then -1 else 0)+(pt_font_vertical())}
|
||||
width: {if is_leveler() and not lone_pt() or card.pt_2 != "" then leveler_pt_width() else 0}
|
||||
height: {leveler_pt_height()}
|
||||
left: {if prototype_pt() then 300 else leveler_pt_left()}
|
||||
top: {if prototype_pt() then 307+prototype_height() else (l2_center() - 12 + leveler_pt_top_offset())+(if is_map() then -1 else 0)+(pt_font_vertical())}
|
||||
width: {if prototype_pt() then 45 else if is_leveler() and (not lone_pt() or card.pt_2 != "") then leveler_pt_width() else 0}
|
||||
height: {if prototype_pt() then 21 else leveler_pt_height()}
|
||||
alignment: center middle shrink-overflow
|
||||
font:
|
||||
name: {pt_font()}
|
||||
italic name: {pt_font_italic()}
|
||||
size: {pt_font_size()}
|
||||
color: {pt_font_color()}
|
||||
name: {pt2_font()}
|
||||
italic name: {pt2_font_italic()}
|
||||
size: {pt2_font_size()}
|
||||
color: {pt2_font_color()}
|
||||
separator color: red
|
||||
shadow color: {if is_map() then rgba(0,0,0,0) else if is_planeshifted() or is_fnm() then rgb(0,0,0) else rgba(0,0,0,0)}
|
||||
shadow displacement x: -1
|
||||
@@ -2010,7 +2163,30 @@ extra card field:
|
||||
script: card.card_color
|
||||
save value: false
|
||||
editable: false
|
||||
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype cost box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype type box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype pt box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
|
||||
extra card style:
|
||||
pt box:
|
||||
@@ -2023,14 +2199,14 @@ extra card style:
|
||||
render style: image
|
||||
image: { choose_ptbox() }
|
||||
pt box 2:
|
||||
left: {leveler_ptbox_left()}
|
||||
left: { leveler_ptbox_left()}
|
||||
top: { l2_center() - (if is_map() then 26 else 15) + leveler_ptbox_top_offset()}
|
||||
width: { if (is_leveler() and not lone_pt()) or card.pt_2 != "" then (if is_map() then 90 else leveler_ptbox_width()) else 0}
|
||||
height: { if (is_leveler() and not lone_pt()) or card.pt_2 != "" then (if is_map() then 54 else leveler_ptbox_height()) else 0}
|
||||
z index: 840
|
||||
visible: { card.pt_2 != "" }
|
||||
visible: { card.pt_2 != "" and not is_prototype() }
|
||||
render style: image
|
||||
image: {if is_map() then mappt_background() else combine_blend(image1: choose_ptbox(), image2: template_prefix["pt"]+"ptbox_multiply_1.png", combine: "multiply")}
|
||||
image: { if is_map() then mappt_background() else combine_blend(image1: choose_ptbox(), image2: template_prefix["pt"]+"ptbox_multiply_1.png", combine: "multiply")}
|
||||
pt box 3:
|
||||
left: {leveler_ptbox_left()}
|
||||
top: { l3_center() - (if is_map() then 26 else 15) + leveler_ptbox_top_offset()}
|
||||
@@ -2428,3 +2604,39 @@ extra card style:
|
||||
render style: image
|
||||
image: { if stamp_shape() == "triangle" then tri_stamp() else round_stamp() }
|
||||
z index: 850
|
||||
prototype box:
|
||||
left: 25
|
||||
top: {(if is_dka() then 359 else 329)-3}
|
||||
height: { prototype_height() + 10 }
|
||||
width: 324
|
||||
render style: image
|
||||
z index: 650
|
||||
image: { prototype_box_image() }
|
||||
visible: { is_prototype() }
|
||||
prototype cost box:
|
||||
right: 346
|
||||
top: {(if is_dka() then 359 else 329)}
|
||||
height: 24
|
||||
width: {8 + max(8, card_style.casting_cost_2.content_width)-3 + 4}
|
||||
render style: image
|
||||
z index: 650
|
||||
image: { prototype_cost_image() }
|
||||
visible: { is_prototype() }
|
||||
prototype type box:
|
||||
right: 346
|
||||
bottom: { (if is_dka() then 359 else 329) + 2 + prototype_height() }
|
||||
height: 24
|
||||
width: {8 + max(20, card_style.type_2.content_width) + 4}
|
||||
render style: image
|
||||
z index: 650
|
||||
image: { prototype_type_image() }
|
||||
visible: { is_prototype() and styling.prototype_secondary == "type" and remove_tags(card.type_2) != "" }
|
||||
prototype pt box:
|
||||
left: 291
|
||||
bottom: { 334 + prototype_height() }
|
||||
height: 32
|
||||
width: 64
|
||||
render style: image
|
||||
z index: 720
|
||||
image: { prototype_pt_image() }
|
||||
visible: { is_prototype() and styling.prototype_secondary == "pt" and card.pt_2 != "" }
|
||||
@@ -59,6 +59,9 @@ init script:
|
||||
star: "/magic-modules.mse-include/trims/star/",
|
||||
ub: "/magic-modules.mse-include/trims/beyond/",
|
||||
identity: "/magic-modules.mse-include/indicators/"
|
||||
proto_box: "/magic-modules.mse-include/protoboxes/box/",
|
||||
proto_cost: "/magic-modules.mse-include/protoboxes/cost/",
|
||||
proto_pt: "/magic-modules.mse-include/protoboxes/pt/"
|
||||
]
|
||||
template_suffix := [
|
||||
card: "card.png"
|
||||
@@ -81,6 +84,9 @@ init script:
|
||||
star: "star.png",
|
||||
beyond: "beyond.png",
|
||||
identity: "identity.png"
|
||||
proto_box: "box.png",
|
||||
proto_cost: "cost.png",
|
||||
proto_pt: "pt.png"
|
||||
]
|
||||
template := {
|
||||
if type_name(harder_script[type] or else nil) != type_name(nil)
|
||||
@@ -215,7 +221,7 @@ init script:
|
||||
combined_editor(field1: card.level_1_text, separator1: "<line>\n</line>", field2: card.level_2_text, separator2: "<line>\n</line>", field3: card.level_3_text)
|
||||
}
|
||||
margin_left := {
|
||||
if input == "lv1" then (if card.loyalty_cost_1 == "" and unindent() then 0 else 130)
|
||||
if input == "lv1" then (if is_prototype() then 0 else if card.loyalty_cost_1 == "" and unindent() then 0 else 130)
|
||||
else if input == "lv2" then (if card.loyalty_cost_2 == "" and unindent() then 0 else 130)
|
||||
else if input == "lv3" then (if card.loyalty_cost_3 == "" and unindent() then 0 else 130)
|
||||
else if input == "lv4" then (if card.loyalty_cost_4 == "" and unindent() then 0 else 130)
|
||||
@@ -224,6 +230,14 @@ init script:
|
||||
else 0
|
||||
}
|
||||
margin_top := {to_int(pull_comma_array(styling.combined_chop, cell:2, end:0, default:0))}
|
||||
margin_right := {
|
||||
if input == "lv1" and is_prototype() then (
|
||||
w := card_style.type_2.content_width or else 0
|
||||
if w < 52 then w := 52
|
||||
10*w
|
||||
)
|
||||
else 0
|
||||
}
|
||||
add_spacers := { if input == "" and inner_level(name) then "" else input}
|
||||
inner_level := {
|
||||
if input == "lv5" and max_level() > 5 then true
|
||||
@@ -262,9 +276,10 @@ init script:
|
||||
is_nyx := {chosen(styling.other_options, choice:"nyx") or (set.auto_nyx and lang_setting("is_enchantment")(card.type))}
|
||||
is_adventure := {chosen(styling.other_options, choice:"adventure") and not is_tale()}
|
||||
is_tale := {chosen(styling.other_options, choice:"reversed adventure")}
|
||||
use_adv := {is_tale() or is_adventure()}
|
||||
use_adv := {(is_tale() or is_adventure()) and not is_prototype()}
|
||||
is_snow := {chosen(styling.other_options, choice:"snow")}
|
||||
is_vehicle := {chosen(styling.other_options, choice:"vehicle")}
|
||||
is_prototype := {chosen(styling.other_options, choice:"prototype")}
|
||||
is_pinned := {chosen(styling.other_options, choice:"pride pinlines")}
|
||||
is_custom_border := {
|
||||
if chosen(styling.other_options, choice:"custom border")
|
||||
@@ -275,8 +290,15 @@ init script:
|
||||
|
||||
paragraph_count := replace@(match:"\n", replace:"~")+
|
||||
filter_text@(match:"~")
|
||||
clean_type := replace@(match: " — $", replace:"")
|
||||
+replace@(match: " $", replace:"")
|
||||
prototype_special_text := {
|
||||
inject := "<sym>" + card.casting_cost_2 + "</sym> — " + (if styling.prototype_secondary == "type" then clean_type(remove_tags(card.type_2)) else remove_tags(card.pt_2)) + " "
|
||||
hold := replace(card.level_1_text, match:"(.*)(<i(?:-auto)?>[(].*)", replace:{_1 + inject + _2})
|
||||
if hold == card.level_1_text then card.level_1_text + " " + inject else hold
|
||||
}
|
||||
special_text := {
|
||||
out := (if card.loyalty_cost_1 != "" then "[" + card.loyalty_cost_1 + "]: " else "") + (if card.level_1_text != "" and card.level_1_text != card.rule_text then card.level_1_text+"\n" else split_text(match:"\n", card.rule_text).0+"\n")
|
||||
out := (if is_prototype() then prototype_special_text() else if card.loyalty_cost_1 != "" then "[" + card.loyalty_cost_1 + "]: " else "") + (if card.level_1_text != "" and card.level_1_text != card.rule_text then card.level_1_text+"\n" else split_text(match:"\n", card.rule_text).0+"\n")
|
||||
+ (if card.loyalty_cost_2 != "" then "[" + card.loyalty_cost_2 + "]" + ": " else "") + (if card.level_2_text != "" then card.level_2_text+"\n" else if contains(paragraph_count(card.rule_text), match:"~") then split_text(match:"\n", card.rule_text).1+"\n" else "")
|
||||
+ (if card.loyalty_cost_3 != "" then "[" + card.loyalty_cost_3 + "]" + ": " else "") + (if card.level_3_text != "" then card.level_3_text+"\n" else if contains(paragraph_count(card.rule_text), match:"~~") then split_text(match:"\n", card.rule_text).2+"\n" else "")
|
||||
+ (if card.loyalty_cost_4 != "" then "[" + card.loyalty_cost_4 + "]" + ": " else "") + (if card.level_4_text != "" then card.level_4_text+"\n" else if contains(paragraph_count(card.rule_text), match:"~~~") then split_text(match:"\n", card.rule_text).3+"\n" else "")
|
||||
@@ -319,6 +341,75 @@ init script:
|
||||
popout_angle := { popout_coord(4, field:styling.popout_image_style or else "", lim:4) }
|
||||
use_popunder := { chosen(styling.other_options, choice:"popunder art") }
|
||||
watermark_include := "/magic-modules.mse-include/watermarks"
|
||||
|
||||
prototype_height := { card_style.text.layout.blocks[0].bottom or else 0 }
|
||||
proto_primary_height := {
|
||||
min(21, round_up(prototype_height()/2)+1)
|
||||
}
|
||||
proto_secondary_height := {
|
||||
remain := round_up(prototype_height()) - proto_primary_height() + if styling.prototype_secondary == "pt" then 6 else 1
|
||||
min((if styling.prototype_secondary == "type" then 21 else 28), remain)
|
||||
}
|
||||
protobox_template := {
|
||||
base := template_prefix[type] + input + template_suffix[type]
|
||||
internal_crop(img:base, height:162, width:324, top:4, bottom:156, distance:prototype_height())
|
||||
}
|
||||
protocost_template := {
|
||||
base := template_prefix[type] + input + template_suffix[type]
|
||||
## double sized
|
||||
## 8 [cost min 5] 4; doubled
|
||||
dist := 2*(max(8, card_style.casting_cost_2.content_width)-3)
|
||||
internal_crop(img:base, height: 48, width: 130, left:16, right:122, distance:dist)
|
||||
}
|
||||
prototype_template := {
|
||||
base := template_prefix[type] + input + template_suffix[type]
|
||||
## double sized
|
||||
## 8 [cost min 5] 4; doubled
|
||||
dist := 2*(max(20, card_style.type_2.content_width))
|
||||
internal_crop(img:base, height: 48, width: 130, left:16, right:122, distance:dist)
|
||||
}
|
||||
prototype_box_image := {
|
||||
template := protobox_template
|
||||
land_template := protobox_template
|
||||
color_background(
|
||||
type: "proto_box",
|
||||
base_hybrid: card_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
prototype_cost_image := {
|
||||
template := protocost_template
|
||||
land_template := protocost_template
|
||||
color_background(
|
||||
type: "proto_cost",
|
||||
base_hybrid: pt_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
prototype_type_image := {
|
||||
template := prototype_template
|
||||
land_template := prototype_template
|
||||
color_background(
|
||||
type: "proto_cost",
|
||||
base_hybrid: pt_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
prototype_pt_image := {
|
||||
color_background(
|
||||
type: "proto_pt",
|
||||
base_hybrid: pt_hybrid,
|
||||
artifact_blend: "white",
|
||||
hybrid_blend: "white",
|
||||
multicolor_blend: "black"
|
||||
)
|
||||
}
|
||||
############################################################## Set info fields
|
||||
set info style:
|
||||
symbol:
|
||||
@@ -383,6 +474,7 @@ styling field:
|
||||
choice: nyx
|
||||
choice: snow
|
||||
choice: vehicle
|
||||
choice: prototype
|
||||
choice: custom border
|
||||
choice: adventure
|
||||
choice: reversed adventure
|
||||
@@ -401,6 +493,11 @@ styling field:
|
||||
type: boolean
|
||||
name: default image size
|
||||
description: Use the default Planeswalker template image size, disable for easier popout art options.
|
||||
styling field:
|
||||
type: choice
|
||||
name: prototype secondary
|
||||
choice: pt
|
||||
choice: type
|
||||
include file: /magic-modules.mse-include/rarities/styling_fields
|
||||
styling field:
|
||||
type: boolean
|
||||
@@ -555,6 +652,7 @@ card style:
|
||||
always symbol: true
|
||||
z index: 920
|
||||
padding top: 0
|
||||
|
||||
card symbol:
|
||||
left: {if card.card_symbol=="none" then 20 else 25}
|
||||
top: 21
|
||||
@@ -754,10 +852,10 @@ card style:
|
||||
size: {12 - shrink_name2() }
|
||||
color: white
|
||||
casting cost 2:
|
||||
right: {if is_tale() then 345 else 165}
|
||||
top: {if has_four_abilities() then 288 else 323}
|
||||
right: {if is_prototype() then 345 else if is_tale() then 345 else 165}
|
||||
top: {if is_prototype() then top_of_textbox()-1 else if has_four_abilities() then 288 else 323}
|
||||
width: { max(30, card_style.casting_cost_2.content_width) + 5 }
|
||||
height: {if use_adv() then 23 else 0}
|
||||
height: {if use_adv() or is_prototype() then 23 else 0}
|
||||
alignment: middle right
|
||||
symbol font:
|
||||
name: { styling.casting_cost_mana_symbols }
|
||||
@@ -767,18 +865,31 @@ card style:
|
||||
z index: 920
|
||||
padding top: 0
|
||||
type 2:
|
||||
left: {if is_tale() then 202 else 22}
|
||||
top: {348+ shrink_type2()-(if has_four_abilities() then 36 else 0)}
|
||||
width: 151
|
||||
height: {if use_adv() then 20 else 0}
|
||||
alignment: top shrink-overflow
|
||||
z index: 900
|
||||
right: {if is_prototype() then 344 else if is_tale() then 353 else 173}
|
||||
bottom: {if is_prototype() then top_of_textbox() + prototype_height() +1 else 368+ shrink_type2()-(if has_four_abilities() then 36 else 0)}
|
||||
width: { if is_prototype() then max(20, card_style.type_2.content_width) else 151}
|
||||
height: {if is_prototype() and styling.prototype_secondary == "type" then proto_secondary_height()-1 else if use_adv() then 20 else 0}
|
||||
alignment: { if is_prototype() then "top right" else "top shrink-overflow" }
|
||||
z index: 920
|
||||
padding top: 2
|
||||
font:
|
||||
name: Beleren Bold
|
||||
size: {11-- shrink_type2()}
|
||||
color: white
|
||||
separator color: red
|
||||
pt 2:
|
||||
right: 350
|
||||
bottom: { top_of_textbox() + (card_style.text.layout.blocks[0].bottom or else 0) - 1 }
|
||||
height: { if is_prototype() and styling.prototype_secondary == "pt" then proto_secondary_height()-12 else 0 }
|
||||
width: { if is_prototype() and styling.prototype_secondary == "pt" then (2 * proto_secondary_height())-14 else 0 }
|
||||
alignment: center middle shrink-overflow
|
||||
z index: 920
|
||||
padding top: 2
|
||||
font:
|
||||
name: Beleren Bold
|
||||
size: 13
|
||||
color: white
|
||||
separator color: red
|
||||
text 2:
|
||||
left: {if is_tale() then 198 else 20 }
|
||||
top: {if has_four_abilities() then 332 else 372}
|
||||
@@ -1088,6 +1199,31 @@ extra card field:
|
||||
choice: img
|
||||
save value: false
|
||||
editable: false
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype cost box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype type box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
extra card field:
|
||||
type: choice
|
||||
name: prototype pt box
|
||||
script: card.card_color_2
|
||||
save value: false
|
||||
editable: false
|
||||
|
||||
extra card style:
|
||||
foil layer:
|
||||
left: 0
|
||||
@@ -1528,4 +1664,40 @@ extra card style:
|
||||
z index: 790
|
||||
mask: {if not use_full_art() or not is_stamped() then "black.png" else if stamp_shape() == "round" then "cut_round.png" else "cut_triangle.png"}
|
||||
image: {card.image}
|
||||
render style: image
|
||||
render style: image
|
||||
prototype box:
|
||||
left: 42
|
||||
bottom: { top_of_textbox() + (card_style.text.layout.blocks[0].bottom or else 0) + 7 }
|
||||
height: { prototype_height() + 10 }
|
||||
width: 310
|
||||
render style: image
|
||||
z index: 650
|
||||
image: { prototype_box_image() }
|
||||
visible: { is_prototype() }
|
||||
prototype cost box:
|
||||
right: 348
|
||||
top: { top_of_textbox() }
|
||||
height: { proto_primary_height() }
|
||||
width: {8 + max(8, card_style.casting_cost_2.content_width)-3 + 4}
|
||||
render style: image
|
||||
z index: 650
|
||||
image: { prototype_cost_image() }
|
||||
visible: { is_prototype() }
|
||||
prototype type box:
|
||||
right: 348
|
||||
bottom: { top_of_textbox() + (card_style.text.layout.blocks[0].bottom or else 0) + 3 }
|
||||
height: { proto_secondary_height() }
|
||||
width: {8 + max(20, card_style.type_2.content_width) + 4}
|
||||
render style: image
|
||||
z index: 650
|
||||
image: { prototype_type_image() }
|
||||
visible: { is_prototype() and styling.prototype_secondary == "type" and remove_tags(card.type_2) != "" }
|
||||
prototype pt box:
|
||||
right: 357
|
||||
bottom: { top_of_textbox() + (card_style.text.layout.blocks[0].bottom or else 0) + 6 }
|
||||
height: { proto_secondary_height() }
|
||||
width: { 2 * proto_secondary_height() }
|
||||
render style: image
|
||||
z index: 720
|
||||
image: { prototype_pt_image() }
|
||||
visible: { is_prototype() and styling.prototype_secondary == "pt" and card.pt_2 != "" }
|
||||
BIN
data/magic-modules.mse-include/protoboxes/box/abox.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/bbox.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/cbox.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/gbox.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/ibox.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/mbox.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/rbox.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/ubox.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
data/magic-modules.mse-include/protoboxes/box/wbox.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/acost.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/bcost.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/ccost.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/gcost.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/icost.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/mcost.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/rcost.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/ucost.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
data/magic-modules.mse-include/protoboxes/cost/wcost.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/apt.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/bpt.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/cpt.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/gpt.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/ipt.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/mpt.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/rpt.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/upt.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
data/magic-modules.mse-include/protoboxes/pt/wpt.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
@@ -33,7 +33,7 @@ include file: language
|
||||
include file: statistics_script
|
||||
include file: /magic-blends.mse-include/new-blends
|
||||
############################################################## Versioning
|
||||
version_date := {"2025-02-01 Template Pack 3.1.d: Mainframe Battles - Stations"}
|
||||
version_date := {"2025-02-01 Template Pack 3.1.e: Mainframe Battles - Prototype"}
|
||||
version := version_date
|
||||
############################################################## Common filters
|
||||
############################################################## Utility
|
||||
@@ -153,8 +153,8 @@ crop_safe :=
|
||||
else crop(input, offset_x: offset_x, offset_y: offset_y, width: width, height: height)
|
||||
}
|
||||
#### Crop out the middle section of an image
|
||||
internal_crop:= {
|
||||
# given input, image to crop
|
||||
internal_crop := {
|
||||
# given img, image to crop
|
||||
# given height, height of input
|
||||
# given width, width of input
|
||||
# given left/top, minimum left/top edge coordinate
|
||||
@@ -187,7 +187,6 @@ internal_crop:= {
|
||||
cut_verti := true
|
||||
)
|
||||
)
|
||||
|
||||
# rollover large distance
|
||||
internal_space := if cut_horiz then right - left else if cut_verti then bottom - top else 0
|
||||
excess_crop := 0
|
||||
|
||||