diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 185d92a77..343c4c565 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -268,6 +268,8 @@ {"name":"button","order":34,"path":"folders/widgets/button.yy",}, {"name":"rotator","order":35,"path":"folders/widgets/rotator.yy",}, {"name":"text","order":36,"path":"folders/widgets/text.yy",}, + {"name":"lovify","order":26,"path":"folders/nodes/data/misc/lovify.yy",}, + {"name":"spr","order":6,"path":"folders/nodes/data/misc/lovify/spr.yy",}, ], "ResourceOrderSettings": [ {"name":"s_node_corner","order":13,"path":"sprites/s_node_corner/s_node_corner.yy",}, @@ -385,6 +387,7 @@ {"name":"node_3d_mesh_terrain","order":9,"path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",}, {"name":"s_node_condition_type","order":9,"path":"sprites/s_node_condition_type/s_node_condition_type.yy",}, {"name":"fd_rectangle_set_material_time_step","order":8,"path":"scripts/fd_rectangle_set_material_time_step/fd_rectangle_set_material_time_step.yy",}, + {"name":"s_lovify_heart_16","order":4,"path":"sprites/s_lovify_heart_16/s_lovify_heart_16.yy",}, {"name":"Obj_FirebaseREST_Listener_On_Firestore","order":1,"path":"objects/Obj_FirebaseREST_Listener_On_Firestore/Obj_FirebaseREST_Listener_On_Firestore.yy",}, {"name":"credit_badge_popular","order":2,"path":"sprites/credit_badge_popular/credit_badge_popular.yy",}, {"name":"s_node_path_sample","order":3,"path":"sprites/s_node_path_sample/s_node_path_sample.yy",}, @@ -484,6 +487,7 @@ {"name":"fd_rectangle_get_acceleration_y","order":3,"path":"scripts/fd_rectangle_get_acceleration_y/fd_rectangle_get_acceleration_y.yy",}, {"name":"sh_simplex","order":7,"path":"shaders/sh_simplex/sh_simplex.yy",}, {"name":"node_noise_grid_tri","order":6,"path":"scripts/node_noise_grid_tri/node_noise_grid_tri.yy",}, + {"name":"s_lovify_heart_12","order":1,"path":"sprites/s_lovify_heart_12/s_lovify_heart_12.yy",}, {"name":"node_threshold","order":9,"path":"scripts/node_threshold/node_threshold.yy",}, {"name":"sh_cell_noise_edge","order":2,"path":"shaders/sh_cell_noise_edge/sh_cell_noise_edge.yy",}, {"name":"node_pb_fx_strip","order":11,"path":"scripts/node_pb_fx_strip/node_pb_fx_strip.yy",}, @@ -618,6 +622,7 @@ {"name":"s_node_rigidSim_global","order":4,"path":"sprites/s_node_rigidSim_global/s_node_rigidSim_global.yy",}, {"name":"sh_channel_G_grey","order":8,"path":"shaders/sh_channel_G_grey/sh_channel_G_grey.yy",}, {"name":"sh_corner_iterate","order":2,"path":"shaders/sh_corner_iterate/sh_corner_iterate.yy",}, + {"name":"s_lovify_heart_6","order":2,"path":"sprites/s_lovify_heart_6/s_lovify_heart_6.yy",}, {"name":"display_screenshot","order":4,"path":"extensions/display_screenshot/display_screenshot.yy",}, {"name":"node_strand_sim_inline","order":12,"path":"scripts/node_strand_sim_inline/node_strand_sim_inline.yy",}, {"name":"node_path_map","order":17,"path":"scripts/node_path_map/node_path_map.yy",}, @@ -957,6 +962,7 @@ {"name":"sh_find_boundary_stretch_y","order":2,"path":"shaders/sh_find_boundary_stretch_y/sh_find_boundary_stretch_y.yy",}, {"name":"BBMOD_Vec2","order":4,"path":"scripts/BBMOD_Vec2/BBMOD_Vec2.yy",}, {"name":"sh_grid_hex","order":1,"path":"shaders/sh_grid_hex/sh_grid_hex.yy",}, + {"name":"s_node_lovify","order":6,"path":"sprites/s_node_lovify/s_node_lovify.yy",}, {"name":"s_node_lua_surface","order":18,"path":"sprites/s_node_lua_surface/s_node_lua_surface.yy",}, {"name":"node_data","order":1,"path":"scripts/node_data/node_data.yy",}, {"name":"node_wiggler","order":2,"path":"scripts/node_wiggler/node_wiggler.yy",}, @@ -1038,6 +1044,7 @@ {"name":"s_node_array_remove","order":7,"path":"sprites/s_node_array_remove/s_node_array_remove.yy",}, {"name":"s_node_zigzag","order":18,"path":"sprites/s_node_zigzag/s_node_zigzag.yy",}, {"name":"node_FLIP_render","order":3,"path":"scripts/node_FLIP_render/node_FLIP_render.yy",}, + {"name":"s_lovify_heart_8","order":3,"path":"sprites/s_lovify_heart_8/s_lovify_heart_8.yy",}, {"name":"s_key_display_mouse","order":1,"path":"sprites/s_key_display_mouse/s_key_display_mouse.yy",}, {"name":"dynaSurf_square_outline","order":3,"path":"scripts/dynaSurf_square_outline/dynaSurf_square_outline.yy",}, {"name":"node_3d_repeat","order":1,"path":"scripts/node_3d_repeat/node_3d_repeat.yy",}, @@ -1071,6 +1078,7 @@ {"name":"node_atlas_get","order":1,"path":"scripts/node_atlas_get/node_atlas_get.yy",}, {"name":"fontScrollBox","order":14,"path":"scripts/fontScrollBox/fontScrollBox.yy",}, {"name":"node_grid_hex","order":2,"path":"scripts/node_grid_hex/node_grid_hex.yy",}, + {"name":"sh_lovify","order":1,"path":"shaders/sh_lovify/sh_lovify.yy",}, {"name":"FirebaseREST_Firestore_collection_compare","order":5,"path":"scripts/FirebaseREST_Firestore_collection_compare/FirebaseREST_Firestore_collection_compare.yy",}, {"name":"node_pb_draw_blob","order":5,"path":"scripts/node_pb_draw_blob/node_pb_draw_blob.yy",}, {"name":"credit_badge_value","order":1,"path":"sprites/credit_badge_value/credit_badge_value.yy",}, @@ -1765,6 +1773,7 @@ {"name":"path_function","order":4,"path":"scripts/path_function/path_function.yy",}, {"name":"s_node_shell_excecute","order":33,"path":"sprites/s_node_shell_excecute/s_node_shell_excecute.yy",}, {"name":"fd_rectangle_set_velocity_dissipation_value","order":14,"path":"scripts/fd_rectangle_set_velocity_dissipation_value/fd_rectangle_set_velocity_dissipation_value.yy",}, + {"name":"s_lovify_icon","order":5,"path":"sprites/s_lovify_icon/s_lovify_icon.yy",}, {"name":"panel_history","order":7,"path":"scripts/panel_history/panel_history.yy",}, {"name":"sh_channel_H","order":3,"path":"shaders/sh_channel_H/sh_channel_H.yy",}, {"name":"rotatorRandom","order":1,"path":"scripts/rotatorRandom/rotatorRandom.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 5b46ce6b8..4bd5568f1 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -304,6 +304,8 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"button","folderPath":"folders/widgets/button.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"rotator","folderPath":"folders/widgets/rotator.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"text","folderPath":"folders/widgets/text.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"lovify","folderPath":"folders/nodes/data/misc/lovify.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"spr","folderPath":"folders/nodes/data/misc/lovify/spr.yy",}, ], "IncludedFiles": [ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",}, @@ -590,6 +592,7 @@ {"id":{"name":"node_3d_mesh_terrain","path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",},}, {"id":{"name":"s_node_condition_type","path":"sprites/s_node_condition_type/s_node_condition_type.yy",},}, {"id":{"name":"fd_rectangle_set_material_time_step","path":"scripts/fd_rectangle_set_material_time_step/fd_rectangle_set_material_time_step.yy",},}, + {"id":{"name":"s_lovify_heart_16","path":"sprites/s_lovify_heart_16/s_lovify_heart_16.yy",},}, {"id":{"name":"Obj_FirebaseREST_Listener_On_Firestore","path":"objects/Obj_FirebaseREST_Listener_On_Firestore/Obj_FirebaseREST_Listener_On_Firestore.yy",},}, {"id":{"name":"credit_badge_popular","path":"sprites/credit_badge_popular/credit_badge_popular.yy",},}, {"id":{"name":"s_node_path_sample","path":"sprites/s_node_path_sample/s_node_path_sample.yy",},}, @@ -706,6 +709,7 @@ {"id":{"name":"sh_simplex","path":"shaders/sh_simplex/sh_simplex.yy",},}, {"id":{"name":"node_noise_grid_tri","path":"scripts/node_noise_grid_tri/node_noise_grid_tri.yy",},}, {"id":{"name":"blurSurface","path":"scripts/blurSurface/blurSurface.yy",},}, + {"id":{"name":"s_lovify_heart_12","path":"sprites/s_lovify_heart_12/s_lovify_heart_12.yy",},}, {"id":{"name":"node_threshold","path":"scripts/node_threshold/node_threshold.yy",},}, {"id":{"name":"sh_cell_noise_edge","path":"shaders/sh_cell_noise_edge/sh_cell_noise_edge.yy",},}, {"id":{"name":"node_pb_fx_strip","path":"scripts/node_pb_fx_strip/node_pb_fx_strip.yy",},}, @@ -855,6 +859,7 @@ {"id":{"name":"s_node_rigidSim_global","path":"sprites/s_node_rigidSim_global/s_node_rigidSim_global.yy",},}, {"id":{"name":"sh_channel_G_grey","path":"shaders/sh_channel_G_grey/sh_channel_G_grey.yy",},}, {"id":{"name":"sh_corner_iterate","path":"shaders/sh_corner_iterate/sh_corner_iterate.yy",},}, + {"id":{"name":"s_lovify_heart_6","path":"sprites/s_lovify_heart_6/s_lovify_heart_6.yy",},}, {"id":{"name":"display_screenshot","path":"extensions/display_screenshot/display_screenshot.yy",},}, {"id":{"name":"node_strand_sim_inline","path":"scripts/node_strand_sim_inline/node_strand_sim_inline.yy",},}, {"id":{"name":"node_path_map","path":"scripts/node_path_map/node_path_map.yy",},}, @@ -1240,6 +1245,7 @@ {"id":{"name":"sprite_add_functions","path":"scripts/sprite_add_functions/sprite_add_functions.yy",},}, {"id":{"name":"BBMOD_Vec2","path":"scripts/BBMOD_Vec2/BBMOD_Vec2.yy",},}, {"id":{"name":"sh_grid_hex","path":"shaders/sh_grid_hex/sh_grid_hex.yy",},}, + {"id":{"name":"s_node_lovify","path":"sprites/s_node_lovify/s_node_lovify.yy",},}, {"id":{"name":"s_node_lua_surface","path":"sprites/s_node_lua_surface/s_node_lua_surface.yy",},}, {"id":{"name":"node_data","path":"scripts/node_data/node_data.yy",},}, {"id":{"name":"node_wiggler","path":"scripts/node_wiggler/node_wiggler.yy",},}, @@ -1334,6 +1340,7 @@ {"id":{"name":"s_node_array_remove","path":"sprites/s_node_array_remove/s_node_array_remove.yy",},}, {"id":{"name":"s_node_zigzag","path":"sprites/s_node_zigzag/s_node_zigzag.yy",},}, {"id":{"name":"node_FLIP_render","path":"scripts/node_FLIP_render/node_FLIP_render.yy",},}, + {"id":{"name":"s_lovify_heart_8","path":"sprites/s_lovify_heart_8/s_lovify_heart_8.yy",},}, {"id":{"name":"s_key_display_mouse","path":"sprites/s_key_display_mouse/s_key_display_mouse.yy",},}, {"id":{"name":"dynaSurf_square_outline","path":"scripts/dynaSurf_square_outline/dynaSurf_square_outline.yy",},}, {"id":{"name":"node_3d_repeat","path":"scripts/node_3d_repeat/node_3d_repeat.yy",},}, @@ -1373,6 +1380,7 @@ {"id":{"name":"node_atlas_get","path":"scripts/node_atlas_get/node_atlas_get.yy",},}, {"id":{"name":"fontScrollBox","path":"scripts/fontScrollBox/fontScrollBox.yy",},}, {"id":{"name":"node_grid_hex","path":"scripts/node_grid_hex/node_grid_hex.yy",},}, + {"id":{"name":"sh_lovify","path":"shaders/sh_lovify/sh_lovify.yy",},}, {"id":{"name":"FirebaseREST_Firestore_collection_compare","path":"scripts/FirebaseREST_Firestore_collection_compare/FirebaseREST_Firestore_collection_compare.yy",},}, {"id":{"name":"node_pb_draw_blob","path":"scripts/node_pb_draw_blob/node_pb_draw_blob.yy",},}, {"id":{"name":"draw_overlay","path":"scripts/draw_overlay/draw_overlay.yy",},}, @@ -1449,6 +1457,7 @@ {"id":{"name":"file_functions","path":"scripts/file_functions/file_functions.yy",},}, {"id":{"name":"node_perlin_smear","path":"scripts/node_perlin_smear/node_perlin_smear.yy",},}, {"id":{"name":"node_alpha_cutoff","path":"scripts/node_alpha_cutoff/node_alpha_cutoff.yy",},}, + {"id":{"name":"node_lovify","path":"scripts/node_lovify/node_lovify.yy",},}, {"id":{"name":"pack_best_fit","path":"scripts/pack_best_fit/pack_best_fit.yy",},}, {"id":{"name":"sh_channel_R","path":"shaders/sh_channel_R/sh_channel_R.yy",},}, {"id":{"name":"draw_circle_functions","path":"scripts/draw_circle_functions/draw_circle_functions.yy",},}, @@ -2128,6 +2137,7 @@ {"id":{"name":"s_node_dot_product","path":"sprites/s_node_dot_product/s_node_dot_product.yy",},}, {"id":{"name":"s_node_canvas","path":"sprites/s_node_canvas/s_node_canvas.yy",},}, {"id":{"name":"d3d_light","path":"scripts/d3d_light/d3d_light.yy",},}, + {"id":{"name":"s_lovify_heart_10","path":"sprites/s_lovify_heart_10/s_lovify_heart_10.yy",},}, {"id":{"name":"sh_downsample","path":"shaders/sh_downsample/sh_downsample.yy",},}, {"id":{"name":"Obj_FirebaseFirestore_Collection_Query_Greater","path":"objects/Obj_FirebaseFirestore_Collection_Query_Greater/Obj_FirebaseFirestore_Collection_Query_Greater.yy",},}, {"id":{"name":"sh_remove_black","path":"shaders/sh_remove_black/sh_remove_black.yy",},}, @@ -2164,6 +2174,7 @@ {"id":{"name":"path_function","path":"scripts/path_function/path_function.yy",},}, {"id":{"name":"s_node_shell_excecute","path":"sprites/s_node_shell_excecute/s_node_shell_excecute.yy",},}, {"id":{"name":"fd_rectangle_set_velocity_dissipation_value","path":"scripts/fd_rectangle_set_velocity_dissipation_value/fd_rectangle_set_velocity_dissipation_value.yy",},}, + {"id":{"name":"s_lovify_icon","path":"sprites/s_lovify_icon/s_lovify_icon.yy",},}, {"id":{"name":"panel_history","path":"scripts/panel_history/panel_history.yy",},}, {"id":{"name":"sh_channel_H","path":"shaders/sh_channel_H/sh_channel_H.yy",},}, {"id":{"name":"rotatorRandom","path":"scripts/rotatorRandom/rotatorRandom.yy",},}, diff --git a/fonts/_f_sdf/_f_sdf.old.png b/fonts/_f_sdf/_f_sdf.old.png index af0235be9..163402c71 100644 Binary files a/fonts/_f_sdf/_f_sdf.old.png and b/fonts/_f_sdf/_f_sdf.old.png differ diff --git a/fonts/_f_sdf/_f_sdf.png b/fonts/_f_sdf/_f_sdf.png index 163402c71..8ec22ab00 100644 Binary files a/fonts/_f_sdf/_f_sdf.png and b/fonts/_f_sdf/_f_sdf.png differ diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.old.png b/fonts/_f_sdf_medium/_f_sdf_medium.old.png index af596078b..13a399c7c 100644 Binary files a/fonts/_f_sdf_medium/_f_sdf_medium.old.png and b/fonts/_f_sdf_medium/_f_sdf_medium.old.png differ diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.png b/fonts/_f_sdf_medium/_f_sdf_medium.png index 13a399c7c..14a29a262 100644 Binary files a/fonts/_f_sdf_medium/_f_sdf_medium.png and b/fonts/_f_sdf_medium/_f_sdf_medium.png differ diff --git a/objects/o_dialog_gradient/Draw_64.gml b/objects/o_dialog_gradient/Draw_64.gml index 9a8f0132f..1b6ad516b 100644 --- a/objects/o_dialog_gradient/Draw_64.gml +++ b/objects/o_dialog_gradient/Draw_64.gml @@ -104,10 +104,11 @@ if !ready exit; if(buttonInstant(THEME.button_hide, bx, by, ui(28), ui(28), mouse_ui, interactable && sFOCUS, sHOVER, __txtx("gradient_editor_key_blend", "Key blending"), THEME.grad_blend) == 2) { menuCall("gradient_window_blend_menu", bx + ui(32), by, [ - menuItem(__txtx("gradient_editor_blend_hard", "Hard blend"), function() { gradient.type = 1; onApply(gradient); }), - menuItem(__txtx("gradient_editor_blend_RGB", "RGB blend"), function() { gradient.type = 0; onApply(gradient); }), - menuItem(__txtx("gradient_editor_blend_HSV", "HSV blend"), function() { gradient.type = 2; onApply(gradient); }), - menuItem(__txtx("gradient_editor_blend_OKLAB", "OKLAB blend"), function() { gradient.type = 3; onApply(gradient); }), + menuItem(__txtx("gradient_editor_blend_hard", "Solid"), function() { gradient.type = 1; onApply(gradient); }), + menuItem(__txtx("gradient_editor_blend_RGB", "RGB"), function() { gradient.type = 0; onApply(gradient); }), + menuItem(__txtx("gradient_editor_blend_sRGB", "sRGB"), function() { gradient.type = 4; onApply(gradient); }), + menuItem(__txtx("gradient_editor_blend_HSV", "HSV"), function() { gradient.type = 2; onApply(gradient); }), + menuItem(__txtx("gradient_editor_blend_OKLAB", "OKLAB"), function() { gradient.type = 3; onApply(gradient); }), ],, gradient); } bx -= ui(32); diff --git a/objects/o_main/Create_0.gml b/objects/o_main/Create_0.gml index e6163f95e..6c5b06396 100644 --- a/objects/o_main/Create_0.gml +++ b/objects/o_main/Create_0.gml @@ -149,7 +149,7 @@ with(dialogCall(o_dialog_add_multiple_images, WIN_W / 2, WIN_H / 2)) setPath(path); } else { - PANEL_GRAPH.onStepBegin(); + if(!IS_CMD) PANEL_GRAPH.onStepBegin(); var node = noone; for( var i = 0, n = array_length(path); i < n; i++ ) { @@ -192,10 +192,10 @@ break; } - PANEL_GRAPH.mouse_grid_y += 160; + if(!IS_CMD)PANEL_GRAPH.mouse_grid_y += 160; } - if(node) + if(node && !IS_CMD) PANEL_GRAPH.toCenterNode(); } } @@ -313,22 +313,21 @@ #endregion #region arguments + #macro IS_CMD PROGRAM_ARGUMENTS._cmd + alarm[1] = 2; globalvar PROGRAM_ARGUMENTS; PROGRAM_ARGUMENTS = { - run : false, + _cmd : false, + _run : false, + _persist : false, }; - //PROGRAM_ARGUMENTS = { - // path: "D:/Project/MakhamDev/LTS-PixelComposer/TEST/terminal/outline.pxc", - // image: "D:/Project/MakhamDev/LTS-PixelComposer/TEST/terminal/05.png", - // run : true, - // persist : false, - //}; + //.\PixelComposer.exe "D:/Project/MakhamDev/LTS-PixelComposer/TEST/terminal/outline.pxc" --h -image "D:/Project/MakhamDev/LTS-PixelComposer/TEST/terminal/05.png" var paramCount = parameter_count(); - var paramType = "path"; + var paramType = "_path"; for( var i = 0; i < paramCount; i++ ) { var param = parameter_string(i); @@ -341,28 +340,33 @@ run_in(1, function() { dialogCall(o_dialog_crashed); }); break; - case "--h" : PROGRAM_ARGUMENTS.run = true; break; - case "--p" : PROGRAM_ARGUMENTS.persist = true; break; + case "--h" : + debug_event("OutputDebugOn"); + PROGRAM_ARGUMENTS._cmd = true; + PROGRAM_ARGUMENTS._run = true; + break; + + case "--p" : PROGRAM_ARGUMENTS._persist = true; break; } } else if(string_starts_with(param, "-")) { paramType = string_trim(param, ["-"]); - } else if(paramType == "path") { + } else if(paramType == "_path") { var path = param; path = string_replace_all(path, "\n", ""); path = string_replace_all(path, "\"", ""); if(file_exists_empty(path) && filename_ext(path) == ".pxc") - PROGRAM_ARGUMENTS.path = path; + PROGRAM_ARGUMENTS._path = path; } else { PROGRAM_ARGUMENTS[$ paramType] = param; } } - if(struct_exists(PROGRAM_ARGUMENTS, "path")) { - var path = PROGRAM_ARGUMENTS.path; + if(struct_exists(PROGRAM_ARGUMENTS, "_path")) { + var path = PROGRAM_ARGUMENTS._path; if(PROJECT == noone || PROJECT.path != path) { file_open_parameter = path; @@ -370,6 +374,6 @@ } } - if(PROGRAM_ARGUMENTS.run) + if(PROGRAM_ARGUMENTS._cmd) draw_enable_drawevent(false); #endregion \ No newline at end of file diff --git a/objects/o_main/Other_2.gml b/objects/o_main/Other_2.gml index 7a42b12a9..1aba75d85 100644 --- a/objects/o_main/Other_2.gml +++ b/objects/o_main/Other_2.gml @@ -68,44 +68,46 @@ var t0 = get_timer(); var t = get_timer(); - __initPatreon(); log_message("SESSION", $"> init Patreon | complete in {get_timer() - t}"); t = get_timer(); - __initTheme(); log_message("SESSION", $"> init Theme | complete in {get_timer() - t}"); t = get_timer(); - __initLocale(); log_message("SESSION", $"> init Locale | complete in {get_timer() - t}"); t = get_timer(); - loadFonts(); log_message("SESSION", $"> init Font | complete in {get_timer() - t}"); t = get_timer(); - __initProject(); log_message("SESSION", $"> init Project | complete in {get_timer() - t}"); t = get_timer(); + __initPatreon(); log_message("SESSION", $"> init Patreon | complete in {get_timer() - t}"); t = get_timer(); + if(!IS_CMD) { __initTheme(); log_message("SESSION", $"> init Theme | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { __initLocale(); log_message("SESSION", $"> init Locale | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { loadFonts(); log_message("SESSION", $"> init Font | complete in {get_timer() - t}"); t = get_timer(); } + __initProject(); log_message("SESSION", $"> init Project | complete in {get_timer() - t}"); t = get_timer(); - __initAction(); log_message("SESSION", $"> init Action | complete in {get_timer() - t}"); t = get_timer(); - __initSurfaceFormat(); log_message("SESSION", $"> init SurfaceFormat | complete in {get_timer() - t}"); t = get_timer(); - __initCollection(); log_message("SESSION", $"> init Collection | complete in {get_timer() - t}"); t = get_timer(); - __initAssets(); log_message("SESSION", $"> init Assets | complete in {get_timer() - t}"); t = get_timer(); - __initPresets(); log_message("SESSION", $"> init Presets | complete in {get_timer() - t}"); t = get_timer(); - __initFontFolder(); log_message("SESSION", $"> init FontFolder | complete in {get_timer() - t}"); t = get_timer(); - __initLua(); log_message("SESSION", $"> init Lua | complete in {get_timer() - t}"); t = get_timer(); - __initNodeData(); log_message("SESSION", $"> init NodeData | complete in {get_timer() - t}"); t = get_timer(); - __initNodes(); log_message("SESSION", $"> init Nodes | complete in {get_timer() - t}"); t = get_timer(); - __initSteamUGC(); log_message("SESSION", $"> init SteamUGC | complete in {get_timer() - t}"); t = get_timer(); - __initAddon(); log_message("SESSION", $"> init Addon | complete in {get_timer() - t}"); t = get_timer(); - __initPalette(); log_message("SESSION", $"> init Palette | complete in {get_timer() - t}"); t = get_timer(); - __initGradient(); log_message("SESSION", $"> init Gradient | complete in {get_timer() - t}"); t = get_timer(); + if(!IS_CMD) { __initAction(); log_message("SESSION", $"> init Action | complete in {get_timer() - t}"); t = get_timer(); } + __initSurfaceFormat(); log_message("SESSION", $"> init SurfaceFormat | complete in {get_timer() - t}"); t = get_timer(); + if(!IS_CMD) { __initCollection(); log_message("SESSION", $"> init Collection | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { __initAssets(); log_message("SESSION", $"> init Assets | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { __initPresets(); log_message("SESSION", $"> init Presets | complete in {get_timer() - t}"); t = get_timer(); } + __initFontFolder(); log_message("SESSION", $"> init FontFolder | complete in {get_timer() - t}"); t = get_timer(); + __initLua(); log_message("SESSION", $"> init Lua | complete in {get_timer() - t}"); t = get_timer(); + if(!IS_CMD) { __initNodeData(); log_message("SESSION", $"> init NodeData | complete in {get_timer() - t}"); t = get_timer(); } + __initNodes(); log_message("SESSION", $"> init Nodes | complete in {get_timer() - t}"); t = get_timer(); + if(!IS_CMD) { __initSteamUGC(); log_message("SESSION", $"> init SteamUGC | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { __initAddon(); log_message("SESSION", $"> init Addon | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { __initPalette(); log_message("SESSION", $"> init Palette | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { __initGradient(); log_message("SESSION", $"> init Gradient | complete in {get_timer() - t}"); t = get_timer(); } - loadAddon(); log_message("SESSION", $"> init Addons | complete in {get_timer() - t}"); t = get_timer(); + if(!IS_CMD) { loadAddon(); log_message("SESSION", $"> init Addons | complete in {get_timer() - t}"); t = get_timer(); } - LOAD_SAMPLE(); log_message("SESSION", $"> init sample | complete in {get_timer() - t}"); t = get_timer(); - INIT_FOLDERS(); log_message("SESSION", $"> init folders | complete in {get_timer() - t}"); t = get_timer(); - RECENT_LOAD(); log_message("SESSION", $"> init recents | complete in {get_timer() - t}"); t = get_timer(); + if(!IS_CMD) { LOAD_SAMPLE(); log_message("SESSION", $"> init sample | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { INIT_FOLDERS(); log_message("SESSION", $"> init folders | complete in {get_timer() - t}"); t = get_timer(); } + if(!IS_CMD) { RECENT_LOAD(); log_message("SESSION", $"> init recents | complete in {get_timer() - t}"); t = get_timer(); } log_message("SESSION", $">> Initialization complete in {get_timer() - t0}"); - __initPanel(); + if(!IS_CMD) { + __initPanel(); - if(file_exists_empty("icon.png")) - file_copy("icon.png", DIRECTORY + "icon.png"); + if(file_exists_empty("icon.png")) + file_copy("icon.png", DIRECTORY + "icon.png"); - var cmd = ".pxc=\"" + string(program_directory) + "PixelComposer.exe\""; - shell_execute_async("assoc", cmd); + var cmd = ".pxc=\"" + string(program_directory) + "PixelComposer.exe\""; + shell_execute_async("assoc", cmd); - var cmd = ".pxcc=\"" + string(program_directory) + "PixelComposer.exe\""; - shell_execute_async("assoc", cmd); + var cmd = ".pxcc=\"" + string(program_directory) + "PixelComposer.exe\""; + shell_execute_async("assoc", cmd); + } directory_set_current_working(DIRECTORY); #endregion diff --git a/objects/o_main/Step_1.gml b/objects/o_main/Step_1.gml index 6826b8da2..3c45aa9b3 100644 --- a/objects/o_main/Step_1.gml +++ b/objects/o_main/Step_1.gml @@ -101,11 +101,11 @@ _HOVERING_ELEMENT = noone; PROJECT.animator.frame_progress = false; } else { if(UPDATE & RENDER_TYPE.full) { - if(PROGRAM_ARGUMENTS.run) { + if(PROGRAM_ARGUMENTS._run) { exportAll(); - PROGRAM_ARGUMENTS.run = false; + PROGRAM_ARGUMENTS._run = false; - if(!IS_RENDERING && !struct_try_get(PROGRAM_ARGUMENTS, "persist", true)) game_end(); + if(!IS_RENDERING && !PROGRAM_ARGUMENTS._persist) game_end(); } else Render(); diff --git a/scripts/__node_3d_export/__node_3d_export.gml b/scripts/__node_3d_export/__node_3d_export.gml index ce948dada..377a95f56 100644 --- a/scripts/__node_3d_export/__node_3d_export.gml +++ b/scripts/__node_3d_export/__node_3d_export.gml @@ -82,10 +82,12 @@ function __Node_3D_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constru file_text_close(fObj); file_text_close(fMtl); - - var noti = log_message("EXPORT", "Export obj as " + oPath, THEME.noti_icon_tick, COLORS._main_value_positive, false); - noti.path = filename_dir(oPath); - noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer); + + if(!IS_CMD) { + var noti = log_message("EXPORT", "Export obj as " + oPath, THEME.noti_icon_tick, COLORS._main_value_positive, false); + noti.path = filename_dir(oPath); + noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer); + } } static update = function() { diff --git a/scripts/animation_controller/animation_controller.gml b/scripts/animation_controller/animation_controller.gml index b4a81bfeb..9d7841b0d 100644 --- a/scripts/animation_controller/animation_controller.gml +++ b/scripts/animation_controller/animation_controller.gml @@ -167,7 +167,7 @@ is_rendering = false; time_since_last_frame = 0; - if(struct_try_get(PROGRAM_ARGUMENTS, "persist", true)) game_end(); + if(PROGRAM_ARGUMENTS._cmd && !PROGRAM_ARGUMENTS._persist) game_end(); } } diff --git a/scripts/color_function/color_function.gml b/scripts/color_function/color_function.gml index 854f13f76..9217e3604 100644 --- a/scripts/color_function/color_function.gml +++ b/scripts/color_function/color_function.gml @@ -35,6 +35,15 @@ return make_color_rgba(rg.x, rg.y, rg.z, a); } #endregion + function make_color_srgba(r, g, b, a) { #region + INLINE + r = power(r, 1 / 2.2) * 255; + g = power(g, 1 / 2.2) * 255; + b = power(b, 1 / 2.2) * 255; + + return int64(round(r) + (round(g) << 8) + (round(b) << 16) + (round(a) << 24)); + } #endregion + function colorFromRGBArray(arr) { #region var r = round(real(arr[0]) * 255); var g = round(real(arr[1]) * 255); @@ -66,6 +75,11 @@ return [ color_get_red(col) / 255, color_get_green(col) / 255, color_get_blue(col) / 255 ]; } #endregion + function color_srgb(col) { #region + INLINE + return [ power(color_get_red(col) / 255, 2.2), power(color_get_green(col) / 255, 2.2), power(color_get_blue(col) / 255, 2.2) ]; + } #endregion + function color_hsv(col) { #region INLINE return [ color_get_hue(col) / 255, color_get_saturation(col) / 255, color_get_value(col) / 255 ]; @@ -212,6 +226,23 @@ function color_diff(c1, c2, fast = false, alpha = false) { #region return make_color_oklab(ok, a); } #endregion + + function merge_color_srgb(c0, c1, t) { #region + INLINE + + var sr0 = color_srgb(c0); + var sr1 = color_srgb(c1); + + var sr = [ + lerp(sr0[0], sr1[0], t), + lerp(sr0[1], sr1[1], t), + lerp(sr0[2], sr1[2], t), + ]; + + var a = is_real(c0)? 255 : clamp(round(lerp(color_get_alpha(c0), color_get_alpha(c1), t)), 0, 255); + + return make_color_srgba(sr, a); + } #endregion #endregion #region sorting functions diff --git a/scripts/color_loader/color_loader.gml b/scripts/color_loader/color_loader.gml index 35e8f6951..613db8f2d 100644 --- a/scripts/color_loader/color_loader.gml +++ b/scripts/color_loader/color_loader.gml @@ -1,13 +1,13 @@ #region colors globalvar CDEF, COLORS, THEME_VALUE; - CDEF = {}; + CDEF = new ThemeColorDef(); COLORS = new ThemeColor(); THEME_VALUE = new ThemeValue(); #endregion function loadColor(theme = "default") { #region - CDEF = {}; + CDEF = new ThemeColorDef(); COLORS = new ThemeColor(); THEME_VALUE = new ThemeValue(); diff --git a/scripts/debug/debug.gml b/scripts/debug/debug.gml index 0d7f37f29..ee1adcad1 100644 --- a/scripts/debug/debug.gml +++ b/scripts/debug/debug.gml @@ -26,6 +26,8 @@ function __log(title, str, fname = "log/log.txt") { #region function log_message(title, str, icon = noone, flash = false, write = true) { #region if(TEST_ERROR) return; + if(IS_CMD) return; + if(write) __log("[MESSAGE] ", string(title) + ": " + string(str)); return noti_status(string(title) + ": " + string(str), icon, flash); @@ -33,6 +35,8 @@ function log_message(title, str, icon = noone, flash = false, write = true) { #r function log_warning(title, str, ref = noone) { #region if(TEST_ERROR) return; + if(IS_CMD) return; + __log("[WARNING] ", string(title) + ": " + string(str)); return noti_warning(string(title) + ": " + string(str),, ref); @@ -40,6 +44,8 @@ function log_warning(title, str, ref = noone) { #region function log_crash(str) { #region if(TEST_ERROR) return; + if(IS_CMD) return; + __log("[ERROR] ", string(str)); return noti_error(string(str)); diff --git a/scripts/font_loader/font_loader.gml b/scripts/font_loader/font_loader.gml index 1f0e47ed2..a8bcf4a80 100644 --- a/scripts/font_loader/font_loader.gml +++ b/scripts/font_loader/font_loader.gml @@ -1,11 +1,27 @@ globalvar FONT_DEF, FONT_ISLOADED, FONT_CACHE, FONT_CUST_CACHE, GLYPH_MAP; globalvar f_h1, f_h2, f_h3, f_h5, f_p0, f_p0b, f_p1, f_p2, f_p3, f_code, f_sdf, f_sdf_medium; -FONT_DEF = true; -FONT_CACHE = {}; -FONT_CUST_CACHE = {}; -FONT_ISLOADED = false; -GLYPH_MAP = {}; +#region default + FONT_DEF = true; + FONT_CACHE = {}; + FONT_CUST_CACHE = {}; + FONT_ISLOADED = false; + GLYPH_MAP = {}; + + f_h1 = _f_h1; + f_h2 = _f_h2; + f_h3 = _f_h3; + f_h5 = _f_h5; + f_p0 = _f_p0; + f_p0b = _f_p0b; + f_p1 = _f_p1; + f_p2 = _f_p2; + f_p3 = _f_p3; + f_code = _f_code; + f_sdf = _f_sdf; + f_sdf_medium = _f_sdf_medium; + FONT_ISLOADED = false; +#endregion function _font_add(path, size, sdf = false, custom = false) { #region var _cache = custom? FONT_CUST_CACHE : FONT_CACHE; diff --git a/scripts/gradients_function/gradients_function.gml b/scripts/gradients_function/gradients_function.gml index e92d1f674..8edefc9da 100644 --- a/scripts/gradients_function/gradients_function.gml +++ b/scripts/gradients_function/gradients_function.gml @@ -2,7 +2,8 @@ enum GRADIENT_INTER { smooth, none, hue, - oklab + oklab, + srgb } function gradientKey(time, value) constructor { #region @@ -79,6 +80,7 @@ function gradientObject(color = c_black) constructor { #region case GRADIENT_INTER.smooth : return merge_color (_pkey.value, _key.value, rat); case GRADIENT_INTER.hue : return merge_color_hsv (_pkey.value, _key.value, rat); case GRADIENT_INTER.oklab : return merge_color_oklab(_pkey.value, _key.value, rat); + case GRADIENT_INTER.srgb : return merge_color_srgb (_pkey.value, _key.value, rat); case GRADIENT_INTER.none : return _pkey.value; } } diff --git a/scripts/load_function/load_function.gml b/scripts/load_function/load_function.gml index 618b90df8..961aa9545 100644 --- a/scripts/load_function/load_function.gml +++ b/scripts/load_function/load_function.gml @@ -27,16 +27,19 @@ function LOAD_PATH(path, readonly = false, safe_mode = false) { #region var _PROJECT = PROJECT; PROJECT = new Project(); - if(PANEL_GRAPH.project.path == "" && !PANEL_GRAPH.project.modified) { - var ind = array_find(PROJECTS, PANEL_GRAPH.project); + + if(_PROJECT.path == "" && !_PROJECT.modified) { + var ind = array_find(PROJECTS, _PROJECT); if(ind == -1) ind = 0; PROJECTS[ind] = PROJECT; - PANEL_GRAPH.setProject(PROJECT); + if(!IS_CMD) PANEL_GRAPH.setProject(PROJECT); } else { - var graph = new Panel_Graph(PROJECT); - PANEL_GRAPH.panel.setContent(graph, true); - PANEL_GRAPH = graph; + if(!IS_CMD) { + var graph = new Panel_Graph(PROJECT); + PANEL_GRAPH.panel.setContent(graph, true); + PANEL_GRAPH = graph; + } array_push(PROJECTS, PROJECT); } @@ -44,7 +47,8 @@ function LOAD_PATH(path, readonly = false, safe_mode = false) { #region if(!res) return false; PROJECT.safeMode = safe_mode; - setFocus(PANEL_GRAPH.panel); + if(!IS_CMD) + setFocus(PANEL_GRAPH.panel); return PROJECT; } #endregion @@ -246,14 +250,14 @@ function LOAD_AT(path, readonly = false, override = false) { #region PROJECT.modified = false; log_message("FILE", "load " + path, THEME.noti_icon_file_load); - PANEL_MENU.setNotiIcon(THEME.noti_icon_file_load); + if(!IS_CMD) PANEL_MENU.setNotiIcon(THEME.noti_icon_file_load); refreshNodeMap(); if(struct_has(_load_content, "timelines") && !array_empty(_load_content.timelines.contents)) PROJECT.timelines.deserialize(_load_content.timelines); - run_in(1, PANEL_GRAPH.toCenterNode); + if(!IS_CMD) run_in(1, PANEL_GRAPH.toCenterNode); //print($"========== Load completed in {(get_timer() - t) / 1000} ms =========="); diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index 111d1f0ee..94cbec2e0 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -13,7 +13,7 @@ enum DYNA_INPUT_COND { zero = 1 << 1, } -function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x, _y) constructor { +function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor { #region ---- main & active ---- active = true; renderActive = true; @@ -23,7 +23,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x manual_deletable = true; manual_ungroupable = true; destroy_when_upgroup = false; - ds_list_add(PANEL_GRAPH.getNodeList(_group), self); + + var l = _group == noone? PROJECT.nodes : _group.getNodeList(); + ds_list_add(l, self); active_index = -1; active_range = [ 0, TOTAL_FRAMES - 1 ]; @@ -1956,7 +1958,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x static doApplyDeserialize = function() {} - static loadGroup = function(context = PANEL_GRAPH.getCurrentContext()) { #region + static loadGroup = function(context = noone) { #region if(_group == noone) { if(context != noone) context.add(self); } else { diff --git a/scripts/node_export/node_export.gml b/scripts/node_export/node_export.gml index 29e37e133..d9aa88686 100644 --- a/scripts/node_export/node_export.gml +++ b/scripts/node_export/node_export.gml @@ -586,8 +586,8 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor p = save_surface(_surf, p); } - if(form != NODE_EXPORT_FORMAT.animation) { - var noti = log_message("EXPORT", "Export " + string(array_length(surf)) + " images complete.", THEME.noti_icon_tick, COLORS._main_value_positive, false); + if(form != NODE_EXPORT_FORMAT.animation && !IS_CMD) { + var noti = log_message("EXPORT", $"Export {array_length(surf)} images complete.", THEME.noti_icon_tick, COLORS._main_value_positive, false); noti.path = filename_dir(p); noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer); @@ -604,8 +604,8 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor p = save_surface(surf, p); - if(form != NODE_EXPORT_FORMAT.animation) { - var noti = log_message("EXPORT", "Export image as " + p, THEME.noti_icon_tick, COLORS._main_value_positive, false); + if(form != NODE_EXPORT_FORMAT.animation && !IS_CMD) { + var noti = log_message("EXPORT", $"Export image as {p}", THEME.noti_icon_tick, COLORS._main_value_positive, false); noti.path = filename_dir(p); noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer); @@ -693,7 +693,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } #endregion static doInspectorAction = function() { #region - if(!PROGRAM_ARGUMENTS.run && (LOADING || APPENDING)) return; + if(!PROGRAM_ARGUMENTS._cmd && (LOADING || APPENDING)) return; var path = getInputData(1); if(path == "") return; @@ -799,10 +799,13 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var res = ProcIdExists(render_process_id); if(res == 0 || OS == os_macosx) { - var noti = log_message("EXPORT", $"Export {render_type} as {render_target}", THEME.noti_icon_tick, COLORS._main_value_positive, false); - noti.path = filename_dir(render_target); - noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer); - PANEL_MENU.setNotiIcon(THEME.noti_icon_tick); + if(!IS_CMD) { + var noti = log_message("EXPORT", $"Export {render_type} as {render_target}", THEME.noti_icon_tick, COLORS._main_value_positive, false); + noti.path = filename_dir(render_target); + noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer); + PANEL_MENU.setNotiIcon(THEME.noti_icon_tick); + } + render_process_id = 0; } } diff --git a/scripts/node_functions/node_functions.gml b/scripts/node_functions/node_functions.gml index 218d77567..d8006fba1 100644 --- a/scripts/node_functions/node_functions.gml +++ b/scripts/node_functions/node_functions.gml @@ -140,7 +140,7 @@ #endregion #region node function - function nodeLoad(_data, scale = false, _group = PANEL_GRAPH.getCurrentContext()) { + function nodeLoad(_data, scale = false, _group = noone) { if(!is_struct(_data)) return; var _x = _data.x; diff --git a/scripts/node_global/node_global.gml b/scripts/node_global/node_global.gml index 5290f9d41..2cd3ec53f 100644 --- a/scripts/node_global/node_global.gml +++ b/scripts/node_global/node_global.gml @@ -192,9 +192,7 @@ function Node_Global(_x = 0, _y = 0) : __Node_Base(_x, _y) constructor { input_display_list = -1; anim_priority = -999; - static valueUpdate = function(index) { - RENDER_ALL - } + static valueUpdate = function(index) { RENDER_ALL } static createValue = function() { #region var _in = nodeValue("NewValue", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0); @@ -262,13 +260,14 @@ function Node_Global(_x = 0, _y = 0) : __Node_Base(_x, _y) constructor { var _inputs = _map.inputs; for(var i = 0; i < array_length(_inputs); i++) { - var _des = _inputs[i]; - var _in = createValue(); + var _des = _inputs[i]; + var _in = createValue(); + var _name = struct_try_get(_des, "global_name", ""); _in.editor.type_index = struct_try_get(_des, "global_type", 0); _in.editor.disp_index = struct_try_get(_des, "global_disp", 0); _in.editor.disp_index = struct_try_get(_des, "global_disp", 0); - _in.editor.value_name = struct_try_get(_des, "global_name", ""); + _in.editor.value_name = _name; _in.editor.slider_range = _des.global_s_range; _in.editor.slider_step = struct_try_get(_des, "global_s_step", 0.01); @@ -276,6 +275,8 @@ function Node_Global(_x = 0, _y = 0) : __Node_Base(_x, _y) constructor { _in.editor.refreshInput(); _in.applyDeserialize(_des); + + if(struct_has(PROGRAM_ARGUMENTS, _name)) _in.setValue(PROGRAM_ARGUMENTS[$ _name]); } if(struct_has(_map, "attr")) struct_override(attributes, _map.attr); diff --git a/scripts/node_gradient_palette/node_gradient_palette.gml b/scripts/node_gradient_palette/node_gradient_palette.gml index 57b8f2066..419317a8f 100644 --- a/scripts/node_gradient_palette/node_gradient_palette.gml +++ b/scripts/node_gradient_palette/node_gradient_palette.gml @@ -13,7 +13,7 @@ function Node_Gradient_Palette(_x, _y, _group = noone) : Node_Processor(_x, _y, inputs[| 2].array_depth = 1; inputs[| 3] = nodeValue("Blending", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1) - .setDisplay(VALUE_DISPLAY.enum_button, [ "Hard", "RGB", "HSV", "OKLAB" ]); + .setDisplay(VALUE_DISPLAY.enum_button, [ "Hard", "RGB", "HSV", "OKLAB", "sRGB" ]); outputs[| 0] = nodeValue("Gradient", self, JUNCTION_CONNECT.output, VALUE_TYPE.gradient, new gradientObject(c_white) ) @@ -46,6 +46,7 @@ function Node_Gradient_Palette(_x, _y, _group = noone) : Node_Processor(_x, _y, case 1 : grad.type = GRADIENT_INTER.smooth; break; case 2 : grad.type = GRADIENT_INTER.hue; break; case 3 : grad.type = GRADIENT_INTER.oklab; break; + case 4 : grad.type = GRADIENT_INTER.srgb; break; } return grad; diff --git a/scripts/node_lovify/node_checkerboard.yy b/scripts/node_lovify/node_checkerboard.yy new file mode 100644 index 000000000..f65eb196c --- /dev/null +++ b/scripts/node_lovify/node_checkerboard.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, + "resourceVersion": "1.0", + "name": "node_checkerboard", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_lovify/node_lovify.gml b/scripts/node_lovify/node_lovify.gml new file mode 100644 index 000000000..1f6ca51e3 --- /dev/null +++ b/scripts/node_lovify/node_lovify.gml @@ -0,0 +1,71 @@ +function Node_Lovify(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "Lovify"; + color = CDEF.red; + + inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone ); + + inputs[| 1] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random(6) ); + + inputs[| 2] = nodeValue("Density", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5 ) + .setDisplay(VALUE_DISPLAY.slider); + + inputs[| 3] = nodeValue("Distribution", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1 ) + .setDisplay(VALUE_DISPLAY.slider); + + outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + + input_display_list = [ 1, + ["Surfaces", false], 0, + ["Love", false], 2, 3, + ]; + + attribute_surface_depth(); + + static processData = function(_outSurf, _data, _output_index, _array_index) { + var _surf = _data[0]; + var _seed = _data[1]; + var _dens = _data[2]; + var _dist = _data[3]; + var _dim = surface_get_dimension(_surf); + + _outSurf = surface_verify(_outSurf, _dim[0], _dim[1], attrDepth()); + + random_set_seed(_seed); + + var amo = (_dim[0] * _dim[1]) / 8 * _dens; + var sprs = [ s_lovify_heart_6 ]; + var sde = max(_dim[0], _dim[1]); + var hmax = 12; + + if(sde > 16) { sprs[1] = s_lovify_heart_8; hmax = 16; } + if(sde > 20) { sprs[2] = s_lovify_heart_10; hmax = 20; } + if(sde > 24) { sprs[3] = s_lovify_heart_12; hmax = 24; } + if(sde > 32) { sprs[4] = s_lovify_heart_16; hmax = 32; } + + var maxS = min(4, ceil(sde / hmax / 4)); + + surface_set_target(_outSurf); + DRAW_CLEAR + + shader_set(sh_lovify); + draw_surface(_surf, 0, 0); + shader_reset(); + + repeat(amo) { + var _r = power(random_seed(1, _seed++), _dist) * 0.75; + var _a = random_seed(360, _seed++); + + var _x = lengthdir_x(_r, _a) + 0.5; + var _y = lengthdir_y(_r, _a) + 0.5; + + _x *= _dim[0]; + _y *= _dim[1]; + + var ss = irandom_range_seed(1, maxS, _seed++); + draw_sprite_ext(sprs[irandom(array_length(sprs) - 1)], 0, _x, _y, ss, ss, 0, c_white, 1); + } + surface_reset_target(); + + return _outSurf; + } +} \ No newline at end of file diff --git a/scripts/node_lovify/node_lovify.yy b/scripts/node_lovify/node_lovify.yy new file mode 100644 index 000000000..a73d6e029 --- /dev/null +++ b/scripts/node_lovify/node_lovify.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_lovify", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "lovify", + "path": "folders/nodes/data/misc/lovify.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_lovify/node_stripe.yy b/scripts/node_lovify/node_stripe.yy new file mode 100644 index 000000000..3c179d416 --- /dev/null +++ b/scripts/node_lovify/node_stripe.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, + "resourceVersion": "1.0", + "name": "node_stripe", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 49db37cd6..a790f3bc1 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -2,8 +2,11 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio name = _name; spr = _spr; node = _node; + icon = noone; + createNode = _create; self.tags = tags; + new_node = false; tooltip = ""; tooltip_spr = noone; @@ -14,12 +17,12 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio is_patreon_extra = false; - var pth = DIRECTORY + "Nodes/tooltip/" + node + ".png"; - if(file_exists_empty(pth)) - tooltip_spr = sprite_add(pth, 0, false, false, 0, 0); - new_node = false; + if(!IS_CMD) { + var pth = DIRECTORY + "Nodes/tooltip/" + node + ".png"; + if(file_exists_empty(pth)) tooltip_spr = sprite_add(pth, 0, false, false, 0, 0); + } - if(struct_has(global.NODE_GUIDE, node)) { #region + if(!IS_CMD && struct_has(global.NODE_GUIDE, node)) { #region var _n = global.NODE_GUIDEarn[$ node]; name = _n.name; if(_n.tooltip != "") @@ -41,6 +44,12 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio return self; } #endregion + static setIcon = function(icon) { #region + INLINE + self.icon = icon; + return self; + } #endregion + static isDeprecated = function() { #region INLINE deprecated = true; @@ -105,11 +114,11 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio var fav = array_exists(global.FAV_NODES, node); if(fav) draw_sprite_ui_uniform(THEME.star, 0, _x + grid_size - ui(10), _y + grid_size - ui(10), 0.7, COLORS._main_accent, 1.); - + + var spr_x = _x + grid_size - 4; + var spr_y = _y + 4; + if(IS_PATREON && is_patreon_extra) { - var spr_x = _x + grid_size - 4; - var spr_y = _y + 4; - BLEND_SUBTRACT gpu_set_colorwriteenable(0, 0, 0, 1); draw_sprite_ext(s_patreon_supporter, 0, spr_x, spr_y, 1, 1, 0, c_white, 1); @@ -120,6 +129,8 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio if(point_in_circle(_mx, _my, spr_x, spr_y, 10)) TOOLTIP = __txt("Supporter exclusive"); } + + if(icon) draw_sprite_ext(icon, 0, spr_x, spr_y, 1, 1, 0, c_white, 1); } #endregion static drawList = function(_x, _y, _mx, _my, list_height) { #region @@ -234,13 +245,15 @@ function addNodePCXCatagory(name, list, filter = []) { #region function __initNodes() { global.__currPage = ""; - var favPath = DIRECTORY + "Nodes/fav.json"; - global.FAV_NODES = file_exists_empty(favPath)? json_load_struct(favPath) : []; - if(!is_array(global.FAV_NODES)) global.FAV_NODES = []; + if(!IS_CMD) { + var favPath = DIRECTORY + "Nodes/fav.json"; + global.FAV_NODES = file_exists_empty(favPath)? json_load_struct(favPath) : []; + if(!is_array(global.FAV_NODES)) global.FAV_NODES = []; - var recPath = DIRECTORY + "Nodes/recent.json"; - global.RECENT_NODES = file_exists_empty(recPath)? json_load_struct(recPath) : []; - if(!is_array(global.RECENT_NODES)) global.RECENT_NODES = []; + var recPath = DIRECTORY + "Nodes/recent.json"; + global.RECENT_NODES = file_exists_empty(recPath)? json_load_struct(recPath) : []; + if(!is_array(global.RECENT_NODES)) global.RECENT_NODES = []; + } NODE_PAGE_DEFAULT = ds_list_size(NODE_CATEGORY); ADD_NODE_PAGE = NODE_PAGE_DEFAULT; @@ -488,6 +501,8 @@ function __initNodes() { var filter = ds_list_create(); #region addNodeCatagory("Filter", filter); + addNodeObject(filter, "Lovify", s_node_lovify, "Node_Lovify", [1, Node_Lovify]).setIcon(s_lovify_icon); + ds_list_add(filter, "Combines"); addNodeObject(filter, "Blend", s_node_blend, "Node_Blend", [0, Node_create_Blend], ["normal", "add", "subtract", "multiply", "screen", "maxx", "minn"], "Blend 2 images using different blendmodes."); addNodeObject(filter, "RGBA Combine", s_node_RGB_combine, "Node_Combine_RGB", [1, Node_Combine_RGB],, "Combine 4 image in to one. Each image use to control RGBA channel.").setVersion(1070); diff --git a/scripts/preferences/preferences.gml b/scripts/preferences/preferences.gml index b1fa00021..a292856f9 100644 --- a/scripts/preferences/preferences.gml +++ b/scripts/preferences/preferences.gml @@ -160,6 +160,7 @@ #region save load function PREF_SAVE() { #region + if(IS_CMD) return; var map = {}; var save_l = []; diff --git a/scripts/theme_definition/theme_definition.gml b/scripts/theme_definition/theme_definition.gml index b1d240f1e..a8f6c7295 100644 --- a/scripts/theme_definition/theme_definition.gml +++ b/scripts/theme_definition/theme_definition.gml @@ -1,495 +1,545 @@ -function Theme() constructor { - pixel_builder = noone; - junc_visible = noone; - tools_canvas_channel = noone; - ui_scrollbar = noone; - control_remove = noone; - vct = noone; - node_frame_title = noone; - duplicate = noone; - group_label = noone; - panel_graph = noone; - tunnel = noone; - icon_curve_connection = noone; - timeline_clock = noone; - animate_clock = noone; - prop_selecting = noone; - node_websocket_receive = noone; - text_slider = noone; - preview_bone_IK = noone; - tools_3d_transform_object = noone; - prop_anchor = noone; - node_draw_path = noone; - node_pin_bg_active = noone; - icon_splash_show_on_start = noone; - noti_icon_warning = noone; - pin = noone; - accept_16 = noone; - animate_prop_go = noone; - accept = noone; - bone_tool_detach = noone; - loading_s = noone; - loop = noone; - cursor_path_add = noone; - addon_icon = noone; - inspector_text_halign = noone; - anchor_scale_hori = noone; - noti_icon_file_save = noone; - minus_20 = noone; - node_junctions_outline = noone; - color_wheel = noone; - group_s = noone; - add = noone; - panel_animation = noone; - code_show_line = noone; - canvas_tools_rect_fill = noone; - path_tools_add = noone; - node_rotator_knob = noone; - discord = noone; - action_history = noone; - onion_skin = noone; - timeline_onion_skin = noone; - animate_onion_skin = noone; - anchor_rotate = noone; - button_left = noone; - obj_distribute_v = noone; - node_goto = noone; - star = noone; - bone_tool_scale = noone; - node_junctions_single_hover = noone; - node_note_selecting = noone; - obj_angle = noone; - node_use_global = noone; - panel_inspector = noone; - steam_creator = noone; - animation_stretch = noone; - ui_panel_fg = noone; - toolbar = noone; - icon_visibility = noone; - node_use_project = noone; - ac_constant = noone; - redo = noone; - inspector_surface_valign = noone; - textbox_header = noone; - obj_direction = noone; - anchor_arrow = noone; - rigidSim = noone; - button = noone; - icon_64 = noone; - node_pin_bg = noone; - button_hide = noone; - window_maximize = noone; - animation_timing = noone; - new_file = noone; - play_action = noone; +function Theme() constructor { #region + group_label = noone; + visible = noone; + pixel_builder = noone; + control_remove = noone; + node_frame_title = noone; + panel_graph = noone; + timeline_clock = noone; + preview_bone_IK = noone; + node_draw_path = noone; + icon_splash_show_on_start = noone; + accept_16 = noone; + bone_tool_detach = noone; + cursor_path_add = noone; + inspector_text_halign = noone; + noti_icon_file_save = noone; + minus_20 = noone; + node_junctions_outline = noone; + group_s = noone; + code_show_line = noone; + path_tools_add = noone; + node_rotator_knob = noone; + discord = noone; + action_history = noone; + animate_onion_skin = noone; + obj_distribute_v = noone; + bone_tool_scale = noone; + node_junctions_single_hover = noone; + node_note_selecting = noone; + node_use_global = noone; + gradient_mask = noone; + steam_creator = noone; + node_use_project = noone; + textbox_header = noone; + anchor_arrow = noone; + icon_64 = noone; + button_hide = noone; + window_maximize = noone; + new_file = noone; + play_action = noone; + minus = noone; + splice_draw = noone; + toolbar_shadow = noone; + noti_icon_tick = noone; + inspector_area_type = noone; + explorer = noone; + noti_icon_log = noone; + export_package = noone; + grad_blend = noone; + mesh_tool_edit = noone; + bone = noone; + node_trigger = noone; + button = noone; + prop_anchor = noone; + chat = noone; + wiki = noone; + patreon = noone; + dialog_bg = noone; + object_valign = noone; + node_junctions_array_hover = noone; + splash_thumbnail = noone; + search = noone; + bone_tool_IK = noone; + rotator_bg = noone; + cursor_path_remove = noone; + node_note_pin = noone; + window_exit = noone; + button_hide_circle_28 = noone; + feedback = noone; + path_tools_draw = noone; + node_slider = noone; + checkbox = noone; + menu_button = noone; + icon_save_all = noone; + icon_minimap = noone; + noti_icon_console = noone; + control_pin = noone; + rotator_knob = noone; + node_junction_name_bg = noone; + play_sound = noone; + view_group = noone; + color_picker_sample = noone; + anchor_bone_stick = noone; + node_junction_inspector = noone; + unit_angle = noone; + icon_array_processor = noone; + play_all = noone; + bone_tool_remove = noone; + strandSim = noone; + cursor_path_anchor = noone; + workshop_project = noone; + inspector_text_valign = noone; + icon_grid = noone; + node_note_title = noone; + hamburger = noone; + node_coor_pin = noone; + code_show_auto = noone; + path_tools_circle = noone; + node_websocket_send = noone; + heart = noone; + textbox_number_slider = noone; + node_resize = noone; + preview_light = noone; + button_color_overlay = noone; + button_path_not_found_icon = noone; + control_add = noone; + bone_tool_move = noone; + node_frame_bg = noone; + icon_toggle = noone; + text_bullet = noone; + progress_bar = noone; + preview_crosshair = noone; + node_draw_area = noone; + window_fullscreen = noone; + bone_tool_add = noone; + ui_label_bg = noone; + inspector_padding = noone; + noti_icon_file_load = noone; + add_20 = noone; + node_junctions_outline_hover = noone; + graph = noone; + inspector_corner = noone; + text = noone; + new_line_shift = noone; + mesh_tool_delete = noone; + node_rotator_bg = noone; + arrow_back_32 = noone; + itch = noone; + shadow_drop_down_24 = noone; + color_picker_dropper = noone; + obj_distribute_h = noone; + node_junctions_single = noone; + node_note_bg = noone; + color_wheel = noone; + node_create = noone; + sort = noone; + button_lime = noone; + anchor_solid_hori = noone; + icon_32 = noone; + window_minimize = noone; + unit_ref = noone; + path_tools_transform = noone; + key_display = noone; + path_tools_anchor = noone; + display_palette = noone; + obj_hemicircle = noone; + inspector_area = noone; + noti_icon_error = noone; + noti_icon_console_failed = noone; + view_mode = noone; + node_junctions_bg = noone; + folder_add = noone; + control_unpin = noone; + node_bg_pill = noone; + trophy = noone; + youtube = noone; + dialog_active = noone; + timeline_elastic = noone; + node_active = noone; + node_junctions_array = noone; + node_note_resize = noone; + node_move = noone; + reverse = noone; + obj_draw_line = noone; + bone_tool_transform = noone; + value_use_surface = noone; + cursor_path_move = noone; + prop_gradient = noone; + icon_visibility = noone; + save_auto = noone; + rotator_random_mode = noone; + workshop_download = noone; + code_syntax_highlight = noone; + path_tools_rectangle = noone; + menu_separator = noone; + anchor_rotate = noone; + websocket = noone; + anchor_scale = noone; + node_output_visible = noone; + node_checkbox = noone; + reset_16 = noone; + filter_type = noone; + group = noone; + node_new_badge = noone; + node_deprecated_badge = noone; + inspector_channel = noone; + slider = noone; + star = noone; + vct = noone; + refresh_20 = noone; + path_open_20 = noone; + icon_delete = noone; + junc_visible = noone; + cursor_select = noone; + add = noone; + hamburger_s = noone; + panel_preview = noone; + folder = noone; + anchor = noone; + icon_curve_connection = noone; + palette_selecting = noone; + cross = noone; + palette_mask = noone; + node_goto = noone; + anchor_scale_hori = noone; + ui_panel_bg = noone; + anchor_selector = noone; + obj_angle = noone; + cache_group = noone; + node_bg_name = noone; + onion_skin = noone; + icon_grid_setting = noone; + icon_tile_view = noone; + icon_split_view = noone; + ui_panel_tab = noone; + icon_reset_when_preview = noone; + d3d_snap_settings = noone; + tab_exit = noone; + d3d_preview_settings = noone; + icon_center_canvas = noone; + icon_preview_export = noone; + ui_panel_fg = noone; + ui_panel_active = noone; + node_glow = noone; + preview_hide = noone; + node_state = noone; + undo = noone; + redo = noone; + timeline_dopesheet_bg = noone; + add_16 = noone; + minus_16 = noone; + curve_presets = noone; + close_16 = noone; + checkbox_active = noone; + node_websocket_receive = noone; + tools_canvas_channel = noone; + canvas_tools_bucket = noone; + canvas_tools_ellip_fill = noone; + canvas_tools_ellip = noone; + canvas_tools_rect_fill = noone; + canvas_tools_rect = noone; + canvas_tools_eraser = noone; + canvas_tools_pencil = noone; + icon_24 = noone; + canvas_tools_selection_circle = noone; canvas_tools_selection_rectangle = noone; - splice_draw = noone; - panel_preview = noone; - tools_3d_rotate = noone; - toolbar_shadow = noone; - inspector_area_type = noone; - noti_icon_log = noone; - prop_on_end = noone; - export_package = noone; - icon_split_view = noone; - grad_blend = noone; - node_bg = noone; - strand_grab = noone; - canvas_tools_ellip_fill = noone; - vfx = noone; - mesh_tool_edit = noone; - ui_panel_bg = noone; - node_trigger = noone; - timeline_ease = noone; - cache_group = noone; - chat = noone; - wiki = noone; - patreon = noone; - dialog_bg = noone; - color_picker_box = noone; - object_valign = noone; - addon_setting = noone; - sequence_control = noone; - node_junctions_array_hover = noone; - text = noone; - info = noone; - node_checkbox = noone; - splash_thumbnail = noone; - search = noone; - icon_active_split = noone; - timeline_node = noone; - textbox_code = noone; - file = noone; - undo = noone; - gear = noone; - bone_tool_IK = noone; - cursor_path_remove = noone; - lock = noone; - icon_24 = noone; - node_note_pin = noone; - minus_16 = noone; - window_exit = noone; - text_popup = noone; - animation_setting = noone; - folder = noone; - button_hide_circle_28 = noone; - feedback = noone; - tab_exit = noone; - timeline_graph = noone; - canvas_tools_pencil = noone; - path_tools_draw = noone; - refresh_16 = noone; - menu_button = noone; - icon_save_all = noone; - button_hide_middle = noone; - icon_minimap = noone; - noti_icon_console = noone; - textbox = noone; - fluid_sim = noone; - ui_panel_tab = noone; - button_path_icon = noone; - strand_stretch = noone; - cursor_select = noone; - node_glow = noone; - control_pin = noone; - node_junction_name_bg = noone; - play_sound = noone; - view_group = noone; - copy = noone; - node_use_expression = noone; - ui_selection = noone; - color_picker_sample = noone; - ac_node = noone; - close_16 = noone; - anchor_bone_stick = noone; - cross = noone; - checkbox_on_start = noone; - node_new_badge = noone; - node_junction_inspector = noone; - icon_array_processor = noone; - icon_preview_export = noone; - play_all = noone; - timeline_folder = noone; - bone_tool_remove = noone; - cursor_path_anchor = noone; - workshop_project = noone; - explorer = noone; - inspector_text_valign = noone; - timeline_dopesheet_bg = noone; - node_dropper = noone; - icon_grid = noone; - node_note_title = noone; - widget_selecting = noone; - hamburger = noone; - menu_bg = noone; - code_show_auto = noone; - canvas_tools_rect = noone; - hamburger_s = noone; - path_tools_circle = noone; - node_bg_name = noone; - workshop_upload = noone; - node_websocket_send = noone; - heart = noone; - textbox_number_slider = noone; - node_resize = noone; - preview_light = noone; - button_color_overlay = noone; - button_path_not_found_icon = noone; - anchor_scale = noone; - button_right = noone; - timeline_keyframe_selecting = noone; - crop_tool = noone; - view_mode = noone; - strand_push = noone; - icon_delete = noone; - control_add = noone; - slider = noone; - bone_tool_move = noone; - node_frame_bg = noone; - paste = noone; - icon_toggle = noone; - text_bullet = noone; - ui_panel_active = noone; - visible = noone; - progress_bar = noone; - loading = noone; - fill = noone; - preview_crosshair = noone; - inspector_view = noone; - node_draw_area = noone; - window_fullscreen = noone; - icon_center_canvas = noone; - value_link = noone; - checkbox = noone; - bone_tool_add = noone; - workshop_update = noone; - tools_3d_transform = noone; - ui_label_bg = noone; - noti_icon_tick = noone; - inspector_padding = noone; - node_name_type = noone; - noti_icon_file_load = noone; - add_20 = noone; - icon_reset_when_preview = noone; - folder_16 = noone; - node_junctions_outline_hover = noone; - graph = noone; - inspector_corner = noone; - node_slider = noone; - new_line_shift = noone; - canvas_tools_ellip = noone; - cache = noone; - mesh_tool_delete = noone; - strandSim = noone; - save = noone; - node_rotator_bg = noone; - keyframe_override = noone; - arrow_back_32 = noone; - path_tools_anchor = noone; - itch = noone; - prop_keyframe = noone; - shadow_drop_down_24 = noone; - unit_angle = noone; - node_coor_pin = noone; - ac_function = noone; - obj_distribute_h = noone; - node_junctions_single = noone; - node_note_bg = noone; - anchor = noone; - node_create = noone; - sort = noone; - arrow = noone; - unit_audio = noone; - inspector_surface_halign = noone; - button_lime = noone; - anchor_solid_hori = noone; - preset = noone; - icon_32 = noone; - window_minimize = noone; - d3d_preview_settings = noone; - unit_ref = noone; - refresh = noone; - canvas_tools_selection_circle = noone; - path_tools_transform = noone; - timeline_keyframe = noone; - tools_3d_scale = noone; - key_display = noone; - display_palette = noone; - obj_hemicircle = noone; - inspector_area = noone; - button_hide_left = noone; - noti_icon_error = noone; - noti_icon_console_failed = noone; - ui_panel_bg_cover = noone; - icon_tile_view = noone; - node_junctions_bg = noone; - color_picker_dropper = noone; - folder_add = noone; - tool_side = noone; - strand_cut = noone; - canvas_tools_bucket = noone; - project = noone; - control_unpin = noone; - rotator_bg = noone; - node_bg_pill = noone; - smoke_sim = noone; - node_processor = noone; - object_halign = noone; - trophy = noone; - youtube = noone; - dialog_active = noone; - circle = noone; - bone = noone; - timeline_elastic = noone; - button_hide_fill = noone; - folder_content = noone; - node_deprecated_badge = noone; - node_junctions_array = noone; - node_note_resize = noone; - minus = noone; - node_move = noone; - workshop_collection = noone; - reverse = noone; - animate_node_go = noone; - menu_button_mask = noone; - obj_draw_line = noone; - bone_tool_transform = noone; - cursor_path_move = noone; - prop_gradient = noone; - add_16 = noone; - save_auto = noone; - d3d_snap_settings = noone; - scroll_box_arrow = noone; - rotator_random_mode = noone; - workshop_download = noone; - group = noone; - anchor_selector = noone; - node_active = noone; - code_syntax_highlight = noone; - inspector_channel = noone; - canvas_tools_eraser = noone; - node_state = noone; - path_tools_rectangle = noone; - rotator_knob = noone; - steam = noone; - menu_separator = noone; - timeline_color = noone; - websocket = noone; - button_hide_right = noone; - node_output_visible = noone; - reset_16 = noone; - icon_grid_setting = noone; - filter_type = noone; - button_middle = noone; - strand_comb = noone; -} + node_bg = noone; + timeline_folder = noone; + animate_node_go = noone; + timeline_node = noone; + arrow = noone; + folder_16 = noone; + noti_icon_warning = noone; + loop = noone; + circle_16 = noone; + text_slider = noone; + tool_side = noone; + button_path_icon = noone; + menu_bg = noone; + toolbar = noone; + pin = noone; + icon_active_split = noone; + copy = noone; + node_pin_bg = noone; + node_pin_bg_active = noone; + loop_24 = noone; + feedback_24 = noone; + button_left = noone; + button_right = noone; + button_middle = noone; + obj_direction = noone; + tunnel = noone; + node_processor = noone; + keyframe_override = noone; + frame_range = noone; + unit_audio = noone; + loading = noone; + inspector_surface_halign = noone; + inspector_surface_valign = noone; + panel_animation = noone; + project_fix_palette = noone; + palette_separator = noone; + refresh = noone; + file = noone; + crop_tool = noone; + icon_cmd_enter = noone; + node_name_type = noone; + cache = noone; + button_hide_fill = noone; + duplicate = noone; + textbox_code = noone; + object_halign = noone; + timeline_ease = noone; + accept = noone; + gear = noone; + ui_scrollbar = noone; + ui_selection_range_sim_hori = noone; + ui_selection_range_hori = noone; + timeline_keyframe = noone; + inspector_checkbox = noone; + workshop_collection = noone; + prop_selecting = noone; + vfx = noone; + timeline_key_ease = noone; + timeline_key_empty = noone; + timeline_keyframe_selecting = noone; + value_link = noone; + addon_icon = noone; + timeline_graph = noone; + panel_inspector = noone; + checkbox_on_start = noone; + animate_prop_go = noone; + folder_content = noone; + addon_setting = noone; + smoke_sim = noone; + button_hide_right = noone; + button_hide_middle = noone; + button_hide_left = noone; + paste = noone; + ui_selection = noone; + color_picker_box = noone; + timeline_onion_skin = noone; + timeline_color = noone; + project = noone; + lock = noone; + animation_stretch = noone; + preset = noone; + ui_panel_bg_cover = noone; + path_open = noone; + inspector_view = noone; + tools_3d_scale = noone; + tools_3d_rotate = noone; + sequence_control = noone; + animation_setting = noone; + tools_3d_transform = noone; + animation_timing = noone; + ac_constant = noone; + circle = noone; + steam = noone; + ac_node = noone; + save = noone; + workshop_upload = noone; + ac_function = noone; + workshop_update = noone; + loading_s = noone; + fill = noone; + rigidSim = noone; + animate_clock = noone; + node_use_expression = noone; + prop_keyframe = noone; + prop_on_end = noone; + refresh_16 = noone; + node_dropper = noone; + text_popup = noone; + menu_button_mask = noone; + textbox = noone; + widget_selecting = noone; + scroll_box_arrow = noone; + tools_3d_transform_object = noone; + strand_push = noone; + strand_comb = noone; + strand_stretch = noone; + strand_cut = noone; + strand_grab = noone; + info = noone; + fluid_sim = noone; +} #endregion -function ThemeColor() constructor { +function ThemeColor() constructor { #region bg = noone; - _main_accent = noone; - _main_text = noone; - _main_text_inner = noone; - _main_text_accent = noone; - _main_text_accent_inner = noone; - _main_text_on_accent = noone; - _main_text_sub = noone; - _main_text_sub_inner = noone; - _main_icon = noone; - _main_icon_on_inner = noone; - _main_icon_light = noone; - _main_icon_dark = noone; - _main_value_positive = noone; - _main_value_negative = noone; + _main_accent = noone; + _main_text = noone; + _main_text_inner = noone; + _main_text_accent = noone; + _main_text_accent_inner = noone; + _main_text_on_accent = noone; + _main_text_sub = noone; + _main_text_sub_inner = noone; + _main_icon = noone; + _main_icon_on_inner = noone; + _main_icon_light = noone; + _main_icon_dark = noone; + _main_value_positive = noone; + _main_value_negative = noone; - lua_highlight_keyword = noone; - lua_highlight_bracklet = noone; - lua_highlight_function = noone; - lua_highlight_number = noone; - lua_highlight_string = noone; + lua_highlight_keyword = noone; + lua_highlight_bracklet = noone; + lua_highlight_function = noone; + lua_highlight_number = noone; + lua_highlight_string = noone; - collection_folder_empty = noone; - collection_folder_nonempty = noone; - collection_tree_line = noone; - collection_path_current_bg = noone; + collection_folder_empty = noone; + collection_folder_nonempty = noone; + collection_tree_line = noone; + collection_path_current_bg = noone; - dialog_array_edit_divider = noone; - dialog_array_edit_bg = noone; - dialog_splash_badge = noone; - dialog_about_bg = noone; - dialog_preference_prop_bg = noone; - dialog_add_node_collection = noone; - dialog_palette_divider = noone; - dialog_notification_bg_hover = noone; - dialog_notification_bg = noone; - dialog_notification_icon_bg = noone; - dialog_menubox_highlight = noone; - dialog_lua_ref_bg_args = noone; - dialog_lua_ref_bg_hover = noone; - dialog_lua_ref_bg = noone; + dialog_array_edit_divider = noone; + dialog_array_edit_bg = noone; + dialog_splash_badge = noone; + dialog_about_bg = noone; + dialog_preference_prop_bg = noone; + dialog_add_node_collection = noone; + dialog_palette_divider = noone; + dialog_notification_bg_hover = noone; + dialog_notification_bg = noone; + dialog_notification_icon_bg = noone; + dialog_menubox_highlight = noone; + dialog_lua_ref_bg_args = noone; + dialog_lua_ref_bg_hover = noone; + dialog_lua_ref_bg = noone; - node_composite_bg = noone; - node_composite_bg_blend = noone; - node_composite_separator = noone; - node_composite_overlay_border = noone; - node_display_text_frame_fill = noone; - node_display_text_frame_outline = noone; - node_level_outline = noone; - node_level_shade = noone; - node_overlay_gizmo_inactive = noone; - node_blend_default = noone; - node_blend_tunnel = noone; - node_blend_number = noone; - node_blend_input = noone; - node_blend_loop = noone; - node_blend_vfx = noone; - node_blend_feedback = noone; - node_blend_collection = noone; - node_blend_simulation = noone; - node_blend_fluid = noone; - node_blend_canvas = noone; - node_blend_strand = noone; - node_path_overlay_control_line = noone; - node_wiggler_frame = noone; - node_border_file_drop = noone; + node_composite_bg = noone; + node_composite_bg_blend = noone; + node_composite_separator = noone; + node_composite_overlay_border = noone; + node_display_text_frame_fill = noone; + node_display_text_frame_outline = noone; + node_level_outline = noone; + node_level_shade = noone; + node_overlay_gizmo_inactive = noone; + node_blend_default = noone; + node_blend_tunnel = noone; + node_blend_number = noone; + node_blend_input = noone; + node_blend_loop = noone; + node_blend_vfx = noone; + node_blend_feedback = noone; + node_blend_collection = noone; + node_blend_simulation = noone; + node_blend_fluid = noone; + node_blend_canvas = noone; + node_blend_strand = noone; + node_path_overlay_control_line = noone; + node_wiggler_frame = noone; + node_border_file_drop = noone; - scrollbar_bg = noone; - scrollbar_hover = noone; - scrollbar_idle = noone; + scrollbar_bg = noone; + scrollbar_hover = noone; + scrollbar_idle = noone; - panel_animation_frame_divider = noone; - panel_animation_keyframe_ease_line = noone; - panel_animation_loop_line = noone; + panel_animation_frame_divider = noone; + panel_animation_keyframe_ease_line = noone; + panel_animation_loop_line = noone; panel_animation_key_tool_unselected = noone; - panel_animation_keyframe_selected = noone; + panel_animation_keyframe_selected = noone; panel_animation_keyframe_unselected = noone; - panel_animation_keyframe_hide = noone; - panel_animation_node_bg = noone; - panel_animation_dope_bg_hover = noone; - panel_animation_dope_bg = noone; - panel_animation_graph_bg = noone; - panel_animation_graph_select = noone; - panel_animation_graph_line = noone; - panel_animation_preview_frame = noone; - panel_animation_timeline_blend = noone; - panel_animation_timeline_top = noone; + panel_animation_keyframe_hide = noone; + panel_animation_node_bg = noone; + panel_animation_dope_bg_hover = noone; + panel_animation_dope_bg = noone; + panel_animation_graph_bg = noone; + panel_animation_graph_select = noone; + panel_animation_graph_line = noone; + panel_animation_preview_frame = noone; + panel_animation_timeline_blend = noone; + panel_animation_timeline_top = noone; - panel_bg_clear_inner = noone; - panel_bg_clear = noone; - panel_tab = noone; - panel_tab_hover = noone; - panel_tab_inactive = noone; - panel_tab_text = noone; - panel_tab_icon = noone; + panel_bg_clear_inner = noone; + panel_bg_clear = noone; + panel_tab = noone; + panel_tab_hover = noone; + panel_tab_inactive = noone; + panel_tab_text = noone; + panel_tab_icon = noone; - panel_graph_minimap_outline = noone; - panel_graph_node_dimension = noone; - panel_graph_minimap_focus = noone; + panel_graph_minimap_outline = noone; + panel_graph_node_dimension = noone; + panel_graph_minimap_focus = noone; - panel_inspector_key_separator = noone; - panel_inspector_group_hover = noone; - panel_inspector_group_bg = noone; - panel_inspector_output_label = noone; + panel_inspector_key_separator = noone; + panel_inspector_group_hover = noone; + panel_inspector_group_bg = noone; + panel_inspector_output_label = noone; - panel_preview_grid = noone; - panel_preview_surface_outline = noone; - panel_preview_split_line = noone; - panel_preview_transparent = noone; + panel_preview_grid = noone; + panel_preview_surface_outline = noone; + panel_preview_split_line = noone; + panel_preview_transparent = noone; - panel_toolbar_outline = noone; - panel_toolbar_separator = noone; + panel_toolbar_outline = noone; + panel_toolbar_separator = noone; - widget_curve_line = noone; - widget_curve_outline = noone; - widget_rotator_range = noone; - widget_rotator_range_hover = noone; - widget_rotator_guide = noone; - widget_surface_frame = noone; - widget_text_highlight = noone; + widget_curve_line = noone; + widget_curve_outline = noone; + widget_rotator_range = noone; + widget_rotator_range_hover = noone; + widget_rotator_guide = noone; + widget_surface_frame = noone; + widget_text_highlight = noone; - widget_text_dec_d = noone; - widget_text_dec_n = noone; - widget_text_dec_e = noone; - widget_text_dec_f = noone; - widget_text_dec_i = noone; + widget_text_dec_d = noone; + widget_text_dec_n = noone; + widget_text_dec_e = noone; + widget_text_dec_f = noone; + widget_text_dec_i = noone; - axis = noone; - histogram = noone; - heat = noone; - speed = noone; -} + axis = noone; + histogram = noone; + heat = noone; + speed = noone; +} #endregion -function ThemeValue() constructor { +function ThemeValue() constructor { #region highlight_corner_radius = noone; selection_corner_radius = noone; - panel_padding = noone; - panel_margin = noone; - panel_corner_radius = noone; - panel_notification_padding = noone; - panel_tab_extend = noone; + panel_padding = noone; + panel_margin = noone; + panel_corner_radius = noone; + panel_notification_padding = noone; + panel_tab_extend = noone; minimap_corner_radius = noone; - slider_type = noone; - font_aa = noone; -} \ No newline at end of file + slider_type = noone; + font_aa = noone; +} #endregion + +function ThemeColorDef() constructor { #region + main_dkblack = #191925; + main_mdblack = #1e1e2c; + main_black = #272736; + main_dkgrey = #3b3b4e; + main_dark = #4da6ff; + main_grey = #6d6d81; + main_ltgrey = #7e7e8f; + main_white = #d6d6e8; + main_bg = #1c1c23; + + blue = #27aae1; + cyan = #88ffe9; + yellow = #ffe478; + orange = #ff9166; + red = #eb004b; + pink = #eb00b7; + purple = #9200d4; + lime = #8fde5d; + pgreen = #50eb17; + pblue = #3d43f5; + + black = #000000; + dkgrey = #202020; + smoke = #6d6e71; + white = #ffffff; +} #endregion \ No newline at end of file diff --git a/scripts/timeline_data/timeline_data.gml b/scripts/timeline_data/timeline_data.gml index 47534d364..66fdb37fb 100644 --- a/scripts/timeline_data/timeline_data.gml +++ b/scripts/timeline_data/timeline_data.gml @@ -1,11 +1,11 @@ function timelineItem() constructor { - show = true; + show = true; active = true; - color = -1; + color = -1; color_cur = CDEF.main_grey; color_dsp = -1; - parent = noone; + parent = noone; static setColor = function(color) { self.color = color; } static getColor = function() { return color; } diff --git a/shaders/sh_colorize/sh_colorize.fsh b/shaders/sh_colorize/sh_colorize.fsh index 222bf4469..f6516362e 100644 --- a/shaders/sh_colorize/sh_colorize.fsh +++ b/shaders/sh_colorize/sh_colorize.fsh @@ -18,6 +18,16 @@ uniform sampler2D gradient_shiftSurf; uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -99,17 +109,25 @@ uniform sampler2D gradient_shiftSurf; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_edge_shade_apply/sh_edge_shade_apply.fsh b/shaders/sh_edge_shade_apply/sh_edge_shade_apply.fsh index 42c388d8b..0db983835 100644 --- a/shaders/sh_edge_shade_apply/sh_edge_shade_apply.fsh +++ b/shaders/sh_edge_shade_apply/sh_edge_shade_apply.fsh @@ -14,6 +14,16 @@ uniform vec2 dimension; uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -95,17 +105,25 @@ uniform vec2 dimension; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_gradient/sh_gradient.fsh b/shaders/sh_gradient/sh_gradient.fsh index ab8074e5e..ec84da262 100644 --- a/shaders/sh_gradient/sh_gradient.fsh +++ b/shaders/sh_gradient/sh_gradient.fsh @@ -40,6 +40,16 @@ uniform int uniAsp; uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -121,17 +131,25 @@ uniform int uniAsp; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_gradient_display/sh_gradient_display.fsh b/shaders/sh_gradient_display/sh_gradient_display.fsh index caab4ac42..eb4f1ac21 100644 --- a/shaders/sh_gradient_display/sh_gradient_display.fsh +++ b/shaders/sh_gradient_display/sh_gradient_display.fsh @@ -11,6 +11,16 @@ varying vec4 v_vColour; uniform float gradient_time[GRADIENT_LIMIT]; uniform int gradient_keys; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -87,17 +97,25 @@ varying vec4 v_vColour; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh index cf6d3fc75..4d0e66fc8 100644 --- a/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh +++ b/shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.fsh @@ -11,6 +11,16 @@ varying vec4 v_vColour; uniform float gradient_time[GRADIENT_LIMIT]; uniform int gradient_keys; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -87,17 +97,25 @@ varying vec4 v_vColour; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_grid/sh_grid.fsh b/shaders/sh_grid/sh_grid.fsh index 07f72ca19..44aa268ca 100644 --- a/shaders/sh_grid/sh_grid.fsh +++ b/shaders/sh_grid/sh_grid.fsh @@ -46,6 +46,16 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -127,17 +137,25 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_grid_hex/sh_grid_hex.fsh b/shaders/sh_grid_hex/sh_grid_hex.fsh index f3aeeff2b..c7095fe7a 100644 --- a/shaders/sh_grid_hex/sh_grid_hex.fsh +++ b/shaders/sh_grid_hex/sh_grid_hex.fsh @@ -44,6 +44,16 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -125,17 +135,25 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_grid_tri/sh_grid_tri.fsh b/shaders/sh_grid_tri/sh_grid_tri.fsh index e41d78990..93ce3dd27 100644 --- a/shaders/sh_grid_tri/sh_grid_tri.fsh +++ b/shaders/sh_grid_tri/sh_grid_tri.fsh @@ -43,6 +43,16 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -124,17 +134,25 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_herringbone_tile/sh_herringbone_tile.fsh b/shaders/sh_herringbone_tile/sh_herringbone_tile.fsh index 1e50b8815..4f1ee0d3f 100644 --- a/shaders/sh_herringbone_tile/sh_herringbone_tile.fsh +++ b/shaders/sh_herringbone_tile/sh_herringbone_tile.fsh @@ -45,6 +45,16 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -126,17 +136,25 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_interpret_number/sh_interpret_number.fsh b/shaders/sh_interpret_number/sh_interpret_number.fsh index eb099c1d2..c40dd1126 100644 --- a/shaders/sh_interpret_number/sh_interpret_number.fsh +++ b/shaders/sh_interpret_number/sh_interpret_number.fsh @@ -19,6 +19,16 @@ uniform float number[BATCH_SIZE]; uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -100,17 +110,25 @@ uniform float number[BATCH_SIZE]; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_lovify/sh_lovify.fsh b/shaders/sh_lovify/sh_lovify.fsh new file mode 100644 index 000000000..046ba4a95 --- /dev/null +++ b/shaders/sh_lovify/sh_lovify.fsh @@ -0,0 +1,26 @@ +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +#define SRGB_TO_LINEAR(c) pow((c), vec3(2.2)) +#define LINEAR_TO_SRGB(c) pow((c), vec3(1.0 / 2.2)) +#define SRGB(r, g, b) SRGB_TO_LINEAR(vec3(r, g, b) / 255.0) + +void main() { + vec4 c = texture2D( gm_BaseTexture, v_vTexcoord ); + + vec3 COLOR0 = SRGB(252., 3., 111.); + vec3 COLOR1 = SRGB(190., 3., 252.); + + float t = length(v_vTexcoord) / sqrt(2.); + t = smoothstep(0.0, 1.0, clamp(t, 0.0, 1.0)); + + vec3 color = mix(COLOR0, COLOR1, t); + color = LINEAR_TO_SRGB(color); + vec4 b = vec4(color, 1.); + + float lum = dot(c.rgb, vec3(0.2126, 0.7152, 0.0722)); + vec4 blend = lum > 0.5? (1. - (1. - 2. * (b - 0.5)) * (1. - c)) : ((2. * b) * c); + blend = 0.5 + (blend * 1.75 - 0.5) * 0.66; + + gl_FragColor = blend; +} \ No newline at end of file diff --git a/shaders/sh_lovify/sh_lovify.vsh b/shaders/sh_lovify/sh_lovify.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_lovify/sh_lovify.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_lovify/sh_lovify.yy b/shaders/sh_lovify/sh_lovify.yy new file mode 100644 index 000000000..c7eda1226 --- /dev/null +++ b/shaders/sh_lovify/sh_lovify.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_lovify", + "parent": { + "name": "lovify", + "path": "folders/nodes/data/misc/lovify.yy", + }, + "type": 1, +} \ No newline at end of file diff --git a/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh b/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh index ab0136225..c38a64863 100644 --- a/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh +++ b/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh @@ -105,6 +105,16 @@ float curveEval(in float _x) { #region uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -186,17 +196,25 @@ float curveEval(in float _x) { #region if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_pytagorean_tile/sh_pytagorean_tile.fsh b/shaders/sh_pytagorean_tile/sh_pytagorean_tile.fsh index adc4f4691..79ba55512 100644 --- a/shaders/sh_pytagorean_tile/sh_pytagorean_tile.fsh +++ b/shaders/sh_pytagorean_tile/sh_pytagorean_tile.fsh @@ -43,6 +43,16 @@ uniform int gradient_use; uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -124,17 +134,25 @@ uniform int gradient_use; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_random_tile/sh_random_tile.fsh b/shaders/sh_random_tile/sh_random_tile.fsh index 25262be96..da25d77af 100644 --- a/shaders/sh_random_tile/sh_random_tile.fsh +++ b/shaders/sh_random_tile/sh_random_tile.fsh @@ -43,6 +43,16 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -124,17 +134,25 @@ float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.5406 if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/shaders/sh_stripe/sh_stripe.fsh b/shaders/sh_stripe/sh_stripe.fsh index 5185fbc37..5f6015bf2 100644 --- a/shaders/sh_stripe/sh_stripe.fsh +++ b/shaders/sh_stripe/sh_stripe.fsh @@ -38,6 +38,16 @@ uniform int gradient_use; uniform vec4 gradient_map_range; uniform sampler2D gradient_map; + vec3 linearToGamma(vec3 c) { return pow(c, vec3( 2.2)); } + vec3 gammaToLinear(vec3 c) { return pow(c, vec3(1. / 2.2)); } + + vec3 rgbMix(vec3 c1, vec3 c2, float t) { #region + vec3 k1 = linearToGamma(c1); + vec3 k2 = linearToGamma(c2); + + return gammaToLinear(mix(k1, k2, t)); + } #endregion + vec3 rgb2oklab(vec3 c) { #region const mat3 kCONEtoLMS = mat3( 0.4121656120, 0.2118591070, 0.0883097947, @@ -119,17 +129,25 @@ uniform int gradient_use; if(i == 0) col = gradient_color[i]; else { - float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); - float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); + float t = (prog - gradient_time[i - 1]) / (gradient_time[i] - gradient_time[i - 1]); + vec3 c0 = gradient_color[i - 1].rgb; + vec3 c1 = gradient_color[i].rgb; + float a = mix(gradient_color[i - 1].a, gradient_color[i].a, t); if(gradient_blend == 0) - col = mix(gradient_color[i - 1], gradient_color[i], t); + col = vec4(mix(c0, c1, t), a); + else if(gradient_blend == 1) col = gradient_color[i - 1]; + else if(gradient_blend == 2) - col = vec4(hsvMix(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(hsvMix(c0, c1, t), a); + else if(gradient_blend == 3) - col = vec4(oklabMax(gradient_color[i - 1].rgb, gradient_color[i].rgb, t), a); + col = vec4(oklabMax(c0, c1, t), a); + + else if(gradient_blend == 4) + col = vec4(rgbMix(c0, c1, t), a); } break; } diff --git a/sprites/s_lovify_heart_10/ec6c05a3-1afa-4535-b626-fa89043e5a1c.png b/sprites/s_lovify_heart_10/ec6c05a3-1afa-4535-b626-fa89043e5a1c.png new file mode 100644 index 000000000..acc35bae2 Binary files /dev/null and b/sprites/s_lovify_heart_10/ec6c05a3-1afa-4535-b626-fa89043e5a1c.png differ diff --git a/sprites/s_lovify_heart_10/layers/ec6c05a3-1afa-4535-b626-fa89043e5a1c/6f5e1bcb-933f-42d4-a7a1-b5c607647da8.png b/sprites/s_lovify_heart_10/layers/ec6c05a3-1afa-4535-b626-fa89043e5a1c/6f5e1bcb-933f-42d4-a7a1-b5c607647da8.png new file mode 100644 index 000000000..acc35bae2 Binary files /dev/null and b/sprites/s_lovify_heart_10/layers/ec6c05a3-1afa-4535-b626-fa89043e5a1c/6f5e1bcb-933f-42d4-a7a1-b5c607647da8.png differ diff --git a/sprites/s_lovify_heart_10/s_lovify_heart_10.yy b/sprites/s_lovify_heart_10/s_lovify_heart_10.yy new file mode 100644 index 000000000..bd6202e8c --- /dev/null +++ b/sprites/s_lovify_heart_10/s_lovify_heart_10.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_lovify_heart_10", + "bbox_bottom": 9, + "bbox_left": 0, + "bbox_right": 9, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"ec6c05a3-1afa-4535-b626-fa89043e5a1c",}, + ], + "gridX": 0, + "gridY": 0, + "height": 10, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"6f5e1bcb-933f-42d4-a7a1-b5c607647da8","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "spr", + "path": "folders/nodes/data/misc/lovify/spr.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_lovify_heart_10", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"ec6c05a3-1afa-4535-b626-fa89043e5a1c","path":"sprites/s_lovify_heart_10/s_lovify_heart_10.yy",},},},"Disabled":false,"id":"ef9df84f-0a91-468a-a3c4-162bf1903f41","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 5, + "yorigin": 5, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 10, +} \ No newline at end of file diff --git a/sprites/s_lovify_heart_12/78d0172b-5ac2-402f-ae37-a33213b71322.png b/sprites/s_lovify_heart_12/78d0172b-5ac2-402f-ae37-a33213b71322.png new file mode 100644 index 000000000..15e3c7f54 Binary files /dev/null and b/sprites/s_lovify_heart_12/78d0172b-5ac2-402f-ae37-a33213b71322.png differ diff --git a/sprites/s_lovify_heart_12/layers/78d0172b-5ac2-402f-ae37-a33213b71322/d3ebb107-5682-4bc9-9413-6e57ae73bfe6.png b/sprites/s_lovify_heart_12/layers/78d0172b-5ac2-402f-ae37-a33213b71322/d3ebb107-5682-4bc9-9413-6e57ae73bfe6.png new file mode 100644 index 000000000..15e3c7f54 Binary files /dev/null and b/sprites/s_lovify_heart_12/layers/78d0172b-5ac2-402f-ae37-a33213b71322/d3ebb107-5682-4bc9-9413-6e57ae73bfe6.png differ diff --git a/sprites/s_lovify_heart_12/s_lovify_heart_12.yy b/sprites/s_lovify_heart_12/s_lovify_heart_12.yy new file mode 100644 index 000000000..a7eab4cca --- /dev/null +++ b/sprites/s_lovify_heart_12/s_lovify_heart_12.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_lovify_heart_12", + "bbox_bottom": 11, + "bbox_left": 0, + "bbox_right": 11, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"78d0172b-5ac2-402f-ae37-a33213b71322",}, + ], + "gridX": 0, + "gridY": 0, + "height": 12, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"d3ebb107-5682-4bc9-9413-6e57ae73bfe6","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "spr", + "path": "folders/nodes/data/misc/lovify/spr.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_lovify_heart_12", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"78d0172b-5ac2-402f-ae37-a33213b71322","path":"sprites/s_lovify_heart_12/s_lovify_heart_12.yy",},},},"Disabled":false,"id":"a2efd4f7-d254-40c9-b407-4dce81ff915e","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 6, + "yorigin": 6, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 12, +} \ No newline at end of file diff --git a/sprites/s_lovify_heart_16/b5210b91-bcb4-4b9a-aa23-ff9770518890.png b/sprites/s_lovify_heart_16/b5210b91-bcb4-4b9a-aa23-ff9770518890.png new file mode 100644 index 000000000..412926515 Binary files /dev/null and b/sprites/s_lovify_heart_16/b5210b91-bcb4-4b9a-aa23-ff9770518890.png differ diff --git a/sprites/s_lovify_heart_16/layers/b5210b91-bcb4-4b9a-aa23-ff9770518890/c7d7e132-563b-47ef-8109-cd86fed3f0c9.png b/sprites/s_lovify_heart_16/layers/b5210b91-bcb4-4b9a-aa23-ff9770518890/c7d7e132-563b-47ef-8109-cd86fed3f0c9.png new file mode 100644 index 000000000..412926515 Binary files /dev/null and b/sprites/s_lovify_heart_16/layers/b5210b91-bcb4-4b9a-aa23-ff9770518890/c7d7e132-563b-47ef-8109-cd86fed3f0c9.png differ diff --git a/sprites/s_lovify_heart_16/s_lovify_heart_16.yy b/sprites/s_lovify_heart_16/s_lovify_heart_16.yy new file mode 100644 index 000000000..0cbfd8ee7 --- /dev/null +++ b/sprites/s_lovify_heart_16/s_lovify_heart_16.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_lovify_heart_16", + "bbox_bottom": 15, + "bbox_left": 0, + "bbox_right": 15, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"b5210b91-bcb4-4b9a-aa23-ff9770518890",}, + ], + "gridX": 0, + "gridY": 0, + "height": 16, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"c7d7e132-563b-47ef-8109-cd86fed3f0c9","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "spr", + "path": "folders/nodes/data/misc/lovify/spr.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_lovify_heart_16", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"b5210b91-bcb4-4b9a-aa23-ff9770518890","path":"sprites/s_lovify_heart_16/s_lovify_heart_16.yy",},},},"Disabled":false,"id":"58ff330e-e611-4bdf-bae5-cf52361a093c","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 8, + "yorigin": 8, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 16, +} \ No newline at end of file diff --git a/sprites/s_lovify_heart_6/f0e29127-ada5-42d6-872b-7579721152f2.png b/sprites/s_lovify_heart_6/f0e29127-ada5-42d6-872b-7579721152f2.png new file mode 100644 index 000000000..9def66dbe Binary files /dev/null and b/sprites/s_lovify_heart_6/f0e29127-ada5-42d6-872b-7579721152f2.png differ diff --git a/sprites/s_lovify_heart_6/layers/f0e29127-ada5-42d6-872b-7579721152f2/ccd92203-1fe7-4598-b979-e3f6bcbe8125.png b/sprites/s_lovify_heart_6/layers/f0e29127-ada5-42d6-872b-7579721152f2/ccd92203-1fe7-4598-b979-e3f6bcbe8125.png new file mode 100644 index 000000000..9def66dbe Binary files /dev/null and b/sprites/s_lovify_heart_6/layers/f0e29127-ada5-42d6-872b-7579721152f2/ccd92203-1fe7-4598-b979-e3f6bcbe8125.png differ diff --git a/sprites/s_lovify_heart_6/s_lovify_heart_6.yy b/sprites/s_lovify_heart_6/s_lovify_heart_6.yy new file mode 100644 index 000000000..a8f24d890 --- /dev/null +++ b/sprites/s_lovify_heart_6/s_lovify_heart_6.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_lovify_heart_6", + "bbox_bottom": 5, + "bbox_left": 0, + "bbox_right": 5, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"f0e29127-ada5-42d6-872b-7579721152f2",}, + ], + "gridX": 0, + "gridY": 0, + "height": 6, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"ccd92203-1fe7-4598-b979-e3f6bcbe8125","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "spr", + "path": "folders/nodes/data/misc/lovify/spr.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_lovify_heart_6", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"f0e29127-ada5-42d6-872b-7579721152f2","path":"sprites/s_lovify_heart_6/s_lovify_heart_6.yy",},},},"Disabled":false,"id":"0f7674fb-1b08-4f74-8dc2-72c5a65d1481","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 3, + "yorigin": 3, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 6, +} \ No newline at end of file diff --git a/sprites/s_lovify_heart_8/0187099f-c05b-4480-8ad8-8cdab99fad72.png b/sprites/s_lovify_heart_8/0187099f-c05b-4480-8ad8-8cdab99fad72.png new file mode 100644 index 000000000..29153f8c4 Binary files /dev/null and b/sprites/s_lovify_heart_8/0187099f-c05b-4480-8ad8-8cdab99fad72.png differ diff --git a/sprites/s_lovify_heart_8/layers/0187099f-c05b-4480-8ad8-8cdab99fad72/66525455-64e5-4891-957b-f2d6d0295ff1.png b/sprites/s_lovify_heart_8/layers/0187099f-c05b-4480-8ad8-8cdab99fad72/66525455-64e5-4891-957b-f2d6d0295ff1.png new file mode 100644 index 000000000..29153f8c4 Binary files /dev/null and b/sprites/s_lovify_heart_8/layers/0187099f-c05b-4480-8ad8-8cdab99fad72/66525455-64e5-4891-957b-f2d6d0295ff1.png differ diff --git a/sprites/s_lovify_heart_8/s_lovify_heart_8.yy b/sprites/s_lovify_heart_8/s_lovify_heart_8.yy new file mode 100644 index 000000000..30228c821 --- /dev/null +++ b/sprites/s_lovify_heart_8/s_lovify_heart_8.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_lovify_heart_8", + "bbox_bottom": 7, + "bbox_left": 0, + "bbox_right": 7, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"0187099f-c05b-4480-8ad8-8cdab99fad72",}, + ], + "gridX": 0, + "gridY": 0, + "height": 8, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"66525455-64e5-4891-957b-f2d6d0295ff1","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "spr", + "path": "folders/nodes/data/misc/lovify/spr.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_lovify_heart_8", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"0187099f-c05b-4480-8ad8-8cdab99fad72","path":"sprites/s_lovify_heart_8/s_lovify_heart_8.yy",},},},"Disabled":false,"id":"2b6d942b-c191-4453-8ea4-229ba23640e6","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 4, + "yorigin": 4, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 8, +} \ No newline at end of file diff --git a/sprites/s_lovify_icon/35d16322-4261-423a-ae41-08c0f4200eee.png b/sprites/s_lovify_icon/35d16322-4261-423a-ae41-08c0f4200eee.png new file mode 100644 index 000000000..8b4c59c9e Binary files /dev/null and b/sprites/s_lovify_icon/35d16322-4261-423a-ae41-08c0f4200eee.png differ diff --git a/sprites/s_lovify_icon/layers/35d16322-4261-423a-ae41-08c0f4200eee/5771e4ab-ce7f-420f-86ef-dc37f109428f.png b/sprites/s_lovify_icon/layers/35d16322-4261-423a-ae41-08c0f4200eee/5771e4ab-ce7f-420f-86ef-dc37f109428f.png new file mode 100644 index 000000000..8b4c59c9e Binary files /dev/null and b/sprites/s_lovify_icon/layers/35d16322-4261-423a-ae41-08c0f4200eee/5771e4ab-ce7f-420f-86ef-dc37f109428f.png differ diff --git a/sprites/s_lovify_icon/s_lovify_icon.yy b/sprites/s_lovify_icon/s_lovify_icon.yy new file mode 100644 index 000000000..4f5814fff --- /dev/null +++ b/sprites/s_lovify_icon/s_lovify_icon.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_lovify_icon", + "bbox_bottom": 25, + "bbox_left": 6, + "bbox_right": 25, + "bbox_top": 6, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"35d16322-4261-423a-ae41-08c0f4200eee",}, + ], + "gridX": 0, + "gridY": 0, + "height": 32, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"5771e4ab-ce7f-420f-86ef-dc37f109428f","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 9, + "parent": { + "name": "spr", + "path": "folders/nodes/data/misc/lovify/spr.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_lovify_icon", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"35d16322-4261-423a-ae41-08c0f4200eee","path":"sprites/s_lovify_icon/s_lovify_icon.yy",},},},"Disabled":false,"id":"1d9ca0c3-630e-4dfc-ab19-a9a39fb5d740","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 20, + "yorigin": 12, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 32, +} \ No newline at end of file diff --git a/sprites/s_node_lovify/0a0aeef0-0788-41b2-9d02-7cfe1a0653f9.png b/sprites/s_node_lovify/0a0aeef0-0788-41b2-9d02-7cfe1a0653f9.png new file mode 100644 index 000000000..b578ec3a4 Binary files /dev/null and b/sprites/s_node_lovify/0a0aeef0-0788-41b2-9d02-7cfe1a0653f9.png differ diff --git a/sprites/s_node_lovify/layers/0a0aeef0-0788-41b2-9d02-7cfe1a0653f9/0e840a20-06fd-4423-90ac-10db684cea2d.png b/sprites/s_node_lovify/layers/0a0aeef0-0788-41b2-9d02-7cfe1a0653f9/0e840a20-06fd-4423-90ac-10db684cea2d.png new file mode 100644 index 000000000..b578ec3a4 Binary files /dev/null and b/sprites/s_node_lovify/layers/0a0aeef0-0788-41b2-9d02-7cfe1a0653f9/0e840a20-06fd-4423-90ac-10db684cea2d.png differ diff --git a/sprites/s_node_lovify/s_node_lovify.yy b/sprites/s_node_lovify/s_node_lovify.yy new file mode 100644 index 000000000..67fc457ce --- /dev/null +++ b/sprites/s_node_lovify/s_node_lovify.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_lovify", + "bbox_bottom": 59, + "bbox_left": 4, + "bbox_right": 59, + "bbox_top": 4, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"0a0aeef0-0788-41b2-9d02-7cfe1a0653f9",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"0e840a20-06fd-4423-90ac-10db684cea2d","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "spr", + "path": "folders/nodes/data/misc/lovify/spr.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_lovify", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"0a0aeef0-0788-41b2-9d02-7cfe1a0653f9","path":"sprites/s_node_lovify/s_node_lovify.yy",},},},"Disabled":false,"id":"1a8b337a-13c6-43af-ac2f-16ce34d65ea6","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file