Add UNF full art basics (#118)

* Add UNF full art basics
* improve full art basics automation implementation
* fix z index on basic land symbol textbox
This commit is contained in:
GenevensiS
2025-02-05 02:51:05 +01:00
committed by GitHub
parent 2842527a7e
commit 60db39d10d
38 changed files with 794 additions and 314 deletions

View File

@@ -13,7 +13,7 @@ __More New Templates__
Thanks to GenevensiS for their continued work on keeping up with the Showcases!
• Add the Aetherdrift First Place, First Place Planeswalker, and First Place Full Art land frames. Without access to the Space Cadet font, we don't plan to make the Rude Riders variant.
• Added the MKM Magnified Showcase frame
• Added the ONE and LCI Full Art land frames
• Added the UNF, ONE, LCI Full Art land frames. Those and NEO have code to detect or manually select up to two basic types.
• Added the Mechanic Reminder frame, for things like Start your engines!
__Template Code Updates__
@@ -21,4 +21,5 @@ __Template Code Updates__
__Bug Fixes__
• Fixed a bug where hybrid Adventure pages were blending incorrectly.
• Fixed a bug where the Set tab Inverted Common Symbol wasn't working on most frames.
• Fixed a bug where the Set tab Inverted Common Symbol wasn't working on most frames.
• Fixed a bug in Full Art Lands w/Basic Land Symbol where the textbox effect wasn't displaying.

View File

@@ -801,7 +801,7 @@ extra card style:
top: 0
width: { textbox_width() }
height: { textbox_height() }
z index: 50
z index: 105
render style: image
image: { textbox_image() }
mask: { textbox_mask() }

View File

@@ -54,83 +54,85 @@ init script:
italic: {""}
]
two_types := { styling.second_land_type != "none" }
card_symbol :=
{
first := "symbol/" + type_to_letter_map[styling.land_type] + ".png"
if not two_types() then first else (
second := "symbol/" + type_to_letter_map[styling.second_land_type] + ".png"
linear_blend(
image1: first,
image2: second,
x1: 0.49, y1: 0,
x2: 0.51, y2: 0
))
land_types := [["plains"], ["island"], ["swamp"], ["mountain"], ["forest"], ["wastes"]]
land_type_of := {
result := "none"
option := if input == 2 then styling.second_land_type else styling.land_type
if option == "auto" then (
ar := break_text(card.sub_type, match:"<word-list-land>[^<]+</word-list-land>")
given := if length(ar) >= input then to_lower(remove_tags(ar[input-1])) else "none"
if input == 1 and position(of:[to_lower(card.name)], in:land_types) >= 0 then result := to_lower(card.name)
else if include_types and position(of:[given], in:land_types) >= 0 then result := given
)
else result := option
result
}@(include_types:true)
land_type_1 := { land_type_of(1, include_types:include_types) }@(include_types:true)
land_type_2 := { land_type_of(2, include_types:include_types) }@(include_types:true)
land_type_count := {
count := 0
lt1 := land_type_1()
lt2 := land_type_2()
if lt1 != "none" then count := count + 1
if lt2 != "none" and lt2 != lt1 then count := count + 1
count
}
no_types := { land_type_count() == 0 }
two_types := { land_type_count() == 2 }
card_full_name := { value }
card_full_name_default := { type_to_name_map[styling.land_type + "," + styling.second_land_type] }
name_default := { type_to_name_map[styling.land_type + "," + styling.second_land_type] }
super_type_filter_default := { (if two_types() then "" else "Basic ") + "Land" }
modified_color := {
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if t3 == "none"
then card.card_color ## double none, revert to real card color
else if t1 == "none" or t2 == "none"
then type_to_word_map[t3] ## single none, use that
else (
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
c3 := if c1 == "colorless" then c2 else c1
if c3 == "colorless"
then "colorless" ## double colorless, use that
else if c1 == "colorless" or c2 == "colorless" or c1 == c2
then c3 ## color + colorless or double color, use the color
else ( ## combine colors, multi, reverse if needed
normal_order := normal_order_map["{c1},{c2}"] or else false
"{c1}, {c2}, multicolor, horizontal" + (if not normal_order then ", reversed" else "")
)
)
}
normal_order_map := [
"white,blue": true,
"white,black": true,
"blue,black": true,
"blue,red": true,
"black,red": true,
"black,green": true,
"red,green": true,
"red,white": true,
"green,white": true,
"green,blue": true
]
super_type_filter_default := {
if two_types() then "Land" else "Basic Land"
}
sub_type_filter_default :=
{
base := to_title(styling.land_type) + (if two_types() then " " + to_title(styling.second_land_type) else "")
if base == "Wastes" then "" else base
t1 := land_type_1(include_types:false)
t2 := land_type_2(include_types:false)
if t1 == "wastes" or t1 == "none" then t1 := ""
if t2 == "wastes" or t2 == "none" then t2 := ""
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
normal_order := normal_order_map["{c1},{c2}"] or else false
lower_type := if normal_order then t1 + (if t1 != "" then " " else "") + t2
else t2 + (if t2 != "" then " " else "") + t1
to_title(lower_type)
}
type_to_name_map :=
[
"plains,none": "Plains",
"island,none": "Island",
"swamp,none": "Swamp",
"mountain,none": "Mountain",
"forest,none": "Forest",
"wastes,none": "Wastes",
"plains,wastes": "Wasted Plains",
"island,wastes": "Wasted Island",
"swamp,wastes": "Wasted Swamp",
"mountain,wastes": "Wasted Mountain",
"forest,wastes": "Wasted Forest",
"wastes,wastes": "Wastes",
"plains,plains": "Plains",
"island,plains": "Tundra",
"swamp,plains": "Scrubland",
"mountain,plains": "Plateau",
"forest,plains": "Savannah",
"wastes,plains": "Wasted Plains",
"plains,island": "Tundra",
"island,island": "Island",
"swamp,island": "Underground Sea",
"mountain,island": "Volcanic Island",
"forest,island": "Tropical Island",
"wastes,island": "Wasted Island",
"plains,swamp": "Scrubland",
"island,swamp": "Underground Sea",
"swamp,swamp": "Swamp",
"mountain,swamp": "Badlands",
"forest,swamp": "Bayou",
"wastes,swamp": "Wasted Swamp",
"plains,mountain": "Plateau",
"island,mountain": "Volcanic Island",
"swamp,mountain": "Badlands",
"mountain,mountain": "Mountain",
"forest,mountain": "Taiga",
"wastes,mountain": "Wasted Mountain",
"plains,forest": "Savannah",
"island,forest": "Tropical Island",
"swamp,forest": "Bayou",
"mountain,forest": "Taiga",
"forest,forest": "Forest",
"wastes,forest": "Wasted Forest"
]
type_to_letter_map :=
[
plains: "w",
@@ -141,16 +143,30 @@ init script:
wastes: "c",
none: "none"
]
type_to_color_map :=
[
plains: ", white",
island: ", blue",
swamp: ", black",
mountain: ", red",
forest: ", green",
wastes: "",
none: ", none"
type_to_word_map := [
plains: "white",
island: "blue",
swamp: "black",
mountain: "red",
forest: "green",
wastes: "colorless",
none: "",
"": ""
]
card_symbol :=
{
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if t1 != "none" and t2 != "none" then linear_blend(
image1: "symbol/" + type_to_letter_map[t1] + ".png",
image2: "symbol/" + type_to_letter_map[t2] + ".png",
x1: 0.49, y1: 0,
x2: 0.51, y2: 0
)
else "symbol/" + type_to_letter_map[t3] + ".png"
}
is_promo := { styling.promo }
@@ -161,7 +177,7 @@ init script:
popout_width := { split := split_comma(styling.popout_art_coordinates); if length(split) > 3 and split.2 != "" then clamp(split.2, minimum: 0, maximum: 1500) else 0 }
popout_height := { split := split_comma(styling.popout_art_coordinates); if length(split) > 3 and split.3 != "" then clamp(split.3, minimum: 0, maximum: 2000) else 0 }
mountain_symbol_offset := { if styling.second_land_type == "mountain" or styling.land_type == "mountain" then -76 else 0 }
mountain_symbol_offset := { if land_type_1() == "mountain" or land_type_2() == "mountain" then -76 else 0 }
############################################################## Extra style options
@@ -169,19 +185,8 @@ styling field:
type: choice
name: land type
description: What type is this card?
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
initial: plains
styling field:
type: choice
name: second land type
description: What type is this card?
choice:
name: none
name: auto
line below: true
choice: plains
choice: island
@@ -189,7 +194,23 @@ styling field:
choice: mountain
choice: forest
choice: wastes
initial: none
choice: none
initial: auto
styling field:
type: choice
name: second land type
description: What type is this card?
choice:
name: auto
line below: true
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
choice: none
initial: auto
styling field:
type: text
name: popout art coordinates
@@ -329,16 +350,17 @@ extra card style:
height: 49
z index: 3000
render style: image
image: { "type/" + type_to_letter_map[styling.land_type] + ".png" }
visible: { land_type_1() != "none" }
image: { "type/" + type_to_letter_map[land_type_1()] + ".png" }
second type:
left: 244
top: 857
width: 420
height: 49
z index: 3000
visible: { two_types() }
visible: { land_type_2() != "none" }
render style: image
image: { "type/" + type_to_letter_map[styling.second_land_type] + ".png" }
image: { "type/" + type_to_letter_map[land_type_2()] + ".png" }
symbol:
left: { 156 + mountain_symbol_offset() }
top: 779
@@ -355,7 +377,7 @@ extra card style:
z index: 3000
visible: { not two_types() and not styling.hide_basic_land_text }
render style: image
image: { "basic_land/" + type_to_letter_map[styling.land_type] + ".png" }
image: { "basic_land/" + type_to_letter_map[land_type_1()] + ".png" }
foil layer:
left: 0
top: 0

View File

@@ -77,93 +77,85 @@ init script:
template_prefix[type] + (if input == "a" then "c" else input) + template_suffix[type]
}
two_types := { styling.second_land_type != "none" }
card_background :=
{
first_color := "card/" + type_to_letter_map[styling.land_type] + "card.png"
if not two_types() then first_color else (
second_color := "card/" + type_to_letter_map[styling.second_land_type] + "card.png"
linear_blend(
image1: first_color,
image2: second_color,
x1: 0.3, y1: 0,
x2: 0.7, y2: 0
))
}
card_color :=
{
if not two_types() then substring(type_to_color_map[styling.land_type] + ", land", begin: 2)
else substring(type_to_color_map[styling.land_type] + type_to_color_map[styling.second_land_type] + ", land, horizontal", begin: 2)
}
card_color_filter :=
{
if not two_types() then substring(type_to_color_map[styling.land_type] + ", land", begin: 2)
else substring(type_to_color_map[styling.land_type] + type_to_color_map[styling.second_land_type] + ", land, horizontal", begin: 2)
land_types := [["plains"], ["island"], ["swamp"], ["mountain"], ["forest"], ["wastes"]]
land_type_of := {
result := "none"
option := if input == 2 then styling.second_land_type else styling.land_type
if option == "auto" then (
ar := break_text(card.sub_type, match:"<word-list-land>[^<]+</word-list-land>")
given := if length(ar) >= input then to_lower(remove_tags(ar[input-1])) else "none"
if input == 1 and position(of:[to_lower(card.name)], in:land_types) >= 0 then result := to_lower(card.name)
else if include_types and position(of:[given], in:land_types) >= 0 then result := given
)
else result := option
result
}@(include_types:true)
land_type_1 := { land_type_of(1, include_types:include_types) }@(include_types:true)
land_type_2 := { land_type_of(2, include_types:include_types) }@(include_types:true)
land_type_count := {
count := 0
lt1 := land_type_1()
lt2 := land_type_2()
if lt1 != "none" then count := count + 1
if lt2 != "none" and lt2 != lt1 then count := count + 1
count
}
no_types := { land_type_count() == 0 }
two_types := { land_type_count() == 2 }
card_full_name := { value }
card_full_name_default := { type_to_name_map[styling.land_type + "," + styling.second_land_type] }
name_default := { type_to_name_map[styling.land_type + "," + styling.second_land_type] }
super_type_filter_default := { (if two_types() then "" else "Basic ") + "Land" }
modified_color := {
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if t3 == "none"
then card.card_color ## double none, revert to real card color
else if t1 == "none" or t2 == "none"
then type_to_word_map[t3] ## single none, use that
else (
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
c3 := if c1 == "colorless" then c2 else c1
if c3 == "colorless"
then "colorless" ## double colorless, use that
else if c1 == "colorless" or c2 == "colorless" or c1 == c2
then c3 ## color + colorless or double color, use the color
else ( ## combine colors, multi, reverse if needed
normal_order := normal_order_map["{c1},{c2}"] or else false
"{c1}, {c2}, multicolor, horizontal" + (if not normal_order then ", reversed" else "")
)
)
}
normal_order_map := [
"white,blue": true,
"white,black": true,
"blue,black": true,
"blue,red": true,
"black,red": true,
"black,green": true,
"red,green": true,
"red,white": true,
"green,white": true,
"green,blue": true
]
super_type_filter_default := {
if two_types() then "Land" else "Basic Land"
}
sub_type_filter_default :=
{
base := to_title(styling.land_type) + (if two_types() then " " + to_title(styling.second_land_type) else "")
if base == "Wastes" then "" else base
t1 := land_type_1(include_types:false)
t2 := land_type_2(include_types:false)
if t1 == "wastes" or t1 == "none" then t1 := ""
if t2 == "wastes" or t2 == "none" then t2 := ""
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
normal_order := normal_order_map["{c1},{c2}"] or else false
lower_type := if normal_order then t1 + (if t1 != "" then " " else "") + t2
else t2 + (if t2 != "" then " " else "") + t1
to_title(lower_type)
}
type_to_name_map :=
[
"plains,none": "Plains",
"island,none": "Island",
"swamp,none": "Swamp",
"mountain,none": "Mountain",
"forest,none": "Forest",
"wastes,none": "Wastes",
"plains,wastes": "Wasted Plains",
"island,wastes": "Wasted Island",
"swamp,wastes": "Wasted Swamp",
"mountain,wastes": "Wasted Mountain",
"forest,wastes": "Wasted Forest",
"wastes,wastes": "Wastes",
"plains,plains": "Plains",
"island,plains": "Tundra",
"swamp,plains": "Scrubland",
"mountain,plains": "Plateau",
"forest,plains": "Savannah",
"wastes,plains": "Wasted Plains",
"plains,island": "Tundra",
"island,island": "Island",
"swamp,island": "Underground Sea",
"mountain,island": "Volcanic Island",
"forest,island": "Tropical Island",
"wastes,island": "Wasted Island",
"plains,swamp": "Scrubland",
"island,swamp": "Underground Sea",
"swamp,swamp": "Swamp",
"mountain,swamp": "Badlands",
"forest,swamp": "Bayou",
"wastes,swamp": "Wasted Swamp",
"plains,mountain": "Plateau",
"island,mountain": "Volcanic Island",
"swamp,mountain": "Badlands",
"mountain,mountain": "Mountain",
"forest,mountain": "Taiga",
"wastes,mountain": "Wasted Mountain",
"plains,forest": "Savannah",
"island,forest": "Tropical Island",
"swamp,forest": "Bayou",
"mountain,forest": "Taiga",
"forest,forest": "Forest",
"wastes,forest": "Wasted Forest"
]
type_to_letter_map :=
[
plains: "w",
@@ -174,17 +166,34 @@ init script:
wastes: "c",
none: "none"
]
type_to_color_map :=
[
plains: ", white",
island: ", blue",
swamp: ", black",
mountain: ", red",
forest: ", green",
wastes: "",
none: ", none"
type_to_word_map := [
plains: "white",
island: "blue",
swamp: "black",
mountain: "red",
forest: "green",
wastes: "colorless",
none: "",
"": ""
]
card_background :=
{
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if two_types() then (
linear_blend(
image1: "card/{type_to_letter_map[t1]}card.png",
image2: "card/{type_to_letter_map[t2]}card.png",
x1: 0.3, y1: 0,
x2: 0.7, y2: 0
)
)
else if t3 == "none"
then "card/ccard.png"
else "card/{type_to_letter_map[t3]}card.png"
}
is_promo := { styling.promo }
is_unsorted := { styling.remove_from_autocount }
@@ -198,15 +207,15 @@ init script:
{
"mask_name" +
(if two_types() then "_dual" else "") +
(if styling.second_land_type == "plains" or styling.second_land_type == "wastes" or styling.land_type == "plains" or styling.land_type == "wastes" then "_plains" else "") +
(if land_type_1() == "plains" or land_type_1() == "wastes" or land_type_2() == "plains" or land_type_2() == "wastes" then "_plains" else "") +
".png"
}
plains_symbol_offset := { if styling.second_land_type == "plains" or styling.second_land_type == "wastes" or styling.land_type == "plains" or styling.land_type == "wastes" then 150 else 0 }
plains_symbol_offset := { if land_type_1() == "plains" or land_type_1() == "wastes" or land_type_2() == "plains" or land_type_2() == "wastes" then 150 else 0 }
symbol_offset := { if two_types() then 180 else 0 }
two_two :=
{
(styling.second_land_type == "plains" or styling.second_land_type == "wastes") and (styling.land_type == "plains" or styling.land_type == "wastes")
(land_type_1() == "plains" or land_type_1() == "wastes") and (land_type_2() == "plains" or land_type_2() == "wastes")
}
############################################################## Extra style options
@@ -215,19 +224,8 @@ styling field:
type: choice
name: land type
description: What type is this card?
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
initial: plains
styling field:
type: choice
name: second land type
description: What type is this card?
choice:
name: none
name: auto
line below: true
choice: plains
choice: island
@@ -235,7 +233,23 @@ styling field:
choice: mountain
choice: forest
choice: wastes
initial: none
choice: none
initial: auto
styling field:
type: choice
name: second land type
description: What type is this card?
choice:
name: auto
line below: true
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
choice: none
initial: auto
styling field:
type: text
name: popout art coordinates
@@ -346,7 +360,7 @@ extra card field:
script:
styling.land_type
styling.second_land_type
card_color()
modified_color()
extra card field:
type: choice
name: first type
@@ -416,19 +430,20 @@ extra card style:
height: { if two_two() then 225 else 295 }
z index: 3000
render style: image
image: { recolor_image("type_" + styling.land_type + ".png", color: styling.text_color) }
visible: { land_type_1() != "none" }
image: { recolor_image("type_" + land_type_1() + ".png", color: styling.text_color) }
second type:
left: { if two_two() then 91 else 76 }
top: { 272 + (if styling.land_type == "plains" or styling.land_type == "wastes" then 140 else 0) - (if two_two() then 70 else 0) }
width: { if two_two() then 130 else 160 }
height: { if two_two() then 225 else 295 }
z index: 3000
visible: { two_types() }
visible: { land_type_2() != "none" }
render style: image
image: { recolor_image("type_" + styling.second_land_type + ".png", color: styling.text_color) }
image: { recolor_image("type_" + land_type_2() + ".png", color: styling.text_color) }
type separator:
left: 76
top: { 240 + (if styling.land_type == "plains" or styling.land_type == "wastes" then 136 else 0) - (if two_two() then 68 else 0) }
top: { 240 + (if land_type_1() == "plains" or land_type_1() == "wastes" then 136 else 0) - (if two_two() then 68 else 0) }
width: 160
height: 30
z index: 3000
@@ -442,16 +457,17 @@ extra card style:
height: 164
z index: 3000
render style: image
image: { recolor_image("symbol_" + styling.land_type + ".png", color: styling.text_color) }
visible: { land_type_1() != "none" }
image: { recolor_image("symbol_" + land_type_1() + ".png", color: styling.text_color) }
second symbol:
left: 76
top: { 401 + plains_symbol_offset() + symbol_offset() }
width: 160
height: 164
z index: 3000
visible: { two_types() }
visible: { land_type_2() != "none" }
render style: image
image: { recolor_image("symbol_" + styling.second_land_type + ".png", color: styling.text_color) }
image: { recolor_image("symbol_" + land_type_2() + ".png", color: styling.text_color) }
foil layer:
left: 0
top: 0

View File

@@ -54,83 +54,85 @@ init script:
italic: {""}
]
two_types := { styling.second_land_type != "none" }
card_symbol :=
{
first := "symbol/" + type_to_letter_map[styling.land_type] + ".png"
if not two_types() then first else (
second := "symbol/" + type_to_letter_map[styling.second_land_type] + ".png"
linear_blend(
image1: first,
image2: second,
x1: 0.49, y1: 0,
x2: 0.51, y2: 0
))
land_types := [["plains"], ["island"], ["swamp"], ["mountain"], ["forest"], ["wastes"]]
land_type_of := {
result := "none"
option := if input == 2 then styling.second_land_type else styling.land_type
if option == "auto" then (
ar := break_text(card.sub_type, match:"<word-list-land>[^<]+</word-list-land>")
given := if length(ar) >= input then to_lower(remove_tags(ar[input-1])) else "none"
if input == 1 and position(of:[to_lower(card.name)], in:land_types) >= 0 then result := to_lower(card.name)
else if include_types and position(of:[given], in:land_types) >= 0 then result := given
)
else result := option
result
}@(include_types:true)
land_type_1 := { land_type_of(1, include_types:include_types) }@(include_types:true)
land_type_2 := { land_type_of(2, include_types:include_types) }@(include_types:true)
land_type_count := {
count := 0
lt1 := land_type_1()
lt2 := land_type_2()
if lt1 != "none" then count := count + 1
if lt2 != "none" and lt2 != lt1 then count := count + 1
count
}
no_types := { land_type_count() == 0 }
two_types := { land_type_count() == 2 }
card_full_name := { value }
card_full_name_default := { type_to_name_map[styling.land_type + "," + styling.second_land_type] }
name_default := { type_to_name_map[styling.land_type + "," + styling.second_land_type] }
super_type_filter_default := { (if two_types() then "" else "Basic ") + "Land" }
modified_color := {
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if t3 == "none"
then card.card_color ## double none, revert to real card color
else if t1 == "none" or t2 == "none"
then type_to_word_map[t3] ## single none, use that
else (
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
c3 := if c1 == "colorless" then c2 else c1
if c3 == "colorless"
then "colorless" ## double colorless, use that
else if c1 == "colorless" or c2 == "colorless" or c1 == c2
then c3 ## color + colorless or double color, use the color
else ( ## combine colors, multi, reverse if needed
normal_order := normal_order_map["{c1},{c2}"] or else false
"{c1}, {c2}, multicolor, horizontal" + (if not normal_order then ", reversed" else "")
)
)
}
normal_order_map := [
"white,blue": true,
"white,black": true,
"blue,black": true,
"blue,red": true,
"black,red": true,
"black,green": true,
"red,green": true,
"red,white": true,
"green,white": true,
"green,blue": true
]
super_type_filter_default := {
if two_types() then "Land" else "Basic Land"
}
sub_type_filter_default :=
{
base := to_title(styling.land_type) + (if two_types() then " " + to_title(styling.second_land_type) else "")
if base == "Wastes" then "" else base
t1 := land_type_1(include_types:false)
t2 := land_type_2(include_types:false)
if t1 == "wastes" or t1 == "none" then t1 := ""
if t2 == "wastes" or t2 == "none" then t2 := ""
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
normal_order := normal_order_map["{c1},{c2}"] or else false
lower_type := if normal_order then t1 + (if t1 != "" then " " else "") + t2
else t2 + (if t2 != "" then " " else "") + t1
to_title(lower_type)
}
type_to_name_map :=
[
"plains,none": "Plains",
"island,none": "Island",
"swamp,none": "Swamp",
"mountain,none": "Mountain",
"forest,none": "Forest",
"wastes,none": "Wastes",
"plains,wastes": "Wasted Plains",
"island,wastes": "Wasted Island",
"swamp,wastes": "Wasted Swamp",
"mountain,wastes": "Wasted Mountain",
"forest,wastes": "Wasted Forest",
"wastes,wastes": "Wastes",
"plains,plains": "Plains",
"island,plains": "Tundra",
"swamp,plains": "Scrubland",
"mountain,plains": "Plateau",
"forest,plains": "Savannah",
"wastes,plains": "Wasted Plains",
"plains,island": "Tundra",
"island,island": "Island",
"swamp,island": "Underground Sea",
"mountain,island": "Volcanic Island",
"forest,island": "Tropical Island",
"wastes,island": "Wasted Island",
"plains,swamp": "Scrubland",
"island,swamp": "Underground Sea",
"swamp,swamp": "Swamp",
"mountain,swamp": "Badlands",
"forest,swamp": "Bayou",
"wastes,swamp": "Wasted Swamp",
"plains,mountain": "Plateau",
"island,mountain": "Volcanic Island",
"swamp,mountain": "Badlands",
"mountain,mountain": "Mountain",
"forest,mountain": "Taiga",
"wastes,mountain": "Wasted Mountain",
"plains,forest": "Savannah",
"island,forest": "Tropical Island",
"swamp,forest": "Bayou",
"mountain,forest": "Taiga",
"forest,forest": "Forest",
"wastes,forest": "Wasted Forest"
]
type_to_letter_map :=
[
plains: "w",
@@ -141,16 +143,31 @@ init script:
wastes: "c",
none: "none"
]
type_to_color_map :=
[
plains: ", white",
island: ", blue",
swamp: ", black",
mountain: ", red",
forest: ", green",
wastes: "",
none: ", none"
type_to_word_map := [
plains: "white",
island: "blue",
swamp: "black",
mountain: "red",
forest: "green",
wastes: "colorless",
none: "",
"": ""
]
card_symbol :=
{
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if t1 != "none" and t2 != "none" then linear_blend(
image1: "symbol/" + type_to_letter_map[t1] + ".png",
image2: "symbol/" + type_to_letter_map[t2] + ".png",
x1: 0.49, y1: 0,
x2: 0.51, y2: 0
)
else if t3 == "none" then ""
else "symbol/" + type_to_letter_map[t3] + ".png"
}
is_promo := { styling.promo }
@@ -169,19 +186,8 @@ styling field:
type: choice
name: land type
description: What type is this card?
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
initial: plains
styling field:
type: choice
name: second land type
description: What type is this card?
choice:
name: none
name: auto
line below: true
choice: plains
choice: island
@@ -189,7 +195,23 @@ styling field:
choice: mountain
choice: forest
choice: wastes
initial: none
choice: none
initial: auto
styling field:
type: choice
name: second land type
description: What type is this card?
choice:
name: auto
line below: true
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
choice: none
initial: auto
styling field:
type: text
name: popout art coordinates
@@ -312,21 +334,22 @@ extra card style:
mask: { if card.card_stamp == "universes beyond" then "mask_stamp_background_border_triangle.png" else "mask_stamp_background_border.png" }
first type:
left: 101
top: { if two_types() and styling.second_land_type != "wastes" then 735 else 840 }
top: { if two_types() and land_type_2() != "wastes" then 735 else 840 }
width: 543
height: 100
z index: 3000
render style: image
image: { "type/" + type_to_letter_map[styling.land_type] + ".png" }
visible: { land_type_1() != "none" }
image: { "type/" + type_to_letter_map[land_type_1()] + ".png" }
second type:
left: 101
top: 840
width: 543
height: 100
z index: 3000
visible: { two_types() }
visible: { land_type_2() != "none" }
render style: image
image: { "type/" + type_to_letter_map[styling.second_land_type] + ".png" }
image: { "type/" + type_to_letter_map[land_type_2()] + ".png" }
symbol:
left: 175
top: 255

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,418 @@
mse version: 2.1.2
game: magic
short name: UNF Basics
full name: Unfinity Full Art
icon: card_sample.png
position hint: 099
version: 2024-05-20
depends on:
package: magic.mse-game
version: 2014-06-25
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-modules.mse-include
version: 2024-10-01
depends on:
package: magic-mainframe-extras.mse-include
version: 2007-09-23
card width: 744
card height: 1039
card dpi: 297
### blanks by GenevensiS
### code by GenevensiS
############################################################## Extra scripts
init script:
typeline_disabled_1 := { styling.hide_type_text }
swap_fonts_type_default :=
[
name: {"Beleren Bold"},
size: {26.5},
color: { if styling.hide_type_text then rgba(0,0,0,0) else rgb(0,0,0) },
vertical: {0},
italic: {""}
]
nameline_offset_top_1 := { 1 }
casting_cost_offset_top_1 := { 1 }
transform_symbol_disabled_1 := { true }
card_symbol_disabled_1 := { true }
swap_fonts_name_default :=
[
name: {"Beleren Bold"},
size: {30.0},
color: {"white"},
vertical: {0},
italic: {""}
]
land_types := [["plains"], ["island"], ["swamp"], ["mountain"], ["forest"], ["wastes"]]
land_type_of := {
result := "none"
option := if input == 2 then styling.second_land_type else styling.land_type
if option == "auto" then (
ar := break_text(card.sub_type, match:"<word-list-land>[^<]+</word-list-land>")
given := if length(ar) >= input then to_lower(remove_tags(ar[input-1])) else "none"
if input == 1 and position(of:[to_lower(card.name)], in:land_types) >= 0 then result := to_lower(card.name)
else if include_types and position(of:[given], in:land_types) >= 0 then result := given
)
else result := option
result
}@(include_types:true)
land_type_1 := { land_type_of(1, include_types:include_types) }@(include_types:true)
land_type_2 := { land_type_of(2, include_types:include_types) }@(include_types:true)
land_type_count := {
count := 0
lt1 := land_type_1()
lt2 := land_type_2()
if lt1 != "none" then count := count + 1
if lt2 != "none" and lt2 != lt1 then count := count + 1
count
}
no_types := { land_type_count() == 0 }
two_types := { land_type_count() == 2 }
modified_color := {
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if t3 == "none"
then card.card_color ## double none, revert to real card color
else if t1 == "none" or t2 == "none"
then type_to_word_map[t3] ## single none, use that
else (
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
c3 := if c1 == "colorless" then c2 else c1
if c3 == "colorless"
then "colorless" ## double colorless, use that
else if c1 == "colorless" or c2 == "colorless" or c1 == c2
then c3 ## color + colorless or double color, use the color
else ( ## combine colors, multi, reverse if needed
normal_order := normal_order_map["{c1},{c2}"] or else false
"{c1}, {c2}, multicolor, horizontal" + (if not normal_order then ", reversed" else "")
)
)
}
normal_order_map := [
"white,blue": true,
"white,black": true,
"blue,black": true,
"blue,red": true,
"black,red": true,
"black,green": true,
"red,green": true,
"red,white": true,
"green,white": true,
"green,blue": true
]
template := { type + "/" + input + ".png" }
land_template := { type + "/" + (if input == "a" then "c" else input) + ".png" }
card_background := { color_background(input: modified_color(), type: "card", base_hybrid: card_hybrid, multicolor_blend: "white", hybrid_blend: "white", artifact_blend: "white") }
card_stamp := { color_background(input: modified_color(), type: "stamp", base_hybrid: card_hybrid, multicolor_blend: "white", hybrid_blend: "white", artifact_blend: "white") }
card_symbol :=
{
t1 := land_type_1()
t2 := land_type_2()
t3 := if t1 == "none" then t2 else t1
if t1 != "none" and t2 != "none" then linear_blend(
image1: "symbol/" + type_to_letter_map[t1] + ".png",
image2: "symbol/" + type_to_letter_map[t2] + ".png",
x1: 0.50, y1: 0,
x2: 0.51, y2: 0
)
else "symbol/" + type_to_letter_map[t3] + ".png"
}
super_type_filter_default := {
if two_types() then "Land" else "Basic Land"
}
sub_type_filter_default :=
{
t1 := land_type_1(include_types:false)
t2 := land_type_2(include_types:false)
if t1 == "wastes" or t1 == "none" then t1 := ""
if t2 == "wastes" or t2 == "none" then t2 := ""
c1 := type_to_word_map[t1]
c2 := type_to_word_map[t2]
normal_order := normal_order_map["{c1},{c2}"] or else false
lower_type := if normal_order then t1 + (if t1 != "" then " " else "") + t2
else t2 + (if t2 != "" then " " else "") + t1
to_title(lower_type)
}
type_to_letter_map :=
[
plains: "w",
island: "u",
swamp: "b",
mountain: "r",
forest: "g",
wastes: "c",
none: "none"
]
type_to_word_map := [
plains: "white",
island: "blue",
swamp: "black",
mountain: "red",
forest: "green",
wastes: "colorless",
none: "",
"": ""
]
is_promo := { styling.promo }
is_unsorted := { styling.remove_from_autocount }
popout_left := { split := split_comma(styling.popout_art_coordinates); if length(split) > 3 and split.0 != "" then clamp(split.0, minimum: -500, maximum: 800) else 0 }
popout_top := { split := split_comma(styling.popout_art_coordinates); if length(split) > 3 and split.1 != "" then clamp(split.1, minimum: -500, maximum: 1100) else 0 }
popout_width := { split := split_comma(styling.popout_art_coordinates); if length(split) > 3 and split.2 != "" then clamp(split.2, minimum: 0, maximum: 1500) else 0 }
popout_height := { split := split_comma(styling.popout_art_coordinates); if length(split) > 3 and split.3 != "" then clamp(split.3, minimum: 0, maximum: 2000) else 0 }
art_left := { 0 }
art_top := { 0 }
art_width := { stylesheet.card_width }
art_height := { if styling.stretch_art_to_whole_card then stylesheet.card_height + 1 else 955 }
art_mask :=
{
t1 := land_type_1()
t2 := land_type_2()
base := if t1 == "none" and t2 == "none" then "image_mask.png" else "image_mask_symbol.png"
crop(base, offset_x: art_left(), offset_y: art_top(), width: art_width(), height: art_height())
}
############################################################## Extra style options
styling field:
type: choice
name: land type
description: What type is this card?
choice:
name: auto
line below: true
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
choice: none
initial: auto
styling field:
type: choice
name: second land type
description: What type is this card?
choice:
name: auto
line below: true
choice: plains
choice: island
choice: swamp
choice: mountain
choice: forest
choice: wastes
choice: none
initial: auto
styling field:
type: text
name: popout art coordinates
description: The coordinates for the popout image field. Formatted as "left,top,width,height". Used to make the illustration jump in front of the frame.
styling field:
type: boolean
name: stretch art to whole card
description: Make the image span the whole card instead of just the visible part? Use this to help make popout effects.
initial: no
styling field:
type: text
name: namebox opacity percentage
description: Set the opacity percentage for the namebox. Opaque is 100, transparent is 0, default is 80.
styling field:
type: boolean
name: hide type text
description: Make the typeline visible to edit it, then turn it back invisible.
initial: yes
styling field:
type: package choice
name: overlay
description: Should there be an overlay applied, such as foil?
match: magic-overlay-*.mse-include
required: false
include file: /magic-modules.mse-include/information/styling_fields
############################################################## Card fields
include file: /magic-modules.mse-include/information/card_fields
include file: /magic-modules.mse-include/stamps/card_fields
include file: /magic-modules.mse-include/corners/card_fields
include file: /magic-modules.mse-include/namelines/card_fields
include file: /magic-modules.mse-include/typelines/card_fields
card style:
############################# Background stuff
border color:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 100
mask: border_mask.png
card color:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 210
popup style: in place
render style: image
image: { card_background() }
mask: card_mask.png
############################# Image
image:
left: { art_left() }
top: { art_top() }
width: { art_width() }
bottom: { art_height() }
z index: 0
mask: { art_mask() }
mainframe image:
left: { popout_left() }
top: { popout_top() }
width: { popout_width() }
height: { popout_height() }
z index: 1010
############################################################## Extra card fields
extra card field:
type: choice
name: card stamp rim
editable: false
save value: false
show statistics: false
choice: card stamp rim
extra card field:
type: color
name: card stamp border
script: card.border_color
editable: false
save value: false
show statistics: false
extra card field:
type: color
name: namebox border
script: card.border_color
editable: false
save value: false
show statistics: false
extra card field:
type: choice
name: namebox background
editable: false
save value: false
show statistics: false
choice: namebox background
extra card field:
type: choice
name: namebox shadow
editable: false
save value: false
show statistics: false
choice: namebox shadow
extra card field:
type: choice
name: symbol
editable: false
save value: false
show statistics: false
choice: symbol
extra card field:
type: choice
name: foil layer
editable: false
save value: false
show statistics: false
choice: foil layer
extra card style:
card stamp rim:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 230
visible: { is_stamped() }
render style: image
image: { card_stamp() }
card stamp border:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 220
visible: { is_stamped() }
mask: border_mask_stamp.png
namebox border:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 220
mask: border_mask_namebox.png
namebox background:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 110
popup style: in place
render style: image
image: { set_alpha("namebox_background.png", alpha: get_alpha_percentage(styling.namebox_opacity_percentage, default: 80)) }
namebox shadow:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 100
popup style: in place
render style: image
image: namebox_shadow.png
symbol:
left: 129
top: 732
width: 486
height: 186
z index: 3000
visible: { not no_types() }
render style: image
image: { card_symbol() }
foil layer:
left: 0
top: 0
width: { stylesheet.card_width }
height: { stylesheet.card_height }
z index: 1050
visible: { styling.overlay != "none" and styling.overlay != "" }
render style: image
image: { if styling.overlay == "" then "" else styling.overlay + "/overlay.png" }

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

@@ -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.a: Mainframe Battles"}
version_date := {"2025-02-01 Template Pack 3.1.b: Mainframe Battles - Full Art Basics"}
version := version_date
############################################################## Common filters
############################################################## Utility