mse version: 2.5.0 game: magic short name: Modern Extra full name: Modern w/ Extra Colors installer group: magic/new style/extra colors icon: card-sample.png position hint: 250 version: 2024-05-29 depends on: package: magic.mse-game version: 2015-04-08 depends on: package: magic-default-image.mse-include version: 2007-09-23 depends on: package: magic-future-common.mse-include version: 2008-05-21 depends on: package: magic-watermarks-extra.mse-include version: 2007-12-22 depends on: package: magic-mana-large-extra.mse-symbol-font version: 2009-03-23 depends on: package: magic-mana-small-extra.mse-symbol-font version: 2009-03-23 depends on: package: magic-mana-large.mse-symbol-font version: 2007-10-12 depends on: package: magic-mana-small.mse-symbol-font version: 2007-10-12 depends on: package: magic-new.mse-style version: 2008-04-13 depends on: package: magic-pt-symbols-extra.mse-symbol-font version: 2009-09-25 depends on: package: magic-modules.mse-include version: 2024-10-01 card width: 375 card height: 523 card dpi: 150 #By Pichoro #New Features: #Unsorted casting costs. ############################################################## Extra scripts init script: ############################################################################################################ Proper Style Scripts # Load scripts for image box include file: /magic-default-image.mse-include/scripts # Should hybrids have a grey name? mask_hybrid_with_land := { styling.grey_hybrid_name } #Should multicolor lands with basic land types have a colored name? mask_multi_land_with_color := { styling.colored_multicolor_land_name } # Get frames from magic-new when possible. magic_new_router := { if type == "identity" then "" else if input == "a" or input == "m" or input == "w" or input == "u" or input == "b" or input == "r" or input == "g" or input == "c" then "/magic-new.mse-style/" else "" } magic_new_land_router := { if type == "identity" then "" else if input == "a" or input == "s" or input == "m" or input == "w" or input == "u" or input == "b" or input == "r" or input == "g" or input == "c" then "/magic-new.mse-style/" else "" } # Which artifact template should be used? Which multicolor template should be used? alternate_template := { if input == "a" then ( if styling.artifact_style == "light" then "oa" else if styling.artifact_style == "brown" then "ba" else "a" ) else if input == "m" then ( if styling.saturated_multicolor then "m" else "om" ) else input } template_suffix := [card: "card.jpg", pt: "pt.jpg", identity: "identity.png"] template := { magic_new_router() + alternate_template() + template_suffix[type] } land_template := { magic_new_land_router() + (if input == "a" or input == "s" then "c" else alternate_template()) + "l" + template_suffix[type] } # Use land templates for previews because they show more contrast hybrid_previews := "land,hybrid" # Use the normal tap symbol mana_t := { if styling.tap_symbol == "old" then "old" else if styling.tap_symbol == "diagonal T" then "older" else "new" } # Use guild mana symbols? guild_mana := { styling.use_guild_mana_symbols } # Should the artist paintbrush be black or white? paintbrush_color := { if to_int(styling.artist_font_color) < 96 then "black" else "white" } # Should the extra value default to treasure, poison, or neither? default_value_box := { if contains(card.sub_type, match:"Treasure") then "treasure" else if contains(card.rule_text, match:"oisonous ") then "poison" else "none" } # Filter to commas, so they can be counted to see if field is complete comma_count := filter_text@(match:",") # Should the card have a color indicator? colors_from_mana_symbols := { str := [] if contains(input, match:"W") then str := str + ["white"] if contains(input, match:"U") then str := str + ["blue"] if contains(input, match:"B") then str := str + ["black"] if contains(input, match:"R") then str := str + ["red"] if contains(input, match:"G") then str := str + ["green"] if contains(input, match:"E") then str := str + ["brown"] if contains(input, match:"K") then str := str + ["pink"] if contains(input, match:"P") then str := str + ["purple"] if contains(input, match:"L") then str := str + ["yellow"] if contains(input, match:"O") then str := str + ["orange"] join(str, sep:", ") } has_identity_general := { tag := if face == 1 then "" else "_" + face indicator_field := extra_card.identity culled_indicator := cull_noncolors(cull_directions(indicator_field)) color_field := extra_card.frame cost_field := card["casting_cost"+tag] culled_color := cull_directions(cull_noncolors(color_field)) default_from_casting_cost := colors_from_mana_symbols(cost_field) default_from_card_color := if chosen(color_field, choice:"colorless") then "" ## colorless else if default_from_casting_cost == "" and chosen(color_field, choice:"land") then "" ## land else if chosen(color_field, choice:"multicolor") and culled_color == "" then default_from_casting_cost ## 3+ multicolor else culled_color ## normal color #default_from_card_color := if chosen(color_field, choice:"colorless") then "" else if default_from_casting_cost == "" and chosen(color_field, choice:"land") then "" else if chosen(color_field, choice:"multicolor") and culled_color == "" then default_from_casting_cost else culled_color color_cost_disagree := default_from_card_color != default_from_casting_cost color_indicator_disagree := default_from_card_color != culled_indicator and indicator_field != color_field color_cost_disagree or color_indicator_disagree } ############################################################################################################ Scripts from Blends Package ## Scripts being overwritten from /magic-blends.mse-include/new-blends overlay_hybrid := [ 1: { template(colors[0]) } 2: { combine_blend( image1: template(colors[0]), image2: template(colors[1]), combine: styling.overlay_hybrid_type )} ] horizontal_card_hybrid := [ 1: { template(colors[0]) } 2: card_hybrid_2 3: {linear_blend( image1: template(colors[0]) x1: 0.22, y1: 0 x2: 0.4, y2: 0 image2: linear_blend( image1: template(colors[1]) x1: 0.6, y1: 0 x2: 0.78, y2: 0 image2: template(colors[2]) ))} 4: {linear_blend( # blend = 0.16 image1: template(colors[0]) x1: 0.15, y1: 0 x2: 0.31, y2: 0 image2: linear_blend( image1: template(colors[1]) x1: 0.42, y1: 0 x2: 0.58, y2: 0 image2: linear_blend( image1: template(colors[2]) x1: 0.69, y1: 0 x2: 0.85, y2: 0 image2: template(colors[3]) )))} 5: {linear_blend( image1: template(colors[0]) x1: 2.0 / 15, y1: 0 x2: 4.0 / 15, y2: 0 image2: linear_blend( image1: template(colors[1]) x1: 5.0 / 15, y1: 0 x2: 7.0 / 15, y2: 0 image2: linear_blend( image1: template(colors[2]) x1: 8.0 / 15, y1: 0 x2: 10.0 / 15, y2: 0 image2: linear_blend( image1: template(colors[3]) x1: 11.0 / 15, y1: 0 x2: 13.0 / 15, y2: 0 image2: template(colors[4]) ))))} 6: {linear_blend( image1: template(colors[0]) x1: 1.5 / 15, y1: 0 x2: 3.1 / 15, y2: 0 image2: linear_blend( image1: template(colors[1]) x1: 4.1 / 15, y1: 0 x2: 5.7 / 15, y2: 0 image2: linear_blend( image1: template(colors[2]) x1: 6.7 / 15, y1: 0 x2: 8.3 / 15, y2: 0 image2: linear_blend( image1: template(colors[3]) x1: 9.3 / 15, y1: 0 x2: 10.9 / 15, y2: 0 image2: linear_blend( image1: template(colors[4]) x1: 11.9 / 15, y1: 0 x2: 13.5 / 15, y2: 0 image2: template(colors[5]) )))))} 7: {linear_blend( image1: template(colors[0]) x1: 1.3 / 15, y1: 0 x2: 2.7 / 15, y2: 0 image2: linear_blend( image1: template(colors[1]) x1: 3.5 / 15, y1: 0 x2: 4.9 / 15, y2: 0 image2: linear_blend( image1: template(colors[2]) x1: 5.7 / 15, y1: 0 x2: 7.1 / 15, y2: 0 image2: linear_blend( image1: template(colors[3]) x1: 7.9 / 15, y1: 0 x2: 9.3 / 15, y2: 0 image2: linear_blend( image1: template(colors[4]) x1: 10.1 / 15, y1: 0 x2: 11.5 / 15, y2: 0 image2: linear_blend( image1: template(colors[5]) x1: 12.3 / 15, y1: 0 x2: 13.7 / 15, y2: 0 image2: template(colors[6]) ))))))} 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] diagonal_card_hybrid := [ 1: { template(colors[0]) } 2: {linear_blend( image1: template(colors[0]), image2: template(colors[1]), x1: 0.40, y1: 0.50 x2: 0.60, y2: 0.60 )} 3: {linear_blend( image1: linear_blend( image1: template(colors[0]), image2: template(colors[1]), x1: 0.15, y1: 0.50 x2: 0.35, y2: 0.60), image2: template(colors[2]), x1: 0.65, y1: 0.50 x2: 0.85, y2: 0.60 )} 4: { linear_blend( image1: linear_blend( image1: template(colors[0]), image2: template(colors[1]), x1: -0.10, y1: 0.50 x2: 0.10, y2: 0.60), image2: linear_blend( image1: template(colors[2]), image2: template(colors[3]), x1: 0.90, y1: 0.50 x2: 1.10, y2: 0.60), x1: 0.40, y1: 0.50 x2: 0.60, y2: 0.60 )} 5: {linear_blend( image1: linear_blend( image1: linear_blend( image1: linear_blend( image1: template(colors[0]), image2: template(colors[1]), x1: -0.20, y1: 0.50 x2: 0.00, y2: 0.60), image2: template(colors[2]), x1: 0.15, y1: 0.50 x2: 0.35, y2: 0.60), image2: template(colors[3]), x1: 0.65, y1: 0.50 x2: 0.85, y2: 0.60), image2: template(colors[4]), x1: 1.00, y1: 0.50 x2: 1.20, y2: 0.60 )} 6: {linear_blend( image1: linear_blend( image1: linear_blend( image1: linear_blend( image1: linear_blend( image1: template(colors[0]), image2: template(colors[1]), x1: -0.30, y1: 0.50 x2: -0.10, y2: 0.60), image2: template(colors[2]), x1: 0.10, y1: 0.50 x2: 0.20, y2: 0.60), image2: template(colors[3]), x1: 0.40, y1: 0.50 x2: 0.60, y2: 0.60), image2: template(colors[4]), x1: 0.70, y1: 0.50 x2: 0.90, y2: 0.60), image2: template(colors[5]), x1: 1.10, y1: 0.50 x2: 1.30, y2: 0.60 )} 7: { template("m") } 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] card_hybrid := [ radial: [ 0: { template("c") } 1: { template(colors[0]) } 2: card_hybrid_2 3: {linear_blend( image1: card_hybrid_2(colors: colors[0] + colors[1]), image2: template(colors[2]), x1: 0, y1: 0.55 x2: 0, y2: 0.77 )} 4: {linear_blend( image1: card_hybrid_2(colors: colors[0] + colors[1]) image2: card_hybrid_2(colors: colors[3] + colors[2]) x1: 0, y1: 0.4 x2: 0, y2: 0.62 )} 5: {linear_blend( image1: linear_blend( image1: card_hybrid_2(colors: colors[0] + colors[1]), image2: card_hybrid_2(colors: colors[4] + colors[2]), x1: 0, y1: 0.19 x2: 0, y2: 0.35 ), image2: template(colors[3]), x1: 0, y1: 0.777 x2: 0, y2: 0.937 )} 6: {linear_blend( image1: linear_blend( image1: card_hybrid_2(colors: colors[0] + colors[1]), image2: card_hybrid_2(colors: colors[5] + colors[2]), x1: 0, y1: 0.19 x2: 0, y2: 0.35 ), image2: card_hybrid_2(colors: colors[4] + colors[3]), x1: 0, y1: 0.777 x2: 0, y2: 0.937 )} 7: {linear_blend( image1: linear_blend( image1: linear_blend( image1: card_hybrid_2(colors: colors[0] + colors[1]), image2: card_hybrid_2(colors: colors[6] + colors[3]), x1: 0, y1: 0.34 x2: 0, y2: 0.50 ), image2: card_hybrid_2(colors: colors[5] + colors[3]), x1: 0, y1: 0.877 x2: 0, y2: 0.937 ), image2: template(colors[4]), x1: 0, y1: 1.140 x2: 0, y2: 1.300 )} 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] horizontal: horizontal_card_hybrid diagonal: diagonal_card_hybrid vertical: [ 1: { template(colors[0]) } 2: { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0, y1: 0.4 x2: 0, y2: 0.6 )} 3: vertical_card_hybrid 4: vertical_card_hybrid 5: vertical_card_hybrid 6: vertical_card_hybrid 7: vertical_card_hybrid 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] overlay: overlay_hybrid ] horizontal_pt_hybrid := [ 1: { template(colors[0]) } 2: { template(colors[1]) } 3: { linear_blend( image1: template(colors[1]) image2: template(colors[2]) x1: -0.51, y1: 0 x2: 0.26, y2: 0 )} 4: { linear_blend( image1: template(colors[2]) image2: template(colors[3]) x1: -0.1, y1: 0 x2: 0.6, y2: 0 )} 5: { linear_blend( image1: template(colors[3]) image2: template(colors[4]) x1: 0.08, y1: 0 x2: 0.65, y2: 0 )} 6: { linear_blend( image1: template(colors[4]) image2: template(colors[5]) x1: 0.07, y1: 0 x2: 0.7, y2: 0 )} 7: {linear_blend( image1: linear_blend( image1: template(colors[4]), image2: template(colors[5]), x1: -0.2, y1: 0 x2: 0.2, y2: 0 ), image2: template(colors[6]), x1: 0.5, y1: 0 x2: 0.7, y2: 0 )} 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] diagonal_pt_hybrid := [ 1: { template(colors[0]) } 2: { template(colors[1]) } 3: { template(colors[2]) } 4: { template(colors[3]) } 5: { linear_blend( image1: template(colors[3]), image2: template(colors[4]), x1: -0.10, y1: 0.50 x2: 0.10, y2: 0.60 )} 6: { linear_blend( image1: template(colors[4]), image2: template(colors[5]), x1: 0.10, y1: 0.50 x2: 0.30, y2: 0.60 )} 7: { template("m") } 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] pt_hybrid := [ radial: [ 0: { template("c") } 1: { template(colors[0]) } 2: { template(colors[1]) } 3: { template(colors[2]) } 4: { template(colors[2]) } 5: { linear_blend( image1: template(colors[2]) image2: template(colors[3]) x1: 0, y1: -1.5 x2: 0, y2: 0.7 )} 6: { linear_blend( image1: template(colors[2]) image2: template(colors[3]) x1: 0, y1: -1.5 x2: 0, y2: 0.7 )} 7: { template(colors[3]) } 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] horizontal: horizontal_pt_hybrid diagonal: diagonal_pt_hybrid vertical: [ 1: { template(colors[0]) } 2: { template(colors[1]) } 3: { template(colors[2]) } 4: { template(colors[3]) } 5: { template(colors[4]) } 6: { template(colors[5]) } 7: { template(colors[6]) } 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] overlay: overlay_hybrid ] identity_horizontal_hybrid := [ 0: { template("c") } 1: { template(colors[0]) } 2: { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0.49, y1: 0.49 x2: 0.5, y2: 0.5 )} 3: {linear_blend( image1: template(colors[0]) x1: 0.39, y1: 0.39 x2: 0.4, y2: 0.4 image2: linear_blend( image1: template(colors[1]) x1: 0.6, y1: 0.6 x2: 0.61, y2: 0.61 image2: template(colors[2]) ))} 4: {linear_blend( # blend = 0.16 image1: template(colors[0]) x1: 0.29, y1: 0.29 x2: 0.3, y2: 0.3 image2: linear_blend( image1: template(colors[1]) x1: 0.49, y1: 0.49 x2: 0.50, y2: 0.5 image2: linear_blend( image1: template(colors[2]) x1: 0.69, y1: 0.69 x2: 0.7, y2: 0.7 image2: template(colors[3]) )))} 5: {linear_blend( image1: template(colors[0]) x1: 0.28, y1: 0.28 x2: 0.29, y2: 0.29 image2: linear_blend( image1: template(colors[1]) x1: 0.42, y1: 0.42 x2: 0.43, y2: 0.43 image2: linear_blend( image1: template(colors[2]) x1: 0.56, y1: 0.56 x2: 0.57, y2: 0.57 image2: linear_blend( image1: template(colors[3]) x1: 0.7, y1: 0.7 x2: 0.71, y2: 0.71 image2: template(colors[4]) ))))} 6: {linear_blend( image1: template(colors[0]) x1: 0.27, y1: 0.27 x2: 0.28, y2: 0.28 image2: linear_blend( image1: template(colors[1]) x1: 0.38, y1: 0.38 x2: 0.39, y2: 0.39 image2: linear_blend( image1: template(colors[2]) x1: 0.49, y1: 0.49 x2: 0.50, y2: 0.50 image2: linear_blend( image1: template(colors[3]) x1: 0.60, y1: 0.60 x2: 0.61, y2: 0.61 image2: linear_blend( image1: template(colors[4]) x1: 0.71, y1: 0.71 x2: 0.72, y2: 0.72 image2: template(colors[5]) )))))} 7: {linear_blend( image1: template(colors[0]) x1: 0.27, y1: 0.27 x2: 0.28, y2: 0.28 image2: linear_blend( image1: template(colors[1]) x1: 0.36, y1: 0.36 x2: 0.37, y2: 0.37 image2: linear_blend( image1: template(colors[2]) x1: 0.45, y1: 0.45 x2: 0.46, y2: 0.46 image2: linear_blend( image1: template(colors[3]) x1: 0.54, y1: 0.54 x2: 0.55, y2: 0.55 image2: linear_blend( image1: template(colors[4]) x1: 0.63, y1: 0.63 x2: 0.64, y2: 0.64 image2: linear_blend( image1: template(colors[5]) x1: 0.72, y1: 0.72 x2: 0.73, y2: 0.73 image2: template(colors[6]) ))))))} 8: { template("m") } 9: { template("m") } 10: { template("m") } 11: { template("m") } 12: { template("m") } ] identity_hybrid := [ radial: identity_horizontal_hybrid vertical: identity_horizontal_hybrid horizontal: identity_horizontal_hybrid overlay: identity_horizontal_hybrid diagonal: identity_horizontal_hybrid ] color_background := { # for thumbnails if input == "hybrid" then input := "white,blue,red,{hybrid_previews},horizontal" else if input == "overlay" then input := "blue,red,{hybrid_previews},overlay" else if input == "radial" or input == "horizontal" or input == "vertical" then input := "white,blue,red,{hybrid_previews}," + input else if input == "diagonal" then input := "white,black,{hybrid_previews},diagonal" else if input == "reversed" then input := "white,blue,red,{hybrid_previews},horizontal,reversed" # What type of 'hybrid'? land := chosen(choice:"land") multi := chosen(choice:"multicolor") spectral := chosen(choice:"spectral") hybrid := chosen(choice:"hybrid") artifact := chosen(choice:"artifact") snow := chosen(choice:"snow") rainbow := chosen(choice:"blue") and chosen(choice:"red") and chosen(choice:"green") and chosen(choice:"yellow") and chosen(choice:"purple") and chosen(choice:"orange") if land and colored_lands then template := land_template # use land template instead? # The selected colors colors := sort_text( order: "(wubrg)(lpoek)" , (if chosen(choice:"white") then "w") + (if chosen(choice:"blue") then "u") + (if chosen(choice:"black") then "b") + (if chosen(choice:"red") then "r") + (if chosen(choice:"green") then "g") + (if chosen(choice:"yellow") then "l") + (if chosen(choice:"purple") then "p") + (if chosen(choice:"orange") then "o") + (if chosen(choice:"brown") then "e") + (if chosen(choice:"pink") then "k")) if multi and (hybrid or colors == "") then ( colors := colors + "m" multi := false ) if spectral and (hybrid or colors == "") then ( colors := colors + "t" multi := false ) if artifact and (hybrid or colors == "") then ( colors := colors + "a" artifact := false ) if snow and (hybrid or colors == "") then ( colors := colors + "s" snow := false ) if chosen(choice:"reversed") then colors := reverse(colors) color_count := number_of_items(in: colors) if colors == "" then colors == "c" # 'shape' / type of hybrid shape := if chosen(choice:"horizontal") then "horizontal" else if chosen(choice:"vertical") then "vertical" else if chosen(choice:"overlay") then "overlay" else if chosen(choice:"diagonal") then "diagonal" else "radial" # Determine background (allows styles to hook something else here) color_combination() } font_white := { hybrid := chosen(choice:"hybrid") artifact := chosen(choice:"artifact") snow := chosen(choice:"snow") colors := sort_text( order: "(wubrg)[lpoek]" , (if chosen(choice:"white") then "w") + (if chosen(choice:"blue") then "u") + (if chosen(choice:"black") then "b") + (if chosen(choice:"red") then "r") + (if chosen(choice:"green") then "g") + (if chosen(choice:"yellow") then "l") + (if chosen(choice:"purple") then "p") + (if chosen(choice:"orange") then "o") + (if chosen(choice:"brown") then "e") + (if chosen(choice:"pink") then "k")) + (if artifact then "a") + (if snow then "s") font_colors_white( if chosen(choice:"land") then "l" else if input == "artifact, multicolor" then "a" else if input == "artifact, spectral" then "a" else if input == "snow, multicolor" then "s" else if input == "snow, spectral" then "s" else if chosen(choice:"multicolor") then "m" else if chosen(choice:"spectral") then "t" else if artifact and snow then "a" else if artifact and not hybrid then "a" else if snow and not hybrid then "s" else if colors == "" then "c" else colors[ font_color_positions[ if chosen(choice:"horizontal") then "horizontal" else if chosen(choice:"vertical") then "vertical" else if chosen(choice:"overlay") then "overlay" else if chosen(choice:"diagonal") then "diagonal" else "radial" ][number_of_items(in: colors)] ] ) } color_combination := { # The base hybrid, without the outer frame blended over it base := base_hybrid[shape][color_count]() magic_new_blend_router := "/magic-new.mse-style/" # Put a frame around it? # Frame Color Overrides if styling.outer_color != "default" or styling.trim_color != "default" or styling.inner_color != "default" then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: (if styling.outer_color == "default" then base else template( if styling.outer_color == "white" then "w" else if styling.outer_color == "blue" then "u" else if styling.outer_color == "black" then "b" else if styling.outer_color == "red" then "r" else if styling.outer_color == "green" then "g" else if styling.outer_color == "yellow" then "l" else if styling.outer_color == "purple" then "p" else if styling.outer_color == "orange" then "o" else if styling.outer_color == "brown" then "e" else if styling.outer_color == "pink" then "k" else if styling.outer_color == "multicolor" then "m" else if styling.outer_color == "spectral" then "t" else if styling.outer_color == "artifact" then "a" else if styling.outer_color == "snow" then "s" else "c" ) ) light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png", dark: (if styling.inner_color == "default" then base else template( if styling.inner_color == "white" then "w" else if styling.inner_color == "blue" then "u" else if styling.inner_color == "black" then "b" else if styling.inner_color == "red" then "r" else if styling.inner_color == "green" then "g" else if styling.inner_color == "yellow" then "l" else if styling.inner_color == "purple" then "p" else if styling.inner_color == "orange" then "o" else if styling.inner_color == "brown" then "e" else if styling.inner_color == "pink" then "k" else if styling.inner_color == "multicolor" then "m" else if styling.inner_color == "spectral" then "t" else if styling.inner_color == "artifact" then "a" else if styling.inner_color == "snow" then "s" else "c" ) ) light: (if styling.trim_color == "default" then base else template( if styling.trim_color == "white" then "w" else if styling.trim_color == "blue" then "u" else if styling.trim_color == "black" then "b" else if styling.trim_color == "red" then "r" else if styling.trim_color == "green" then "g" else if styling.trim_color == "yellow" then "l" else if styling.trim_color == "purple" then "p" else if styling.trim_color == "orange" then "o" else if styling.trim_color == "brown" then "e" else if styling.trim_color == "pink" then "k" else if styling.trim_color == "multicolor" then "m" else if styling.trim_color == "spectral" then "t" else if styling.trim_color == "artifact" then "a" else if styling.trim_color == "snow" then "s" else "c" ) ) ) ) # Lesurgo's "Land-brid" Effect else if contains(styling.extras, match:"spell-land hybrid") and color_count == 1 then linear_blend( image1: base, image2: land_template(colors[0]), x1: 0.4, y1: 0 x2: 0.6, y2: 0 ) # Circeus' Hybrid Effect else if contains(styling.extras, match:"colorless-colored hybrid") and not artifact and not multi and color_count == 1 then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: base light: linear_blend( image1: template("c"), image2: base, x1: 0.4, y1: 0 x2: 0.6, y2: 0 ) ) else if contains(styling.extras, match:"colorless-colored hybrid") and not artifact and (multi or color_count > 1) then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("m") light: linear_blend( image1: template("c"), image2: template("m"), x1: 0.4, y1: 0 x2: 0.6, y2: 0 ) ) # Circeus' Tinged Artifact Hybrid Effect else if contains(styling.extras, match:"tinged artifact hybrid") and artifact and not multi and color_count == 1 then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a") light: linear_blend( image1: template("a"), image2: template(colors[0]), x1: 0.4, y1: 0 x2: 0.6, y2: 0 ) ) else if contains(styling.extras, match:"tinged artifact hybrid") and artifact and (multi or color_count > 1) then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a") light: linear_blend( image1: template("a"), image2: template("m"), x1: 0.4, y1: 0 x2: 0.6, y2: 0 ) ) # Rainbow Frames else if land and rainbow and type == "identity" then "rainbowl{type}.png" else if land and rainbow then "rainbowl{type}.jpg" else if rainbow and artifact then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: "rainbow{type}.jpg", ) else if rainbow and snow then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("s"), light: "rainbow{type}.jpg", ) else if rainbow and type == "identity" then "rainbow{type}.png" else if rainbow then "rainbow{type}.jpg" # Alpha Style Dual Lands else if type == "card" and land and color_count == 2 and shape != "overlay" and styling.alpha_style_blending then masked_blend( mask: "alpha_blend.png", dark: land_template(colors[0]), light: land_template(colors[1]), ) # Murmuring Bosk Effect else if land and multi and mask_multi_land_with_color() then masked_blend( mask: magic_new_blend_router + "hybrid_blend_{type}.png", dark: base, light: land_template("m"), ) # Multicolored Snow Artifact Frame else if artifact and snow and multi then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png" dark: template("m"), light: template("s"), ) ) # Spectral Snow Artifact Frame else if artifact and snow and spectral then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png" dark: template("t"), light: template("s"), ) ) # Multicolored Artifact Frame else if artifact and multi then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png" dark: template("m"), light: base, ) ) # Spectral Artifact Frame else if artifact and spectral then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png" dark: template("t"), light: base, ) ) # Snow Artifact Frame else if artifact and snow then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png" dark: template("s"), light: base, ) ) # Multicolored Snow Frame else if snow and multi then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("s"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png" dark: template("m"), light: base, ) ) # Spectral Snow Frame else if snow and spectral then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("s"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png" dark: template("t"), light: base, ) ) # Multicolored Frame else if multi then masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png", dark: template("m"), light: base, ) # Spectral Frame else if spectral then masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png", dark: template("t"), light: base, ) # Hybrid Colored Artifact Frame else if artifact and color_count > 1 and mask_hybrid_with_land() then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png", dark: template("c"), light: base ) ) # Hybrid Colored Snow Frame else if snow and color_count > 1 and mask_hybrid_with_land() then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("s"), light: masked_blend( mask: magic_new_blend_router + "multicolor_blend_{type}.png", dark: template("c"), light: base ) ) # Artifact Frame else if artifact then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("a"), light: base, ) # Snow Frame else if snow then masked_blend( mask: magic_new_blend_router + "artifact_blend_{type}.png", dark: template("s"), light: base, ) # Hybrid Frames else if color_count > 1 and mask_hybrid_with_land() then masked_blend( mask: magic_new_blend_router + "hybrid_blend_{type}.png", dark: land_template("c"), light: base, ) else base } ############################################################################################################ Scripts from Game File ############################################################## Sorting mana symbols # Rainbow is L/P/O/U/R/G # correctly sort a mana symbol (no guild mana) mana_sort := { if contains(styling.extras, match:"unsorted casting cost") then input else sort_text@(order: "XYZI[0123456789,]HSCAM(LPOEK)(WUBRG)")() } mana_sort_wedge := { if contains(styling.extras, match:"unsorted casting cost") then input else sort_text@(order: "XYZI[0123456789,]HSCAM(LOKPE)(WBGUR)")() } #mana_sort := sort_text@(order: "XYZI[0123456789,]HSCAM(LPOEK)(WUBRG)") # correctly sort guild mana mana_sort_guild := sort_text@(order: "[XYZI01234567890,HSCAMLPOEKWUBRG/|]") + replace@( match: "./.|././.|./././.|.[|]", in_context: "(^|[^/])($|[^/])", replace: {sort_text(order:"in_place((LPOEK)(WUBRG)")} ) tap_filter := sort_text@(order: "") ############################################################## Determine card color # Names of colors color_name := { if input == "W" then "white" else if input == "U" then "blue" else if input == "B" then "black" else if input == "R" then "red" else if input == "G" then "green" else if input == "L" then "yellow" else if input == "P" then "purple" else if input == "O" then "orange" else if input == "E" then "brown" else if input == "K" then "pink" else "" } color_names_6 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) + ", " + color_name(colors.4) + ", " + color_name(colors.5) } color_names_7 := { color_name(colors.0) + ", " + color_name(colors.1) + ", " + color_name(colors.2) + ", " + color_name(colors.3) + ", " + color_name(colors.4) + ", " + color_name(colors.5) + ", " + color_name(colors.6) } # color based on mana cost, input = a mana cost color_filter := sort_text@(order: "") color_filterS := sort_text@(order: "") mana_to_color := { count := number_of_items(in: colors) if hybrid == "" and snow == "" and contains(type, match:"Artifact") then # not a hybrid, not snow costed, but artifact if count == 0 then "colorless" else if count == 1 then color_names_1() + ", artifact" else if set.set_info.use_gradient_multicolor == "no" then "artifact, multicolor" # stop here else if count == 2 then color_names_2() + ", artifact, multicolor" else if set.set_info.use_gradient_multicolor != "yes" then "artifact, multicolor" # stop here else if count == 3 then color_names_3() + ", artifact, multicolor" else if count == 4 then color_names_4() + ", artifact, multicolor" else if count == 5 then color_names_5() + ", artifact, multicolor" else if count == 6 then color_names_6() + ", artifact, multicolor" else if count == 7 then color_names_7() + ", artifact, multicolor" else "artifact, multicolor" else if hybrid == "" and contains(type, match:"Artifact") then # not a hybrid, but snow costed and artifact if count == 0 then "artifact, snow" else if count == 1 then color_names_1() + ", artifact, snow" else if set.set_info.use_gradient_multicolor == "no" then "artifact, snow, multicolor" # stop here else if count == 2 then color_names_2() + ", artifact, snow, multicolor" else if set.set_info.use_gradient_multicolor != "yes" then "artifact, snow, multicolor" # stop here else if count == 3 then color_names_3() + ", artifact, snow, multicolor" else if count == 4 then color_names_4() + ", artifact, snow, multicolor" else if count == 5 then color_names_5() + ", artifact, snow, multicolor" else if count == 6 then color_names_6() + ", artifact, snow, multicolor" else if count == 7 then color_names_7() + ", artifact, snow, multicolor" else "artifact, snow, multicolor" else if hybrid == "" and snow == "" then # not a hybrid, not snow costed, not artifact if count == 0 then "colorless" else if count == 1 then color_names_1() else if set.set_info.use_gradient_multicolor == "no" then "multicolor" # stop here else if count == 2 then color_names_2() + ", multicolor" else if set.set_info.use_gradient_multicolor != "yes" then "multicolor" # stop here else if count == 3 then color_names_3() + ", multicolor" else if count == 4 then color_names_4() + ", multicolor" else if count == 5 then color_names_5() + ", multicolor" else if count == 6 then color_names_6() + ", multicolor" else if count == 7 then color_names_7() + ", multicolor" else "multicolor" else if hybrid == "" then # not a hybrid, not artifact, but snow costed if count == 0 then "snow" else if count == 1 then color_names_1() + ", snow" else if set.set_info.use_gradient_multicolor == "no" then "snow, multicolor" # stop here else if count == 2 then color_names_2() + ", snow, multicolor" else if set.set_info.use_gradient_multicolor != "yes" then "snow, multicolor" # stop here else if count == 3 then color_names_3() + ", snow, multicolor" else if count == 4 then color_names_4() + ", snow, multicolor" else if count == 5 then color_names_5() + ", snow, multicolor" else if count == 6 then color_names_6() + ", snow, multicolor" else if count == 7 then color_names_7() + ", snow, multicolor" else "snow, multicolor" else if snow == "" and contains(type, match:"Artifact") then # hybrid, and artifact, but not snow costed if count == 0 then "colorless" else if count == 1 then color_names_1() + ", artifact" else if count == 2 then color_names_2() + ", artifact" else if count == 3 then color_names_3() + ", artifact" else if count == 6 then if color_names_6() == "blue, red, green, yellow, purple, orange" then color_names_6() + ", artifact" else "artifact, multicolor" else "artifact, multicolor" else if contains(type, match:"Artifact") then # hybrid, and snow costed, and artifact if count == 0 then "artifact, snow" else if count == 1 then color_names_1() + ", artifact, snow" else if count == 2 then color_names_2() + ", artifact, snow" else if count == 3 then color_names_3() + ", artifact, snow" else if count == 6 then if color_names_6() == "blue, red, green, yellow, purple, orange" then color_names_6() + ", artifact, snow" else "artifact, snow, multicolor" else "artifact, snow, multicolor" else if snow == "" then # hybrid, not artifact, and not snow costed if count == 0 then "colorless" else if count == 1 then color_names_1() else if count == 2 then color_names_2() + ", hybrid" else if count == 6 then if color_names_6() == "blue, red, green, yellow, purple, orange" then color_names_6() + ", hybrid" else "multicolor" else "multicolor" else # hybrid and snow costed, but not artifact if count == 0 then "snow" else if count == 1 then color_names_1() + ", snow" else if count == 2 then color_names_2() + ", snow, hybrid" else if count == 6 then if color_names_6() == "blue, red, green, yellow, purple, orange" then color_names_6() + ", snow, hybrid" else "snow, multicolor" else "snow, multicolor" } # Look for a CDA that defines colors text_to_color := { # Note: running filter_text is quite slow, do a quick 'contains' check first if contains(match: card_name) then ( text := filter_text(match: regex_escape(card_name)+"()? is (colorless|all colors|((blue|white|green|red|black|yellow|purple|orange|brown|pink)((,|,? and) (blue|white|green|red|black|yellow|purple|orange|brown|pink))*))\\.") if text != "" then ( if contains(text, match: "all colors") then ( colors := "WUBRGLPOEK" if land == "land" then land_multicolor() else mana_to_color(hybrid: "") ) else ( colors := "" if contains(text, match: "white") then colors := colors + "W" if contains(text, match: "blue") then colors := colors + "U" if contains(text, match: "black") then colors := colors + "B" if contains(text, match: "red") then colors := colors + "R" if contains(text, match: "green") then colors := colors + "G" if contains(text, match: "yellow") then colors := colors + "L" if contains(text, match: "purple") then colors := colors + "P" if contains(text, match: "orange") then colors := colors + "O" if contains(text, match: "brown") then colors := colors + "E" if contains(text, match: "pink") then colors := colors + "K" if land == "land" then land_multicolor() else mana_to_color(hybrid: "") ) ) else "" ) else "" } card_color := { # usually the color of mana text_color := text_to_color(rules_text, land: is_land(type)); if text_color == "" then ( mana_color := mana_to_color(colors: color_filter(casting_cost), hybrid: color_filterH(casting_cost), snow: color_filterS(casting_cost)) if mana_color == "colorless" and is_land (type) then land_to_color(watermark) else if mana_color == "colorless" and is_artifact(type) then "artifact" else mana_color ) else text_color }; # Number of colors in a card_color card_color_color_count := count_chosen@(choices: "white,blue,black,red,green,yellow,purple,orange,brown,pink,artifact,snow") # Clean up color field card_color_filter := { colors := card_color_color_count() if colors > 2 then input := remove_choice(choice: "overlay") if colors > 1 then ( input := require_choice(choices: "multicolor, hybrid, land, artifact, snow, spectral") input := exclusive_choice(choices: "multicolor, hybrid, spectral") input := require_exclusive_choice(choices: "horizontal, vertical, radial, diagonal, overlay") ) else input := remove_choice(choices: "radial, horizontal, vertical, diagonal, overlay, hybrid, reversed") input := exclusive_choice(choices: "multicolor, spectral") if chosen(choice:"overlay") then input := remove_choice(choice: "reversed") input } ############################################################## Card number # Index for sorting, white cards are first, so white->A, blue->B, .. , # The code consists of 4 parts: # normal/token, color, shifted, split hybrid_color_pair_sort := { colors := sort_text(casting_cost, order: "") if not set.sort_hybrid_in_pairs then "HK" else if colors == "WU" then "HA" else if colors == "UB" then "HB" else if colors == "BR" then "HC" else if colors == "RG" then "HD" else if colors == "WG" then "HE" else if colors == "WB" then "HF" else if colors == "UR" then "HG" else if colors == "BG" then "HH" else if colors == "WR" then "HI" else if colors == "UG" then "HJ" else if colors == "WP" then "HJA" else if colors == "UP" then "HJB" else if colors == "BP" then "HJC" else if colors == "RP" then "HJD" else if colors == "GP" then "HJE" else if colors == "WO" then "HJF" else if colors == "UO" then "HJG" else if colors == "BO" then "HJH" else if colors == "RO" then "HJI" else if colors == "GO" then "HJM" else if colors == "PO" then "HJN" else "HK" } multi_color_pair_sort := { colors := sort_text(casting_cost, order: "") if not set.sort_multicolor_in_pairs then "GK" else if colors == "WU" then "GA" else if colors == "UB" then "GB" else if colors == "BR" then "GC" else if colors == "RG" then "GD" else if colors == "WG" then "GE" else if colors == "WB" then "GF" else if colors == "UR" then "GG" else if colors == "BG" then "GH" else if colors == "WR" then "GI" else if colors == "UG" then "GJ" else if colors == "WP" then "GJA" else if colors == "UP" then "GJB" else if colors == "BP" then "GJC" else if colors == "RP" then "GJD" else if colors == "GP" then "GJE" else if colors == "WO" then "GJF" else if colors == "UO" then "GJG" else if colors == "BO" then "GJH" else if colors == "RO" then "GJI" else if colors == "GO" then "GJM" else if colors == "PO" then "GJN" else if contains(card.casting_cost, match:"/") then "GL" else "GK" } color_of_card := { card_color := card.card_color casting_cost := card.casting_cost type := card.super_type if card.shape == "split" and card_color != card.card_color_2 then "I" # Diff Color Splits else if chosen(choice: "land", card_color) then ( # Lands if card.rarity != "basic land" then "L" # Nonbasic Land else basic_land_sort() # Basic Land ) else if is_null_cost(casting_cost) then ( # Non-Land Cards with no or zero costs. if chosen(choice: "colorless", card_color) then "A" # Clear Colorless else if chosen(choice: "hybrid", card_color) then "HK" # Hybrids else if is_multicolor(card_color) then "GK" # Multicolor else if chosen(choice:"white", card_color) then "B" # White else if chosen(choice:"blue", card_color) then "C" # Blue else if chosen(choice:"black", card_color) then "D" # Black else if chosen(choice:"red", card_color) then "E" # Red else if chosen(choice:"green", card_color) then "F" # Green else "J" # Artifact ) else ( # Cards with costs. colors := sort_text(casting_cost, order: "") if colors == "" and contains(type, match:"Artifact") then "J" # Artifact else if colors == "" then "A" # Clear Colorless else if colors == "W" then "B" # White else if colors == "U" then "C" # Blue else if colors == "B" then "D" # Black else if colors == "R" then "E" # Red else if colors == "G" then "F" # Green else if colors == "L" then "FTA" # Yellow else if colors == "P" then "FTB" # Purple else if colors == "O" then "FTC" # Orange else if colors == "E" then "FTD" # Brown else if colors == "K" then "FTE" # Pink else if is_hybrid_cost() then hybrid_color_pair_sort() # Hybrid (by pairs) else if contains(casting_cost, match:"/") and contains(type, match:"Artifact") then "I" # Hybrid Artifacts else multi_color_pair_sort() # Multicolor (by pairs) ) } ############################################################## Utilities for keywords # replaces — correctly for_mana_costs := format_cost := { if input.separator_before == "—" and contains(input.param, match: " ") then ( if contains(input.param, match:",") then ( if match(match: "^[HSCAMTQXYZIWUBRGLPOEK0-9,/|]+,", input.param) then "{add}{combined_cost(input.param)}" else "{combined_cost(input.param)}" ) else "{alternative_cost(input.param)}" ) else "{add}{input.param}" } combined_cost := replace@(match:", [A-Z]", replace: { to_lower() })+ replace@(match:",", replace:" and")+ replace@(match:"^[HSCAMTQXYZIWUBRGLPOEK0-9,/|]", in_context: "(^|[[:space:]])", replace: "&")+ replace@(match:"^[A-Z]", replace: { to_lower() }) ############################################################## The text box # Filters for the text box # context in which mana symbols are found mana_context := "(?ix) # case insensitive, ignore whitespace (^|[[:space:]\"(“']) # start of a word ( : # G: something | , # G, tap: something | [ ]can[ ]be[ ]pay | (pays?|additional|costs?|the # pay X. creatures cost 1 less. pay an additional G. |adds?|pay(ed)?[ ](with|using) ) ([ ]either)? # pay either X or Y ([ ](]*>)?[HSCAMTQXYZIWUBRGLPOEK0-9,/|]+(]*>)?,)* # pay X, Y or Z ([ ](]*>)?[HSCAMTQXYZIWUBRGLPOEK0-9,/|]+(]*>)?[ ](and|or|and/or))* # pay X or Y [ ] ([,.)]|$ # (end of word) |[ ][^ .,]*$ # still typing... |[ ]( or | and | in | less | more | to ) # or next word is ... ) ) | # keyword argument that is declared as mana | [ ]* # keyword argument that is declared as cost | , # keyword argument that is declared as cost "; # the rule text filter # - adds mana symbols # - makes text in parentheses italic text_filter := # step 1 : remove all automatic tags remove_tag@(tag: "") + remove_tag@(tag: "") + remove_tag@(tag: "") + remove_tag@(tag: "{keyword}" else keyword + if expand then " ({reminder})" }) + # step 2b : move action keywords' reminder text to the end of the line replace@( match: "((?:(?!]*>)(((?!]*>[^)]+[)]]*>)([^\n]+)\\1" replace: "\\2\\1" ) + # step 3a : expand shortcut word CARDNAME replace@( match: "CARDNAME", in_context: "(^|[[:space:]]|\\()", # TODO: Allow any punctuation before replace: "" ) + # step 3b : expand shortcut word LEGENDNAME replace@( match: "LEGENDNAME", in_context: "(^|[[:space:]]|\\()", # TODO: Allow any punctuation before replace: "" ) + # step 3c : fill in atom fields tag_contents@( tag: "", contents: { "" + (if card_name=="" then "CARDNAME" else card_name) + "" } ) + tag_contents@( tag: "", contents: { "" + (if card_name=="" then "LEGENDNAME" else legend_filter(card_name)) + "" } ) + # step 4 : explict non mana symbols replace@( match: "\\][HSCAMTQXYZIWUBRGLPOEK0-9/|]+\\[", replace: {"" + mana_filter_t() + ""} ) + # step 5 : add mana & tap symbols replace@( match: "\\b[HSCAMTQXYZIWUBRGLPOEK0-9/|]+\\b", in_context: mana_context, replace: {"" + mana_filter_t() + ""} ) + # step 5b : add explict mana symbols replace@( match: "\\[[HSCAMTQXYZIWUBRGLPOEK0-9/|]+\\]", replace: {"" + mana_filter_t() + ""} ) + # step 6a : curly double quotes replace@( match: "[[.quotation-mark.]]|”", in_context: "[ ]+|^", replace: "“" )+ replace@( match: "[[.quotation-mark.]]", replace: "”" )+ # step 7 : italicize text in parenthesis replace@( match: "[(]([^)\n]|[(][^)\n]*[)])*[)]?", in_context: "(^|[[:space:]])|&") + # step 8 : automatic capitalization, but not after "(" replace@( match: "([ ]*: |—| — )" # preceded by this + "([[:lower:]])" # match this + "(?![)])", # not followed by this replace: { _1 + to_upper(_2) }) + #curly_quotes + # step 9 : spellcheck { 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/dictionary/magic-words", extra_match: additional_text_words ) else input } ############################################################## Other boxes colorless_color := { if contains(styling.extras, match:"colored xyz mana") and card.card_color=="white" then "w" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="blue" then "u" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="black" then "b" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="red" then "r" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="green" then "g" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="colorless" and contains(card.casting_cost, match:"L") then "l" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="colorless" and contains(card.casting_cost, match:"P") then "p" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="colorless" and contains(card.casting_cost, match:"O") then "o" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="colorless" and contains(card.casting_cost, match:"E") then "e" else if contains(styling.extras, match:"colored xyz mana") and card.card_color=="colorless" and contains(card.casting_cost, match:"K") then "k" else "c" } typesymbol_for := to_text + replace@(match: "(Legendary|Basic|Snow|World| )", replace: "") + { if input == "Creature" then "creature" else if input == "Sorcery" then "sorcery" else if input == "Instant" then "instant" else if input == "Artifact" then "artifact" else if input == "Enchantment" then "enchantment" else if input == "Land" then "land" else if input == "Planeswalker" then "planeswalker" else if input == "Structure" then "structure" else "multitype" } ############################################################## Statistics utilities # Converted mana cost is_half_mana := match@(match: "1/2|[|][HSCAMWUBRGLPOEK]") is_colored_mana := match@(match: "[WUBRGLPOEK]") cmc_split := break_text@(match: "(?ix) 1/2 | [|][WUBRGLPOEK] | [0-9,]+(?!/[WUBRGHSCAMLPOEKCTQ2]) | [WUBRGHSCAMLPOEK0-9,.](/[WUBRGHSCAMLPOEK])\{0,4} ") primary_card_color := { artifact := chosen(choice:"artifact") and not (chosen(choice:"white") or chosen(choice:"blue") or chosen(choice:"black") or chosen(choice:"red") or chosen(choice:"green")) land := chosen(choice:"land") multi := chosen(choice:"multicolor") hybrid := chosen(choice:"hybrid") white := chosen(choice:"white") blue := chosen(choice:"blue") black := chosen(choice:"black") red := chosen(choice:"red") green := chosen(choice:"green") if land then "land" else if multi then "multicolor" else if hybrid then "hybrid" else if artifact then "artifact" else if white then "white" else if blue then "blue" else if black then "black" else if red then "red" else if green then "green" else input } ############################################################## Set info fields set info style: symbol: variation: name: invertedcommon border radius: 0.10 fill type: solid fill color: rgb(255,255,255) border color: rgb(0,0,0) variation: name: watermark border radius: 0.10 fill type: solid fill color: rgb(255,255,255) border color: rgba(0,0,0,0) ############################################################## Extra style options styling field: type: choice name: artifact style description: Choose the style of artifacts: light = before Fifth Dawn, dark = used since Fifth Dawn, brown = old rust style. initial: dark choice: light choice: dark choice: brown styling field: type: boolean name: saturated multicolor description: Should multicolor cards be more saturated? This is done on real cards. initial: yes styling field: type: boolean name: grey hybrid name description: Use a grey background for the name and type line on hybrid cards. This is done on real cards. styling field: type: boolean name: colored multicolor land name description: Use a colored background for the name and type on multicolor land cards with a basic land type. This is done on real cards. styling field: type: boolean name: use guild mana symbols description: Use the Ravnica guild symbols instead of the official half/half circles for hybrid mana. initial: no styling field: type: package choice name: text box mana symbols match: magic-mana-*.mse-symbol-font initial: magic-mana-small-extra.mse-symbol-font styling field: type: package choice name: pt box symbols match: magic-pt-symbols-*.mse-symbol-font initial: magic-pt-symbols-extra.mse-symbol-font styling field: type: choice name: tap symbol description: What tap and untap symbols should be used on cards? initial: modern choice: modern choice: old choice: diagonal T styling field: type: choice name: center text description: When to center text (short text only means only on one-line cards with no flavor text) choice: always choice: short text only choice: never initial: no styling field: type: boolean name: alpha style blending description: Use Alpha-style dual blending initial: no styling field: type: boolean name: inverted common symbol description: Should the common rarity symbol be inverted, like in Coldsnap? initial: no styling field: type: choice name: image size description: Should the art extend into a transparent textbox? initial: standard choice: standard choice: extended choice: full styling field: type: color name: artist font color description: The default artist and copyright line font color for cards choice: name: black color: rgb(0,0,0) choice: name: white color: rgb(255,255,255) styling field: type: text name: card creator description: The default creator of the set. styling field: type: package choice name: overlay description: Should there be an overlay applied, such as foil? match: magic-overlay-*.mse-include required: false styling field: type: choice name: overlay combine type description: What type of combine should the overlay use? Only works if overlay is enabled. choice: normal choice: add choice: subtract choice: stamp choice: difference choice: negation choice: multiply choice: darken choice: lighten choice: color dodge choice: color burn choice: screen choice: overlay choice: hard light choice: soft light choice: reflect choice: glow choice: freeze choice: heat choice: and choice: or choice: xor choice: shadow choice: symmetric overlay styling field: type: boolean name: foil art description: Should the illustration on a card be covered by the foil layer? initial: yes styling field: type: choice name: overlay hybrid type description: What type of combine should the overlay hybrid use? Only affects overlay hybrids. Symmetric overlay is normal. initial: symmetric overlay choice: normal choice: add choice: subtract choice: stamp choice: difference choice: negation choice: multiply choice: darken choice: lighten choice: color dodge choice: color burn choice: screen choice: overlay choice: hard light choice: soft light choice: reflect choice: glow choice: freeze choice: heat choice: and choice: or choice: xor choice: shadow choice: symmetric overlay styling field: type: choice name: outer color description: Should the outside of the frame be a special color? choice: default choice: white choice: blue choice: black choice: red choice: green choice: yellow choice: purple choice: orange choice: brown choice: pink choice: artifact choice: snow choice: multicolor choice: spectral choice: colorless styling field: type: choice name: trim color description: Should the trim of the frame be a special color? choice: default choice: white choice: blue choice: black choice: red choice: green choice: yellow choice: purple choice: orange choice: brown choice: pink choice: artifact choice: snow choice: multicolor choice: spectral choice: colorless styling field: type: choice name: inner color description: Should the inside of the frame be a special color? choice: default choice: white choice: blue choice: black choice: red choice: green choice: yellow choice: purple choice: orange choice: brown choice: pink choice: artifact choice: snow choice: multicolor choice: spectral choice: colorless styling field: type: multiple choice name: extras description: Which extra options would you like to use? choice: clock watermark choice: scales watermark choice: mtgsalvation rarity choice: type symbol with name choice: spell-land hybrid choice: colorless-colored hybrid choice: tinged artifact hybrid choice: holiday text choice: colored xyz mana choice: unsorted casting cost styling field: type: choice name: separated watermark description: Should the watermark be separated from the text? choice: no choice: yes, above text choice: yes, below text styling field: type: text name: popout image style description: The styling instructions for the popout image field, formatted as "left,top,width,height,". The text MUST end with a comma. styling style: artifact style: render style: both choice images: light: /magic-new.mse-style/oacard.jpg dark: /magic-new.mse-style/acard.jpg brown: /magic-new.mse-style/bacard.jpg use guild mana symbols: choice images: yes: /magic-mana-small.mse-symbol-font/mana_guild_rg.png no: /magic-mana-small.mse-symbol-font/mana_rg.png tap symbol: render style: both choice images: modern: /magic-mana-large.mse-symbol-font/mana_t.png old: /magic-mana-large.mse-symbol-font/mana_t_old.png diagonal T: /magic-mana-large.mse-symbol-font/mana_t_older.png extras: render style: checklist direction: vertical ############################################################## Card fields include file: /magic-modules.mse-include/corners/card_fields include file: /magic-modules.mse-include/information/the_list_old card style: ############################# Background stuff border color: left: 0 top: 0 width: 375 height: 523 radius: 18 left width: 17 right width: 17 top width: 17 bottom width: 18 z index: 7 ############################# Name line name: left: { if card.card_symbol=="none" and (card.type_symbol=="none" or not contains(styling.extras, match:"type symbol with name")) then 32 else if card.card_symbol == "none" then 49 else if card.type_symbol == "none" or typesymbol_type(type:card.super_type) == "none" then 51 else 51} top: 30 right: { 341 - card_style.casting_cost.content_width } height: 23 alignment: bottom shrink-overflow padding bottom: 0 z index: 4 font: name: Matrix size: 17 weight: bold color: rgb(0,0,0) casting cost: right: 343 top : 31 width: { max(30, card_style.casting_cost.content_width) + 5 } height: 23 alignment: middle right font: name: MPlantin size: 15 symbol font: name: magic-mana-large-extra size: 15 alignment: middle right always symbol: true z index: 5 padding top: 0 card symbol: left: {if card.card_symbol == "none" then 20 else if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 28 else 46} top: {if card.card_symbol == "none" then 42 else 31} height: 21 width: 23 z index: 5 render style: image image: { card_symbol_image(face: 1) } type symbol: left: {if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 18 else 30} top: {if card.type_symbol == "none" or not contains(styling.extras, match:"type symbol with name") then 22 else 32} width: 21 height: 20 z index: 5 render style: image alignment: middle center visible: { contains(styling.extras, match:"type symbol with name") } choice images: artifact: /magic-future-common.mse-include/artifact_black.png creature: /magic-future-common.mse-include/creature_black.png enchantment: /magic-future-common.mse-include/enchantment_black.png instant: /magic-future-common.mse-include/instant_black.png land: /magic-future-common.mse-include/land_black.png multitype: /magic-future-common.mse-include/multitype_black.png sorcery: /magic-future-common.mse-include/sorcery_black.png planeswalker: /magic-future-common.mse-include/planeswalker_black.png structure: structure_black.png ############################# Image image: left: { if styling.image_size == "full" then 17 else 32 } top: { if styling.image_size == "full" then 17 else 62 } width: { if styling.image_size == "full" then 341 else 311 } height: { if styling.image_size == "extended" then 408 else if styling.image_size == "full" then 488 else 228 } z index: 2 mask: { ( if styling.image_size == "full" then "imagemask_" else "/magic-new.mse-style/imagemask_") + styling.image_size + ".png" } default: {default_image(card.card_color)} image 2: left: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).0 else "0"} top: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).1 else "0"} width: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).2 else "0"} height: {if comma_count(styling.popout_image_style) == ",,,," then split_text(match:",", styling.popout_image_style).3 else "0"} z index: 1010 ############################# Card type type: left: { if has_identity() then "55" else "35" } top: 298 width: { (if has_identity() then "288" else "308") - max(22,card_style.rarity.content_width) } height: 20 alignment: bottom shrink-overflow z index: 4 padding top: 4 font: name: Matrix size: 14 color: rgb(0,0,0) separator color: rgb(128,128,128) rarity: right: 342 top : 297 width: 44 height: 22 z index: 5 render style: image alignment: middle right visible: { not contains(styling.extras, match:"mtgsalvation rarity") } include file: /magic-modules.mse-include/rarities/choice_images ############################# Text box text: left: 31 top: { if contains(styling.separated_watermark, match:"above") then 399 else 328 } width: 311 height: { if contains(styling.separated_watermark, match: "no") then 142 else 71 } font: name: MPlantin italic name: MPlantin-Italic size: 14 scale down to: 6 color: rgb(0,0,0) symbol font: name: { styling.text_box_mana_symbols } size: 14 alignment: script: if (styling.center_text == "short text only" and not contains(match:"\n", card.rule_text) and card.flavor_text == "" and card_style.text.content_lines <= 2) or styling.center_text == "always" then "middle center" else "middle left" z index: 5 padding left: 6 padding right: 4 line height hard: 1.2 line height line: 1.5 line height soft: 0.9 line height hard max: 1.3 line height line max: 1.6 ############################# PT pt: z index: 5 left: 284 top: 466 width: 60 height: 28 alignment: center middle shrink-overflow font: name: ModMatrix size: 17 weight: bold color: rgb(0,0,0) separator color: rgb(200,0,0) symbol font: name: {styling.pt_box_symbols} size: 8 alignment: middle right ############################# Card sorting / numbering ############################# Copyright stuff illustrator: left: 56 top : 478 width: 217 height: 16 z index: 4 font: name: Matrix size: 10 weight: bold color: { styling.artist_font_color } copyright line: left: 30 top : 493 width: 247 height: 12 z index: 4 font: name: MPlantin size: 6.5 color: { styling.artist_font_color } ############################################################## Extra card fields extra card field: type: multiple choice name: identity empty choice: colorless choice: white choice: blue choice: black choice: red choice: green choice: yellow choice: purple choice: orange choice: brown choice: name: pink line below: true choice: artifact choice: snow choice: land choice: multicolor choice: spectral choice: name: hybrid line below: true choice: name: horizontal type: radio choice: name: vertical type: radio choice: name: radial type: radio choice: name: diagonal type: radio choice: name: overlay type: radio choice: name: reversed script: card_color_filter(value) default: extra_card.frame extra card field: type: multiple choice name: pt box empty choice: colorless choice: white choice: blue choice: black choice: red choice: green choice: yellow choice: purple choice: orange choice: brown choice: name: pink line below: true choice: artifact choice: snow choice: land choice: multicolor choice: spectral choice: name: hybrid line below: true choice: name: horizontal type: radio choice: name: vertical type: radio choice: name: radial type: radio choice: name: diagonal type: radio choice: name: overlay type: radio choice: name: reversed script: card_color_filter(value) default: card_color(casting_cost: card.casting_cost, rules_text: card.rule_text, type: card.super_type, watermark: card.watermark, card_name: card.name) extra card field: type: choice name: emblem include file: /magic-watermarks-extra.mse-include/watermark-names extra card field: type: choice name: foil layer choice: foil save value: false editable: false extra card field: type: multiple choice name: frame empty choice: colorless choice: white choice: blue choice: black choice: red choice: green choice: yellow choice: purple choice: orange choice: brown choice: name: pink line below: true choice: artifact choice: snow choice: land choice: multicolor choice: spectral choice: name: hybrid line below: true choice: name: horizontal type: radio choice: name: vertical type: radio choice: name: radial type: radio choice: name: diagonal type: radio choice: name: overlay type: radio choice: name: reversed script: card_color_filter(value) default: card_color(casting_cost: card.casting_cost, rules_text: card.rule_text, type: card.super_type, watermark: card.watermark, card_name: card.name) extra card field: type: text name: creator computer save value: false editable: false show statistics: false script: ":" extra card field: type: text name: creator save value: false script: styling.card_creator show statistics: false editable: false extra card field: type: text name: value save value: true description: The treasure value or poison value of the card. extra card field: type: choice name: value box save value: true description: The type of value for the value field. choice: none choice: treasure choice: poison default: default_value_box(value) extra card field: type: text name: promo label save value: true description: The golden promo label. extra card field: type: choice name: clock watermark save value: false editable: false script: "clock" extra card field: type: choice name: scales watermark save value: false editable: false script: "scales" extra card field: type: choice name: mtgs rarity 1 choice: mtgs save value: false editable: false extra card field: type: choice name: mtgs rarity 2 choice: mtgs save value: false editable: false extra card field: type: choice name: mtgs rarity 3 choice: mtgs save value: false editable: false extra card field: type: choice name: mtgs rarity 4 choice: mtgs save value: false editable: false extra card field: type: choice name: mtgs rarity 5 choice: mtgs save value: false editable: false extra card style: pt box: left: 271 top: 461 width: 81 height: 42 z index: 1 mask: /magic-new.mse-style/ptmask.png visible: { card.pt != "" } render style: image image: { card_ptbox() } emblem: left: 117 top: { if styling.separated_watermark == "no" then 321 else if contains(styling.separated_watermark, match: "above") then 328 else 399 } top: 321 width: 138 height: { if contains(styling.separated_watermark, match: "yes") then 71 else 156 } z index: 4 render style: image alignment: middle center include file: /magic-watermarks-extra.mse-include/watermarks frame: left: 0 top: 0 width: 375 height: 523 z index: 0 render style: image popup style: in place image: { card_background() } foil layer: left: 0 top : 0 width: 375 height: 523 z index: 1050 render style: image mask: {if not styling.foil_art then "no_art_foil_mask.png" else nil} image: {if styling.overlay == "" then nil else set_combine(input: styling.overlay + "/overlay.png", combine: styling.overlay_combine_type)} creator computer: left: { 60 + card_style.illustrator.content_width } top: 478 width: 20 height: 16 z index: 5 visible: { styling.card_creator != "" } font: name: Wingdings size: 11 weight: bold color: { styling.artist_font_color } creator: left: { if styling.card_creator != "" then 78 + card_style.illustrator.content_width else 400} top: 478 width: { 195 - card_style.illustrator.content_width } height: 16 z index: 5 font: name: Matrix size: 10 weight: bold color: { styling.artist_font_color } value: #left: 328 <- this puts the value in the upper right corner left: 23 top : 67 width: 15 height: 23 alignment: middle center font: name: ModMatrix size: 17 shadow color: rgb(255,255,255) shadow blur: 6 shadow displacement x: 0 shadow displacement y: 0 z index: 5 value box: #left: 318 <- this puts the value in the upper right corner left: 13 top : 64 width: 35 height: 29 alignment: middle center render style: image popup style: in place z index: 4 choice images: treasure: treasure.png poison: poison.png promo label: left: 40 top : 262 width: 295 height: 29 alignment: middle right z index: 4 font: name: { if contains(styling.extras, match:"holiday text") then "MagicMedieval" else "ModMatrix" } size: 14 color: { if contains(styling.extras, match:"holiday text") then rgb(217,0,0) else rgb(223,169,41) } clock watermark: left: 30 top: 327 width: 312 height: 143 z index: 4 render style: image image: clock_watermark.png visible: { contains(styling.extras, match: "clock watermark") } scales watermark: left: 30 top: 327 width: 312 height: 143 z index: 4 render style: image image: {set_alpha("scales_watermark.png", alpha: 0.5)} visible: { contains(styling.extras, match: "scales watermark") } mtgs rarity 1: right: 342 top : 297 width: 44 height: 22 z index: 4 render style: image alignment: middle right visible: { contains(styling.extras, match:"mtgsalvation rarity") } image: script: symbol_variation( symbol: "mtgs1.mse-symbol", fill_type: "linear gradient", border_radius: 0.07, border_color_1: rgb(0,0,0), border_color_2: rgb(0,0,0), fill_color_1: rgb(63,119,188), fill_color_2: rgb(135,178,231), center_x: 0.5, center_y: 0.5, end_x: 0.4, end_y: 0.4 ) mtgs rarity 2: right: 342 top : 297 width: 44 height: 22 z index: 4 render style: image alignment: middle right visible: { contains(styling.extras, match:"mtgsalvation rarity") } image: script: symbol_variation( symbol: "mtgs2.mse-symbol", fill_type: "linear gradient", border_radius: 0.07, border_color_1: rgb(0,0,0), border_color_2: rgb(0,0,0), fill_color_1: rgb(133,133,133), fill_color_2: rgb(205,204,204) center_x: 0.5, center_y: 0.5, end_x: 0.4, end_y: 0.4 ) mtgs rarity 3: right: 342 top : 297 width: 44 height: 22 z index: 4 render style: image alignment: middle right visible: { contains(styling.extras, match:"mtgsalvation rarity") } image: script: symbol_variation( symbol: "mtgs3.mse-symbol", fill_type: "linear gradient", border_radius: 0.07, border_color_1: rgb(0,0,0), border_color_2: rgb(0,0,0), fill_color_1: rgb(193,32,38), fill_color_2: rgb(220,117,122) center_x: 0.5, center_y: 0.5, end_x: 0.4, end_y: 0.4 ) mtgs rarity 4: right: 342 top : 297 width: 44 height: 22 z index: 4 render style: image alignment: middle right visible: { contains(styling.extras, match:"mtgsalvation rarity") } image: script: symbol_variation( symbol: "mtgs4.mse-symbol", fill_type: "linear gradient", border_radius: 0.07, border_color_1: rgb(0,0,0), border_color_2: rgb(0,0,0), fill_color_1: rgb(56,184,74), fill_color_2: rgb(117,217,131) center_x: 0.5, center_y: 0.5, end_x: 0.4, end_y: 0.4 ) mtgs rarity 5: right: 342 top : 297 width: 44 height: 22 z index: 4 render style: image alignment: middle right visible: { contains(styling.extras, match:"mtgsalvation rarity") } image: script: symbol_variation( symbol: "mtgs5.mse-symbol", fill_type: "linear gradient", border_radius: 0.07, border_color_1: rgb(0,0,0), border_color_2: rgb(0,0,0), fill_color_1: rgb(183,174,68), fill_color_2: rgb(250,237,92) center_x: 0.5, center_y: 0.5, end_x: 0.4, end_y: 0.4 ) identity: left: 34 top: 299 width: 17 height: 17 z index: 2 render style: image visible: { has_identity() } image: { card_identity() }