# Scripts for blending images # Included by a style file in its init script ######################################################################## # Filenames and other defaults ######################################################################## mask_hybrid_with_resource := { false } template := { input + "{type}.jpg" } resource_template := { (if input == "d" then "c" else input) + "l{type}.jpg" } # For what value should thumbnails of hybrids be made? hybrid_previews := "hybrid" # Are there templates for colored resources, resource_template(...)? colored_resources := true ######################################################################## # Combining multiple colors (hybrids) ######################################################################## card_hybrid_2 := { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0.4, y1: 0 x2: 0.6, y2: 0 ) } overlay_hybrid := [ 1: { template(colors[0]) } 2: { combine_blend( image1: template(colors[0]), image2: template(colors[1]), combine: "symmetric overlay" )} ] # vertical version of a horizontal hybrid vertical_card_hybrid := { do_linear_blend := linear_blend linear_blend := { do_linear_blend(x1: 0, x2: 0, y1: x1, y2: x2) } card_hybrid.horizontal[color_count]() } 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]) ))))))} ] 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 )} ] horizontal: horizontal_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 ] overlay: overlay_hybrid ] ######################################################################## # P/T box ######################################################################## # These are easier 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: { template(colors[5]) } #TODO 7: { template(colors[6]) } #TODO ] 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[4]) } ] horizontal: horizontal_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]) } # Probably not right 7: { template(colors[6]) } ] overlay: overlay_hybrid ] ######################################################################## # P/T boxes of flip cards ######################################################################## flip_pt_hybrid := [ radial: [ 0: { template("c") } 1: { template(colors[0]) } 2: { template(colors[1]) } 3: { template(colors[1]) } 4: { template(colors[1]) } 5: { linear_blend( image1: template(colors[1]) image2: template(colors[2]) x1: 0, y1: -1 x2: 0, y2: 1.8 )} 6: { linear_blend( image1: template(colors[1]) image2: template(colors[2]) x1: 0, y1: -1 x2: 0, y2: 1.8 )} 7: { template(colors[4]) } ] horizontal: horizontal_pt_hybrid vertical: [ 1: { template(colors[0]) } 2: { template(colors[0]) } 3: { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0, y1: 0 x2: 0, y2: 2 )} 4: { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0, y1: -1.5 x2: 0, y2: 1 )} 5: { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0, y1: -1.1 x2: 0, y2: 0.2 )} 6: { template(colors[1]) } # Probably not right 7: { template(colors[2]) } ] overlay: overlay_hybrid ] flip_pt_hybrid2 := [ radial: [ 0: { template("c") } 1: { template(colors[0]) } 2: { template(colors[0]) } 3: { linear_blend( image1: template(colors[0]) image2: template(colors[2]) x1: 0, y1: -1 x2: 0, y2: 1.1 )} 4: { template(colors[3]) } 5: { template(colors[4]) } 6: { template(colors[5]) } 7: { template(colors[5]) } ] horizontal: [ 1: { template(colors[0]) } 2: { template(colors[0]) } 3: { template(colors[0]) } 4: { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0.4, y1: 0 x2: 1.5, y2: 0 )} 5: { linear_blend( image1: template(colors[0]) image2: template(colors[1]) x1: 0.08, y1: 0 x2: 0.65, y2: 0 )} 6: { template(colors[5]) } #TODO 7: { template(colors[6]) } #TODO ] vertical: [ 1: { template(colors[0]) } 2: { template(colors[1]) } 3: { linear_blend( image1: template(colors[1]) image2: template(colors[2]) x1: 0, y1: -1 x2: 0, y2: 1.5 )} 4: { linear_blend( image1: template(colors[2]) image2: template(colors[3]) x1: 0, y1: 0.5 x2: 0, y2: 3 )} 5: { template(colors[3]) } 6: { template(colors[5]) } # Probably not right 7: { template(colors[6]) } ] overlay: overlay_hybrid ] ######################################################################## # Textbox and typeline for FPM templates and Futureshifts ######################################################################## textbox_hybrid := [ radial: [ 0: { template("c") } 1: { template(colors[0]) } 2: card_hybrid_2 3: { template(colors[2]) } 4: { card_hybrid_2(colors: colors[3] + colors[2]) } 5: { template(colors[3]) } 6: { card_hybrid_2(colors: colors[4] + colors[3]) } 7: { template(colors[4]) } ] horizontal: horizontal_card_hybrid vertical: [ 0: { template("c") } 1: { template(colors[0]) } 2: { template(colors[1]) } 3: { template(colors[2]) } # TODO 4: { template(colors[3]) } 5: { template(colors[4]) } 6: { template(colors[5]) } 7: { template(colors[6]) } ] overlay: overlay_hybrid ] typeline_hybrid := textbox_hybrid ######################################################################## # Putting it all together. ######################################################################## # Determine the card background based on the card_color multiple choice options color_background := { # for thumbnails if input == "hybrid" then input := "crystal,cryo,pyre,{hybrid_previews},horizontal" else if input == "overlay" then input := "cryo,pyre,{hybrid_previews},overlay" else if input == "radial" or input == "horizontal" or input == "vertical" then input := "crystal,cryo,pyre,{hybrid_previews}," + input else if input == "reversed" then input := "crystal,cryo,pyre,{hybrid_previews},horizontal,reversed" # What type of 'hybrid'? resource := chosen(choice:"resource") multi := chosen(choice:"multicolor") hybrid := chosen(choice:"hybrid") device := chosen(choice:"device") if resource and colored_resources then template := resource_template # use resource template instead? # The selected colors colors := sort_text( order: "(wubrg)" , (if chosen(choice:"crystal") then "w") + (if chosen(choice:"cryo") then "u") + (if chosen(choice:"shadow") then "b") + (if chosen(choice:"pyre") then "r") + (if chosen(choice:"xeno") then "g")) if multi and (hybrid or colors == "") then ( colors := colors + "m" multi := false ) if device and (multi or hybrid or colors == "") then ( colors := colors + "a" device := 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 "radial" # Determine background (allows styles to hook something else here) color_combination() } color_combination := { # The base hybrid, without the outer frame blended over it base := base_hybrid[shape][color_count]() # Put a frame around it? if resource and not colored_resources then masked_blend( mask: "multicolor_blend_{type}.png", dark: resource_template("c"), light: base, ) else if multi then masked_blend( mask: "multicolor_blend_{type}.png", dark: template("m"), light: base, ) else if device then masked_blend( mask: "multicolor_blend_{type}.png", dark: template("d"), light: base, ) else if color_count > 1 and mask_hybrid_with_resource() then masked_blend( mask: "hybrid_blend_{type}.png", dark: resource_template("c"), light: base, ) else base } ######################################################################## # Specific types ######################################################################## card_background := { color_background(type:"card", base_hybrid:card_hybrid) } card_ptbox := { color_background(type:"pt", base_hybrid:pt_hybrid) } flip_ptbox := { color_background(type:"pt", base_hybrid:flip_pt_hybrid) } flip_ptbox2 := { color_background(type:"pt2", base_hybrid:flip_pt_hybrid2) } card_textbox := { color_background(type:"textbox", base_hybrid:textbox_hybrid) } card_typeline := { color_background(type:"typeline", base_hybrid:typeline_hybrid) } ######################################################################## # Font colors ######################################################################## # For which colors is the font white? font_colors_white := { input == "b" or input == "l" } font_color_positions := [ radial: [0,0,0,2,3,3,4,4] horizontal: [0,0,0,0,0,0,0,0] vertical: [0,0,1,2,3,4,5,6] overlay: [0,0,0,0,0,0,0,0] ] # Determine whether light or dark fonts should be used font_white := { hybrid := chosen(choice:"hybrid") device := chosen(choice:"device") colors := sort_text( order: "(wubrg)" , (if chosen(choice:"crystal") then "w") + (if chosen(choice:"cryo") then "u") + (if chosen(choice:"shadow") then "b") + (if chosen(choice:"pyre") then "r") + (if chosen(choice:"xeno") then "g")) + (if device then "d") font_colors_white( if chosen(choice:"resource") then "l" else if input == "device, multicolor" then "d" else if chosen(choice:"multicolor") then "m" else if device and not hybrid then "d" 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 "radial" ][number_of_items(in: colors)] ] ) } font_color := { if font_white() then rgb(255,255,255) else rgb(0,0,0) }