diff --git a/data/magic-rule-card.mse-style/card_sample.png b/data/magic-rule-card.mse-style/card_sample.png new file mode 100644 index 000000000..7d5b0b480 Binary files /dev/null and b/data/magic-rule-card.mse-style/card_sample.png differ diff --git a/data/magic-rule-card.mse-style/divider.png b/data/magic-rule-card.mse-style/divider.png new file mode 100644 index 000000000..0af30a60c Binary files /dev/null and b/data/magic-rule-card.mse-style/divider.png differ diff --git a/data/magic-rule-card.mse-style/image_borderless_mask.png b/data/magic-rule-card.mse-style/image_borderless_mask.png new file mode 100644 index 000000000..ca75d5ca3 Binary files /dev/null and b/data/magic-rule-card.mse-style/image_borderless_mask.png differ diff --git a/data/magic-rule-card.mse-style/image_mask.png b/data/magic-rule-card.mse-style/image_mask.png new file mode 100644 index 000000000..3fa175058 Binary files /dev/null and b/data/magic-rule-card.mse-style/image_mask.png differ diff --git a/data/magic-rule-card.mse-style/pinlines.png b/data/magic-rule-card.mse-style/pinlines.png new file mode 100644 index 000000000..cb91e2574 Binary files /dev/null and b/data/magic-rule-card.mse-style/pinlines.png differ diff --git a/data/magic-rule-card.mse-style/pt.png b/data/magic-rule-card.mse-style/pt.png new file mode 100644 index 000000000..473bbeba6 Binary files /dev/null and b/data/magic-rule-card.mse-style/pt.png differ diff --git a/data/magic-rule-card.mse-style/stamp_border_mask_round.png b/data/magic-rule-card.mse-style/stamp_border_mask_round.png new file mode 100644 index 000000000..613165915 Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_border_mask_round.png differ diff --git a/data/magic-rule-card.mse-style/stamp_border_mask_triangle.png b/data/magic-rule-card.mse-style/stamp_border_mask_triangle.png new file mode 100644 index 000000000..7cfaa46bd Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_border_mask_triangle.png differ diff --git a/data/magic-rule-card.mse-style/stamp_none.png b/data/magic-rule-card.mse-style/stamp_none.png new file mode 100644 index 000000000..374ada875 Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_none.png differ diff --git a/data/magic-rule-card.mse-style/stamp_round.png b/data/magic-rule-card.mse-style/stamp_round.png new file mode 100644 index 000000000..4d9e361a9 Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_round.png differ diff --git a/data/magic-rule-card.mse-style/stamp_shadow_none.png b/data/magic-rule-card.mse-style/stamp_shadow_none.png new file mode 100644 index 000000000..89e8600da Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_shadow_none.png differ diff --git a/data/magic-rule-card.mse-style/stamp_shadow_round.png b/data/magic-rule-card.mse-style/stamp_shadow_round.png new file mode 100644 index 000000000..ae3ec90a9 Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_shadow_round.png differ diff --git a/data/magic-rule-card.mse-style/stamp_shadow_triangle.png b/data/magic-rule-card.mse-style/stamp_shadow_triangle.png new file mode 100644 index 000000000..36dce9931 Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_shadow_triangle.png differ diff --git a/data/magic-rule-card.mse-style/stamp_textbox_mask_none.png b/data/magic-rule-card.mse-style/stamp_textbox_mask_none.png new file mode 100644 index 000000000..31f5730c7 Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_textbox_mask_none.png differ diff --git a/data/magic-rule-card.mse-style/stamp_textbox_mask_round.png b/data/magic-rule-card.mse-style/stamp_textbox_mask_round.png new file mode 100644 index 000000000..0c6171daa Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_textbox_mask_round.png differ diff --git a/data/magic-rule-card.mse-style/stamp_textbox_mask_triangle.png b/data/magic-rule-card.mse-style/stamp_textbox_mask_triangle.png new file mode 100644 index 000000000..6c788bbae Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_textbox_mask_triangle.png differ diff --git a/data/magic-rule-card.mse-style/stamp_triangle.png b/data/magic-rule-card.mse-style/stamp_triangle.png new file mode 100644 index 000000000..7787eb0a1 Binary files /dev/null and b/data/magic-rule-card.mse-style/stamp_triangle.png differ diff --git a/data/magic-rule-card.mse-style/stampline.png b/data/magic-rule-card.mse-style/stampline.png new file mode 100644 index 000000000..1efbeff43 Binary files /dev/null and b/data/magic-rule-card.mse-style/stampline.png differ diff --git a/data/magic-rule-card.mse-style/style b/data/magic-rule-card.mse-style/style new file mode 100644 index 000000000..1380fc928 --- /dev/null +++ b/data/magic-rule-card.mse-style/style @@ -0,0 +1,654 @@ +mse version: 2.1.2 +game: magic +short name: Rules Card +full name: Mechanics Reminder +icon: card_sample.png +position hint: 999 + +version: 2024-10-01 +depends on: + package: magic.mse-game + version: 2014-06-25 +depends on: + package: magic-mana-large.mse-symbol-font + version: 2007-09-23 +depends on: + package: magic-mana-small.mse-symbol-font + version: 2007-09-23 +depends on: + package: magic-modules.mse-include + version: 2024-10-01 +depends on: + package: magic-mainframe-extras.mse-include + version: 2007-09-23 + +card width: 744 +card height: 1039 +card dpi: 297 + +### blanks by GenevensiS +### code by GenevensiS + +############################################################## Extra scripts + +init script: + card_shape := { if styling.count_as == "normal card" then "normal" else styling.count_as } + + swap_fonts_pt_default := + [ + name: {"Beleren Bold"}, + size: {28.0}, + color: {"black"}, + vertical: {0}, + italic: {"Beleren Bold"} + ] + + swap_fonts_body_default := + [ + name: {"MPlantin"}, + size: {27.0}, + color: { "white" }, + vertical: {0}, + italic: {"MPlantin-Italic"} + ] + + swap_fonts_name_default := + [ + name: {"Beleren Small Caps Bold"}, + size: {34.0}, + color: {"white"}, + vertical: {0}, + italic: {""} + ] + + information_secondary_offset_pt_left_1 := { -8 } + + invert_watermark_1 := { true } + + is_promo := { styling.promo } + + is_unsorted := { styling.remove_from_autocount } + + chop_top := { if styling.chop_text_box == "-" then 0 else clamp(styling.chop_text_box, maximum: 260, minimum: -460) } + + name_margin := + { + casting_cost_margin := if card_style.casting_cost.content_width == 0 then 0 else card_style.casting_cost.content_width + 7 + rarity_margin := if styling.visible_rarity then rarity_size() else 0 + max(casting_cost_margin, rarity_margin) + } + + popout_left := { split := split_comma(styling.popout_image_coordinates); if length(split) > 3 and split.0 != "" then max(min(split.0,1500),-500) else 0 } + popout_top := { split := split_comma(styling.popout_image_coordinates); if length(split) > 3 and split.1 != "" then max(min(split.1,2000),-500) else 0 } + popout_width := { split := split_comma(styling.popout_image_coordinates); if length(split) > 3 and split.2 != "" then max(min(split.2,1500),0) else 0 } + popout_height := { split := split_comma(styling.popout_image_coordinates); if length(split) > 3 and split.3 != "" then max(min(split.3,2000),0) else 0 } + + active_abilities := + { + (to_int(styling.number_of_textboxes) or else digital_map[styling.number_of_textboxes] or else 7) - 1 + } + + typebox_bottom := + { + 660 + chop_top() + } + + textbox_image := + { + alpha_value := if styling.textbox_opacity_percentage == "" then 80 else to_number(styling.textbox_opacity_percentage) or else 80 + alpha_value_clamped := if alpha_value < 0 then 0 + else if alpha_value <= 100 then alpha_value/100 + else 1 + set_alpha(recolor_image("textbox_background.png", color: styling.textbox_color), alpha: alpha_value_clamped) + } + + divider_height := + { + count := active_abilities() + if count == 7 then 16 + else if count == 6 then 18 + else if count == 5 then 20 + else 22 + } + + alt_text := { true } + alt_text_script := + { + count := active_abilities() + if count == 0 then + forward_editor(field: card.level_1_text) + else if count == 1 then + combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text) + else if count == 2 then + combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text) + else if count == 3 then + combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text, separator3: "\n", field4: card.level_4_text) + else if count == 4 then + combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text, separator3: "\n", field4: card.level_4_text, separator4: "\n", field5: card.level_5_text) + else if count == 5 then + combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text, separator3: "\n", field4: card.level_4_text, separator4: "\n", field5: card.level_5_text, separator5: "\n", field6: card.level_6_text) + else + combined_editor(field1: card.level_1_text, separator1: "\n", field2: card.level_2_text, separator2: "\n", field3: card.level_3_text, separator3: "\n", field4: card.level_4_text, separator4: "\n", field5: card.level_5_text, separator5: "\n", field6: card.level_6_text, separator6: "\n", field7: card.level_7_text) + } + + text_filter := text_filter + { if input == "" then "​" else input } + + rarity_right := { split := split_comma(styling.rarity_offsets); (if length(split) > 0 and split.0 != "" then clamp(split.0, minimum: -500, maximum: 500) else 0) + 683 } + rarity_top := { split := split_comma(styling.rarity_offsets); (if length(split) > 1 and split.1 != "" then clamp(split.1, minimum: -500, maximum: 500) else 0) + typebox_bottom() - 69 } + rarity_size := { split := split_comma(styling.rarity_offsets); (if length(split) > 2 and split.2 != "" then clamp(split.2, minimum: -52, maximum: 100) else 0) + 52 } + rarity_left := { rarity_right() - rarity_size() } + + art_left := { if styling.stretch_image_to_whole_card or styling.border != "yes" then 0 else 30 } + art_top := { if styling.stretch_image_to_whole_card or styling.border != "yes" then 0 else 30 } + art_width := { if styling.stretch_image_to_whole_card or styling.border != "yes" then stylesheet.card_width else 684 } + art_height := { if styling.stretch_image_to_whole_card or styling.border == "no" then stylesheet.card_height else if styling.border == "only copyright" then 965 else 935 } + art_mask := + { + if styling.stretch_image_to_whole_card or styling.border == "no" then "" else + ( + image := "image_" + (if styling.border == "only copyright" then "borderless_" else "") + "mask.png" + crop(image, offset_x: art_left(), offset_y: art_top(), width: art_width(), height: art_height()) + ) + } + + +############################################################## Extra style options + +styling field: + type: text + name: popout image coordinates + description: The coordinates for the popout image field, formatted as "left,top,width,height". Used to make the illustration jump in front of the frame. +styling field: + type: boolean + name: stretch image to whole card + description: Make the image span the whole card instead of just the visible part. Use this to help make popout effects. + initial: no +styling field: + type: boolean + name: center name + description: Center the name on the card. + initial: yes +styling field: + type: text + name: namebox opacity percentage + description: Set the opacity percentage for the namebox background. Opaque is 100, transparent is 0, default is 100. + +include file: /magic-modules.mse-include/texts/styling_fields + +styling field: + type: choice + name: number of textboxes + description: How many rules textboxes should there be? MODIFY CONTENTS OF TEXTBOXES IF THIS HAS TROUBLE UPDATING AFTER BEING CHANGED. + choice: 1 + choice: 2 + choice: 3 + choice: 4 + choice: 5 + choice: 6 + choice: 7 + initial: 1 +styling field: + type: text + name: textbox opacity percentage + description: Set the opacity percentage for the textbox background. Opaque is 100, transparent is 0, default is 80. +styling field: + type: color + name: textbox color + description: Use the specified color for the textbox background. + choice: + name: black + color: rgb(0,0,0) + choice: + name: white + color: rgb(255,255,255) + initial: black +styling field: + type: boolean + name: visible rarity + description: Should the rarity symbol be visible? + initial: no + +include file: /magic-modules.mse-include/rarities/styling_fields + +include file: /magic-modules.mse-include/watermarks/styling_fields + +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: border + description: Use a border? + choice: yes + choice: only copyright + choice: no + initial: yes +styling field: + type: choice + name: count as + description: What should this card be counted as by the autocount script and stats page? + choice: normal card + choice: token + choice: emblem + choice: designation + choice: counter + choice: rulestip + choice: checklist + initial: rulestip + +include file: /magic-modules.mse-include/information/styling_fields + +include file: /magic-modules.mse-include/symbol-fonts/styling_fields + +styling field: + type: boolean + name: apply custom fonts + description: Enable to attempt to use custom fonts given below + initial: no +styling field: + type: text + name: custom name font + description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers. +styling field: + type: text + name: custom body font + description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers. +styling field: + type: text + name: custom pt font + description: Formatted as "font name;font size;font color;vertical offset;italic font name" last 4 are optional. color can be a name or R,G,B,A numbers. + +############################################################## Card fields + +include file: /magic-modules.mse-include/information/card_fields + +include file: /magic-modules.mse-include/stamps/card_fields + +include file: /magic-modules.mse-include/corners/card_fields + +include file: /magic-modules.mse-include/watermarks/card_fields + +card style: + ############################# Background stuff + border color: + left: 0 + top: 0 + width: { stylesheet.card_width } + height: { stylesheet.card_height } + z index: 850 + visible: { styling.border != "no" } + mask: { "/magic-modules.mse-include/borders/744x1039/m15/normal/" + (if styling.border == "yes" then "base.png" else "borderless.png") } + ############################# Name line + name: + left: { 64 + (if styling.center_name then name_margin() else 0) } + top: { typebox_bottom() - 70 + name_font_vertical() } + right: { 681 - name_margin() } + height: 52 + z index: 900 + alignment: { if styling.center_name then "middle center shrink-overflow" else "middle left shrink-overflow" } + font: + name: { name_font() } + italic name: { name_font_italic() } + size: { name_font_size() } + scale down to: 12 + color: { name_font_color() } + casting cost: + right: 683 + top: { typebox_bottom() - 70 } + width: { max(70, card_style.casting_cost.content_width + 12) } + height: 52 + z index: 910 + alignment: middle right + always symbol: true + font: + name: MPlantin + size: 34 + color: black + symbol font: + name: { styling.casting_cost_mana_symbols } + size: 31 + rarity: + right: { rarity_right() } + top: { rarity_top() } + width: { if styling.visible_rarity then rarity_size() else 0 } + height: { rarity_size() } + z index: 910 + alignment: middle right + visible: { styling.visible_rarity } + render style: image + include file: /magic-modules.mse-include/rarities/choice_images + ############################# Image + image: + left: { art_left() } + top: { art_top() } + width: { art_width() } + height: { art_height() } + z index: 0 + mask: { art_mask() } + mainframe image: + left: { popout_left() } + top: { popout_top() } + width: { popout_width() } + height: { popout_height() } + z index: 1010 + ############################# Text box + text: + left: 59 + width: 625 + top: { typebox_bottom() - 2 + body_font_vertical() } + bottom: { if is_stamped() then 932 else 950 } + z index: 900 + alignment: + script: + if (styling.center_text == "short text only" and + card_style.text.content_lines <= styling.number_of_textboxes) + or styling.center_text == "always" + then "middle center" + else "middle left" + font: + name: { body_font() } + italic name: { body_font_italic() } + size: { body_font_size() } + scale down to: 12 + color: { body_font_color() } + symbol font: + name: { styling.text_box_mana_symbols } + size: { body_font_size() } + scale down to: 12 + padding left: 4 + padding right: 4 + line height hard: 1.2 + line height line: 1.6 + line height soft: 0.9 + line height hard max: 1.3 + line height line max: 2.1 + line height soft max: 0.9 + ############################# PT + pt: + left: 597 + top: { 932 + pt_font_vertical() } + width: 91 + height: 46 + z index: 970 + alignment: center middle shrink-overflow + font: + name: { pt_font() } + size: { pt_font_size() } + color: { pt_font_color() } + separator color: red + +############################################################## Extra card fields + +extra card field: + type: choice + name: pt box + editable: false + save value: false + show statistics: false + choice: pt box +extra card field: + type: choice + name: typeline + editable: false + save value: false + show statistics: false + choice: typeline +extra card field: + type: choice + name: typeline background + editable: false + save value: false + show statistics: false + choice: typeline background +extra card field: + type: choice + name: pinlines + editable: false + save value: false + show statistics: false + choice: pinlines +extra card field: + type: choice + name: stampline + editable: false + save value: false + show statistics: false + choice: stampline +extra card field: + type: choice + name: card stamp rim + editable: false + save value: false + show statistics: false + choice: card stamp rim +extra card field: + type: choice + name: card stamp rim shadow + editable: false + save value: false + show statistics: false + choice: card stamp rim shadow +extra card field: + type: choice + name: foil layer + editable: false + save value: false + show statistics: false + choice: foil layer +extra card field: + type: choice + name: divider 1 + editable: false + save value: false + show statistics: false + choice: divider 1 +extra card field: + type: choice + name: divider 2 + editable: false + save value: false + show statistics: false + choice: divider 2 +extra card field: + type: choice + name: divider 3 + editable: false + save value: false + show statistics: false + choice: divider 3 +extra card field: + type: choice + name: divider 4 + editable: false + save value: false + show statistics: false + choice: divider 4 +extra card field: + type: choice + name: divider 5 + editable: false + save value: false + show statistics: false + choice: divider 5 +extra card field: + type: choice + name: divider 6 + editable: false + save value: false + show statistics: false + choice: divider 6 +extra card field: + type: color + name: card stamp border + script: card.border_color + editable: false + save value: false + show statistics: false +extra card field: + type: choice + name: textbox background + editable: false + save value: false + show statistics: false + choice: textbox background +extra card field: + type: choice + name: textbox background bottom + editable: false + save value: false + show statistics: false + choice: textbox background bottom + +extra card style: + pt box: + left: 0 + top: 0 + width: { stylesheet.card_width } + height: { stylesheet.card_height } + z index: 960 + visible: { card.pt != "" } + render style: image + image: pt.png + foil layer: + left: 0 + top: 0 + width: { stylesheet.card_width } + height: { stylesheet.card_height } + z index: 1050 + visible: { styling.overlay != "none" and styling.overlay != "" } + render style: image + image: { if styling.overlay == "" then "" else styling.overlay + "/overlay.png" } + mask: + script: + if styling.border == "no" then "" + else invert_image("/magic-modules.mse-include/borders/744x1039/m15/normal/" + (if styling.border == "yes" then "base.png" else "borderless.png")) + card stamp border: + left: 0 + top: 0 + width: { stylesheet.card_width } + height: { stylesheet.card_height } + z index: 830 + visible: { is_stamped() and styling.border != "no" } + mask: { "stamp_border_mask_" + (if stamp_shape() == "triangle" then "triangle.png" else "round.png") } + card stamp rim: + left: 0 + top: 0 + width: { stylesheet.card_width } + height: { stylesheet.card_height } + z index: 840 + render style: image + image: { shape := stamp_shape(); "stamp_" + (if shape == "triangle" then "triangle.png" else if shape == "none" then "none.png" else "round.png") } + card stamp rim shadow: + left: 0 + top: 0 + width: { stylesheet.card_width } + height: { stylesheet.card_height } + z index: 800 + render style: image + image: { shape := stamp_shape(); "stamp_shadow_" + (if shape == "triangle" then "triangle.png" else if shape == "none" then "none.png" else "round.png") } + stampline: + left: 0 + top: 0 + width: { stylesheet.card_width } + height: { stylesheet.card_height } + z index: 800 + render style: image + image: stampline.png + typeline: + left: 0 + bottom: { typebox_bottom() } + width: { stylesheet.card_width } + height: 90 + z index: 800 + render style: image + image: typeline.png + typeline background: + left: 0 + bottom: { typebox_bottom() } + width: { stylesheet.card_width } + height: 90 + z index: 810 + render style: image + image: { set_alpha("typeline_inner.png", alpha: get_alpha_percentage(styling.namebox_opacity_percentage, default: 100)) } + divider 1: + left: 0 + width: { stylesheet.card_width } + top: { if length(card_style.text.layout.separators) or else 0 > 0 then card_style.text.top + card_style.text.layout.separators[0] - divider_height()/2 else 1500 } + height: { divider_height() } + z index: 840 + visible: { active_abilities() > 0 } + render style: image + image: divider.png + divider 2: + left: 0 + width: { stylesheet.card_width } + top: { if length(card_style.text.layout.separators) or else 0 > 1 then card_style.text.top + card_style.text.layout.separators[1] - divider_height()/2 else 1500 } + height: { divider_height() } + z index: 840 + visible: { active_abilities() > 1 } + render style: image + image: divider.png + divider 3: + left: 0 + width: { stylesheet.card_width } + top: { if length(card_style.text.layout.separators) or else 0 > 2 then card_style.text.top + card_style.text.layout.separators[2] - divider_height()/2 else 1500 } + height: { divider_height() } + z index: 840 + visible: { active_abilities() > 2 } + render style: image + image: divider.png + divider 4: + left: 0 + width: { stylesheet.card_width } + top: { if length(card_style.text.layout.separators) or else 0 > 3 then card_style.text.top + card_style.text.layout.separators[3] - divider_height()/2 else 1500 } + height: { divider_height() } + z index: 840 + visible: { active_abilities() > 3 } + render style: image + image: divider.png + divider 5: + left: 0 + width: { stylesheet.card_width } + top: { if length(card_style.text.layout.separators) or else 0 > 4 then card_style.text.top + card_style.text.layout.separators[4] - divider_height()/2 else 1500 } + height: { divider_height() } + z index: 840 + visible: { active_abilities() > 4 } + render style: image + image: divider.png + divider 6: + left: 0 + width: { stylesheet.card_width } + top: { if length(card_style.text.layout.separators) or else 0 > 5 then card_style.text.top + card_style.text.layout.separators[5] - divider_height()/2 else 1500 } + height: { divider_height() } + z index: 840 + visible: { active_abilities() > 5 } + render style: image + image: divider.png + pinlines: + left: 0 + width: { stylesheet.card_width } + top: { typebox_bottom() } + bottom: 949 + z index: 800 + render style: image + image: pinlines.png + textbox background: + left: 55 + width: 634 + top: { typebox_bottom() - 10 } + bottom: 946 + z index: 600 + render style: image + image: { textbox_image() } + textbox background bottom: + left: 55 + width: 634 + top: 946 + bottom: 959 + z index: 600 + render style: image + image: { textbox_image() } + mask: { shape := stamp_shape(); "stamp_textbox_mask_" + (if shape == "triangle" then "triangle.png" else if shape == "none" then "none.png" else "round.png") } diff --git a/data/magic-rule-card.mse-style/textbox_background.png b/data/magic-rule-card.mse-style/textbox_background.png new file mode 100644 index 000000000..2f0644416 Binary files /dev/null and b/data/magic-rule-card.mse-style/textbox_background.png differ diff --git a/data/magic-rule-card.mse-style/typeline.png b/data/magic-rule-card.mse-style/typeline.png new file mode 100644 index 000000000..d93fc7c46 Binary files /dev/null and b/data/magic-rule-card.mse-style/typeline.png differ diff --git a/data/magic-rule-card.mse-style/typeline_inner.png b/data/magic-rule-card.mse-style/typeline_inner.png new file mode 100644 index 000000000..3b11759fa Binary files /dev/null and b/data/magic-rule-card.mse-style/typeline_inner.png differ