diff --git a/Template Creation Tutorial.odt b/Template Creation Tutorial.odt
new file mode 100644
index 000000000..aec2b34b0
Binary files /dev/null and b/Template Creation Tutorial.odt differ
diff --git a/data/magic-m15-altered.mse-style/style b/data/magic-m15-altered.mse-style/style
index eb47dd40c..6ceda9330 100644
--- a/data/magic-m15-altered.mse-style/style
+++ b/data/magic-m15-altered.mse-style/style
@@ -639,7 +639,7 @@ 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 != "" then " [" + card.pt + "]" else "") + "\n"
+ 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"
+ (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 "")
diff --git a/data/magic-m15-full-art-basic-land-symbol.mse-style/basicsymbol/cbasicsymbol.png b/data/magic-m15-full-art-basic-land-symbol.mse-style/basicsymbol/cbasicsymbol.png
new file mode 100644
index 000000000..3fda5cd2d
Binary files /dev/null and b/data/magic-m15-full-art-basic-land-symbol.mse-style/basicsymbol/cbasicsymbol.png differ
diff --git a/data/magic-m15-full-art-basic-land-symbol.mse-style/style b/data/magic-m15-full-art-basic-land-symbol.mse-style/style
index 487cd29bc..9e6e9dda8 100644
--- a/data/magic-m15-full-art-basic-land-symbol.mse-style/style
+++ b/data/magic-m15-full-art-basic-land-symbol.mse-style/style
@@ -123,15 +123,28 @@ init script:
guild_mana := { styling.use_guild_mana_symbols }
ancestral_mana := { styling.use_ancestral_mana_symbols }
- is_land := match@(match: "(?i)Land")
- is_basic := match@(match: "(?i)Basic")
- is_plains := match@(match: "(?i)Plains")
- is_island := match@(match: "(?i)Island")
- is_swamp := match@(match: "(?i)Swamp")
- is_mountain := match@(match: "(?i)Mountain")
- is_forest := match@(match: "(?i)Forest")
+ is_land := lang_setting("is_land")
+ is_basic := lang_setting("is_basic")
+ is_plains := lang_setting("is_plains")
+ is_island := lang_setting("is_island")
+ is_swamp := lang_setting("is_swamp")
+ is_mountain := lang_setting("is_mountain")
+ is_forest := lang_setting("is_forest")
+ is_wastes := lang_setting("is_wastes")
- is_basic_symboled := { styling.basic_land_symbol and is_basic(card.super_type) and is_land(card.super_type) and (is_plains(card.sub_type) or is_island(card.sub_type) or is_swamp(card.sub_type) or is_mountain(card.sub_type) or is_forest(card.sub_type)) }
+ is_basic_symboled := {
+ styling.basic_land_symbol
+ and is_basic(card.super_type)
+ and is_land(card.super_type)
+ and (
+ is_plains(card.sub_type)
+ or is_island(card.sub_type)
+ or is_swamp(card.sub_type)
+ or is_mountain(card.sub_type)
+ or is_forest(card.sub_type)
+ or is_wastes(card.name)
+ )
+ }
is_promo := { styling.promo }
diff --git a/data/magic-m15-mainframe-dfc.mse-style/style b/data/magic-m15-mainframe-dfc.mse-style/style
index c4074c598..9f1fa5eb1 100644
--- a/data/magic-m15-mainframe-dfc.mse-style/style
+++ b/data/magic-m15-mainframe-dfc.mse-style/style
@@ -1533,6 +1533,10 @@ init script:
}
flavor_bar_disabled_1 := { mainframe_walker() or a_saga() or not set.use_flavor_bar }
flavor_bar_disabled_2 := { mainframe_walkerb() or b_saga() or not set.use_flavor_bar }
+ name_transform_symbol_shift := {
+ map := face_coordinates_map(face)
+ 29 * (min(map.width, map.height)/375) + offset
+ }
watermark_include := "/magic-modules.mse-include/watermarks"
############################################################## Set info fields
@@ -1966,7 +1970,7 @@ card style:
mask: { back_frame_mask() }
############################# Name line
name:
- left: { if front_map() then 65 else if front_normal() then 58 else 62 }
+ left: { if front_map() then 65 else if front_normal() then (if card.card_symbol == "none" then 58 else 78) else if card.card_symbol == "none" then 62 else 79 }
top: { if front_map() then 27 else if front_normal() then 30 else 22 }
right: { (if front_map() then 344 else 339) - card_style.casting_cost.content_width }
height: { 23 - (0.5 * shrink_name()) }
@@ -1979,7 +1983,7 @@ card style:
size: { name_font_size() }
color: { name_font_color() }
name 2:
- left: { if back_map() then 442 else if back_normal() then 435 else 439 }
+ left: { if back_map() then 442 else if back_normal() then ( if card.card_symbol_2 == "none" then 435 else 455) else if card.card_symbol_2 == "none" then 456 else 439 }
top: { (if back_map() then 27 else if back_normal() then 30 else 22) - 0.5*shrink_name2() }
right: { (if back_map() then 719 else 714) - card_style.casting_cost_2.content_width }
height: { 23 - (0.5 * shrink_name2()) }
diff --git a/data/magic-m15-mainframe-planeswalker.mse-style/style b/data/magic-m15-mainframe-planeswalker.mse-style/style
index b373e72d0..2826a05f1 100644
--- a/data/magic-m15-mainframe-planeswalker.mse-style/style
+++ b/data/magic-m15-mainframe-planeswalker.mse-style/style
@@ -266,6 +266,12 @@ init script:
is_snow := {chosen(styling.other_options, choice:"snow")}
is_vehicle := {chosen(styling.other_options, choice:"vehicle")}
is_pinned := {chosen(styling.other_options, choice:"pride pinlines")}
+ is_custom_border := {
+ chosen(styling.other_options, choice:"custom border")
+ and contains(styling.custom_border_source, match:".png")
+ }
+ custom_border_blend := { color_background(type:"custom_border", base_hybrid:card_hybrid) }
+
paragraph_count := replace@(match:"\n", replace:"~")+
filter_text@(match:"~")
special_text := {
@@ -376,11 +382,16 @@ styling field:
choice: nyx
choice: snow
choice: vehicle
+ choice: custom border
choice: adventure
choice: reversed adventure
choice: pride pinlines
choice: popunder art
initial: un-indent nonloyalty abilities
+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: text
name: custom mask
@@ -539,7 +550,7 @@ card style:
z index: 920
padding top: 0
card symbol:
- left: {if card.card_symbol=="none" then 20 else 29}
+ left: {if card.card_symbol=="none" then 20 else 25}
top: 21
height: 21
width: 23
@@ -977,6 +988,12 @@ extra card field:
choice: car door
save value: false
editable: false
+extra card field:
+ type: choice
+ name: custom overlay
+ choice: car door
+ save value: false
+ editable: false
extra card field:
type: choice
name: snow overlay
@@ -1413,7 +1430,7 @@ extra card style:
image: {module_nyx()}
z index: 330
visible: {is_nyx()}
- mask: {"trim_masks/" + (if has_four_abilities() then "4") + "pw" + (if is_vehicle() then "_v") + "_mask.png"}
+ mask: {"trim_masks/" + (if has_four_abilities() then "4") + "pw" + (if is_vehicle() or is_custom_border() then "_v") + "_mask.png"}
snow overlay:
left: 0
top: 0
@@ -1423,7 +1440,7 @@ extra card style:
image: {module_snow()}
z index: 320
visible: {is_snow()}
- mask: {"trim_masks/" + (if has_four_abilities() then "4") + "pw" + (if is_vehicle() then "_v") + "_mask.png"}
+ mask: {"trim_masks/" + (if has_four_abilities() then "4") + "pw" + (if is_vehicle() or is_custom_border() then "_v") + "_mask.png"}
vehicle overlay:
left: 0
top: 0
@@ -1432,8 +1449,18 @@ extra card style:
render style: image
image: full_voverlay.png
z index: 310
- mask: {"trim_masks/" + (if has_four_abilities() then "4") + "pw_mask.png"}
+ mask: {"trim_masks/" + (if has_four_abilities() then "4") + "pw" + (if is_custom_border() then "_v") + "_mask.png"}
visible: {is_vehicle()}
+ custom overlay:
+ left: 0
+ top: 0
+ width: 375
+ height: 523
+ render style: image
+ image: { custom_border_blend() }
+ z index: 317
+ mask: {"trim_masks/" + (if has_four_abilities() then "4") + "pw_mask.png"}
+ visible: { is_custom_border() }
pride pin:
left: { if not is_pinned() then 0 else 19}
top: { if not is_pinned() then 0 else 51}
diff --git a/data/magic-m15-mainframe-tokens.mse-style/style b/data/magic-m15-mainframe-tokens.mse-style/style
index 732a7ba5c..59c60bfa3 100644
--- a/data/magic-m15-mainframe-tokens.mse-style/style
+++ b/data/magic-m15-mainframe-tokens.mse-style/style
@@ -6,7 +6,7 @@ icon: card-sample.png
installer group: magic/m15 style/tokens
position hint: 004
-version: 2024-09-03
+version: 2025-01-11
depends on:
package: magic.mse-game
version: 2014-06-25
@@ -228,6 +228,11 @@ init script:
then module_stamp()
else "/magic-modules.mse-include/stamps/backs/" + (if sh == "triangle" then "triangle_stamp.png" else "stamp.png")
}
+ is_custom_border := {
+ chosen(styling.frames, choice:"custom border")
+ and contains(styling.custom_border_source, match:".png")
+ }
+ custom_border_blend := { color_background(type:"custom_border", base_hybrid:card_hybrid) }
watermark_include := "/magic-modules.mse-include/watermarks"
############################################################## Set info fields
set info style:
@@ -253,6 +258,11 @@ styling field:
choice: nyx
choice: snow
choice: vehicle
+ choice: custom border
+styling field:
+ type: text
+ name: custom border source
+ description: Use this file from magic-mainframe-extras as a custom vehicle-like frame. if colored, name images like "wborder.png" and put "-color-border.png" here.
styling field:
type: multiple choice
name: auto frames
@@ -486,7 +496,7 @@ card style:
top: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).1 else "0"}
width: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).2 else "0"}
height: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).3 else "0"}
- z index: 8
+ z index: 1010
############################# Card type
type:
left: 32
@@ -712,6 +722,12 @@ extra card field:
choice: plate
save value: false
editable: false
+extra card field:
+ type: choice
+ name: custom overlay
+ choice: plate
+ save value: false
+ editable: false
extra card field:
type: text
name: vorthos box
@@ -856,6 +872,16 @@ extra card style:
image: voverlay.png
mask: {"v_" + (if is_nyx() or is_snow() then "nyx_" else "") + if is_tall() then "tall_mask.png" else if is_textless() then "short_mask.png" else "mid_mask.png"}
visible: { is_vehicle() }
+ vehicle overlay:
+ left: 15
+ top: 15
+ width: 345
+ height: 471
+ z index: 1
+ render style: image
+ image: {custom_border_blend()}
+ mask: {"v_" + (if is_nyx() or is_snow() then "nyx_" else "") + if is_tall() then "tall_mask.png" else if is_textless() then "short_mask.png" else "mid_mask.png"}
+ visible: { is_custom_border() }
vorthos box:
right: { if card.pt != "" then 275 else 350 }
top: 488
diff --git a/data/magic-m15-meld-3in1.mse-style/style b/data/magic-m15-meld-3in1.mse-style/style
index ac83dc224..99ad03486 100644
--- a/data/magic-m15-meld-3in1.mse-style/style
+++ b/data/magic-m15-meld-3in1.mse-style/style
@@ -88,7 +88,6 @@ init script:
# This will create two seperate card faces
card_background2 := { color_background(type:"card2", base_hybrid:card_hybrid) }
- card_ptbox2 := { color_background(type:"pt2", base_hybrid:pt_hybrid) }
# Use the normal tap symbol
mana_t := {
@@ -824,7 +823,7 @@ extra card style:
z index: 840
visible: { card.pt_2 != "" and styling.three_cards == "yes"}
render style: image
- image: { card_ptbox2() }
+ image: { card_ptbox() }
pt box 3:
left: 464
top: 466
diff --git a/data/magic-m15-planeswalker-extra-purple.mse-style/game_scripts b/data/magic-m15-planeswalker-extra-purple.mse-style/game_scripts
index 879e0d201..80213d90c 100644
--- a/data/magic-m15-planeswalker-extra-purple.mse-style/game_scripts
+++ b/data/magic-m15-planeswalker-extra-purple.mse-style/game_scripts
@@ -405,13 +405,25 @@
replace: { _1 + to_upper(_2) }) +
#curly_quotes +
# step 9 : spellcheck
- { if set.mark_errors then
+ {
+ if set.auto_correct then
+ auto_correct(input)
+ else input
+ } +
+ {
+ if set.auto_errata then
+ auto_errata(input)
+ else input
+ } +
+ {
+ if language().code == "ja" or language().code == "zht" or language().code == "zhs" then input
+ else if set.mark_errors then
check_spelling(
language: language().spellcheck_code,
- extra_dictionary: "/magic.mse-game/magic-words",
+ extra_dictionary: "/magic.mse-game/dictionary/magic-words",
extra_match: additional_text_words
)
- else input
+ else input
}
############################################################## Statistics utilities
diff --git a/data/magic-m15-split-fusable.mse-style/rooms/bottom_mask.png b/data/magic-m15-split-fusable.mse-style/rooms/bottom_mask.png
new file mode 100644
index 000000000..e0f6e2b84
Binary files /dev/null and b/data/magic-m15-split-fusable.mse-style/rooms/bottom_mask.png differ
diff --git a/data/magic-m15-split-fusable.mse-style/rooms/image_mask_right_short.png b/data/magic-m15-split-fusable.mse-style/rooms/image_mask_right_short.png
new file mode 100644
index 000000000..993596233
Binary files /dev/null and b/data/magic-m15-split-fusable.mse-style/rooms/image_mask_right_short.png differ
diff --git a/data/magic-m15-split-fusable.mse-style/rooms/roombar.png b/data/magic-m15-split-fusable.mse-style/rooms/roombar.png
index 3e5c4e3d2..5a07d6ca8 100644
Binary files a/data/magic-m15-split-fusable.mse-style/rooms/roombar.png and b/data/magic-m15-split-fusable.mse-style/rooms/roombar.png differ
diff --git a/data/magic-m15-split-fusable.mse-style/style b/data/magic-m15-split-fusable.mse-style/style
index a28fda1d5..5713e4c44 100644
--- a/data/magic-m15-split-fusable.mse-style/style
+++ b/data/magic-m15-split-fusable.mse-style/style
@@ -398,10 +398,11 @@ init script:
image_width := {
clear := if input == "left" then left_clear() else if input == "right" then right_clear() else false
bl := is_borderless()
+ sr := is_short_room()
room_style := styling.room_images
if is_room() then (
if room_style == "one image" and input == "left"
- then if bl then 488 else if clear then 474 else 452
+ then if bl then 488 else if clear then 474 else if sr then 444 else 452
else if room_style == "one image"
then 0
else if bl and input == "left"
@@ -410,6 +411,8 @@ init script:
then 265
else if clear
then 251
+ else if sr
+ then 236
else 240
)
else if bl and input == "left" and room_style == "one image"
@@ -422,6 +425,8 @@ init script:
then 265
else if clear
then 237
+ else if contains(styling.other_options, match:"spillover image")
+ then if input == "left" then 444 else 0
else 203
}
image_height := {
@@ -430,6 +435,8 @@ init script:
then 375
else if clear
then 345
+ else if is_short_room()
+ then 149
else if is_room()
then 211
else 148
@@ -442,7 +449,8 @@ init script:
room_style := styling.room_images
rm := is_room()
- if rm then (
+ if is_short_room() then if input == "right" then "rooms/image_mask_right_short.png" else ""
+ else if rm then (
if room_style == "one image" and input == "left"
then "rooms/image_mask{tag}.png"
else "rooms/image_mask_{input}{tag}.png"
@@ -470,6 +478,7 @@ init script:
is_room := {
chosen(styling.frames, choice:"room") or lang_setting("is_room")(card.sub_type)
}
+ is_short_room := { chosen(styling.other_options, choice:"short room image") and is_room() }
is_fuse := { card.rule_text_3 != "" and not is_room() }
is_arrows := { chosen(styling.frames, choice:"arrows") }
is_borderless := { chosen(styling.frames, choice:"borderless") }
@@ -601,6 +610,9 @@ init script:
]
]
}
+ flavor_bar_width := { 251 }
+ flavor_bar_offset_left_1 := { 25 }
+ flavor_bar_offset_left_2 := { 268 }
harder_script := [
alt_nyx: alt_nyx_template,
texture: texture_template
@@ -650,7 +662,14 @@ styling field:
choice: ancestral generic mana
choice: prerelease stamp
choice: two illustrators
+ choice: spillover image
+ choice: short room image
initial: two illustrators
+styling field:
+ type: color
+ name: room backfill
+ default: rgb(0,0,0)
+ description: Sets the color of the room textbox on short rooms
styling field:
type: text
name: popout image style
@@ -880,11 +899,11 @@ card style:
image: { card_symbol_image(face: 2) }
############################# Image
image:
- left: { if is_borderless() or left_clear() then 35 else if is_room() then 46 else 50 }
+ left: { if is_borderless() or left_clear() then 35 else if is_short_room() then 50 else if is_room() then 46 else 50 }
top: { if is_borderless() then 0 else if left_clear() then 13 else 49 }
width: { image_width("left") }
height: { image_height("left") }
- z index: 400
+ z index: 510
default: {default_image(card.card_color)}
mask: { image_mask("left") }
image 2:
@@ -892,7 +911,7 @@ card style:
top: { if is_borderless() then 0 else if right_clear() then 13 else 49 }
width: { image_width("right") }
height: { image_height("right") }
- z index: 401
+ z index: 511
default: {default_image(card.card_color_2)}
mask: { image_mask("right") }
mainframe image:
@@ -903,11 +922,11 @@ card style:
z index: 1010
mainframe image 2:
left: 245
- top: { if is_borderless() then 0 else 53 }
+ top: { if is_borderless() then 0 else 49 }
width: { if (is_room() or is_borderless()) and styling.room_images == "three images" then 50 else 0 }
- height: { if is_borderless() then 375 else 209 }
- z index: 410
- mask: { "rooms/image_mask_middle" + (if not is_room() then "_fuse" else if is_borderless() then (if uses_fuse_arrows() then "_arrow" else "_bl") else "") + ".png" }
+ height: { if is_borderless() then 375 else if is_short_room() then 149 else 211 }
+ z index: 520
+ mask: { if is_short_room() then "" else "rooms/image_mask_middle" + (if not is_room() then "_fuse" else if is_borderless() then (if uses_fuse_arrows() then "_arrow" else "_bl") else "") + ".png" }
############################# Card type
indicator:
left: 50
@@ -1184,7 +1203,13 @@ extra card field:
choice: patch
editable: false
save value: false
-
+extra card field:
+ type: color
+ name: spillblock
+ script: styling.room_backfill
+ editable: false
+ save value: false
+
extra card style:
fuse_bridge:
left: 265
@@ -1316,3 +1341,11 @@ extra card style:
render style: image
image: rooms/patch.png
visible: { borderless_frames() and is_room() and not left_clear() }
+ spillblock:
+ left: 46
+ top: 202
+ width: 452
+ height: 58
+ z index: 700
+ visible: { is_short_room() }
+ mask: rooms/bottom_mask.png
\ No newline at end of file
diff --git a/data/magic-m15-token.mse-style/style b/data/magic-m15-token.mse-style/style
index bd56828ec..39c4dd9c9 100644
--- a/data/magic-m15-token.mse-style/style
+++ b/data/magic-m15-token.mse-style/style
@@ -38,7 +38,7 @@ init script:
else "2" # textbox
}
- template_prefix :=
+ template_prefix := [
card: ""
card2: ""
card3: ""
diff --git a/data/magic-modules.mse-include/pages/double_flat/multicolor_blend_double_flat.png b/data/magic-modules.mse-include/pages/double_flat/multicolor_blend_double_flat.png
index 68991658f..3b5a7e902 100644
Binary files a/data/magic-modules.mse-include/pages/double_flat/multicolor_blend_double_flat.png and b/data/magic-modules.mse-include/pages/double_flat/multicolor_blend_double_flat.png differ
diff --git a/data/magic-modules.mse-include/pages/double_page/multicolor_blend_double_page.png b/data/magic-modules.mse-include/pages/double_page/multicolor_blend_double_page.png
index b64c8bb97..70338aac7 100644
Binary files a/data/magic-modules.mse-include/pages/double_page/multicolor_blend_double_page.png and b/data/magic-modules.mse-include/pages/double_page/multicolor_blend_double_page.png differ
diff --git a/data/magic-modules.mse-include/pages/single_flat/multicolor_blend_single_flat.png b/data/magic-modules.mse-include/pages/single_flat/multicolor_blend_single_flat.png
index 68991658f..214c49c7f 100644
Binary files a/data/magic-modules.mse-include/pages/single_flat/multicolor_blend_single_flat.png and b/data/magic-modules.mse-include/pages/single_flat/multicolor_blend_single_flat.png differ
diff --git a/data/magic-modules.mse-include/pages/single_page/multicolor_blend_single_page.png b/data/magic-modules.mse-include/pages/single_page/multicolor_blend_single_page.png
index e00c2131a..94f771b19 100644
Binary files a/data/magic-modules.mse-include/pages/single_page/multicolor_blend_single_page.png and b/data/magic-modules.mse-include/pages/single_page/multicolor_blend_single_page.png differ
diff --git a/data/magic-modules.mse-include/watermarks/card_fields b/data/magic-modules.mse-include/watermarks/card_fields
index 7234efcff..184df62a4 100644
--- a/data/magic-modules.mse-include/watermarks/card_fields
+++ b/data/magic-modules.mse-include/watermarks/card_fields
@@ -2,8 +2,8 @@ card style:
watermark:
left: { text_style_field(watermark_text_field_1()).left - face_coordinates_map(watermark_face_1()).width/375*10 - watermark_offset_width_1() + watermark_offset_left_1() }
width: { text_style_field(watermark_text_field_1()).width + face_coordinates_map(watermark_face_1()).width/375*20 + watermark_offset_width_1()*2 }
- top: { text_style_field(watermark_text_field_1()).top + face_coordinates_map(watermark_face_1()).height/523*3 - watermark_offset_height_1() + watermark_offset_top_1() }
- height: { text_style_field(watermark_text_field_1()).height - face_coordinates_map(watermark_face_1()).height/523*6 + watermark_offset_height_1()*2 + (if is_stamped(field: watermark_stamp_field_1()) then watermark_offset_stamp_1() else 0) }
+ top: { text_style_field(watermark_text_field_1()).top + face_coordinates_map(watermark_face_1()).height/523*3 - watermark_offset_height_1() + watermark_offset_top_1() - chop_top() }
+ height: { text_style_field(watermark_text_field_1()).height - face_coordinates_map(watermark_face_1()).height/523*6 + watermark_offset_height_1()*2 + (if is_stamped(field: watermark_stamp_field_1()) then watermark_offset_stamp_1() else 0) + chop_top() + chop_bot() }
visible: { not watermark_disabled_1() }
alignment: middle center
popup style: in place
diff --git a/data/magic-modules.mse-include/watermarks/card_fields_dfc b/data/magic-modules.mse-include/watermarks/card_fields_dfc
index a5c73222e..1cf68b7d5 100644
--- a/data/magic-modules.mse-include/watermarks/card_fields_dfc
+++ b/data/magic-modules.mse-include/watermarks/card_fields_dfc
@@ -3,8 +3,8 @@ card style:
watermark 2:
left: { text_style_field(watermark_text_field_2()).left - face_coordinates_map(watermark_face_2()).width/375*10 - watermark_offset_width_2() + watermark_offset_left_2() }
width: { text_style_field(watermark_text_field_2()).width + face_coordinates_map(watermark_face_2()).width/375*20 + watermark_offset_width_2()*2 }
- top: { text_style_field(watermark_text_field_2()).top + face_coordinates_map(watermark_face_2()).height/523*3 - watermark_offset_height_2() + watermark_offset_top_2() }
- height: { text_style_field(watermark_text_field_2()).height - face_coordinates_map(watermark_face_2()).height/523*6 + watermark_offset_height_2()*2 + (if is_stamped(field: watermark_stamp_field_2()) then watermark_offset_stamp_2() else 0) }
+ top: { text_style_field(watermark_text_field_2()).top + face_coordinates_map(watermark_face_2()).height/523*3 - watermark_offset_height_2() + watermark_offset_top_2() - chop_top2() }
+ height: { text_style_field(watermark_text_field_2()).height - face_coordinates_map(watermark_face_2()).height/523*6 + watermark_offset_height_2()*2 + (if is_stamped(field: watermark_stamp_field_2()) then watermark_offset_stamp_2() else 0) + chop_top2() + chop_bot2() }
visible: { not watermark_disabled_2() }
alignment: middle center
popup style: in place
diff --git a/data/magic-modules.mse-include/watermarks/card_fields_tfc b/data/magic-modules.mse-include/watermarks/card_fields_tfc
index a1a2c6ae6..f379df176 100644
--- a/data/magic-modules.mse-include/watermarks/card_fields_tfc
+++ b/data/magic-modules.mse-include/watermarks/card_fields_tfc
@@ -3,8 +3,8 @@ card style:
watermark 3:
left: { text_style_field(watermark_text_field_3()).left - face_coordinates_map(watermark_face_3()).width/375*10 - watermark_offset_width_3() + watermark_offset_left_3() }
width: { text_style_field(watermark_text_field_3()).width + face_coordinates_map(watermark_face_3()).width/375*20 + watermark_offset_width_3()*2 }
- top: { text_style_field(watermark_text_field_3()).top + face_coordinates_map(watermark_face_3()).height/523*3 - watermark_offset_height_3() + watermark_offset_top_3() }
- height: { text_style_field(watermark_text_field_3()).height - face_coordinates_map(watermark_face_3()).height/523*6 + watermark_offset_height_3()*2 + (if is_stamped(field: watermark_stamp_field_3()) then watermark_offset_stamp_3() else 0) }
+ top: { text_style_field(watermark_text_field_3()).top + face_coordinates_map(watermark_face_3()).height/523*3 - watermark_offset_height_3() + watermark_offset_top_3() - chop_top3() }
+ height: { text_style_field(watermark_text_field_3()).height - face_coordinates_map(watermark_face_3()).height/523*6 + watermark_offset_height_3()*2 + (if is_stamped(field: watermark_stamp_field_3()) then watermark_offset_stamp_3() else 0) + chop_top3() + chop_bot3() }
visible: { not watermark_disabled_3() }
alignment: middle center
popup style: in place
diff --git a/data/magic-planesculptors.mse-export-template/export-template b/data/magic-planesculptors.mse-export-template/export-template
index cf045af5a..c35fcb4b6 100644
--- a/data/magic-planesculptors.mse-export-template/export-template
+++ b/data/magic-planesculptors.mse-export-template/export-template
@@ -42,6 +42,7 @@ script:
else if contains(card.shape, match:"battle") then "split"
else if contains(card.shape, match:"leveler") then "normal"
else if contains(card.shape, match:"saga") then "normal"
+ else if contains(card.shape, match:"class") then "normal"
else if contains(card.shape, match:"adventure") then "vsplit"
else if contains(card.shape, match:"aftermath") then "vsplit"
else if contains(card.shape, match:"planeswalker") then "normal"
diff --git a/data/magic-scifi.mse-style/style b/data/magic-scifi.mse-style/style
index 2e86286f7..88caa2f85 100644
--- a/data/magic-scifi.mse-style/style
+++ b/data/magic-scifi.mse-style/style
@@ -815,7 +815,7 @@ extra card field:
type: text
name: card code
save value: false
- script: card_code_script_core()
+ script: card_code_script(value)
extra card field:
type: choice
name: artist arrow
diff --git a/data/magic-sync.mse-style/style b/data/magic-sync.mse-style/style
index 9c2ad3a72..5b33834c7 100644
--- a/data/magic-sync.mse-style/style
+++ b/data/magic-sync.mse-style/style
@@ -333,7 +333,7 @@ extra card field:
type: text
name: card code
save value: false
- script: card_code_script_core()
+ script: card_code_script(value)
extra card field:
type: choice
name: artist arrow
diff --git a/data/magic.mse-game/keywords b/data/magic.mse-game/keywords
index c8e7cd984..854faac50 100644
--- a/data/magic.mse-game/keywords
+++ b/data/magic.mse-game/keywords
@@ -105,7 +105,7 @@ keyword parameter type:
match: [p](?!ped)(?!ment)
keyword parameter type:
name: name
- match: ([^(.:;\n—]+|[ ])
+ match: ([^(.:;\n—]+[(.:;\n—]?|[ ])
#match: [A-Za-z0-9 ',’"“”!?]+
refer script:
name: normal
diff --git a/data/magic.mse-game/script b/data/magic.mse-game/script
index 3b94f6ba6..aa389e28b 100644
--- a/data/magic.mse-game/script
+++ b/data/magic.mse-game/script
@@ -1187,7 +1187,9 @@ handle_merged_rt := {
handle_action_rt := {
"To " + to + ", " + to_lower(input) + "" + input + ""
}
-
+handle_action_rt_single := {
+ "" + prefix + " " + to_lower(input) + "" + input + ""
+}
############################################################## Complex reminder texts
self_pro_check := match@(match:"You ha(ve|s) protection")
protection_code := {
@@ -1690,6 +1692,19 @@ text_filter :=
tag: "",
contents: { "" + (if card_name=="" then "CARDNAME" else strip_card_codes(card_name, atom:true)) + "" }
) +
+ #### capitalize This type when appropriate
+ replace@(
+ match:"([•.]) this",
+ replace:"\\1 This"
+ ) +
+ replace@(
+ match:"([\"“'])this",
+ replace:"\\1This"
+ ) +
+ replace@(
+ match:"^this",
+ replace:"This"
+ ) +
tag_contents@(
tag: "",
contents: { "" + (if card_name=="" then "LEGENDNAME" else legend_filter(strip_card_codes(card_name, atom:true))) + "" }
@@ -2861,13 +2876,13 @@ card_number_old_1 := {
else if auto_copy then
combined_editor(
field1: card.auto_copyright,
- separator: card.card_number,
+ separator: " " + card.card_number + " ",
field2: card.card_code_text
)
else
combined_editor(
field1: card.copyright,
- separator: card.card_number,
+ separator: " " + card.card_number + " ",
field2: card.card_code_text
)
}
@@ -3008,8 +3023,8 @@ card_name_for_level := {
if set.CARDNAME_replacement == "card's type"
then (
ty := to_lower(cardname_type(card["type"+tag]))
- if ty == "" then "this"
- else "this " + ty
+ if ty == "" then "This"
+ else "This " + ty
)
else if set.CARDNAME_replacement == "card's alias" and card["alias"+tag] != ""
then card["alias"+tag]
@@ -3756,7 +3771,16 @@ loyalty_textbox_background_image :=
############################################################## Separators
separator_enable_level := { false }
-separator_default := { if set.use_flavor_bar then "flavor bar" else "none" }
+separator_default := {
+ if set.use_flavor_bar then (
+ if set.default_flavor_bar == "thin bar"
+ then "grey bar"
+ else if set.default_flavor_bar == "thick bar"
+ then "flavor bar"
+ else set.default_flavor_bar
+ )
+ else "none"
+}
flavor_bar_left := { face_coordinates_map(input).left }
flavor_bar_top :=
diff --git a/data/magic.mse-game/set_fields b/data/magic.mse-game/set_fields
index 651480d77..948c94b28 100644
--- a/data/magic.mse-game/set_fields
+++ b/data/magic.mse-game/set_fields
@@ -460,6 +460,13 @@ set field:
type: boolean
name: use flavor bar
description: Enables the flavor bar on Mainframe templates.
+set field:
+ type: choice
+ name: default flavor bar
+ choice: thin bar
+ choice: thick bar
+ choice: none
+ description: The style of flavor bar to use
set field:
type: boolean
name: auto legends
diff --git a/data/magic.mse-game/statistics b/data/magic.mse-game/statistics
index 8820a934a..d9f425eb4 100644
--- a/data/magic.mse-game/statistics
+++ b/data/magic.mse-game/statistics
@@ -133,7 +133,7 @@ statistics dimension:
script: if filter_from_statistic() == "Filtered" or trim_from_statistic() then "" else mana_value_statistic()
statistics dimension:
- name: permanent/non
+ name: permanent / nonpermanent
position hint: 0200
icon: stats/type.png
description: Counts the number of creatures, noncreature permanents, and nonpermanents. Counts each side/face separately.
@@ -689,8 +689,8 @@ statistics dimension:
statistics dimension:
- name: all mana production
- position hint: 0500
+ name: mana production (All)
+ position hint: 0520
icon: stats/land_production.png
description: Counts how many cards can produce white mana. Repeat for all other colors. Then counts how many cards can produce mana of any color, and mana of a chosen color.
split list: true
@@ -715,8 +715,8 @@ statistics dimension:
Chosen : rgb(112,38,128)
statistics dimension:
- name: land mana prod.
- position hint: 0510
+ name: mana production (Lands)
+ position hint: 0500
icon: stats/land_production.png
description: Counts how many lands can produce white mana. Repeat for all other colors. Then counts how many lands can produce mana of any color, and mana of a chosen color. If either side/face is a land, the card will be counted here.
split list: true
@@ -741,8 +741,8 @@ statistics dimension:
Chosen : rgb(112,38,128)
statistics dimension:
- name: nonland mana prod.
- position hint: 0520
+ name: mana production (Nonlands)
+ position hint: 0510
icon: stats/land_production.png
description: Counts how many non-land cards can produce white mana. Repeat for all other colors. Then counts how many non-land cards can produce mana of any color, and mana of a chosen color.
split list: true
@@ -767,7 +767,7 @@ statistics dimension:
Chosen : rgb(112,38,128)
statistics dimension:
- name: pip count (Casting)
+ name: pip count (Casting Costs)
position hint: 0600
icon: stats/color_pips.png
description: Counts the number of casting costs that contain one colored pip. Repeat for all other amounts.
@@ -795,7 +795,7 @@ statistics dimension:
8+ : rgb(197,24,214)
statistics dimension:
- name: pip colors (Casting)
+ name: pip colors (Casting Costs)
position hint: 0630
icon: stats/color_pips.png
description: Counts how many cards have a single white pip in their casting cost. Repeat for two white pips. Then three, then four+, then for all other colors. Counts each side/face separately.
@@ -829,7 +829,7 @@ statistics dimension:
GGGG+ : rgb(18,102,0)
statistics dimension:
- name: total pips (Casting)
+ name: total pips (Casting Costs)
position hint: 0660
icon: stats/color_pips.png
description: Counts the total number of white pips in all the casting costs. Repeat for all other colors.
@@ -851,7 +851,7 @@ statistics dimension:
G : rgb(68,144,15)
statistics dimension:
- name: pip count (Ability)
+ name: pip count (Ability Costs)
position hint: 0610
icon: stats/color_pips.png
description: Counts the number of activated/triggered/keyworded ability costs that contain one colored pip. Repeat for all other amounts.
@@ -879,7 +879,7 @@ statistics dimension:
8+ : rgb(197,24,214)
statistics dimension:
- name: pip colors (Ability)
+ name: pip colors (Ability Costs)
position hint: 0640
icon: stats/color_pips.png
description: Counts how many activated/triggered/keyworded abilities have a single white pip in their cost. Repeat for two white pips. Then three, then four+, then for all other colors. Counts each ability on each side/face separately.
@@ -913,7 +913,7 @@ statistics dimension:
GGGG+ : rgb(18,102,0)
statistics dimension:
- name: total pips (Ability)
+ name: total pips (Ability Costs)
position hint: 0670
icon: stats/color_pips.png
description: Counts the total number of white pips in all the activated/triggered/keyworded ability costs. Repeat for all other colors.
@@ -935,7 +935,7 @@ statistics dimension:
G : rgb(68,144,15)
statistics dimension:
- name: pip count (Combined)
+ name: pip count (All Costs)
position hint: 0620
icon: stats/color_pips.png
description: Counts the number of costs that contain one colored pip. Repeat for all other amounts.
@@ -963,7 +963,7 @@ statistics dimension:
8+ : rgb(197,24,214)
statistics dimension:
- name: pip color (Combined)
+ name: pip color (All Costs)
position hint: 0650
icon: stats/color_pips.png
description: Counts how many costs contain a single white pip. Repeat for two white pips. Then three, then four+, then for all other colors. Counts each cost on each side/face separately.
@@ -997,7 +997,7 @@ statistics dimension:
GGGG+ : rgb(18,102,0)
statistics dimension:
- name: total pips (Combined)
+ name: total pips (All Costs)
position hint: 0680
icon: stats/color_pips.png
description: Counts the total number of white pips in all the costs. Repeat for all other colors.
@@ -1119,7 +1119,7 @@ statistics dimension:
script: if trim_from_draw_statistic() then "" else average_opening_hand_statistic()
statistics dimension:
- name: land drop hit % (Play)
+ name: land drop hit % (On The Play)
position hint: 1100
icon: stats/land_drops.png
description: If the set is a deck, probability of hitting every single land drop up to the given turn, when on the play. Always excludes cards with the word 'commander' in their card notes, as well as tokens, emblems, dungeons, conspiracies, heroes, vanguards, schemes, planes and phenomenons.
@@ -1128,7 +1128,7 @@ statistics dimension:
script: land_drop_hit_percentage_statistic(start: 6)
statistics dimension:
- name: land drop hit % (Draw)
+ name: land drop hit % (On The Draw)
position hint: 1110
icon: stats/land_drops.png
description: If the set is a deck, probability of hitting every single land drop up to the given turn, when on the draw. Always excludes cards with the word 'commander' in their card notes, as well as tokens, emblems, dungeons, conspiracies, heroes, vanguards, schemes, planes and phenomenons.
diff --git a/data/magic.mse-game/statistics_fr b/data/magic.mse-game/statistics_fr
index 7f1e930ce..e72ec68c0 100644
--- a/data/magic.mse-game/statistics_fr
+++ b/data/magic.mse-game/statistics_fr
@@ -133,7 +133,7 @@ statistics dimension:
script: if filter_from_statistic() == "Filtré" or trim_from_statistic() then "" else mana_value_statistic()
statistics dimension:
- name: Permanent/Non
+ name: Permanent / Nonpermanent
position hint: 0200
icon: stats/type.png
description: Counts the number of creatures, noncreature permanents, and nonpermanents. Counts each side/face separately.
@@ -220,7 +220,7 @@ statistics dimension:
script: if filter_from_statistic() == "Filtré" or trim_from_statistic() then "" else combined_subtype_statistic()
statistics dimension:
- name: Sous-Type (Noncréature)
+ name: Sous-Type De Noncréature
position hint: 0260
icon: stats/noncreature_subtype.png
description: Subtypes of all types except creature/tribal/kindred.
@@ -690,7 +690,7 @@ statistics dimension:
statistics dimension:
name: Production de Mana (Tout)
- position hint: 0500
+ position hint: 0520
icon: stats/land_production.png
description: Counts how many cards can produce white mana. Repeat for all other colors. Then counts how many cards can produce mana of any color, and mana of a chosen color.
split list: true
@@ -715,8 +715,8 @@ statistics dimension:
Choisie : rgb(112,38,128)
statistics dimension:
- name: Prod. de Mana (Terrain)
- position hint: 0510
+ name: Production de Mana (Terrain)
+ position hint: 0500
icon: stats/land_production.png
description: Counts how many lands can produce white mana. Repeat for all other colors. Then counts how many lands can produce mana of any color, and mana of a chosen color. If either side/face is a land, the card will be counted here.
split list: true
@@ -741,8 +741,8 @@ statistics dimension:
Choisie : rgb(112,38,128)
statistics dimension:
- name: Prod. de Mana (Nonterrain)
- position hint: 0520
+ name: Production de Mana (Nonterrain)
+ position hint: 0510
icon: stats/land_production.png
description: Counts how many non-land cards can produce white mana. Repeat for all other colors. Then counts how many non-land cards can produce mana of any color, and mana of a chosen color.
split list: true
@@ -767,7 +767,7 @@ statistics dimension:
Choisie : rgb(112,38,128)
statistics dimension:
- name: # de Pépins (Lancement)
+ name: # de Pépins (Coût de Lancement)
position hint: 0600
icon: stats/color_pips.png
description: Counts the number of casting costs that contain one colored pip. Repeat for all other amounts.
@@ -795,7 +795,7 @@ statistics dimension:
8+ : rgb(197,24,214)
statistics dimension:
- name: Pépins (Lancement)
+ name: Pépins (Coût de Lancement)
position hint: 0630
icon: stats/color_pips.png
description: Counts how many cards have a single white pip in their casting cost. Repeat for two white pips. Then three, then four+, then for all other colors. Counts each side/face separately.
@@ -829,7 +829,7 @@ statistics dimension:
GGGG+ : rgb(18,102,0)
statistics dimension:
- name: Pépins Totaux (Lancement)
+ name: Pépins Totaux (Coût de Lancement)
position hint: 0660
icon: stats/color_pips.png
description: Counts the total number of white pips in all the casting costs. Repeat for all other colors.
@@ -851,7 +851,7 @@ statistics dimension:
G : rgb(68,144,15)
statistics dimension:
- name: # De Pépins (Capacités)
+ name: # De Pépins (Coût de Capacités)
position hint: 0610
icon: stats/color_pips.png
description: Counts the number of activated/triggered/keyworded ability costs that contain one colored pip. Repeat for all other amounts.
@@ -879,7 +879,7 @@ statistics dimension:
8+ : rgb(197,24,214)
statistics dimension:
- name: Pépins (Capacités)
+ name: Pépins (Coût de Capacités)
position hint: 0640
icon: stats/color_pips.png
description: Counts how many activated/triggered/keyworded abilities have a single white pip in their cost. Repeat for two white pips. Then three, then four+, then for all other colors. Counts each ability on each side/face separately.
@@ -913,7 +913,7 @@ statistics dimension:
GGGG+ : rgb(18,102,0)
statistics dimension:
- name: Pépins Totaux (Capacités)
+ name: Pépins Totaux (Coût de Capacités)
position hint: 0670
icon: stats/color_pips.png
description: Counts the total number of white pips in all the activated/triggered/keyworded ability costs. Repeat for all other colors.
@@ -935,7 +935,7 @@ statistics dimension:
G : rgb(68,144,15)
statistics dimension:
- name: # de Pépins (Tout)
+ name: # de Pépins (Tout les Coûts)
position hint: 0620
icon: stats/color_pips.png
description: Counts the number of costs that contain one colored pip. Repeat for all other amounts.
@@ -963,7 +963,7 @@ statistics dimension:
8+ : rgb(197,24,214)
statistics dimension:
- name: Pépins (Tout)
+ name: Pépins (Tout les Coûts)
position hint: 0650
icon: stats/color_pips.png
description: Counts how many costs contain a single white pip. Repeat for two white pips. Then three, then four+, then for all other colors. Counts each cost on each side/face separately.
@@ -997,7 +997,7 @@ statistics dimension:
GGGG+ : rgb(18,102,0)
statistics dimension:
- name: Pépins Totaux (Tout)
+ name: Pépins Totaux (Tout les Coûts)
position hint: 0680
icon: stats/color_pips.png
description: Counts the total number of white pips in all the costs. Repeat for all other colors.
@@ -1019,7 +1019,7 @@ statistics dimension:
G : rgb(68,144,15)
statistics dimension:
- name: # De Mots
+ name: Nombre De Mots
position hint: 0700
icon: stats/text_length.png
description: How many words are in the card’s various rule texts.
@@ -1029,7 +1029,7 @@ statistics dimension:
script: if filter_from_statistic() == "Filtré" or trim_from_statistic() then "" else total_word_count_statistic()
#statistics dimension:
-# name: # De Lignes
+# name: Nombre De Lignes
# position hint: 1110
# icon: stats/text_length.png
# description: How many lines are in the card’s various rule texts.
@@ -1038,7 +1038,7 @@ statistics dimension:
# script: if filter_from_statistic() == "Filtré" or trim_from_statistic() then "" else total_line_count_statistic() # Not reliable atm.
statistics dimension:
- name: # De Paragraphes
+ name: Nombre De Paragraphes
position hint: 0710
icon: stats/text_length.png
description: How many paragraphs are in the card’s various rule texts.
@@ -1119,7 +1119,7 @@ statistics dimension:
script: if trim_from_draw_statistic() then "" else average_opening_hand_statistic()
statistics dimension:
- name: % D’Avoir Un Terrain (1er)
+ name: % D’Avoir Un Terrain (Jouant 1er)
position hint: 1100
icon: stats/land_drops.png
description: If the set is a deck, probability of hitting every single land drop up to the given turn, when on the play. Always excludes cards with the word 'commander' in their card notes, as well as tokens, emblems, dungeons, conspiracies, heroes, vanguards, schemes, planes and phenomenons.
@@ -1128,7 +1128,7 @@ statistics dimension:
script: land_drop_hit_percentage_statistic(start: 6)
statistics dimension:
- name: % D’Avoir Un Terrain (2ème)
+ name: % D’Avoir Un Terrain (Jouant 2ème)
position hint: 1110
icon: stats/land_drops.png
description: If the set is a deck, probability of hitting every single land drop up to the given turn, when on the draw. Always excludes cards with the word 'commander' in their card notes, as well as tokens, emblems, dungeons, conspiracies, heroes, vanguards, schemes, planes and phenomenons.
@@ -1137,7 +1137,7 @@ statistics dimension:
script: land_drop_hit_percentage_statistic(start: 7)
statistics dimension:
- name: # De Couleurs
+ name: Nombre De Couleurs
position hint: 1500
icon: stats/color.png
description: How many cards have one color, how many have two, three, etc...
@@ -1159,7 +1159,7 @@ statistics dimension:
5 : rgb(161,54,169)
statistics dimension:
- name: # De Couleurs (Identité)
+ name: Nombre De Couleurs (Identité)
position hint: 1510
icon: stats/color.png
description: How many cards have one color in their color identity, how many have two, three, etc...
diff --git a/data/magic.mse-game/statistics_script b/data/magic.mse-game/statistics_script
index fe4a31e50..7e38a015e 100644
--- a/data/magic.mse-game/statistics_script
+++ b/data/magic.mse-game/statistics_script
@@ -1380,6 +1380,8 @@ filter_field_map_statistic :=
color_identity_count: {color_identity_count_statistic()},
mana_production: {mana_production_list_statistic(check_type: "all")},
"permanent/non": {replace_en_spaces_statistic(remove_zero_width_spaces_statistic(permanent_statistic()))},
+ "permanent/nonpermanent": {replace_en_spaces_statistic(remove_zero_width_spaces_statistic(permanent_statistic()))},
+ "permanent / nonpermanent": {replace_en_spaces_statistic(remove_zero_width_spaces_statistic(permanent_statistic()))},
mana_value: {cmc(card.casting_cost)},
mana_value_2: {cmc(card.casting_cost_2)},
supertype: {keep_only_supertypes_statistic(card.super_type)},
diff --git a/magicseteditor.com b/magicseteditor.com
index abd4184ab..7b1239571 100644
Binary files a/magicseteditor.com and b/magicseteditor.com differ
diff --git a/magicseteditor.exe b/magicseteditor.exe
index 349925f6b..db5681d46 100644
Binary files a/magicseteditor.exe and b/magicseteditor.exe differ
diff --git a/mse.com b/mse.com
index 38eded871..7b1239571 100644
Binary files a/mse.com and b/mse.com differ
diff --git a/mse.exe b/mse.exe
index 349925f6b..db5681d46 100644
Binary files a/mse.exe and b/mse.exe differ