diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 54f83ccac..b6a951a57 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -1,9 +1,11 @@ { "FolderOrderSettings": [ - {"name":"_Extensions","order":9,"path":"folders/_Extensions.yy",}, - {"name":"BBMOD","order":8,"path":"folders/_Extensions/BBMOD.yy",}, - {"name":"Math","order":1,"path":"folders/_Extensions/BBMOD/Math.yy",}, - {"name":"MAC","order":6,"path":"folders/_Extensions/MAC.yy",}, + {"name":"_crash_handler","order":13,"path":"folders/_crash_handler.yy",}, + {"name":"sprites","order":3,"path":"folders/_crash_handler/sprites.yy",}, + {"name":"_extensions","order":9,"path":"folders/_extensions.yy",}, + {"name":"BBMOD","order":8,"path":"folders/_extensions/BBMOD.yy",}, + {"name":"Math","order":1,"path":"folders/_extensions/BBMOD/Math.yy",}, + {"name":"MAC","order":6,"path":"folders/_extensions/MAC.yy",}, {"name":"addons","order":11,"path":"folders/addons.yy",}, {"name":"custom","order":4,"path":"folders/addons/custom.yy",}, {"name":"key displayer","order":2,"path":"folders/addons/key displayer.yy",}, @@ -71,6 +73,7 @@ {"name":"animation","order":5,"path":"folders/nodes/data/animation.yy",}, {"name":"audio","order":21,"path":"folders/nodes/data/audio.yy",}, {"name":"compose","order":15,"path":"folders/nodes/data/compose.yy",}, + {"name":"armature","order":5,"path":"folders/nodes/data/compose/armature.yy",}, {"name":"feedback","order":14,"path":"folders/nodes/data/feedback.yy",}, {"name":"filter","order":1,"path":"folders/nodes/data/filter.yy",}, {"name":"colors","order":4,"path":"folders/nodes/data/filter/colors.yy",}, @@ -228,6 +231,7 @@ {"name":"fd_rectangle_replace_material_advanced","order":15,"path":"scripts/fd_rectangle_replace_material_advanced/fd_rectangle_replace_material_advanced.yy",}, {"name":"array_functions","order":2,"path":"scripts/array_functions/array_functions.yy",}, {"name":"sh_blur_final","order":2,"path":"shaders/sh_blur_final/sh_blur_final.yy",}, + {"name":"s_window_frame","order":6,"path":"sprites/s_window_frame/s_window_frame.yy",}, {"name":"sh_fd_visualize_velocity_glsl","order":19,"path":"shaders/sh_fd_visualize_velocity_glsl/sh_fd_visualize_velocity_glsl.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_node_path_sample","order":3,"path":"sprites/s_node_path_sample/s_node_path_sample.yy",}, @@ -276,6 +280,7 @@ {"name":"node_flip","order":13,"path":"scripts/node_flip/node_flip.yy",}, {"name":"sh_FXAA","order":52,"path":"shaders/sh_FXAA/sh_FXAA.yy",}, {"name":"node_gradient_points","order":18,"path":"scripts/node_gradient_points/node_gradient_points.yy",}, + {"name":"s_button_hide_fill","order":4,"path":"sprites/s_button_hide_fill/s_button_hide_fill.yy",}, {"name":"_f_code","order":9,"path":"fonts/_f_code/_f_code.yy",}, {"name":"sh_combine_rgb","order":40,"path":"shaders/sh_combine_rgb/sh_combine_rgb.yy",}, {"name":"s_node_strandSim","order":3,"path":"sprites/s_node_strandSim/s_node_strandSim.yy",}, @@ -284,6 +289,7 @@ {"name":"fd_rectangle_get_velocity_maccormack_weight","order":23,"path":"scripts/fd_rectangle_get_velocity_maccormack_weight/fd_rectangle_get_velocity_maccormack_weight.yy",}, {"name":"sh_fd_advect_material_rgba_8_glsl","order":5,"path":"shaders/sh_fd_advect_material_rgba_8_glsl/sh_fd_advect_material_rgba_8_glsl.yy",}, {"name":"addon_function","order":3,"path":"scripts/addon_function/addon_function.yy",}, + {"name":"node_armature_bind","order":1,"path":"scripts/node_armature_bind/node_armature_bind.yy",}, {"name":"fd_rectangle_get_material_dissipation_type","order":8,"path":"scripts/fd_rectangle_get_material_dissipation_type/fd_rectangle_get_material_dissipation_type.yy",}, {"name":"draw_surface_blend","order":1,"path":"scripts/draw_surface_blend/draw_surface_blend.yy",}, {"name":"o_dialog_group_input_order","order":3,"path":"objects/o_dialog_group_input_order/o_dialog_group_input_order.yy",}, @@ -328,6 +334,7 @@ {"name":"fd_rectangle_update_view","order":5,"path":"scripts/fd_rectangle_update_view/fd_rectangle_update_view.yy",}, {"name":"s_node_rigidSim_renderer","order":1,"path":"sprites/s_node_rigidSim_renderer/s_node_rigidSim_renderer.yy",}, {"name":"__init_background","order":4,"path":"scripts/__init_background/__init_background.yy",}, + {"name":"s_textbox","order":1,"path":"sprites/s_textbox/s_textbox.yy",}, {"name":"__node","order":9,"path":"scripts/__node/__node.yy",}, {"name":"fd_rectangle_add_velocity","order":5,"path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",}, {"name":"sh_level_selector","order":23,"path":"shaders/sh_level_selector/sh_level_selector.yy",}, @@ -489,6 +496,7 @@ {"name":"node_string_regex_replace","order":24,"path":"scripts/node_string_regex_replace/node_string_regex_replace.yy",}, {"name":"s_node_particle","order":12,"path":"sprites/s_node_particle/s_node_particle.yy",}, {"name":"s_node_random","order":3,"path":"sprites/s_node_random/s_node_random.yy",}, + {"name":"s_window_exit","order":2,"path":"sprites/s_window_exit/s_window_exit.yy",}, {"name":"s_node_color_remove","order":7,"path":"sprites/s_node_color_remove/s_node_color_remove.yy",}, {"name":"sh_average","order":7,"path":"shaders/sh_average/sh_average.yy",}, {"name":"sh_warp_4points_pers","order":10,"path":"shaders/sh_warp_4points_pers/sh_warp_4points_pers.yy",}, @@ -608,6 +616,7 @@ {"name":"sh_fd_advect_material_a_8_glsl","order":3,"path":"shaders/sh_fd_advect_material_a_8_glsl/sh_fd_advect_material_a_8_glsl.yy",}, {"name":"node_color_remove","order":2,"path":"scripts/node_color_remove/node_color_remove.yy",}, {"name":"spr_gameframe_pixel","order":3,"path":"sprites/spr_gameframe_pixel/spr_gameframe_pixel.yy",}, + {"name":"process_functions","order":38,"path":"scripts/process_functions/process_functions.yy",}, {"name":"s_node_radial","order":53,"path":"sprites/s_node_radial/s_node_radial.yy",}, {"name":"s_node_grid","order":3,"path":"sprites/s_node_grid/s_node_grid.yy",}, {"name":"s_node_animation_control","order":31,"path":"sprites/s_node_animation_control/s_node_animation_control.yy",}, @@ -702,6 +711,7 @@ {"name":"preview_overlay_puppet","order":4,"path":"scripts/preview_overlay_puppet/preview_overlay_puppet.yy",}, {"name":"s_icon_64","order":2,"path":"sprites/s_icon_64/s_icon_64.yy",}, {"name":"panel_graph_export_image","order":4,"path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",}, + {"name":"__bone","order":2,"path":"scripts/__bone/__bone.yy",}, {"name":"s_node_gradient_replace","order":18,"path":"sprites/s_node_gradient_replace/s_node_gradient_replace.yy",}, {"name":"node_perlin_smear","order":9,"path":"scripts/node_perlin_smear/node_perlin_smear.yy",}, {"name":"node_alpha_cutoff","order":10,"path":"scripts/node_alpha_cutoff/node_alpha_cutoff.yy",}, @@ -985,6 +995,7 @@ {"name":"mouse_input","order":1,"path":"scripts/mouse_input/mouse_input.yy",}, {"name":"string_cut","order":2,"path":"scripts/string_cut/string_cut.yy",}, {"name":"node_3d_prim_cylinder","order":2,"path":"scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy",}, + {"name":"s_discord","order":7,"path":"sprites/s_discord/s_discord.yy",}, {"name":"panel_nodes","order":2,"path":"scripts/panel_nodes/panel_nodes.yy",}, {"name":"sh_gradient_points","order":19,"path":"shaders/sh_gradient_points/sh_gradient_points.yy",}, {"name":"s_node_vfx_turb","order":5,"path":"sprites/s_node_vfx_turb/s_node_vfx_turb.yy",}, @@ -1023,6 +1034,7 @@ {"name":"gameframe_macros","order":1,"path":"scripts/gameframe_macros/gameframe_macros.yy",}, {"name":"s_node_trigger_bool","order":4,"path":"sprites/s_node_trigger_bool/s_node_trigger_bool.yy",}, {"name":"panel_color","order":1,"path":"scripts/panel_color/panel_color.yy",}, + {"name":"s_copy","order":3,"path":"sprites/s_copy/s_copy.yy",}, {"name":"s_node_line","order":7,"path":"sprites/s_node_line/s_node_line.yy",}, {"name":"fd_rectangle_get_material_dissipation_value","order":9,"path":"scripts/fd_rectangle_get_material_dissipation_value/fd_rectangle_get_material_dissipation_value.yy",}, {"name":"node_counter","order":1,"path":"scripts/node_counter/node_counter.yy",}, @@ -1063,6 +1075,7 @@ {"name":"node_print","order":10,"path":"scripts/node_print/node_print.yy",}, {"name":"s_node_strandSim_force","order":6,"path":"sprites/s_node_strandSim_force/s_node_strandSim_force.yy",}, {"name":"s_node_array_reverse","order":8,"path":"sprites/s_node_array_reverse/s_node_array_reverse.yy",}, + {"name":"o_process_handler","order":3,"path":"objects/o_process_handler/o_process_handler.yy",}, {"name":"sh_ani_noise","order":4,"path":"shaders/sh_ani_noise/sh_ani_noise.yy",}, {"name":"sh_level","order":11,"path":"shaders/sh_level/sh_level.yy",}, {"name":"sh_grid_tri","order":20,"path":"shaders/sh_grid_tri/sh_grid_tri.yy",}, @@ -1093,6 +1106,7 @@ {"name":"draw_UI_scale","order":8,"path":"scripts/draw_UI_scale/draw_UI_scale.yy",}, {"name":"s_node_strandSim_update","order":1,"path":"sprites/s_node_strandSim_update/s_node_strandSim_update.yy",}, {"name":"s_node_RGB_combine","order":45,"path":"sprites/s_node_RGB_combine/s_node_RGB_combine.yy",}, + {"name":"draw_circle_prec","order":23,"path":"scripts/draw_circle_prec/draw_circle_prec.yy",}, {"name":"s_node_shadow_cast","order":49,"path":"sprites/s_node_shadow_cast/s_node_shadow_cast.yy",}, {"name":"fft_functions","order":1,"path":"scripts/fft_functions/fft_functions.yy",}, {"name":"path_function","order":4,"path":"scripts/path_function/path_function.yy",}, @@ -1159,6 +1173,7 @@ {"name":"node_tunnel_out","order":7,"path":"scripts/node_tunnel_out/node_tunnel_out.yy",}, {"name":"s_node_array_shuffle","order":10,"path":"sprites/s_node_array_shuffle/s_node_array_shuffle.yy",}, {"name":"node_level","order":7,"path":"scripts/node_level/node_level.yy",}, + {"name":"panel_test","order":10,"path":"scripts/panel_test/panel_test.yy",}, {"name":"o_dialog_warning","order":10,"path":"objects/o_dialog_warning/o_dialog_warning.yy",}, {"name":"s_node_group_output","order":15,"path":"sprites/s_node_group_output/s_node_group_output.yy",}, {"name":"node_path_l_system","order":10,"path":"scripts/node_path_l_system/node_path_l_system.yy",}, @@ -1216,6 +1231,7 @@ {"name":"node_camera","order":3,"path":"scripts/node_camera/node_camera.yy",}, {"name":"s_node_color_replace","order":8,"path":"sprites/s_node_color_replace/s_node_color_replace.yy",}, {"name":"draw_surface_functions","order":4,"path":"scripts/draw_surface_functions/draw_surface_functions.yy",}, + {"name":"s_noti_icon_error","order":5,"path":"sprites/s_noti_icon_error/s_noti_icon_error.yy",}, {"name":"node_rigid_variable","order":8,"path":"scripts/node_rigid_variable/node_rigid_variable.yy",}, {"name":"s_node_zoom","order":54,"path":"sprites/s_node_zoom/s_node_zoom.yy",}, {"name":"node_noise_fbm","order":3,"path":"scripts/node_noise_fbm/node_noise_fbm.yy",}, @@ -1258,6 +1274,7 @@ {"name":"s_node_noise_aniso","order":9,"path":"sprites/s_node_noise_aniso/s_node_noise_aniso.yy",}, {"name":"s_node_gradient_palette","order":16,"path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",}, {"name":"node_array_shuffle","order":22,"path":"scripts/node_array_shuffle/node_array_shuffle.yy",}, + {"name":"panel_node_data_gen","order":9,"path":"scripts/panel_node_data_gen/panel_node_data_gen.yy",}, {"name":"fd_rectangle_update_material","order":21,"path":"scripts/fd_rectangle_update_material/fd_rectangle_update_material.yy",}, {"name":"sh_perlin_tiled","order":2,"path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",}, {"name":"sh_time_remap","order":2,"path":"shaders/sh_time_remap/sh_time_remap.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 4969d1371..ee0e5cba4 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -19,11 +19,13 @@ }, "defaultScriptType": 1, "Folders": [ - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"_Extensions","folderPath":"folders/_Extensions.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"BBMOD","folderPath":"folders/_Extensions/BBMOD.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Math","folderPath":"folders/_Extensions/BBMOD/Math.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Gameframe","folderPath":"folders/_Extensions/Gameframe.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"MAC","folderPath":"folders/_Extensions/MAC.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"_crash_handler","folderPath":"folders/_crash_handler.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"sprites","folderPath":"folders/_crash_handler/sprites.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"_extensions","folderPath":"folders/_extensions.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"BBMOD","folderPath":"folders/_extensions/BBMOD.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Math","folderPath":"folders/_extensions/BBMOD/Math.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Gameframe","folderPath":"folders/_extensions/Gameframe.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"MAC","folderPath":"folders/_extensions/MAC.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"addons","folderPath":"folders/addons.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"custom","folderPath":"folders/addons/custom.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"key displayer","folderPath":"folders/addons/key displayer.yy",}, @@ -94,6 +96,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"animation","folderPath":"folders/nodes/data/animation.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"audio","folderPath":"folders/nodes/data/audio.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"compose","folderPath":"folders/nodes/data/compose.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"armature","folderPath":"folders/nodes/data/compose/armature.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"feedback","folderPath":"folders/nodes/data/feedback.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"filter","folderPath":"folders/nodes/data/filter.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"blur","folderPath":"folders/nodes/data/filter/blur.yy",}, @@ -285,6 +288,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_grid_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_keyframe_override.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_minimap_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_node_dropper.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_output_visibility.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_play_sound.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_preview_export.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, @@ -498,6 +502,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_ui_panel_tab.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_ui_scroll_bar.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_ui_selection.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_ui_window_frame.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"workshop_badge.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"workshop_bg.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"workshop_frame.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, @@ -517,6 +522,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button_top_right.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_checkbox.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_progress_bar.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_slider.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_text_box_header.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_textbox_code_line.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, @@ -684,6 +690,7 @@ {"id":{"name":"fd_rectangle_replace_material_advanced","path":"scripts/fd_rectangle_replace_material_advanced/fd_rectangle_replace_material_advanced.yy",},}, {"id":{"name":"array_functions","path":"scripts/array_functions/array_functions.yy",},}, {"id":{"name":"sh_blur_final","path":"shaders/sh_blur_final/sh_blur_final.yy",},}, + {"id":{"name":"s_window_frame","path":"sprites/s_window_frame/s_window_frame.yy",},}, {"id":{"name":"sh_fd_visualize_velocity_glsl","path":"shaders/sh_fd_visualize_velocity_glsl/sh_fd_visualize_velocity_glsl.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_node_path_sample","path":"sprites/s_node_path_sample/s_node_path_sample.yy",},}, @@ -742,6 +749,7 @@ {"id":{"name":"sh_FXAA","path":"shaders/sh_FXAA/sh_FXAA.yy",},}, {"id":{"name":"shader_functions","path":"scripts/shader_functions/shader_functions.yy",},}, {"id":{"name":"node_gradient_points","path":"scripts/node_gradient_points/node_gradient_points.yy",},}, + {"id":{"name":"s_button_hide_fill","path":"sprites/s_button_hide_fill/s_button_hide_fill.yy",},}, {"id":{"name":"_f_code","path":"fonts/_f_code/_f_code.yy",},}, {"id":{"name":"sh_combine_rgb","path":"shaders/sh_combine_rgb/sh_combine_rgb.yy",},}, {"id":{"name":"s_node_strandSim","path":"sprites/s_node_strandSim/s_node_strandSim.yy",},}, @@ -753,6 +761,7 @@ {"id":{"name":"s_node_mesh_path","path":"sprites/s_node_mesh_path/s_node_mesh_path.yy",},}, {"id":{"name":"sh_fd_advect_material_rgba_8_glsl","path":"shaders/sh_fd_advect_material_rgba_8_glsl/sh_fd_advect_material_rgba_8_glsl.yy",},}, {"id":{"name":"addon_function","path":"scripts/addon_function/addon_function.yy",},}, + {"id":{"name":"node_armature_bind","path":"scripts/node_armature_bind/node_armature_bind.yy",},}, {"id":{"name":"fd_rectangle_get_material_dissipation_type","path":"scripts/fd_rectangle_get_material_dissipation_type/fd_rectangle_get_material_dissipation_type.yy",},}, {"id":{"name":"draw_surface_blend","path":"scripts/draw_surface_blend/draw_surface_blend.yy",},}, {"id":{"name":"o_dialog_group_input_order","path":"objects/o_dialog_group_input_order/o_dialog_group_input_order.yy",},}, @@ -800,6 +809,7 @@ {"id":{"name":"fd_rectangle_update_view","path":"scripts/fd_rectangle_update_view/fd_rectangle_update_view.yy",},}, {"id":{"name":"s_node_rigidSim_renderer","path":"sprites/s_node_rigidSim_renderer/s_node_rigidSim_renderer.yy",},}, {"id":{"name":"__init_background","path":"scripts/__init_background/__init_background.yy",},}, + {"id":{"name":"s_textbox","path":"sprites/s_textbox/s_textbox.yy",},}, {"id":{"name":"__node","path":"scripts/__node/__node.yy",},}, {"id":{"name":"fd_rectangle_add_velocity","path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",},}, {"id":{"name":"sh_level_selector","path":"shaders/sh_level_selector/sh_level_selector.yy",},}, @@ -875,6 +885,7 @@ {"id":{"name":"node_array_sort","path":"scripts/node_array_sort/node_array_sort.yy",},}, {"id":{"name":"fd_draw_surface_to_collision_mask_surface","path":"scripts/fd_draw_surface_to_collision_mask_surface/fd_draw_surface_to_collision_mask_surface.yy",},}, {"id":{"name":"sh_blur_box_contrast","path":"shaders/sh_blur_box_contrast/sh_blur_box_contrast.yy",},}, + {"id":{"name":"s_button","path":"sprites/s_button/s_button.yy",},}, {"id":{"name":"sh_fd_calculate_pressure_jacobi_glsl","path":"shaders/sh_fd_calculate_pressure_jacobi_glsl/sh_fd_calculate_pressure_jacobi_glsl.yy",},}, {"id":{"name":"node_color_from_rgb","path":"scripts/node_color_from_rgb/node_color_from_rgb.yy",},}, {"id":{"name":"node_struct_get","path":"scripts/node_struct_get/node_struct_get.yy",},}, @@ -986,6 +997,7 @@ {"id":{"name":"s_node_particle","path":"sprites/s_node_particle/s_node_particle.yy",},}, {"id":{"name":"sh_flood_fill_thres","path":"shaders/sh_flood_fill_thres/sh_flood_fill_thres.yy",},}, {"id":{"name":"s_node_random","path":"sprites/s_node_random/s_node_random.yy",},}, + {"id":{"name":"s_window_exit","path":"sprites/s_window_exit/s_window_exit.yy",},}, {"id":{"name":"s_node_color_remove","path":"sprites/s_node_color_remove/s_node_color_remove.yy",},}, {"id":{"name":"sh_average","path":"shaders/sh_average/sh_average.yy",},}, {"id":{"name":"sh_warp_4points_pers","path":"shaders/sh_warp_4points_pers/sh_warp_4points_pers.yy",},}, @@ -1124,6 +1136,7 @@ {"id":{"name":"node_color_remove","path":"scripts/node_color_remove/node_color_remove.yy",},}, {"id":{"name":"FileDropper","path":"extensions/FileDropper/FileDropper.yy",},}, {"id":{"name":"spr_gameframe_pixel","path":"sprites/spr_gameframe_pixel/spr_gameframe_pixel.yy",},}, + {"id":{"name":"process_functions","path":"scripts/process_functions/process_functions.yy",},}, {"id":{"name":"s_node_radial","path":"sprites/s_node_radial/s_node_radial.yy",},}, {"id":{"name":"s_node_grid","path":"sprites/s_node_grid/s_node_grid.yy",},}, {"id":{"name":"node_trigger","path":"scripts/node_trigger/node_trigger.yy",},}, @@ -1230,6 +1243,7 @@ {"id":{"name":"__mesh","path":"scripts/__mesh/__mesh.yy",},}, {"id":{"name":"s_icon_64","path":"sprites/s_icon_64/s_icon_64.yy",},}, {"id":{"name":"panel_graph_export_image","path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",},}, + {"id":{"name":"__bone","path":"scripts/__bone/__bone.yy",},}, {"id":{"name":"save_function","path":"scripts/save_function/save_function.yy",},}, {"id":{"name":"s_node_gradient_replace","path":"sprites/s_node_gradient_replace/s_node_gradient_replace.yy",},}, {"id":{"name":"node_perlin_smear","path":"scripts/node_perlin_smear/node_perlin_smear.yy",},}, @@ -1503,6 +1517,7 @@ {"id":{"name":"s_node_condition","path":"sprites/s_node_condition/s_node_condition.yy",},}, {"id":{"name":"s_node_vfx_repel","path":"sprites/s_node_vfx_repel/s_node_vfx_repel.yy",},}, {"id":{"name":"fd_rectangle_set_collision_mask_surface","path":"scripts/fd_rectangle_set_collision_mask_surface/fd_rectangle_set_collision_mask_surface.yy",},}, + {"id":{"name":"node_armature","path":"scripts/node_armature/node_armature.yy",},}, {"id":{"name":"node_array_length","path":"scripts/node_array_length/node_array_length.yy",},}, {"id":{"name":"node_erode","path":"scripts/node_erode/node_erode.yy",},}, {"id":{"name":"draw_circle_angle","path":"scripts/draw_circle_angle/draw_circle_angle.yy",},}, @@ -1552,6 +1567,7 @@ {"id":{"name":"mouse_input","path":"scripts/mouse_input/mouse_input.yy",},}, {"id":{"name":"string_cut","path":"scripts/string_cut/string_cut.yy",},}, {"id":{"name":"node_3d_prim_cylinder","path":"scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy",},}, + {"id":{"name":"s_discord","path":"sprites/s_discord/s_discord.yy",},}, {"id":{"name":"panel_nodes","path":"scripts/panel_nodes/panel_nodes.yy",},}, {"id":{"name":"sh_gradient_points","path":"shaders/sh_gradient_points/sh_gradient_points.yy",},}, {"id":{"name":"s_node_vfx_turb","path":"sprites/s_node_vfx_turb/s_node_vfx_turb.yy",},}, @@ -1560,6 +1576,7 @@ {"id":{"name":"node_surface_to_color","path":"scripts/node_surface_to_color/node_surface_to_color.yy",},}, {"id":{"name":"sh_shadow_cast_light_sep","path":"shaders/sh_shadow_cast_light_sep/sh_shadow_cast_light_sep.yy",},}, {"id":{"name":"node_grid","path":"scripts/node_grid/node_grid.yy",},}, + {"id":{"name":"o_crash_handler","path":"objects/o_crash_handler/o_crash_handler.yy",},}, {"id":{"name":"node_edge_detect","path":"scripts/node_edge_detect/node_edge_detect.yy",},}, {"id":{"name":"node_morph_surface","path":"scripts/node_morph_surface/node_morph_surface.yy",},}, {"id":{"name":"node_tunnel_in","path":"scripts/node_tunnel_in/node_tunnel_in.yy",},}, @@ -1596,6 +1613,7 @@ {"id":{"name":"gameframe_macros","path":"scripts/gameframe_macros/gameframe_macros.yy",},}, {"id":{"name":"s_node_trigger_bool","path":"sprites/s_node_trigger_bool/s_node_trigger_bool.yy",},}, {"id":{"name":"panel_color","path":"scripts/panel_color/panel_color.yy",},}, + {"id":{"name":"s_copy","path":"sprites/s_copy/s_copy.yy",},}, {"id":{"name":"s_node_line","path":"sprites/s_node_line/s_node_line.yy",},}, {"id":{"name":"fd_rectangle_get_material_dissipation_value","path":"scripts/fd_rectangle_get_material_dissipation_value/fd_rectangle_get_material_dissipation_value.yy",},}, {"id":{"name":"panel_graph","path":"scripts/panel_graph/panel_graph.yy",},}, @@ -1644,6 +1662,7 @@ {"id":{"name":"node_print","path":"scripts/node_print/node_print.yy",},}, {"id":{"name":"s_node_strandSim_force","path":"sprites/s_node_strandSim_force/s_node_strandSim_force.yy",},}, {"id":{"name":"s_node_array_reverse","path":"sprites/s_node_array_reverse/s_node_array_reverse.yy",},}, + {"id":{"name":"o_process_handler","path":"objects/o_process_handler/o_process_handler.yy",},}, {"id":{"name":"sh_ani_noise","path":"shaders/sh_ani_noise/sh_ani_noise.yy",},}, {"id":{"name":"rectangle_collision","path":"scripts/rectangle_collision/rectangle_collision.yy",},}, {"id":{"name":"s_contest_banner","path":"sprites/s_contest_banner/s_contest_banner.yy",},}, @@ -1680,6 +1699,7 @@ {"id":{"name":"s_node_strandSim_update","path":"sprites/s_node_strandSim_update/s_node_strandSim_update.yy",},}, {"id":{"name":"async_functions","path":"scripts/async_functions/async_functions.yy",},}, {"id":{"name":"s_node_RGB_combine","path":"sprites/s_node_RGB_combine/s_node_RGB_combine.yy",},}, + {"id":{"name":"draw_circle_prec","path":"scripts/draw_circle_prec/draw_circle_prec.yy",},}, {"id":{"name":"s_node_shadow_cast","path":"sprites/s_node_shadow_cast/s_node_shadow_cast.yy",},}, {"id":{"name":"fft_functions","path":"scripts/fft_functions/fft_functions.yy",},}, {"id":{"name":"path_function","path":"scripts/path_function/path_function.yy",},}, @@ -1754,6 +1774,7 @@ {"id":{"name":"node_tunnel_out","path":"scripts/node_tunnel_out/node_tunnel_out.yy",},}, {"id":{"name":"s_node_array_shuffle","path":"sprites/s_node_array_shuffle/s_node_array_shuffle.yy",},}, {"id":{"name":"node_level","path":"scripts/node_level/node_level.yy",},}, + {"id":{"name":"panel_test","path":"scripts/panel_test/panel_test.yy",},}, {"id":{"name":"o_dialog_warning","path":"objects/o_dialog_warning/o_dialog_warning.yy",},}, {"id":{"name":"s_node_group_output","path":"sprites/s_node_group_output/s_node_group_output.yy",},}, {"id":{"name":"node_path_l_system","path":"scripts/node_path_l_system/node_path_l_system.yy",},}, @@ -1821,6 +1842,7 @@ {"id":{"name":"s_node_color_replace","path":"sprites/s_node_color_replace/s_node_color_replace.yy",},}, {"id":{"name":"draw_surface_functions","path":"scripts/draw_surface_functions/draw_surface_functions.yy",},}, {"id":{"name":"sh_mask","path":"shaders/sh_mask/sh_mask.yy",},}, + {"id":{"name":"s_noti_icon_error","path":"sprites/s_noti_icon_error/s_noti_icon_error.yy",},}, {"id":{"name":"node_rigid_variable","path":"scripts/node_rigid_variable/node_rigid_variable.yy",},}, {"id":{"name":"s_node_zoom","path":"sprites/s_node_zoom/s_node_zoom.yy",},}, {"id":{"name":"migration_function","path":"scripts/migration_function/migration_function.yy",},}, @@ -1870,6 +1892,7 @@ {"id":{"name":"steam_ugc_functions","path":"scripts/steam_ugc_functions/steam_ugc_functions.yy",},}, {"id":{"name":"s_node_gradient_palette","path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",},}, {"id":{"name":"node_array_shuffle","path":"scripts/node_array_shuffle/node_array_shuffle.yy",},}, + {"id":{"name":"panel_node_data_gen","path":"scripts/panel_node_data_gen/panel_node_data_gen.yy",},}, {"id":{"name":"fd_rectangle_update_material","path":"scripts/fd_rectangle_update_material/fd_rectangle_update_material.yy",},}, {"id":{"name":"sh_perlin_tiled","path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",},}, {"id":{"name":"sh_time_remap","path":"shaders/sh_time_remap/sh_time_remap.yy",},}, diff --git a/datafiles/data/locale/en.zip b/datafiles/data/locale/en.zip index d6f0861b5..1e0c899d9 100644 Binary files a/datafiles/data/locale/en.zip and b/datafiles/data/locale/en.zip differ diff --git a/datafiles/data/locale/en/UI.json b/datafiles/data/locale/en/UI.json index 8b3a17825..17936df07 100644 --- a/datafiles/data/locale/en/UI.json +++ b/datafiles/data/locale/en/UI.json @@ -109,7 +109,7 @@ "pref_expand_hovering_panel": "Expand hovering panel", "pref_graph_zoom_smoothing": "Graph zoom smoothing", "pref_warning_notification_time": "Warning notification time", - "pref_enable_test_mode": "Enable test mode (require restart)", + "pref_enable_test_mode": "Enable dev mode (require restart)", "pref_directory": "Directory path (restart required)", "pref_auto_save_time": "Autosave delay (-1 to disable)", "pref_mouse_wheel_speed": "Scroll speed", diff --git a/datafiles/data/locale/en/nodes.json b/datafiles/data/locale/en/nodes.json index 9e07df7fa..d50f6c54d 100644 --- a/datafiles/data/locale/en/nodes.json +++ b/datafiles/data/locale/en/nodes.json @@ -1,11126 +1,11157 @@ { - "Node_Normal": { - "tooltip": "Create normal map using greyscale value as height.", - "name": "Normal", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Height" - }, - { - "tooltip": "Include diagonal pixel in normal calculation, which leads to smoother output.", - "name": "Smooth" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Rigid_Variable": { + "Node_Trigger_Bool": { + "name": "Boolean Trigger", "tooltip": "", - "name": "Rigidbody Variable", "outputs": [ { - "tooltip": "", - "name": "Positions" - }, - { - "tooltip": "", - "name": "Scales" - }, - { - "tooltip": "", - "name": "Rotations" - }, - { - "tooltip": "", - "name": "Blends" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Velocity" - }, - { - "tooltip": "", - "name": "Center of mass" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Object" - } - ] - }, - "Node_Array_Copy": { - "tooltip": "", - "name": "Array Copy", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Starting Index" - }, - { - "tooltip": "", - "name": "Size" - } - ] - }, - "Node_Repeat": { - "tooltip": "Repeat image multiple times linearly, or in grid pattern.", - "name": "Repeat", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Pattern" - }, - { - "tooltip": "", - "name": "Repeat position" - }, - { - "tooltip": "", - "name": "Repeat rotation" - }, - { - "tooltip": "", - "name": "Scale multiply" - }, - { - "tooltip": "", - "name": "Angle range" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "", - "name": "Start position" - }, - { - "tooltip": "", - "name": "Scale over copy" - }, - { - "tooltip": "Make each copy follow along path.", - "name": "Path" - }, - { - "tooltip": "Range of the path to follow.", - "name": "Path range" - }, - { - "tooltip": "", - "name": "Path shift" - }, - { - "tooltip": "", - "name": "Color over copy" - }, - { - "tooltip": "", - "name": "Alpha over copy" - }, - { - "tooltip": "Whether to select image from an array in order, at random, pr spread or each image to one output.", - "name": "Array select" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Column" - }, - { - "tooltip": "", - "name": "Column shift" - }, - { - "tooltip": "", - "name": "Animator midpoint" - }, - { - "tooltip": "", - "name": "Animator range" - }, - { - "tooltip": "", - "name": "Animator position" - }, - { - "tooltip": "", - "name": "Animator rotation" - }, - { - "tooltip": "", - "name": "Animator scale" - }, - { - "tooltip": "", - "name": "Animator falloff" - }, - { - "tooltip": "Place each copy next to each other, taking surface dimension into account.", - "name": "Stack" - }, - { - "tooltip": "", - "name": "Animator blend" - }, - { - "tooltip": "", - "name": "Animator alpha" - } - ] - }, - "Node_String_Trim": { - "tooltip": "", - "name": "Trim Text", - "outputs": [ - { - "tooltip": "", - "name": "Text" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Head" - }, - { - "tooltip": "", - "name": "Tail" - }, - { - "tooltip": "", - "name": "Trim" - }, - { - "tooltip": "Set to progress to use ratio, where 0 means no change and 1 means the entire length of the text.", - "name": "Mode" - } - ] - }, - "Node_Vector3": { - "tooltip": "", - "name": "Vector3", - "outputs": [ - { - "tooltip": "", - "name": "Vector" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "x" - }, - { - "tooltip": "", - "name": "y" - }, - { - "tooltip": "", - "name": "z" - }, - { - "tooltip": "", - "name": "Integer" - } - ] - }, - "Node_VFX_Turbulence": { - "tooltip": "", - "name": "Turbulence", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Falloff distance" - }, - { - "tooltip": "", - "name": "Effect Vector" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Rotate particle" - }, - { - "tooltip": "", - "name": "Scale particle" - }, - { - "tooltip": "", - "name": "Turbulence scale" - } - ] - }, - "Node_Tunnel_In": { - "tooltip": "Create tunnel for sending value based on key matching.", - "name": "Tunnel In", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Name" - }, - { - "tooltip": "", - "name": "Value in" - } - ] - }, - "Node_Array_Range": { - "tooltip": "Create array of numbers by setting start, end and step length.", - "name": "Array Range", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Start" - }, - { - "tooltip": "", - "name": "End" - }, - { - "tooltip": "", - "name": "Step" - } - ] - }, - "Node_Edge_Detect": { - "tooltip": "Edge detect by applying Sobel, Prewitt, or Laplacian kernel.", - "name": "Edge Detect", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Algorithm" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Palette_Extract": { - "tooltip": "Extract palette from an image.", - "name": "Palette Extract", - "outputs": [ - { - "tooltip": "", - "name": "Palette" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "Amount of color in a palette.", - "name": "Max colors" - }, - { - "tooltip": "Random seed to be used to initialize K-mean algorithm.", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Algorithm" - } - ] - }, - "Node_VFX_Variable": { - "tooltip": "", - "name": "VFX Variable", - "outputs": [ - { - "tooltip": "", - "name": "Positions" - }, - { - "tooltip": "", - "name": "Scales" - }, - { - "tooltip": "", - "name": "Rotations" - }, - { - "tooltip": "", - "name": "Blending" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Life" - }, - { - "tooltip": "", - "name": "Max life" - }, - { - "tooltip": "", - "name": "Surface" - }, - { - "tooltip": "", - "name": "Velocity" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - } - ] - }, - "Node_Checker": { - "tooltip": "Genearte checkerboard pattern.", - "name": "Checker", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Color 1" - }, - { - "tooltip": "", - "name": "Color 2" - } - ] - }, - "Node_Path": { - "tooltip": "", - "name": "Path", - "outputs": [ - { - "tooltip": "", - "name": "Position out" - }, - { - "tooltip": "", - "name": "Path data" - }, - { - "tooltip": "", - "name": "Anchors" - } - ], - "inputs": [ - { - "tooltip": "Sample position from path.", - "name": "Path progress" - }, - { - "tooltip": "", - "name": "Loop" - }, - { - "tooltip": "", - "name": "Progress mode" - }, - { - "tooltip": "", - "name": "Round anchor" - } - ] - }, - "Node_Iterate_Filter": { - "tooltip": "Filter array using condition.", - "name": "Filter Array", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - } - ] - }, - "Node_Rigid_Object": { - "tooltip": "", - "name": "Object", - "outputs": [ - { - "tooltip": "", - "name": "Object" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Affect by force" - }, - { - "tooltip": "", - "name": "Weight" - }, - { - "tooltip": "", - "name": "Contact friction" - }, - { - "tooltip": "", - "name": "Air resistance" - }, - { - "tooltip": "", - "name": "Rotation resistance" - }, - { - "tooltip": "", - "name": "Shape" - }, - { - "tooltip": "", - "name": "Texture" - }, - { - "tooltip": "", - "name": "Start shape" - }, - { - "tooltip": "Make object spawn when start.", - "name": "Spawn" - }, - { - "tooltip": "", - "name": "Generate mesh" - }, - { - "tooltip": "", - "name": "Mesh expansion" - } - ] - }, - "Node_Image_gif": { - "tooltip": "Load animated .gif from your computer.", - "name": "Image GIF", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Set animation length to gif" - } - ] - }, - "Node_Print": { - "tooltip": "Display text to notification.", - "name": "Print", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Text" - } - ] - }, - "Node_6radient_Out": { - "tooltip": "", - "name": "Gradient", - "outputs": [ - { - "tooltip": "", - "name": "Gradient" - }, - { - "tooltip": "", - "name": "Color" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Gradient" - }, - { - "tooltip": "Position to sample a color from the gradient.", - "name": "Sample" - } - ] - }, - "Node_Gradient_Shift": { - "tooltip": "Move gradients keys.", - "name": "Gradient Shift", - "outputs": [ - { - "tooltip": "", - "name": "Gradient" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Gradient" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Wrap" - }, - { - "tooltip": "", - "name": "Scale" - } - ] - }, - "Node_Shadow": { - "tooltip": "Apply shadow behind the image.", - "name": "Shadow", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Grow" - }, - { - "tooltip": "", - "name": "Blur" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Normal_Light": { - "tooltip": "Light up the image using normal mapping.", - "name": "Normal Light", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Normal map" - }, - { - "tooltip": "", - "name": "Normal intensity" - }, - { - "tooltip": "", - "name": "Ambient" - }, - { - "tooltip": "", - "name": "Light position" - }, - { - "tooltip": "", - "name": "Light range" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Light type" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Iterate": { - "tooltip": "Create group that reuse output as input repeatedly in one frame.", - "name": "Loop", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Repeat" - } - ] - }, - "Node_Greyscale": { - "tooltip": "Convert color image to greyscale.", - "name": "Greyscale", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Brightness" - }, - { - "tooltip": "", - "name": "Contrast" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Cache": { - "tooltip": "Store current animation. Cache persisted between save.", - "name": "Cache", - "outputs": [ - { - "tooltip": "", - "name": "Cache surface" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - } - ] - }, - "Node_3D_Combine": { - "tooltip": "Combine multiple 3D object to a single scene,", - "name": "3D Combine", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D objects" - }, - { - "tooltip": "", - "name": "Normal pass" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - }, - { - "tooltip": "", - "name": "3D object" - } - ] - }, - "Node_Scatter": { - "tooltip": "Scatter image randomly multiple times.", - "name": "Scatter", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Atlas data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Distribution" - }, - { - "tooltip": "Rotate each copy to face the spawn center.", - "name": "Point at center" - }, - { - "tooltip": "", - "name": "Uniform scaling" - }, - { - "tooltip": "", - "name": "Scatter" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Random blend" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Distribution map" - }, - { - "tooltip": "", - "name": "Distribution data" - }, - { - "tooltip": "What to do when input array of surface.\r\n- Spread: Create Array of output each scattering single surface.\r\n- Mixed: Create single output scattering multiple images.", - "name": "Array" - }, - { - "tooltip": "", - "name": "Multiply alpha" - }, - { - "tooltip": "Apply the third value in each data point (if exist) on given properties.", - "name": "Use value" - }, - { - "tooltip": "", - "name": "Blend mode" - }, - { - "tooltip": "", - "name": "Path" - } - ] - }, - "Node_Warp": { - "tooltip": "Warp image by freely moving the corners.", - "name": "Warp", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Top left" - }, - { - "tooltip": "", - "name": "Top right" - }, - { - "tooltip": "", - "name": "Bottom left" - }, - { - "tooltip": "", - "name": "Bottom right" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Array_Shuffle": { - "tooltip": "", - "name": "Shuffle Array", - "outputs": [ - { - "tooltip": "", - "name": "Shuffled array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array in" - }, - { - "tooltip": "", - "name": "Seed" - } - ] - }, - "Node_Mesh_Transform": { - "tooltip": "", - "name": "Mesh Transform", - "outputs": [ - { - "tooltip": "", - "name": "Mesh" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Mesh" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Anchor" - } - ] - }, - "Node_Fluid_Group": { - "tooltip": "Create group for fluid simulation.", - "name": "FluidSim", - "outputs": [], - "inputs": [] - }, - "Node_Base_Convert": { - "tooltip": "", - "name": "Convert Base", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Base from" - }, - { - "tooltip": "", - "name": "Base to" - } - ] - }, - "Node_Vector_Cross_2D": { - "tooltip": "", - "name": "Cross product 2D", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Point 1" - }, - { - "tooltip": "", - "name": "Point 2" - } - ] - }, - "Node_CSV_File_Read": { - "tooltip": "Load .csv as text, number array.", - "name": "CSV File In", - "outputs": [ - { - "tooltip": "", - "name": "Content" - }, - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Convert to number" - } - ] - }, - "Node_3D_Displace": { - "tooltip": "", - "name": "3D Displace", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" - }, - { - "tooltip": "", - "name": "3D vertex" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "3D vertex" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - }, - { - "tooltip": "", - "name": "Displacement map" - }, - { - "tooltip": "", - "name": "Strength" - } - ] - }, - "Node_3D_Export": { - "tooltip": "", - "name": "3D Export", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Vertex data" - }, - { - "tooltip": "Export location without '.obj' extension.", - "name": "Path" - }, - { - "tooltip": "", - "name": "Export texture" - } - ] - }, - "Node_Area": { - "tooltip": "", - "name": "Area", - "outputs": [ - { - "tooltip": "", - "name": "Area" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Postion" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "", - "name": "Shape" - } - ] - }, - "Node_Blur_Zoom": { - "tooltip": "Blur image by zooming in\/out from a mid point.", - "name": "Zoom Blur", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Zoom mode" - }, - { - "tooltip": "", - "name": "Blur mask" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Skew": { - "tooltip": "Skew image horizontally, or vertically.", - "name": "Skew", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Axis" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Wrap" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_De_Corner": { - "tooltip": "Attempt to remove single pixel corner from the image.", - "name": "De-Corner", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Tolerance" - } - ] - }, - "Node_3D_Obj": { - "tooltip": "Load .obj file from your computer as a 3D object.", - "name": "3D Object", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Generate" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render rotation" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "Flip UV axis, can be use to fix some texture mapping error.", - "name": "Flip UV" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - } - ] - }, - "Node_Atlas": { - "tooltip": "Replace transparent pixel with the closet non-transparent pixel.", - "name": "Pixel Expand", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_3D_Cylinder": { - "tooltip": "", - "name": "3D Cylinder", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" - }, - { - "tooltip": "", - "name": "3D vertex" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Sides" - }, - { - "tooltip": "", - "name": "Thickness" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render rotation" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Textures top" - }, - { - "tooltip": "", - "name": "Textures bottom" - }, - { - "tooltip": "", - "name": "Textures side" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Taper" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - } - ] - }, - "Node_Alpha_Cutoff": { - "tooltip": "Remove pixel with low alpha value.", - "name": "Alpha Cutoff", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "Any pixel with less alpha (more transparent) than this will be removed.", - "name": "Minimum" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_BW": { - "tooltip": "Convert color image to black and white.", - "name": "BW", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Brightness" - }, - { - "tooltip": "", - "name": "Contrast" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_FFT": { - "tooltip": "Perform fourier transform on number array.", - "name": "FFT", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Data" - }, - { - "tooltip": "", - "name": "Preprocess Function" - } - ] - }, - "Node_String_Regex_Search": { - "tooltip": "", - "name": "RegEx Search", - "outputs": [ - { - "tooltip": "", - "name": "Results" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Regex" - } - ] - }, - "Node_Gradient": { - "tooltip": "Create image from gradient.", - "name": "Draw Gradient", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Gradient" - }, - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "", - "name": "Loop" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Scale" - } - ] - }, - "Node_Rigid_Group": { - "tooltip": "Create group for rigidbody simulation.", - "name": "RigidSim", - "outputs": [], - "inputs": [] - }, - "Node_Rigid_Force_Apply": { - "tooltip": "", - "name": "Apply Force", - "outputs": [ - { - "tooltip": "", - "name": "Object" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Object" - }, - { - "tooltip": "", - "name": "Force type" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Torque" - }, - { - "tooltip": "Frame index to apply force.", - "name": "Apply frame" - }, - { - "tooltip": "", - "name": "Force" - }, - { - "tooltip": "", - "name": "Scope" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Range" - } - ] - }, - "Node_Texture_Remap": { - "tooltip": "Remap image using texture map. Where red channel control x position and green channel control y position.", - "name": "Texture Remap", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "Displacement map where red retermine the X position, and green determine the Y position.", - "name": "RG Map" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Grid_Tri": { - "tooltip": "Generate triangular grid pattern.", - "name": "Triangular Grid", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Gap" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Tile color" - }, - { - "tooltip": "", - "name": "Gap color" - }, - { - "tooltip": "", - "name": "Texture" - }, - { - "tooltip": "", - "name": "Render type" - }, - { - "tooltip": "", - "name": "Seed" - } - ] - }, - "Node_Bevel": { - "tooltip": "Apply 2D bevel on the image.", - "name": "Bevel", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Height" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Slope" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - } - ] - }, - "Node_Shadow_Cast": { - "tooltip": "Apply light that create shadow using shadow mask.", - "name": "Cast Shadow", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Light mask" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Background" - }, - { - "tooltip": "", - "name": "Solid" - }, - { - "tooltip": "", - "name": "Light Position" - }, - { - "tooltip": "", - "name": "Soft light radius" - }, - { - "tooltip": "", - "name": "Light density" - }, - { - "tooltip": "", - "name": "Light type" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Light radius" - }, - { - "tooltip": "", - "name": "Render solid" - }, - { - "tooltip": "If checked, background color will be used as shadow caster.", - "name": "Use BG color" - }, - { - "tooltip": "", - "name": "BG threshold" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Banding" - }, - { - "tooltip": "Control how light fade out over distance.", - "name": "Attenuation" - }, - { - "tooltip": "", - "name": "Ambient occlusion" - }, - { - "tooltip": "", - "name": "Ambient occlusion strength" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Sequence_Anim": { - "tooltip": "Convert array of images into animation.", - "name": "Array to Anim", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Speed" - }, - { - "tooltip": "", - "name": "Sequence" - }, - { - "tooltip": "", - "name": "Overflow" - } - ] - }, - "Node_Array": { - "tooltip": "", - "name": "Array", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Spread array" - }, - { - "tooltip": "", - "name": "Input" - } - ] - }, - "Node_Vector2": { - "tooltip": "", - "name": "Vector2", - "outputs": [ - { - "tooltip": "", - "name": "Vector" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "x" - }, - { - "tooltip": "", - "name": "y" - }, - { - "tooltip": "", - "name": "Integer" - }, - { - "tooltip": "", - "name": "Display" - }, - { - "tooltip": "", - "name": "Reset to center" - } - ] - }, - "Node_SDF": { - "tooltip": "Create signed distance field using jump flooding algorithm.", - "name": "SDF", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Side" - }, - { - "tooltip": "", - "name": "Max distance" - } - ] - }, - "Node_Particle": { - "tooltip": "Generate particle effect.", - "name": "Particle", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particle sprite" - }, - { - "tooltip": "Frames delay between each particle spawn.", - "name": "Spawn delay" - }, - { - "tooltip": "Amount of particle spawn in that frame.", - "name": "Spawn amount" - }, - { - "tooltip": "", - "name": "Spawn area" - }, - { - "tooltip": "", - "name": "Spawn distribution" - }, - { - "tooltip": "", - "name": "Lifespan" - }, - { - "tooltip": "", - "name": "Spawn direction" - }, - { - "tooltip": "", - "name": "Acceleration" - }, - { - "tooltip": "", - "name": "Orientation" - }, - { - "tooltip": "", - "name": "Rotational speed" - }, - { - "tooltip": "", - "name": "Spawn scale" - }, - { - "tooltip": "", - "name": "Scale over time" - }, - { - "tooltip": "", - "name": "Color over lifetime" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Alpha over time" - }, - { - "tooltip": "Make the particle rotates to follow its movement.", - "name": "Rotate by direction" - }, - { - "tooltip": "", - "name": "Spawn type" - }, - { - "tooltip": "", - "name": "Spawn size" - }, - { - "tooltip": "", - "name": "Spawn velocity" - }, - { - "tooltip": "", - "name": "Gravity" - }, - { - "tooltip": "", - "name": "Wiggle" - }, - { - "tooltip": "", - "name": "Loop" - }, - { - "tooltip": "Whether to select image from an array in order, at random, or treat array as animation.", - "name": "Surface array" - }, - { - "tooltip": "", - "name": "Animation speed" - }, - { - "tooltip": "", - "name": "Scatter" - }, - { - "tooltip": "", - "name": "Boundary data" - }, - { - "tooltip": "", - "name": "On animation end" - }, - { - "tooltip": "", - "name": "Spawn" - }, - { - "tooltip": "", - "name": "Random blend" - }, - { - "tooltip": "Make particle move away from the spawn center.", - "name": "Directed from center" - }, - { - "tooltip": "", - "name": "Distribution map" - }, - { - "tooltip": "", - "name": "Distribution data" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Gravity direction" - }, - { - "tooltip": "", - "name": "Turning" - }, - { - "tooltip": "Apply randomized 1, -1 multiplier to the turning speed.", - "name": "Turn both directions" - }, - { - "tooltip": "", - "name": "Turn scale with speed" - }, - { - "tooltip": "", - "name": "Output dimension" - }, - { - "tooltip": "Round position to the closest integer value to avoid jittering.", - "name": "Round position" - }, - { - "tooltip": "", - "name": "Blend mode" - } - ] - }, - "Node_Switch": { - "tooltip": "Given an index, output value base on index matching.", - "name": "Switch", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Index" - }, - { - "tooltip": "", - "name": "Default value" - }, - { - "tooltip": "", - "name": "Case" - }, - { - "tooltip": "", - "name": "value" - } - ] - }, - "Node_Feedback_Output": { - "tooltip": "", - "name": "Output", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Order" - }, - { - "tooltip": "", - "name": "Feedback loop" - } - ] - }, - "Node_Rigid_Override": { - "tooltip": "", - "name": "Rigidbody Override", - "outputs": [ - { - "tooltip": "", - "name": "Object" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Object" - }, - { - "tooltip": "", - "name": "Positions" - }, - { - "tooltip": "", - "name": "Scales" - }, - { - "tooltip": "", - "name": "Rotations" - }, - { - "tooltip": "", - "name": "Blends" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Velocity" - } - ] - }, - "Node_Iterator_Input": { - "tooltip": "", - "name": "Input", - "outputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Loop entrance" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Display type" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Input type" - }, - { - "tooltip": "", - "name": "Enum label" - }, - { - "tooltip": "", - "name": "Vector size" - }, - { - "tooltip": "", - "name": "Order" - }, - { - "tooltip": "", - "name": "Display preview gizmo" - }, - { - "tooltip": "", - "name": "Step" - } - ] - }, - "Node_Blur_Simple": { - "tooltip": "Blur image using simpler algorithm. Allowing for variable blur strength.", - "name": "Simple Blur", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Blur mask" - }, - { - "tooltip": "Replace all color while keeping the alpha. Used to\nfix grey outline when bluring transparent pixel.", - "name": "Override color" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Text": { - "tooltip": "Draw text on an image.", - "name": "Draw Text", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Font" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "", - "name": "Anti-Aliasing " - }, - { - "tooltip": "", - "name": "Character range" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Fixed dimension" - }, - { - "tooltip": "", - "name": "Horizontal alignment" - }, - { - "tooltip": "", - "name": "Vertical alignment" - }, - { - "tooltip": "", - "name": "Output dimension" - }, - { - "tooltip": "", - "name": "Padding" - } - ] - }, - "Node_Mirror": { - "tooltip": "Reflect the image along a reflection line.", - "name": "Mirror", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Mirror mask" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Frame": { - "tooltip": "Create frame surrounding nodes.", - "name": "Frame", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Alpha" - } - ] - }, - "Node_Scale_Algo": { - "tooltip": "Scale image using scale2x, scale3x algorithm.", - "name": "Scale Algorithm", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Algorithm" - }, - { - "tooltip": "", - "name": "Tolerance" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Color_adjust": { - "tooltip": "Adjust brightness, contrast, hue, saturation, value, alpha, and blend image with color.", - "name": "Color Adjust", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Color out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Brightness" - }, - { - "tooltip": "", - "name": "Contrast" - }, - { - "tooltip": "", - "name": "Hue" - }, - { - "tooltip": "", - "name": "Saturation" - }, - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Blend" - }, - { - "tooltip": "", - "name": "Blend alpha" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Exposure" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Input Type" - }, - { - "tooltip": "", - "name": "Color" - } - ] - }, - "Node_Curve": { - "tooltip": "Adjust brightness of an image using curves.", - "name": "Curve", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Brightness" - }, - { - "tooltip": "", - "name": "Red" - }, - { - "tooltip": "", - "name": "Green" - }, - { - "tooltip": "", - "name": "Blue" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Wiggler": { - "tooltip": "Create smooth random value.", - "name": "Wiggler", - "outputs": [ - { - "tooltip": "", - "name": "Output" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Frequency" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Display" - } - ] - }, - "Node_Mesh_Warp": { - "tooltip": "Wrap image by converting it to mesh, and using control points.", - "name": "Mesh Warp", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Mesh data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "Amount of grid subdivision. Higher number means more grid, detail.", - "name": "Sample" - }, - { - "tooltip": "", - "name": "Spring Force" - }, - { - "tooltip": "", - "name": "Mesh" - }, - { - "tooltip": "Include diagonal link to prevent drastic grid deformation.", - "name": "Diagonal Link" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "Link length preservation, setting it to 1 will prevent any stretching, contraction.", - "name": "Link Strength" - }, - { - "tooltip": "", - "name": "Full Mesh" - } - ] - }, - "Node_3D_Repeat": { - "tooltip": "Repeat 3D object multiple times.", - "name": "3D Repeat", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D objects" - }, - { - "tooltip": "", - "name": "Normal pass" + "name": "Trigger", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "3D object" - }, - { - "tooltip": "Amount of copies to be generated.", - "name": "Repeat" - }, - { - "tooltip": "", - "name": "Repeat position" - }, - { - "tooltip": "", - "name": "Repeat rotation" - }, - { - "tooltip": "", - "name": "Repeat scale" - }, - { - "tooltip": "", - "name": "Repeat pattern" - }, - { - "tooltip": "", - "name": "Axis" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - } - ] - }, - "Node_Padding": { - "tooltip": "Make image bigger by adding space in 4 directions.", - "name": "Padding", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Padding" - }, - { - "tooltip": "", - "name": "Fill method" - }, - { - "tooltip": "", - "name": "Fill color" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Pad mode" - }, - { - "tooltip": "", - "name": "Target dimension" - }, - { - "tooltip": "", - "name": "Horizontal alignment" - }, - { - "tooltip": "", - "name": "Vertical alignment" - } - ] - }, - "Node_Group_Input": { - "tooltip": "", - "name": "Input", - "outputs": [ - { - "tooltip": "", - "name": "Value" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Display type" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Input type" - }, - { - "tooltip": "", - "name": "Enum label" - }, - { - "tooltip": "", - "name": "Vector size" - }, - { - "tooltip": "", - "name": "Order" - }, - { - "tooltip": "", - "name": "Display preview gizmo" - }, - { - "tooltip": "", - "name": "Step" - } - ] - }, - "Node_Alpha_Grey": { - "tooltip": "Convert alpha value into solid greyscale.", - "name": "Alpha to Grey", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_VFX_Wind": { - "tooltip": "", - "name": "Wind", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Falloff distance" - }, - { - "tooltip": "", - "name": "Effect Vector" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Rotate particle" - }, - { - "tooltip": "", - "name": "Scale particle" - } - ] - }, - "Node_Path_Reverse": { - "tooltip": "", - "name": "Reverse Path", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - } - ] - }, - "Node_Text_File_Write": { - "tooltip": "Save text as a .txt file.", - "name": "Text File Out", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Path" + "name": "Boolean", + "tooltip": "" }, { - "tooltip": "", - "name": "Content" + "name": "Trigger condition", + "tooltip": "" } ] }, "Node_Palette": { - "tooltip": "", "name": "Palette", + "tooltip": "", "outputs": [ { - "tooltip": "", - "name": "Palette" + "name": "Palette", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Palette" + "name": "Palette", + "tooltip": "" }, { - "tooltip": "", - "name": "Trim range" + "name": "Trim range", + "tooltip": "" } ] }, - "Node_3D_Transform": { - "tooltip": "", - "name": "3D Transform", + "Node_Array_Range": { + "name": "Array Range", + "tooltip": "Create array of numbers by setting start, end and step length.", "outputs": [ { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" + "name": "Array", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Dimension" + "name": "Start", + "tooltip": "" }, { - "tooltip": "", - "name": "Object position" + "name": "End", + "tooltip": "" }, { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "3D object" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" + "name": "Step", + "tooltip": "" } ] }, "Node_Rigid_Global": { - "tooltip": "", "name": "RigidSim Global", + "tooltip": "", "outputs": [], "inputs": [ { - "tooltip": "", - "name": "Gravity" - } - ] - }, - "Node_Iterator_Output": { - "tooltip": "", - "name": "Output", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Order" - }, - { - "tooltip": "", - "name": "Loop exit" - } - ] - }, - "Node_Perlin": { - "tooltip": "Generate perlin noise.", - "name": "Perlin Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Iteration" - }, - { - "tooltip": "", - "name": "Tile" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Color mode" - }, - { - "tooltip": "", - "name": "Color R range" - }, - { - "tooltip": "", - "name": "Color G range" - }, - { - "tooltip": "", - "name": "Color B range" - } - ] - }, - "Node_Random": { - "tooltip": "", - "name": "Random", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "seed" - }, - { - "tooltip": "", - "name": "from" - }, - { - "tooltip": "", - "name": "to" - } - ] - }, - "Node_Text_File_Read": { - "tooltip": "Load .txt in as text.", - "name": "Text File In", - "outputs": [ - { - "tooltip": "", - "name": "Content" - }, - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - } - ] - }, - "Node_Path_Plot": { - "tooltip": "", - "name": "Path plot", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Output scale" - }, - { - "tooltip": "", - "name": "Coordinate" - }, - { - "tooltip": "", - "name": "Equation type" - }, - { - "tooltip": "", - "name": "0 function" - }, - { - "tooltip": "", - "name": "1 function" - }, - { - "tooltip": "", - "name": "Origin" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Input scale" - }, - { - "tooltip": "", - "name": "Input shift" - } - ] - }, - "Node_Render_Sprite_Sheet": { - "tooltip": "Create spritesheet from image array or animation.", - "name": "Render Spritesheet", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Atlas Data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Sprites" - }, - { - "tooltip": "", - "name": "Sprite set" - }, - { - "tooltip": "Number of frames until next sprite. Can be seen as (Step - 1) frame skip.", - "name": "Frame step" - }, - { - "tooltip": "", - "name": "Packing type" - }, - { - "tooltip": "", - "name": "Grid column" - }, - { - "tooltip": "", - "name": "Alignment" - }, - { - "tooltip": "", - "name": "Spacing" - }, - { - "tooltip": "", - "name": "Padding" - }, - { - "tooltip": "Starting\/ending frames, set end to 0 to default to last frame.", - "name": "Range" - } - ] - }, - "Node_Atlas_Set": { - "tooltip": "", - "name": "Atlas Set", - "outputs": [ - { - "tooltip": "", - "name": "Atlas" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Atlas" - }, - { - "tooltip": "", - "name": "Surface" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Blend" - }, - { - "tooltip": "", - "name": "Alpha" - } - ] - }, - "Node_Path_Trim": { - "tooltip": "", - "name": "Trim Path", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Range" - } - ] - }, - "Node_String_Regex_Replace": { - "tooltip": "", - "name": "RegEx Replace", - "outputs": [ - { - "tooltip": "", - "name": "Results" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Regex" - }, - { - "tooltip": "", - "name": "Replacement" - } - ] - }, - "Node_Image": { - "tooltip": "Load a single image from your computer.", - "name": "Image", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Padding" - } - ] - }, - "Node_Noise_Aniso": { - "tooltip": "Generate anisotropic noise.", - "name": "Anisotropic Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Rotation" - } - ] - }, - "Node_Path_Wave": { - "tooltip": "", - "name": "Wave Path", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Frequency" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Smooth" - } - ] - }, - "Node_Strand_Group": { - "tooltip": "Create group for hair simulation.", - "name": "StrandSim", - "outputs": [], - "inputs": [] - }, - "Node_Dilate": { - "tooltip": "Expand the image around a mid point.", - "name": "Dilate", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Fluid_Domain": { - "tooltip": "", - "name": "Fluid Domain", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Collision" - }, - { - "tooltip": "", - "name": "Material dissipation type" - }, - { - "tooltip": "", - "name": "Material dissipation" - }, - { - "tooltip": "", - "name": "Velocity dissipation type" - }, - { - "tooltip": "", - "name": "Velocity dissipation" - }, - { - "tooltip": "", - "name": "Acceleration" - }, - { - "tooltip": "", - "name": "Material intertia" - }, - { - "tooltip": "", - "name": "Initial pressure" - }, - { - "tooltip": "", - "name": "Material maccormack weight" - }, - { - "tooltip": "", - "name": "Velocity maccormack weight" - }, - { - "tooltip": "", - "name": "Wrap" - }, - { - "tooltip": "", - "name": "Loop" - } - ] - }, - "Node_Convolution": { - "tooltip": "Apply convolution operation on each pixel using a custom 3x3 kernel.", - "name": "Convolution", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Kernel" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Gradient_Palette": { - "tooltip": "Create gradient from palette.", - "name": "Palette to Gradient", - "outputs": [ - { - "tooltip": "", - "name": "Gradient" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Palette" - }, - { - "tooltip": "", - "name": "Custom positions" - }, - { - "tooltip": "Array of number indicating color position (0 - 1).", - "name": "Positions" - }, - { - "tooltip": "", - "name": "Blending" - } - ] - }, - "Node_Lua_Surface": { - "tooltip": "", - "name": "Lua Surface", - "outputs": [ - { - "tooltip": "", - "name": "Execution thread" - }, - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Function name" - }, - { - "tooltip": "", - "name": "Output dimension" - }, - { - "tooltip": 14, - "name": "Lua code" - }, - { - "tooltip": "", - "name": "Execution thread" - }, - { - "tooltip": "", - "name": "Execute on frame" - }, - { - "tooltip": "", - "name": "Argument name" - }, - { - "tooltip": "", - "name": "Argument type" - }, - { - "tooltip": "", - "name": "Argument value" - } - ] - }, - "Node_Iterate_Each": { - "tooltip": "Create group that iterate to each member in an array.", - "name": "Loop Array", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - } - ] - }, - "Node_Fluid_Repulse": { - "tooltip": "", - "name": "Repulse", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Mode" - } - ] - }, - "Node_Logic": { - "tooltip": "", - "name": "Logic Opr", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "a" - }, - { - "tooltip": "", - "name": "b" - } - ] - }, - "Node_Strand_Update": { - "tooltip": "", - "name": "Strand Update", - "outputs": [ - { - "tooltip": "", - "name": "Strand" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Strand" - }, - { - "tooltip": "", - "name": "Step" - } - ] - }, - "Node_Struct_Get": { - "tooltip": "", - "name": "Struct Get", - "outputs": [ - { - "tooltip": "", - "name": "Struct" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Struct" - }, - { - "tooltip": "", - "name": "Key" - } - ] - }, - "Node_Websocket_Receiver": { - "tooltip": "Create websocket server to receive data from the network.", - "name": "Websocket Receiver", - "outputs": [ - { - "tooltip": "", - "name": "Data" - }, - { - "tooltip": "", - "name": "Receive data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Port" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Array_Find": { - "tooltip": "", - "name": "Array Find", - "outputs": [ - { - "tooltip": "", - "name": "Index" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Value" - } - ] - }, - "Node_Number": { - "tooltip": "", - "name": "Number", - "outputs": [ - { - "tooltip": "", - "name": "Number" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Integer" - }, - { - "tooltip": "", - "name": "Display" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Step" - } - ] - }, - "Node_Atlas_Get": { - "tooltip": "", - "name": "Atlas Get", - "outputs": [ - { - "tooltip": "", - "name": "Surface" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Blend" - }, - { - "tooltip": "", - "name": "Alpha" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Atlas" - } - ] - }, - "Node_Display_Text": { - "tooltip": "Display text on the graph.", - "name": "Display Text", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Style" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Line width" - } - ] - }, - "Node_Lua_Compute": { - "tooltip": "", - "name": "Lua Compute", - "outputs": [ - { - "tooltip": "", - "name": "Execution thread" - }, - { - "tooltip": "", - "name": "Return value" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Function name" - }, - { - "tooltip": "", - "name": "Return type" - }, - { - "tooltip": 14, - "name": "Lua code" - }, - { - "tooltip": "", - "name": "Execution thread" - }, - { - "tooltip": "", - "name": "Execute on frame" - }, - { - "tooltip": "", - "name": "Argument name" - }, - { - "tooltip": "", - "name": "Argument type" - }, - { - "tooltip": "", - "name": "Argument value" - } - ] - }, - "Node_Time_Remap": { - "tooltip": "Remap image using texture as time map. Where brighter pixel means using pixel from an older frame.", - "name": "Time Remap", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Map" - }, - { - "tooltip": "", - "name": "Max life" - }, - { - "tooltip": "", - "name": "Loop" - } - ] - }, - "Node_Trigger": { - "tooltip": "", - "name": "Trigger", - "outputs": [ - { - "tooltip": "", - "name": "Trigger" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Trigger" - }, - { - "tooltip": "", - "name": "Trigger" - } - ] - }, - "Node_Tunnel_Out": { - "tooltip": "Receive value from tunnel in of the same key.", - "name": "Tunnel Out", - "outputs": [ - { - "tooltip": "", - "name": "Value out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Name" - } - ] - }, - "Node_Flip": { - "tooltip": "Flip image horizontally or vertically.", - "name": "Flip", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Axis" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Composite": { - "tooltip": "Combine multiple images with controllable position, rotation, scale.", - "name": "Composite", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Atlas data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Padding" - }, - { - "tooltip": "", - "name": "Output dimension" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Background" - }, - { - "tooltip": "", - "name": "Position 0" - }, - { - "tooltip": "", - "name": "Rotation 0" - }, - { - "tooltip": "", - "name": "Scale 0" - } - ] - }, - "Node_De_Stray": { - "tooltip": "Attempt to remove orphan pixel.", - "name": "De-Stray", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Tolerance" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Iterator_Index": { - "tooltip": "", - "name": "Index", - "outputs": [ - { - "tooltip": "", - "name": "Loop index" - } - ], - "inputs": [] - }, - "Node_Stripe": { - "tooltip": "Generate stripe pattern.", - "name": "Stripe", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "Smoothly blend between each stripe.", - "name": "Blend" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Random" - }, - { - "tooltip": "", - "name": "Random color" - }, - { - "tooltip": "", - "name": "Colors" - }, - { - "tooltip": "", - "name": "Color 1" - }, - { - "tooltip": "", - "name": "Color 2" - } - ] - }, - "Node_Array_Insert": { - "tooltip": "", - "name": "Array Insert", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Index" - }, - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Spread array" - } - ] - }, - "Node_ASE_layer": { - "tooltip": "", - "name": "ASE Layer", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "ASE data" - }, - { - "tooltip": "", - "name": "Use cel dimension" - } - ] - }, - "Node_String_Split": { - "tooltip": "", - "name": "Split Text", - "outputs": [ - { - "tooltip": "", - "name": "Text" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "Character that used to split text,\nleave blank to create character array.", - "name": "Delimiter" - } - ] - }, - "Node_Rigid_Activate": { - "tooltip": "", - "name": "Activate Physics", - "outputs": [ - { - "tooltip": "", - "name": "Object" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Object" - }, - { - "tooltip": "", - "name": "Physics activated" - } - ] - }, - "Node_Color_HSV": { - "tooltip": "Create color from HSV value.", - "name": "HSV Color", - "outputs": [ - { - "tooltip": "", - "name": "Color" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Hue" - }, - { - "tooltip": "", - "name": "Saturation" - }, - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Normalized" - } - ] - }, - "Node_Surface_Replace": { - "tooltip": "", - "name": "Replace Image", - "outputs": [ - { - "tooltip": "", - "name": "Surface Out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Base Image" - }, - { - "tooltip": "", - "name": "Target Image" - }, - { - "tooltip": "", - "name": "Replacement Image" - }, - { - "tooltip": "How similiar the color need to be in order to be count as matched.", - "name": "Color Threshold" - }, - { - "tooltip": "", - "name": "Draw Base Image" - }, - { - "tooltip": "", - "name": "Fast Mode" - }, - { - "tooltip": "How many pixel need to me matched to replace with replacement image.", - "name": "Pixel Threshold" - }, - { - "tooltip": "", - "name": "Array mode" - }, - { - "tooltip": "", - "name": "Seed" - } - ] - }, - "Node_Export": { - "tooltip": "Export image, image array to file, image sequence, animation.", - "name": "Export", - "outputs": [ - { - "tooltip": "", - "name": "Loop exit" - }, - { - "tooltip": "", - "name": "Preview" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface" - }, - { - "tooltip": "", - "name": "Paths" - }, - { - "tooltip": "", - "name": "Template" - }, - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Template guides" - }, - { - "tooltip": "", - "name": "Loop" - }, - { - "tooltip": "", - "name": "Frame optimization" - }, - { - "tooltip": "", - "name": "Color merge" - }, - { - "tooltip": "", - "name": "Framerate" - }, - { - "tooltip": "", - "name": "Format" - }, - { - "tooltip": "", - "name": "Quality" - }, - { - "tooltip": "", - "name": "Sequence begin" - } - ] - }, - "Node_Blend": { - "tooltip": "Blend 2 images using different blendmodes.", - "name": "Blend", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Background" - }, - { - "tooltip": "", - "name": "Foreground" - }, - { - "tooltip": "", - "name": "Blend mode" - }, - { - "tooltip": "", - "name": "Opacity" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Fill mode" - }, - { - "tooltip": "", - "name": "Output dimension" - }, - { - "tooltip": "", - "name": "Constant dimension" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Preserve alpha" - }, - { - "tooltip": "", - "name": "Horizontal Align" - }, - { - "tooltip": "", - "name": "Vertical Align" - } - ] - }, - "Node_Rigid_Render": { - "tooltip": "", - "name": "Render", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Render dimension" - }, - { - "tooltip": "", - "name": "Object" - } - ] - }, - "Node_Fluid_Domain_Queue": { - "tooltip": "", - "name": "Queue Domain", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Input" - } - ] - }, - "Node_Counter": { - "tooltip": "Output current frame as frame index, or animation progress (0 - 1).", - "name": "Frame Index", - "outputs": [ - { - "tooltip": "", - "name": "Value" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Start" - }, - { - "tooltip": "", - "name": "Speed" - }, - { - "tooltip": "Counting mode\r\n - Frame count: Count value up\/down per frame.\r\n - Animation progress: Count from 0 (first frame) to 1 (last frame). ", - "name": "Mode" - } - ] - }, - "Node_Colorize": { - "tooltip": "Map brightness of a pixel to a color from a gradient.", - "name": "Colorize", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Gradient" - }, - { - "tooltip": "", - "name": "Gradient shift" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Multiply alpha" + "name": "Gravity", + "tooltip": "" } ] }, "Node_Statistic": { - "tooltip": "", "name": "Statistic", - "outputs": [ - { - "tooltip": "", - "name": "Statistic" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Input" - } - ] - }, - "Node_Grid_Hex": { - "tooltip": "Generate hexagonal grid pattern.", - "name": "Hexagonal Grid", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Gap" - }, - { - "tooltip": "", - "name": "Tile color" - }, - { - "tooltip": "", - "name": "Gap color" - }, - { - "tooltip": "", - "name": "Render type" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Texture" - } - ] - }, - "Node_Array_Sort": { "tooltip": "", - "name": "Sort Number", "outputs": [ { - "tooltip": "", - "name": "Sorted array" - }, - { - "tooltip": "", - "name": "Sorted index" + "name": "Statistic", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Array in" + "name": "Type", + "tooltip": "" }, { - "tooltip": "", - "name": "Order" + "name": "Input", + "tooltip": "" } ] }, - "Node_Array_Remove": { + "Node_3D_Cylinder": { + "name": "3D Cylinder", "tooltip": "", - "name": "Array Remove", "outputs": [ { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Index" - }, - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Spread array" - } - ] - }, - "Node_3D_Plane": { - "tooltip": "Put 2D image on a plane in 3D space.", - "name": "3D Plane", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "3D vertex" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Output dimension" - }, - { - "tooltip": "", - "name": "Constant dimension" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Texture scale" - }, - { - "tooltip": "", - "name": "Texture shift" - }, - { - "tooltip": "", - "name": "Subdiviion" - }, - { - "tooltip": "", - "name": "Normal axis" - } - ] - }, - "Node_VFX_Accelerate": { - "tooltip": "", - "name": "Accelerate", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Falloff distance" - }, - { - "tooltip": "", - "name": "Effect Vector" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Rotate particle" - }, - { - "tooltip": "", - "name": "Scale particle" - } - ] - }, - "Node_Local_Analyze": { - "tooltip": "Apply non-linear operation (minimum, maximum) on each pixel locally.", - "name": "Local Analyze", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Algorithm" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Shape" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Color_replace": { - "tooltip": "Replace color that match one palette with another palette.", - "name": "Replace Color", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "Color to be replaced.", - "name": "Palette from" - }, - { - "tooltip": "Palette to be replaced to.", - "name": "Palette to" - }, - { - "tooltip": "", - "name": "Threshold" - }, - { - "tooltip": "Set pixel that doesn't match any color in 'palette from' to black.", - "name": "Set others to black" - }, - { - "tooltip": "", - "name": "Multiply alpha" - }, - { - "tooltip": "Completely override pixel with new color instead of blending between it.", - "name": "Hard replace" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_VFX_Override": { - "tooltip": "", - "name": "VFX Override", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Positions" - }, - { - "tooltip": "", - "name": "Rotations" - }, - { - "tooltip": "", - "name": "Scales" - }, - { - "tooltip": "", - "name": "Blend" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Surface" - } - ] - }, - "Node_Array_Length": { - "tooltip": "", - "name": "Array Length", - "outputs": [ - { - "tooltip": "", - "name": "Size" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - } - ] - }, - "Node_Combine_HSV": { - "tooltip": "Combine 4 image in to one. Each image use to control HSVA channel.", - "name": "HSV Combine", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Hue" - }, - { - "tooltip": "", - "name": "Saturation" - }, - { - "tooltip": "", - "name": "Value" - } - ] - }, - "Node_Camera": { - "tooltip": "Create camera that crop image to fix dimension with control of position, zoom. Also can be use to create parallax effect.", - "name": "Camera", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Background" - }, - { - "tooltip": "", - "name": "Focus area" - }, - { - "tooltip": "", - "name": "Zoom" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Fix background" - }, - { - "tooltip": "", - "name": "Element 0" - }, - { - "tooltip": "", - "name": "Parallax 0" - } - ] - }, - "Node_Path_Sample": { - "tooltip": "Sample a 2D position from a path", - "name": "Sample Path", - "outputs": [ - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Direction" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Ratio" - }, - { - "tooltip": "", - "name": "Type" - } - ] - }, - "Node_String_Get_Char": { - "tooltip": "", - "name": "Get Character", - "outputs": [ - { - "tooltip": "", - "name": "Text" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Index" - }, - { - "tooltip": "", - "name": "Amount" - } - ] - }, - "Node_Iterator_Each_Input": { - "tooltip": "", - "name": "Input", - "outputs": [ - { - "tooltip": "", - "name": "Value in" - } - ], - "inputs": [] - }, - "Node_Blur_Radial": { - "tooltip": "Blur image by rotating aroung a mid point.", - "name": "Radial Blur", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Grid": { - "tooltip": "Generate grid pattern.", - "name": "Grid", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Gap" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Tile color" - }, - { - "tooltip": "", - "name": "Gap color" - }, - { - "tooltip": "", - "name": "Texture" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Shift axis" - }, - { - "tooltip": "", - "name": "Render type" - }, - { - "tooltip": "", - "name": "Seed" - } - ] - }, - "Node_VFX_Attract": { - "tooltip": "", - "name": "Attract", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Falloff distance" - }, - { - "tooltip": "", - "name": "Effect Vector" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Rotate particle" - }, - { - "tooltip": "", - "name": "Scale particle" - } - ] - }, - "Node_Lua_Global": { - "tooltip": "", - "name": "Lua Global", - "outputs": [ - { - "tooltip": "", - "name": "Execution thread" - } - ], - "inputs": [ - { - "tooltip": 14, - "name": "Lua code" - }, - { - "tooltip": "", - "name": "Run order" - }, - { - "tooltip": "", - "name": "Execution thread" - } - ] - }, - "Node_Feedback": { - "tooltip": "Create group that reuse output from last frame to the current one.", - "name": "Feedback", - "outputs": [], - "inputs": [] - }, - "Node_Gradient_Points": { - "tooltip": "Create image from 4 color points.", - "name": "4 Points Gradient", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Center 1" - }, - { - "tooltip": "", - "name": "Color 1" - }, - { - "tooltip": "", - "name": "Center 2" - }, - { - "tooltip": "", - "name": "Color 2" - }, - { - "tooltip": "", - "name": "Center 3" - }, - { - "tooltip": "", - "name": "Color 3" - }, - { - "tooltip": "", - "name": "Center 4" - }, - { - "tooltip": "", - "name": "Color 4" - }, - { - "tooltip": "", - "name": "Use palette" - }, - { - "tooltip": "", - "name": "Palette" - } - ] - }, - "Node_Fluid_Add_Collider": { - "tooltip": "", - "name": "Add Collider", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Collider" - }, - { - "tooltip": "", - "name": "Area" - } - ] - }, - "Node_Path_Blend": { - "tooltip": "Blend between 2 paths.", - "name": "Blend Path", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path 1" - }, - { - "tooltip": "", - "name": "Path 2" - }, - { - "tooltip": "", - "name": "Ratio" - } - ] - }, - "Node_Rigid_Object_Spawner": { - "tooltip": "", - "name": "Object Spawner", - "outputs": [ - { - "tooltip": "", - "name": "Object" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Object" - }, - { - "tooltip": "", - "name": "Spawn area" - }, - { - "tooltip": "", - "name": "Spawn type" - }, - { - "tooltip": "", - "name": "Spawn delay" - }, - { - "tooltip": "", - "name": "Spawn amount" - }, - { - "tooltip": "", - "name": "Spawn frame" - }, - { - "tooltip": "", - "name": "Spawn" - }, - { - "tooltip": "", - "name": "Seed" - } - ] - }, - "Node_Stack": { - "tooltip": "Place image next to each other linearly, or on top of each other.", - "name": "Stack", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Atlas data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Axis" - }, - { - "tooltip": "", - "name": "Align" - }, - { - "tooltip": "", - "name": "Spacing" - }, - { - "tooltip": "", - "name": "Input" - } - ] - }, - "Node_Crop": { - "tooltip": "Crop out image to create smaller ones.", - "name": "Crop", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Crop" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Grey_Alpha": { - "tooltip": "Convert greyscale to alpha value.", - "name": "Grey to Alpha", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "Replace output with solid color.", - "name": "Replace color" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Noise": { - "tooltip": "Generate white noise.", - "name": "Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Color mode" - }, - { - "tooltip": "", - "name": "Color R range" - }, - { - "tooltip": "", - "name": "Color G range" - }, - { - "tooltip": "", - "name": "Color B range" - } - ] - }, - "Node_Grid_Noise": { - "tooltip": "", - "name": "Grid Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Texture sample" - }, - { - "tooltip": "", - "name": "Shift axis" - }, - { - "tooltip": "", - "name": "Color mode" - }, - { - "tooltip": "", - "name": "Color R range" - }, - { - "tooltip": "", - "name": "Color G range" - }, - { - "tooltip": "", - "name": "Color B range" - } - ] - }, - "Node_Array_Set": { - "tooltip": "", - "name": "Array Set", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Index" - }, - { - "tooltip": "", - "name": "Value" - } - ] - }, - "Node_Scale": { - "tooltip": "Simple node for scaling image.", - "name": "Scale", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Mode" - }, - { - "tooltip": "", - "name": "Target dimension" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Strand_Gravity": { - "tooltip": "", - "name": "Strand Gravity", - "outputs": [ - { - "tooltip": "", - "name": "Strand" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Strand" - }, - { - "tooltip": "", - "name": "Gravity" - }, - { - "tooltip": "", - "name": "Direction" - } - ] - }, - "Node_Displace": { - "tooltip": "Distort image using another image as a map.", - "name": "Displace", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Displace map" - }, - { - "tooltip": "Vector to displace pixel by.", - "name": "Position" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "Brightness value to be use as a basis for 'no displacement'.", - "name": "Mid value" - }, - { - "tooltip": "Use color data set extra information.\r\n - Ignore: Don't use color data.\r\n - Vector: Use red as X displacement, green as Y displacement.\r\n - Angle: Use red as angle, green as distance.", - "name": "Color data" - }, - { - "tooltip": "If not set, then strength value is multiplied directly to the displacement.\r\nIf set, then strength value control how many times the effect applies on itself.", - "name": "Iterate" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Iterator_Each_Length": { - "tooltip": "", - "name": "Array Length", - "outputs": [ - { - "tooltip": "", - "name": "Length" - } - ], - "inputs": [] - }, - "Node_Fluid_Apply_Velocity": { - "tooltip": "", - "name": "Apply Velocity", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Brush" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Velocity" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Unicode": { - "tooltip": "", - "name": "Unicode", - "outputs": [ - { - "tooltip": "", - "name": "Character" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Unicode" - } - ] - }, - "Node_Average": { - "tooltip": "Average color of every pixels in the image.", - "name": "Average", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Color" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Transform": { - "tooltip": "Move, rotate, and scale image.", - "name": "Transform", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Output dimension" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Anchor" - }, - { - "tooltip": "", - "name": "Relative anchor" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "Repeat the surface to fill the screen.", - "name": "Tile" - }, - { - "tooltip": "Make the surface rotates to follow its movement.", - "name": "Rotate by velocity" - }, - { - "tooltip": "", - "name": "Output dimension type" - }, - { - "tooltip": "Round position to the closest integer value to avoid jittering.", - "name": "Round position" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_String_Join": { - "tooltip": "", - "name": "Join Text", - "outputs": [ - { - "tooltip": "", - "name": "Text" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text array" - }, - { - "tooltip": "", - "name": "Divider" - } - ] - }, - "Node_Palette_Replace": { - "tooltip": "", - "name": "Palette Replace", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Palette in" - }, - { - "tooltip": "", - "name": "Palette from" - }, - { - "tooltip": "", - "name": "Palette to" - }, - { - "tooltip": "", - "name": "Threshold" - } - ] - }, - "Node_FXAA": { - "tooltip": "", - "name": "FXAA", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - } - ] - }, - "Node_Seperate_Shape": { - "tooltip": "Separate disconnected pixel each into an image in an image array.", - "name": "Separate Shape", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Boundary data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Tolerance" - }, - { - "tooltip": "", - "name": "Override color" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "Skip empty and black shape.", - "name": "Ignore blank" - } - ] - }, - "Node_Crop_Content": { - "tooltip": "Crop out empty pixel pixel from the image.", - "name": "Crop Content", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "Cropping mode for dealing with image array.", - "name": "Array" - }, - { - "tooltip": "Add padding back after crop.", - "name": "Padding" - } - ] - }, - "Node_Pack_Sprites": { - "tooltip": "Combine array of images with different dimension using different algorithms.", - "name": "Pack Sprites", - "outputs": [ - { - "tooltip": "", - "name": "Packed image" - }, - { - "tooltip": "", - "name": "Atlas data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Sprites" - }, - { - "tooltip": "", - "name": "Algorithm" - }, - { - "tooltip": "", - "name": "Max width" - }, - { - "tooltip": "", - "name": "Max height" - }, - { - "tooltip": "", - "name": "Spacing" - } - ] - }, - "Node_Morph_Surface": { - "tooltip": "Morph pixel bewteen two surfaces.", - "name": "Morph Surface", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface from" - }, - { - "tooltip": "", - "name": "Surface to" - }, - { - "tooltip": "", - "name": "Morph amount" - }, - { - "tooltip": "", - "name": "Threshold" - } - ] - }, - "Node_Level_Selector": { - "tooltip": "Isolate part of the image that falls in the selected brightness range.", - "name": "Level Selector", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Mid point" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Feedback_Input": { - "tooltip": "", - "name": "Input", - "outputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Feedback loop" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Display type" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Input type" - }, - { - "tooltip": "", - "name": "Enum label" - }, - { - "tooltip": "", - "name": "Vector size" - }, - { - "tooltip": "", - "name": "Order" - }, - { - "tooltip": "", - "name": "Display preview gizmo" - }, - { - "tooltip": "", - "name": "Step" - } - ] - }, - "Node_Atlas_Draw": { - "tooltip": "Render image atlas to a surface.", - "name": "Draw Atlas", - "outputs": [ - { - "tooltip": "", - "name": "Surface" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Atlas" - } - ] - }, - "Node_Fluid_Render": { - "tooltip": "", - "name": "Render Domain", - "outputs": [ - { - "tooltip": "", - "name": "Fluid" - }, - { - "tooltip": "", - "name": "Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Interpolate" - }, - { - "tooltip": "", - "name": "Draw Domain" - } - ] - }, - "Node_WAV_File_Write": { - "tooltip": "Save wav audio file.", - "name": "WAV File Out", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Audio Data" - }, - { - "tooltip": "", - "name": "Sample" - }, - { - "tooltip": "", - "name": "Bit Depth" - }, - { - "tooltip": "", - "name": "Remap Data" - }, - { - "tooltip": "", - "name": "Data Range" - } - ] - }, - "Node_Corner": { - "tooltip": "Round out sharp corner of the image.", - "name": "Corner", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Anim_Curve": { - "tooltip": "Evaluate value from an animation curve.", - "name": "Evaluate Curve", - "outputs": [ - { - "tooltip": "", - "name": "Curve" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Curve" - }, - { - "tooltip": "", - "name": "Progress" - }, - { - "tooltip": "", - "name": "Minimum" - }, - { - "tooltip": "", - "name": "Maximum" - } - ] - }, - "Node_HSV_Channel": { - "tooltip": "Extract HSVA channel on an image, each channel becomes its own image.", - "name": "HSV Extract", - "outputs": [ - { - "tooltip": "", - "name": "Hue" - }, - { - "tooltip": "", - "name": "Saturation" - }, - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Alpha" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - } - ] - }, - "Node_Pixel_Sort": { - "tooltip": "Sort pixel by brightness in horizontal, or vertial axis.", - "name": "Pixel Sort", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Iteration" - }, - { - "tooltip": "", - "name": "Threshold" - }, - { - "tooltip": "", - "name": "Direction" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Array_Shift": { - "tooltip": "", - "name": "Array Shift", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Shift" - } - ] - }, - "Node_Blur_Contrast": { - "tooltip": "Blur only pixel of a similiar color.", - "name": "Contrast Blur", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "Brightness different to be blur together.", - "name": "Threshold" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Pixel_Cloud": { - "tooltip": "Displace each pixel of the image randomly.", - "name": "Pixel Cloud", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Strength map" - }, - { - "tooltip": "", - "name": "Color over lifetime" - }, - { - "tooltip": "", - "name": "Distance" - }, - { - "tooltip": "", - "name": "Alpha over lifetime" - }, - { - "tooltip": "", - "name": "Random blending" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_VFX_Group": { - "tooltip": "Create VFX group, which generate particles that can be manipulated using different force nodes.", - "name": "VFX", - "outputs": [], - "inputs": [] - }, - "Node_Blur_Directional": { - "tooltip": "Blur image given a direction.", - "name": "Directional Blur", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Direction" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Iterator_Sort_Input": { - "tooltip": "", - "name": "Sort Input", - "outputs": [ - { - "tooltip": "", - "name": "Value in" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Value in" - } - ] - }, - "Node_Scatter_Points": { - "tooltip": "Generate array of vector 2 points for scattering.", - "name": "Scatter Points", - "outputs": [ - { - "tooltip": "", - "name": "Points" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Point area" - }, - { - "tooltip": "", - "name": "Point distribution" - }, - { - "tooltip": "", - "name": "Scatter" - }, - { - "tooltip": "Amount of particle spawn in that frame.", - "name": "Point amount" - }, - { - "tooltip": "", - "name": "Distribution map" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "Fix point position, and only select point in the area.", - "name": "Fixed position" - }, - { - "tooltip": "", - "name": "Reference dimension" - } - ] - }, - "Node_Strand_Length_Adjust": { - "tooltip": "", - "name": "Strand Length Adjust", - "outputs": [ - { - "tooltip": "", - "name": "Strand" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Strand" - }, - { - "tooltip": "", - "name": "Shape" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Direction" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Strength" - } - ] - }, - "Node_Strand_Break": { - "tooltip": "", - "name": "Strand Break", - "outputs": [ - { - "tooltip": "", - "name": "Strand" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Strand" - }, - { - "tooltip": "", - "name": "Shape" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Direction" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Chance" - }, - { - "tooltip": "", - "name": "Seed" - } - ] - }, - "Node_Vector_Dot": { - "tooltip": "", - "name": "Dot product", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Point 1" - }, - { - "tooltip": "", - "name": "Point 2" - } - ] - }, - "Node_Trigger_Bool": { - "tooltip": "", - "name": "Boolean Trigger", - "outputs": [ - { - "tooltip": "", - "name": "Trigger" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Boolean" - }, - { - "tooltip": "", - "name": "Trigger condition" - } - ] - }, - "Node_Blur": { - "tooltip": "Blur image smoothly.", - "name": "Blur", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "Replace all color while keeping the alpha. Used to\nfix grey outline when bluring transparent pixel.", - "name": "Override color" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Posterize": { - "tooltip": "Reduce and remap color to match a palette.", - "name": "Posterize", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Palette" - }, - { - "tooltip": "", - "name": "Use palette" - }, - { - "tooltip": "", - "name": "Colors" - }, - { - "tooltip": "", - "name": "Gamma" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Iterator_Length": { - "tooltip": "", - "name": "Loop amount", - "outputs": [ - { - "tooltip": "", - "name": "Length" - } - ], - "inputs": [] - }, - "Node_Polar": { - "tooltip": "Convert image to polar coordinate.", - "name": "Polar", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Invert": { - "tooltip": "Invert color.", - "name": "Invert", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_3D_Cube": { - "tooltip": "", - "name": "3D Cube", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" - }, - { - "tooltip": "", - "name": "3D vertex" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Main texture" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render rotation" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Textures per face" - }, - { - "tooltip": "", - "name": "Textures 0" - }, - { - "tooltip": "", - "name": "Textures 1" - }, - { - "tooltip": "", - "name": "Textures 2" - }, - { - "tooltip": "", - "name": "Textures 3" - }, - { - "tooltip": "", - "name": "Textures 4" - }, - { - "tooltip": "", - "name": "Textures 5" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - } - ] - }, - "Node_Strand_Create": { - "tooltip": "", - "name": "Strand Create", - "outputs": [ - { - "tooltip": "", - "name": "Strand" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "How many strands to generate.", - "name": "Density" - }, - { - "tooltip": "", - "name": "Length" - }, - { - "tooltip": "", - "name": "Segment" - }, - { - "tooltip": "Length preservation, the higher the value the easier it is to stretch each segment.", - "name": "Elasticity" - }, - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Side" - }, - { - "tooltip": "Angular stiffness, the higher the value the easier it is to bend each segment.", - "name": "Spring" - }, - { - "tooltip": "The ability to keep its original shape.", - "name": "Structure" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Curl frequency" - }, - { - "tooltip": "", - "name": "Curliness" - }, - { - "tooltip": "", - "name": "Mesh" - }, - { - "tooltip": "", - "name": "Distribution" - }, - { - "tooltip": "Prevent strand reseting to apply manual modification. Unbaking will remove all changes.", - "name": "Bake hair" - }, - { - "tooltip": "", - "name": "View fix hair" - }, - { - "tooltip": "The force required to break strand from its root. Set to -1 to make strand infinitely strong.", - "name": "Root strength" - } - ] - }, - "Node_WAV_File_Read": { - "tooltip": "Load wav audio file.", - "name": "WAV File In", - "outputs": [ - { - "tooltip": "", - "name": "Data" - }, - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Sample rate" - }, - { - "tooltip": "", - "name": "Channels" - }, - { - "tooltip": "", - "name": "Duration (s)" - }, - { - "tooltip": "", - "name": "Loudness" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Sync lenght" - } - ] - }, - "Node_Path_Array": { - "tooltip": "", - "name": "Path Array", - "outputs": [ - { - "tooltip": "", - "name": "Path array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - } - ] - }, - "Node_Find_Pixel": { - "tooltip": "Get the position of the first pixel with a given color.", - "name": "Find pixel", - "outputs": [ - { - "tooltip": "", - "name": "Position" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Search color" - } - ] - }, - "Node_String_Length": { - "tooltip": "", - "name": "Text Length", - "outputs": [ - { - "tooltip": "", - "name": "Text" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Mode" - } - ] - }, - "Node_Blur_Bokeh": { - "tooltip": "Create bokeh effect. Blur lighter color in a lens-like manner.", - "name": "Lens Blur", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Color": { - "tooltip": "", - "name": "Color", - "outputs": [ - { - "tooltip": "", - "name": "Color" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Color" - } - ] - }, - "Node_Cellular": { - "tooltip": "Generate voronoi pattern.", - "name": "Cellular Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Contrast" - }, - { - "tooltip": "", - "name": "Pattern" - }, - { - "tooltip": "", - "name": "Middle" - }, - { - "tooltip": "", - "name": "Radial scale" - }, - { - "tooltip": "", - "name": "Radial shatter" - }, - { - "tooltip": "", - "name": "Colored" - } - ] - }, - "Node_Path_Map_Area": { - "tooltip": "Scale path to fit a given area.", - "name": "Remap Path", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Area" - } - ] - }, - "Node_Iterator_Sort_Output": { - "tooltip": "", - "name": "Sort Output", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Result" - } - ] - }, - "Node_Vector_Split": { - "tooltip": "", - "name": "Vector Split", - "outputs": [ - { - "tooltip": "", - "name": "x" - }, - { - "tooltip": "", - "name": "y" - }, - { - "tooltip": "", - "name": "z" - }, - { - "tooltip": "", - "name": "w" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Vector" - } - ] - }, - "Node_Audio_Window": { - "tooltip": "Take a slice of an audio array based on the current frame.", - "name": "Audio Window", - "outputs": [ - { - "tooltip": "", - "name": "Windowed Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Audio Array" - }, - { - "tooltip": "", - "name": "Sample" - }, - { - "tooltip": "", - "name": "Size" - } - ] - }, - "Node_Bloom": { - "tooltip": "Apply bloom effect, bluring and brighten the bright part of the image.", - "name": "Bloom", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "Bloom blur radius.", - "name": "Size" - }, - { - "tooltip": "How bright a pixel should be to start blooming.", - "name": "Tolerance" - }, - { - "tooltip": "Blend intensity.", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Bloom mask" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Color_Mix": { - "tooltip": "", - "name": "Mix Color", - "outputs": [ - { - "tooltip": "", - "name": "Color" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Color from" - }, - { - "tooltip": "", - "name": "Color to" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Mode" - } - ] - }, - "Node_Path_L_System": { - "tooltip": "", - "name": "L system", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Length" - }, - { - "tooltip": "", - "name": "Angle" - }, - { - "tooltip": "", - "name": "Starting position" - }, - { - "tooltip": "", - "name": "Iteration" - }, - { - "tooltip": 37, - "name": "Starting rule" - }, - { - "tooltip": "Replace symbol of the last generated rule, for example a=F to replace all a with F. Use comma to separate different replacements.", - "name": "End replacement" - }, - { - "tooltip": "", - "name": "Starting angle" - }, - { - "tooltip": "", - "name": "Name 0" - }, - { - "tooltip": "", - "name": "Rule 0" - } - ] - }, - "Node_Fluid_Add": { - "tooltip": "", - "name": "Add Fluid", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Fluid brush" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Active" - }, - { - "tooltip": "", - "name": "Inherit velocity" - }, - { - "tooltip": "", - "name": "Density" - } - ] - }, - "Node_VFX_Spawner": { - "tooltip": "", - "name": "Spawner", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "On create" - }, - { - "tooltip": "", - "name": "On step" - }, - { - "tooltip": "", - "name": "On destroy" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particle sprite" - }, - { - "tooltip": "Frames delay between each particle spawn.", - "name": "Spawn delay" - }, - { - "tooltip": "Amount of particle spawn in that frame.", - "name": "Spawn amount" - }, - { - "tooltip": "", - "name": "Spawn area" - }, - { - "tooltip": "", - "name": "Spawn distribution" - }, - { - "tooltip": "", - "name": "Lifespan" - }, - { - "tooltip": "", - "name": "Spawn direction" - }, - { - "tooltip": "", - "name": "Acceleration" - }, - { - "tooltip": "", - "name": "Orientation" - }, - { - "tooltip": "", - "name": "Rotational speed" - }, - { - "tooltip": "", - "name": "Spawn scale" - }, - { - "tooltip": "", - "name": "Scale over time" - }, - { - "tooltip": "", - "name": "Color over lifetime" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Alpha over time" - }, - { - "tooltip": "Make the particle rotates to follow its movement.", - "name": "Rotate by direction" - }, - { - "tooltip": "", - "name": "Spawn type" - }, - { - "tooltip": "", - "name": "Spawn size" - }, - { - "tooltip": "", - "name": "Spawn velocity" - }, - { - "tooltip": "", - "name": "Gravity" - }, - { - "tooltip": "", - "name": "Wiggle" - }, - { - "tooltip": "", - "name": "Loop" - }, - { - "tooltip": "Whether to select image from an array in order, at random, or treat array as animation.", - "name": "Surface array" - }, - { - "tooltip": "", - "name": "Animation speed" - }, - { - "tooltip": "", - "name": "Scatter" - }, - { - "tooltip": "", - "name": "Boundary data" - }, - { - "tooltip": "", - "name": "On animation end" - }, - { - "tooltip": "", - "name": "Spawn" - }, - { - "tooltip": "", - "name": "Random blend" - }, - { - "tooltip": "Make particle move away from the spawn center.", - "name": "Directed from center" - }, - { - "tooltip": "", - "name": "Distribution map" - }, - { - "tooltip": "", - "name": "Distribution data" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Gravity direction" - }, - { - "tooltip": "", - "name": "Turning" - }, - { - "tooltip": "Apply randomized 1, -1 multiplier to the turning speed.", - "name": "Turn both directions" - }, - { - "tooltip": "", - "name": "Turn scale with speed" - }, - { - "tooltip": "", - "name": "Spawn trigger" - }, - { - "tooltip": "How often the 'on step' event is triggered.\nWith 1 being trigger every frame, 2 means triggered once every 2 frames.", - "name": "Step interval" - } - ] - }, - "Node_Path_Anchor": { - "tooltip": "", - "name": "Path Anchor", - "outputs": [ - { - "tooltip": "", - "name": "Anchor" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Postion" - }, - { - "tooltip": "", - "name": "Control point 1" - }, - { - "tooltip": "", - "name": "Control point 2" - }, - { - "tooltip": "", - "name": "Mirror control point" - } - ] - }, - "Node_Image_Sequence": { - "tooltip": "Load multiple images from your computer as array.", - "name": "Image Array", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Paths" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Padding" - }, - { - "tooltip": "", - "name": "Canvas size" - }, - { - "tooltip": "", - "name": "Sizing method" - } - ] - }, - "Node_Json_File_Read": { - "tooltip": "Load .json file using keys.", - "name": "JSON File In", - "outputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Struct" - }, - { - "tooltip": "", - "name": "Values" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Key" - } - ] - }, - "Node_Iterator_Each_Output": { - "tooltip": "", - "name": "Output", - "outputs": [ - { - "tooltip": "", - "name": "Preview" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Value out" - } - ] - }, - "Node_3D_Sphere": { - "tooltip": "", - "name": "3D Sphere", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" - }, - { - "tooltip": "", - "name": "3D vertex" - } - ], - "inputs": [ - { - "tooltip": "Amount of polygon in X and Y axis.", - "name": "Subdivisions" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render rotation" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Textures" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - } - ] - }, - "Node_Vector_Cross_3D": { - "tooltip": "", - "name": "Cross product 3D", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Point 1" - }, - { - "tooltip": "", - "name": "Point 2" - } - ] - }, - "Node_Color_Data": { - "tooltip": "Get data (rgb, hsv, brightness) from color.", - "name": "Color Data", - "outputs": [ - { - "tooltip": "", - "name": "Red" - }, - { - "tooltip": "", - "name": "Green" - }, - { - "tooltip": "", - "name": "Blue" - }, - { - "tooltip": "", - "name": "Hue" - }, - { - "tooltip": "", - "name": "Saturation" - }, - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Brightness" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Normalize" - } - ] - }, - "Node_Array_Zip": { - "tooltip": "", - "name": "Array Zip", - "outputs": [ - { - "tooltip": "", - "name": "Output" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Value" - } - ] - }, - "Node_Strand_Collision": { - "tooltip": "", - "name": "Strand Collision", - "outputs": [ - { - "tooltip": "", - "name": "Strand" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Strand" - }, - { - "tooltip": "", - "name": "Collision mesh" - } - ] - }, - "Node_Threshold": { - "tooltip": "Set a threshold where pixel darker will becomes black, and brighter to white. Also works with alpha.", - "name": "Threshold", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Mode" - }, - { - "tooltip": "", - "name": "Threshold" - }, - { - "tooltip": "", - "name": "Smoothness" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_3D_Cone": { - "tooltip": "", - "name": "3D Cone", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" - }, - { - "tooltip": "", - "name": "3D vertex" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render rotation" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Sides" - }, - { - "tooltip": "", - "name": "Textures base" - }, - { - "tooltip": "", - "name": "Textures side" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - } - ] - }, - "Node_Outline": { - "tooltip": "Add border to the image.", - "name": "Outline", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Outline" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Width" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "Blend outline color with the original color.", - "name": "Blend" - }, - { - "tooltip": "", - "name": "Blend alpha" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Anti alising" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "Shift outline inside, outside the shape.", - "name": "Start" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Image_Sheet": { - "tooltip": "Cut up spritesheet into animation or image array.", - "name": "Splice Spritesheet", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Atlas Data" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Sprite size" - }, - { - "tooltip": "", - "name": "Row" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Offset" - }, - { - "tooltip": "", - "name": "Spacing" - }, - { - "tooltip": "", - "name": "Padding" - }, - { - "tooltip": "", - "name": "Output" - }, - { - "tooltip": "", - "name": "Animation speed" - }, - { - "tooltip": "", - "name": "Orientation" - }, - { - "tooltip": "Automatically set amount based on sprite size.", - "name": "Auto fill" - }, - { - "tooltip": "", - "name": "Sync animation" - }, - { - "tooltip": "", - "name": "Filter empty output" - }, - { - "tooltip": "", - "name": "Filtered Pixel" - }, - { - "tooltip": "", - "name": "Filtered Color" - } - ] - }, - "Node_Fluid_Turbulence": { - "tooltip": "", - "name": "Turbulence", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Effect area" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Mode" - } - ] - }, - "Node_Iterator_Filter_Output": { - "tooltip": "", - "name": "Output", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Result" - } - ] - }, - "Node_ASE_File_Read": { - "tooltip": "Load Aseprite file with support for layers, tags.", - "name": "ASE File In", - "outputs": [ - { - "tooltip": "", - "name": "Output" - }, - { - "tooltip": "", - "name": "Content" - }, - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Palette" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Generate layers" - }, - { - "tooltip": "", - "name": "Current tag" - } - ] - }, - "Node_Gradient_Replace_Color": { - "tooltip": "", - "name": "Gradient Replace", - "outputs": [ - { - "tooltip": "", - "name": "Gradient" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Gradient" - }, - { - "tooltip": "", - "name": "Color from" - }, - { - "tooltip": "", - "name": "Color to" - }, - { - "tooltip": "", - "name": "Threshold" - } - ] - }, - "Node_Array_Reverse": { - "tooltip": "", - "name": "Array Reverse", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - } - ] - }, - "Node_Chromatic_Aberration": { - "tooltip": "Apply chromatic aberration effect to the image.", - "name": "Chromatic Aberration", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Path_Builder": { - "tooltip": "Create path from array of vec2 points.", - "name": "Path Builder", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Point array" - }, - { - "tooltip": "If set to true, will draw a single path from one point to another. If not set will treat each pair of points as an individual line.", - "name": "Connected" - } - ] - }, - "Node_Canvas": { - "tooltip": "Draw on surface using brush, eraser, etc.", - "name": "Canvas", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Preview" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Brush size" - }, - { - "tooltip": "", - "name": "Fill threshold" - }, - { - "tooltip": "", - "name": "Fill type" - }, - { - "tooltip": "", - "name": "Draw preview overlay" - }, - { - "tooltip": "", - "name": "Brush" - }, - { - "tooltip": "", - "name": "Surface amount" - }, - { - "tooltip": "", - "name": "Background" - }, - { - "tooltip": "", - "name": "Background alpha" - }, - { - "tooltip": "", - "name": "Render background" - } - ] - }, - "Node_Noise_Simplex": { - "tooltip": "Generate simplex noise, similiar to perlin noise with better fidelity but non-tilable.", - "name": "Simplex Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Position" + "name": "Surface out", + "tooltip": "" }, { - "tooltip": "", - "name": "Scale" + "name": "3D scene", + "tooltip": "" }, { - "tooltip": "", - "name": "Iteration" + "name": "Normal pass", + "tooltip": "" }, { - "tooltip": "", - "name": "Color mode" - }, - { - "tooltip": "", - "name": "Color R range" - }, - { - "tooltip": "", - "name": "Color G range" - }, - { - "tooltip": "", - "name": "Color B range" - } - ] - }, - "Node_VFX_Repel": { - "tooltip": "", - "name": "Repel", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Falloff distance" - }, - { - "tooltip": "", - "name": "Effect Vector" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Rotate particle" - }, - { - "tooltip": "", - "name": "Scale particle" - } - ] - }, - "Node_Condition": { - "tooltip": "Given a condition, output one value if true, another value is false.", - "name": "Condition", - "outputs": [ - { - "tooltip": "", - "name": "Result" - }, - { - "tooltip": "", - "name": "Bool" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Check value" - }, - { - "tooltip": "", - "name": "Condition" - }, - { - "tooltip": "", - "name": "Compare to" - }, - { - "tooltip": "", - "name": "True" - }, - { - "tooltip": "", - "name": "False" - }, - { - "tooltip": "", - "name": "Eval mode" - }, - { - "tooltip": "", - "name": "Boolean" - }, - { - "tooltip": "", - "name": "Text 1" - }, - { - "tooltip": "", - "name": "Text 2" - } - ] - }, - "Node_Array_Get": { - "tooltip": "", - "name": "Array Get", - "outputs": [ - { - "tooltip": "", - "name": "Value" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Index" - }, - { - "tooltip": "", - "name": "Overflow" - } - ] - }, - "Node_Glow": { - "tooltip": "Apply glow to the border of the image.", - "name": "Glow", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Border" - }, - { - "tooltip": "", - "name": "Size" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Plot_Linear": { - "tooltip": "Plot graph or bar chart from array of number.", - "name": "Bar \/ Graph", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" + "name": "3D vertex", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Data" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Sample frequency" - }, - { - "tooltip": "", - "name": "Origin" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Base Color" - }, - { - "tooltip": "", - "name": "Graph Thickness" - }, - { - "tooltip": "", - "name": "Use Background" - }, - { - "tooltip": "", - "name": "Background" - }, - { - "tooltip": "", - "name": "Direction" - }, - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "Value Offset" - }, - { - "tooltip": "", - "name": "Color Over Sample" - }, - { - "tooltip": "", - "name": "Trim mode" - }, - { - "tooltip": "", - "name": "Window Size" - }, - { - "tooltip": "", - "name": "Window Offset" - }, - { - "tooltip": "", - "name": "Spacing" + "name": "Sides", + "tooltip": "" }, { - "tooltip": "", - "name": "Bar Width" + "name": "Thickness", + "tooltip": "" }, { - "tooltip": "", - "name": "Rounded Bar" + "name": "Dimension", + "tooltip": "" }, { - "tooltip": "", - "name": "Path" + "name": "Render position", + "tooltip": "" }, { - "tooltip": "", - "name": "Flip Value" + "name": "Render rotation", + "tooltip": "" }, { - "tooltip": "", - "name": "Loop" + "name": "Render scale", + "tooltip": "" }, { - "tooltip": "", - "name": "Smooth" - } - ] - }, - "Node_Shape": { - "tooltip": "Draw simple shapes using signed distance field.", - "name": "Shape", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" + "name": "Textures top", + "tooltip": "" }, { - "tooltip": "", - "name": "Background" + "name": "Textures bottom", + "tooltip": "" }, { - "tooltip": "", - "name": "Shape" + "name": "Textures side", + "tooltip": "" }, { - "tooltip": "", - "name": "Position" + "name": "Object scale", + "tooltip": "" }, { - "tooltip": "", - "name": "Sides" + "name": "Light direction", + "tooltip": "" }, { - "tooltip": "", - "name": "Inner radius" + "name": "Light height", + "tooltip": "" }, { - "tooltip": "", - "name": "Anti alising" + "name": "Light intensity", + "tooltip": "" }, { - "tooltip": "", - "name": "Rotation" + "name": "Light color", + "tooltip": "" }, { - "tooltip": "", - "name": "Angle range" + "name": "Ambient color", + "tooltip": "" }, { - "tooltip": "", - "name": "Corner radius" + "name": "Object rotation", + "tooltip": "" }, { - "tooltip": "", - "name": "Shape color" + "name": "Object position", + "tooltip": "" }, { - "tooltip": "", - "name": "Background color" + "name": "Projection", + "tooltip": "" }, { - "tooltip": "", - "name": "Height" + "name": "Field of view", + "tooltip": "" }, { - "tooltip": "", - "name": "Start radius" + "name": "Taper", + "tooltip": "" }, { - "tooltip": "", - "name": "Shape path" + "name": "Scale view with dimension", + "tooltip": "" } ] }, "Node_Mesh_Create_Path": { - "tooltip": "Create mesh from path.", "name": "Path to Mesh", + "tooltip": "Create mesh from path.", "outputs": [ { - "tooltip": "", - "name": "Mesh" + "name": "Mesh", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Path" + "name": "Path", + "tooltip": "" }, { - "tooltip": "", - "name": "Sample" + "name": "Sample", + "tooltip": "" }, { - "tooltip": "", - "name": "Algorithm" + "name": "Algorithm", + "tooltip": "" } ] }, - "Node_Color_Remove": { - "tooltip": "Remove color that match a palette.", - "name": "Remove Color", + "Node_Glow": { + "name": "Glow", + "tooltip": "Apply glow to the border of the image.", "outputs": [ { - "tooltip": "", - "name": "Surface out" + "name": "Surface out", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Surface in" + "name": "Surface in", + "tooltip": "" }, { - "tooltip": "", - "name": "Colors" + "name": "Border", + "tooltip": "" }, { - "tooltip": "", - "name": "Threshold" + "name": "Size", + "tooltip": "" }, { - "tooltip": "", - "name": "Mask" + "name": "Strength", + "tooltip": "" }, { - "tooltip": "", - "name": "Mix" + "name": "Color", + "tooltip": "" }, { - "tooltip": "", - "name": "Active" + "name": "Mask", + "tooltip": "" }, { - "tooltip": "Keep the selected colors and remove the rest.", - "name": "Invert" + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" } ] }, - "Node_Shape_Polygon": { - "tooltip": "Draw simple shapes using triangles.", - "name": "Polygon Shape", + "Node_Shape": { + "name": "Shape", + "tooltip": "Draw simple shapes using signed distance field.", "outputs": [ { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Mesh" - }, - { - "tooltip": "", - "name": "Path" + "name": "Surface out", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Dimension" + "name": "Dimension", + "tooltip": "" }, { - "tooltip": "", - "name": "Background" + "name": "Background", + "tooltip": "" }, { - "tooltip": "", - "name": "Background color" + "name": "Shape", + "tooltip": "" }, { - "tooltip": "", - "name": "Shape color" + "name": "Position", + "tooltip": "" }, { - "tooltip": "", - "name": "Shape" + "name": "Sides", + "tooltip": "" }, { - "tooltip": "", - "name": "Position" + "name": "Inner radius", + "tooltip": "" }, { - "tooltip": "", - "name": "Rotation" + "name": "Anti alising", + "tooltip": "" }, { - "tooltip": "", - "name": "Scale" + "name": "Rotation", + "tooltip": "" }, { - "tooltip": "", - "name": "Sides" + "name": "Angle range", + "tooltip": "" }, { - "tooltip": "", - "name": "Inner radius" + "name": "Corner radius", + "tooltip": "" }, { - "tooltip": "", - "name": "Radius" + "name": "Shape color", + "tooltip": "" }, { - "tooltip": "", - "name": "Teeth" + "name": "Background color", + "tooltip": "" }, { - "tooltip": "", - "name": "Teeth height" + "name": "Height", + "tooltip": "" }, { - "tooltip": "", - "name": "Teeth taper" + "name": "Start radius", + "tooltip": "" }, { - "tooltip": "", - "name": "Angle range" - }, - { - "tooltip": "", - "name": "Round cap" - }, - { - "tooltip": "", - "name": "Mesh" + "name": "Shape path", + "tooltip": "" } ] }, - "Node_VFX_Renderer": { + "Node_Rigid_Object": { + "name": "Object", "tooltip": "", - "name": "Renderer", "outputs": [ { - "tooltip": "", - "name": "Surface out" + "name": "Object", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Output dimension" + "name": "Affect by force", + "tooltip": "" }, { - "tooltip": "Round position to the closest integer value to avoid jittering.", - "name": "Round position" + "name": "Weight", + "tooltip": "" }, { - "tooltip": "", - "name": "Blend mode" + "name": "Contact friction", + "tooltip": "" }, { - "tooltip": "", - "name": "Particles" + "name": "Air resistance", + "tooltip": "" + }, + { + "name": "Rotation resistance", + "tooltip": "" + }, + { + "name": "Shape", + "tooltip": "" + }, + { + "name": "Texture", + "tooltip": "" + }, + { + "name": "Start shape", + "tooltip": "" + }, + { + "name": "Spawn", + "tooltip": "Make object spawn when start." + }, + { + "name": "Generate mesh", + "tooltip": "" + }, + { + "name": "Mesh expansion", + "tooltip": "" } ] }, - "Node_Flood_Fill": { - "tooltip": "Filled connected pixel given position and color.", - "name": "Flood Fill", + "Node_Local_Analyze": { + "name": "Local Analyze", + "tooltip": "Apply non-linear operation (minimum, maximum) on each pixel locally.", "outputs": [ { - "tooltip": "", - "name": "Surface out" + "name": "Surface out", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Surface in" + "name": "Surface in", + "tooltip": "" }, { - "tooltip": "", - "name": "Mask" + "name": "Algorithm", + "tooltip": "" }, { - "tooltip": "", - "name": "Mix" + "name": "Size", + "tooltip": "" }, { - "tooltip": "", - "name": "Active" + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." }, { - "tooltip": "", - "name": "Position" + "name": "Shape", + "tooltip": "" }, { - "tooltip": "", - "name": "Colors" + "name": "Mask", + "tooltip": "" }, { - "tooltip": "", - "name": "Threshold" + "name": "Mix", + "tooltip": "" }, { - "tooltip": "", - "name": "Diagonal" + "name": "Active", + "tooltip": "" } ] }, - "Node_Twirl": { - "tooltip": "Twist the image around a mid point.", - "name": "Twirl", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture.", - "name": "Oversample mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_String_Merge": { + "Node_String_Regex_Replace": { + "name": "RegEx Replace", "tooltip": "", - "name": "Combine Text", "outputs": [ { - "tooltip": "", - "name": "Text" + "name": "Results", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Text A" + "name": "Text", + "tooltip": "" }, { - "tooltip": "", - "name": "Text B" - } - ] - }, - "Node_VFX_Vortex": { - "tooltip": "", - "name": "Vortex", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Falloff distance" - }, - { - "tooltip": "", - "name": "Effect Vector" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Rotate particle" - }, - { - "tooltip": "", - "name": "Scale particle" - }, - { - "tooltip": "", - "name": "Attraction force" - }, - { - "tooltip": "", - "name": "Clockwise" - } - ] - }, - "Node_Iterator_Filter_Input": { - "tooltip": "", - "name": "Input", - "outputs": [ - { - "tooltip": "", - "name": "Value in" - } - ], - "inputs": [] - }, - "Node_Noise_Tri": { - "tooltip": "", - "name": "Triangular Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Texture sample" - }, - { - "tooltip": "", - "name": "Oversample mode" - } - ] - }, - "Node_Gradient_Extract": { - "tooltip": "Get palatte and array of key positions from gradient.", - "name": "Gradient Data", - "outputs": [ - { - "tooltip": "", - "name": "Colors" - }, - { - "tooltip": "", - "name": "Positions" - }, - { - "tooltip": "", - "name": "Type" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Gradient" - } - ] - }, - "Node_CSV_File_Write": { - "tooltip": "Save array as .csv file.", - "name": "CSV File Out", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Content" - } - ] - }, - "Node_Path_Transform": { - "tooltip": "", - "name": "Transform Path", - "outputs": [ - { - "tooltip": "", - "name": "Path" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Anchor" - } - ] - }, - "Node_Equation": { - "tooltip": "Evaluate string of equation. With an option for setting variables.", - "name": "Equation", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Equation" - }, - { - "tooltip": "", - "name": "Argument name" - }, - { - "tooltip": "", - "name": "Argument value" - } - ] - }, - "Node_Group_Output": { - "tooltip": "", - "name": "Output", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Value" - }, - { - "tooltip": "", - "name": "Order" - } - ] - }, - "Node_String": { - "tooltip": "", - "name": "Text", - "outputs": [ - { - "tooltip": "", - "name": "Text" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - } - ] - }, - "Node_Sampler": { - "tooltip": "Sample color from an image.", - "name": "Sampler", - "outputs": [ - { - "tooltip": "", - "name": "Color" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "Size of square around the position to sample and average pixel color.", - "name": "Sampling size" - } - ] - }, - "Node_Zigzag": { - "tooltip": "Generate zigzag pattern.", - "name": "Zigzag", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Amount" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Color 1" - }, - { - "tooltip": "", - "name": "Color 2" - }, - { - "tooltip": "", - "name": "Smooth" - } - ] - }, - "Node_Vector4": { - "tooltip": "", - "name": "Vector4", - "outputs": [ - { - "tooltip": "", - "name": "Vector" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "x" - }, - { - "tooltip": "", - "name": "y" - }, - { - "tooltip": "", - "name": "z" - }, - { - "tooltip": "", - "name": "w" - }, - { - "tooltip": "", - "name": "Integer" - } - ] - }, - "Node_Animation_Control": { - "tooltip": "Control animation state with triggers.", - "name": "Animation Control", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Toggle Play \/ Pause" - }, - { - "tooltip": "", - "name": "Pause" - }, - { - "tooltip": "", - "name": "Resume" - }, - { - "tooltip": "", - "name": "Play From Beginning" - }, - { - "tooltip": "", - "name": "Play once" - }, - { - "tooltip": "", - "name": "Skip Frames" - }, - { - "tooltip": "", - "name": "Skip Frames Count" - } - ] - }, - "Node_Strand_Render_Texture": { - "tooltip": "", - "name": "Strand Render Texture", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Strand" - }, - { - "tooltip": "", - "name": "Thickness" - }, - { - "tooltip": "", - "name": "Random color" - }, - { - "tooltip": "", - "name": "Texture" - }, - { - "tooltip": "", - "name": "Seed" - } - ] - }, - "Node_Line": { - "tooltip": "Draw line on an image. Connect path data to it to draw line from path.", - "name": "Line", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Background" - }, - { - "tooltip": "", - "name": "Segment" - }, - { - "tooltip": "", - "name": "Width" - }, - { - "tooltip": "", - "name": "Wiggle" - }, - { - "tooltip": "", - "name": "Random seed" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "Draw line along path.", - "name": "Path" - }, - { - "tooltip": "Range of the path to draw.", - "name": "Range" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Color over length" - }, - { - "tooltip": "", - "name": "Width over length" - }, - { - "tooltip": "Apply the full 'width over length' to the trimmed path.", - "name": "Span width over path" - }, - { - "tooltip": "", - "name": "Round cap" - }, - { - "tooltip": "", - "name": "Round segment" - }, - { - "tooltip": "Apply the full 'color over length' to the trimmed path.", - "name": "Span color over path" - }, - { - "tooltip": "", - "name": "Greyscale over width" - }, - { - "tooltip": "Render pixel perfect 1px line.", - "name": "1px mode" - }, - { - "tooltip": "", - "name": "Texture" - }, - { - "tooltip": "Fix length of each segment instead of segment count.", - "name": "Fix length" - }, - { - "tooltip": "", - "name": "Segment length" - }, - { - "tooltip": "", - "name": "Texture position" - }, - { - "tooltip": "", - "name": "Texture rotation" - }, - { - "tooltip": "", - "name": "Texture scale" - } - ] - }, - "Node_Noise_Hex": { - "tooltip": "", - "name": "Hexagonal Noise", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Scale" - }, - { - "tooltip": "", - "name": "Texture sample" - }, - { - "tooltip": "", - "name": "Oversample mode" - } - ] - }, - "Node_Solid": { - "tooltip": "Create image of a single color.", - "name": "Solid", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Empty" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Use mask dimension" - } - ] - }, - "Node_Wrap_Area": { - "tooltip": "Wrap image to fit area value (x, y, w, h).", - "name": "Area Warp", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_RGB_Channel": { - "tooltip": "Extract RGBA channel on an image, each channel becomes its own image.", - "name": "RGBA Extract", - "outputs": [ - { - "tooltip": "", - "name": "Red" - }, - { - "tooltip": "", - "name": "Green" - }, - { - "tooltip": "", - "name": "Blue" - }, - { - "tooltip": "", - "name": "Alpha" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Output type" - } - ] - }, - "Node_Fluid_Vortex": { - "tooltip": "", - "name": "Vortex", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Radius" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Attraction" + "name": "Regex", + "tooltip": "" }, { - "tooltip": "", - "name": "Mode" + "name": "Replacement", + "tooltip": "" } ] }, "Node_Fluid_Update": { - "tooltip": "", "name": "Update Domain", - "outputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Fluid Domain" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Group": { "tooltip": "", - "name": "Group", - "outputs": [], - "inputs": [] - }, - "Node_Palette_Sort": { - "tooltip": "", - "name": "Sort Palette", "outputs": [ { - "tooltip": "", - "name": "Sorted palette" + "name": "Fluid Domain", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Palette in" + "name": "Fluid Domain", + "tooltip": "" }, { - "tooltip": "", - "name": "Order" - }, - { - "tooltip": "", - "name": "Reverse" - } - ] - }, - "Node_Pin": { - "tooltip": "Craete pin to organize your connection. Can be create by double clicking on a connection line.", - "name": "Pin", - "outputs": [ - { - "tooltip": "", - "name": "Out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "In" - } - ] - }, - "Node_String_Regex_Match": { - "tooltip": "", - "name": "RegEx Match", - "outputs": [ - { - "tooltip": "", - "name": "Results" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Text" - }, - { - "tooltip": "", - "name": "Regex" + "name": "Active", + "tooltip": "" } ] }, "Node_Cache_Array": { - "tooltip": "Store current animation as array. Cache persisted between save.", "name": "Cache Array", + "tooltip": "Store current animation as array. Cache persisted between save.", "outputs": [ { - "tooltip": "", - "name": "Cache array" + "name": "Cache array", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Surface in" + "name": "Surface in", + "tooltip": "" }, { - "tooltip": "Frame index to start caching, set to -1 to start at the first frame.", - "name": "Start frame" + "name": "Start frame", + "tooltip": "Frame index to start caching, set to -1 to start at the first frame." }, { - "tooltip": "Frame index to stop caching (inclusive), set to -1 to stop at the last frame.", - "name": "Stop frame" + "name": "Stop frame", + "tooltip": "Frame index to stop caching (inclusive), set to -1 to stop at the last frame." }, { - "tooltip": "Cache every N frames, set to 1 to cache every frame.", - "name": "Step" + "name": "Step", + "tooltip": "Cache every N frames, set to 1 to cache every frame." } ] }, - "Node_Json_File_Write": { - "tooltip": "Save data to .json file.", - "name": "JSON File Out", + "Node_Noise_Aniso": { + "name": "Anisotropic Noise", + "tooltip": "Generate anisotropic noise.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + } + ] + }, + "Node_Twirl": { + "name": "Twirl", + "tooltip": "Twist the image around a mid point.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_ASE_layer": { + "name": "ASE Layer", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "ASE data", + "tooltip": "" + }, + { + "name": "Use cel dimension", + "tooltip": "" + } + ] + }, + "Node_VFX_Group": { + "name": "VFX", + "tooltip": "Create VFX group, which generate particles that can be manipulated using different force nodes.", + "outputs": [], + "inputs": [] + }, + "Node_Strand_Group": { + "name": "StrandSim", + "tooltip": "Create group for hair simulation.", + "outputs": [], + "inputs": [] + }, + "Node_VFX_Vortex": { + "name": "Vortex", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Falloff distance", + "tooltip": "" + }, + { + "name": "Effect Vector", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Rotate particle", + "tooltip": "" + }, + { + "name": "Scale particle", + "tooltip": "" + }, + { + "name": "Attraction force", + "tooltip": "" + }, + { + "name": "Clockwise", + "tooltip": "" + } + ] + }, + "Node_3D_Cone": { + "name": "3D Cone", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + }, + { + "name": "3D vertex", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render rotation", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Sides", + "tooltip": "" + }, + { + "name": "Textures base", + "tooltip": "" + }, + { + "name": "Textures side", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + } + ] + }, + "Node_Palette_Replace": { + "name": "Palette Replace", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Palette in", + "tooltip": "" + }, + { + "name": "Palette from", + "tooltip": "" + }, + { + "name": "Palette to", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "" + } + ] + }, + "Node_Sampler": { + "name": "Sampler", + "tooltip": "Sample color from an image.", + "outputs": [ + { + "name": "Color", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Sampling size", + "tooltip": "Size of square around the position to sample and average pixel color." + } + ] + }, + "Node_Area": { + "name": "Area", + "tooltip": "", + "outputs": [ + { + "name": "Area", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Postion", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + }, + { + "name": "Shape", + "tooltip": "" + } + ] + }, + "Node_Blur_Zoom": { + "name": "Zoom Blur", + "tooltip": "Blur image by zooming in\/out from a mid point.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Zoom mode", + "tooltip": "" + }, + { + "name": "Blur mask", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Fluid_Repulse": { + "name": "Repulse", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + } + ] + }, + "Node_Websocket_Receiver": { + "name": "Websocket Receiver", + "tooltip": "Create websocket server to receive data from the network.", + "outputs": [ + { + "name": "Data", + "tooltip": "" + }, + { + "name": "Receive data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Port", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Array_Find": { + "name": "Array Find", + "tooltip": "", + "outputs": [ + { + "name": "Index", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + } + ] + }, + "Node_Number": { + "name": "Number", + "tooltip": "", + "outputs": [ + { + "name": "Number", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Integer", + "tooltip": "" + }, + { + "name": "Display", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Step", + "tooltip": "" + } + ] + }, + "Node_Print": { + "name": "Print", + "tooltip": "Display text to notification.", "outputs": [], "inputs": [ { - "tooltip": "", - "name": "Path" + "name": "Active", + "tooltip": "" }, { - "tooltip": "", - "name": "Struct" - }, - { - "tooltip": "", - "name": "Key" - }, - { - "tooltip": "", - "name": "value" + "name": "Text", + "tooltip": "" } ] }, - "Node_Struct": { + "Node_Flip": { + "name": "Flip", + "tooltip": "Flip image horizontally or vertically.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Axis", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_3D_Obj": { + "name": "3D Object", + "tooltip": "Load .obj file from your computer as a 3D object.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Generate", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render rotation", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Flip UV", + "tooltip": "Flip UV axis, can be use to fix some texture mapping error." + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + } + ] + }, + "Node_Greyscale": { + "name": "Greyscale", + "tooltip": "Convert color image to greyscale.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Brightness", + "tooltip": "" + }, + { + "name": "Contrast", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_VFX_Accelerate": { + "name": "Accelerate", "tooltip": "", - "name": "Struct", "outputs": [ { - "tooltip": "", - "name": "Struct" + "name": "Particles", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Key" + "name": "Particles", + "tooltip": "" }, { - "tooltip": "", - "name": "value" + "name": "Area", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Falloff distance", + "tooltip": "" + }, + { + "name": "Effect Vector", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Rotate particle", + "tooltip": "" + }, + { + "name": "Scale particle", + "tooltip": "" } ] }, - "Node_Path_Shift": { - "tooltip": "Move path along its normal.", - "name": "Shift Path", + "Node_Stack": { + "name": "Stack", + "tooltip": "Place image next to each other linearly, or on top of each other.", "outputs": [ { - "tooltip": "", - "name": "Path" + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Atlas data", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Path" + "name": "Axis", + "tooltip": "" }, { - "tooltip": "", - "name": "Distance" + "name": "Align", + "tooltip": "" + }, + { + "name": "Spacing", + "tooltip": "" + }, + { + "name": "Input", + "tooltip": "" } ] }, - "Node_Boolean": { + "Node_Stripe": { + "name": "Stripe", + "tooltip": "Generate stripe pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Blend", + "tooltip": "Smoothly blend between each stripe." + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Random", + "tooltip": "" + }, + { + "name": "Random color", + "tooltip": "" + }, + { + "name": "Colors", + "tooltip": "" + }, + { + "name": "Color 1", + "tooltip": "" + }, + { + "name": "Color 2", + "tooltip": "" + } + ] + }, + "Node_Base_Convert": { + "name": "Convert Base", "tooltip": "", - "name": "Boolean", "outputs": [ { - "tooltip": "", - "name": "Boolean" + "name": "Result", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Value" + "name": "Value", + "tooltip": "" + }, + { + "name": "Base from", + "tooltip": "" + }, + { + "name": "Base to", + "tooltip": "" } ] }, - "Node_Websocket_Sender": { - "tooltip": "Create websocket server to send data to the network.", - "name": "Websocket Sender", - "outputs": [], - "inputs": [ - { - "tooltip": "", - "name": "Port" - }, - { - "tooltip": "", - "name": "Data type" - }, - { - "tooltip": "", - "name": "Struct" - }, - { - "tooltip": "", - "name": "Surface" - }, - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Target" - } - ] - }, - "Node_Strand_Force_Apply": { + "Node_Strand_Break": { + "name": "Strand Break", "tooltip": "", - "name": "Strand Force Apply", "outputs": [ { - "tooltip": "", - "name": "Strand" + "name": "Strand", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Strand" + "name": "Strand", + "tooltip": "" }, { - "tooltip": "", - "name": "Shape" + "name": "Shape", + "tooltip": "" }, { - "tooltip": "", - "name": "Position" + "name": "Position", + "tooltip": "" }, { - "tooltip": "", - "name": "Range" + "name": "Range", + "tooltip": "" }, { - "tooltip": "", - "name": "Direction" + "name": "Direction", + "tooltip": "" }, { - "tooltip": "", - "name": "Falloff" + "name": "Falloff", + "tooltip": "" }, { - "tooltip": "", - "name": "Strength" + "name": "Chance", + "tooltip": "" }, { - "tooltip": "", - "name": "Turbulence" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "", - "name": "Turbulence frequency" - }, - { - "tooltip": "", - "name": "Turbulence detail" - } - ] - }, - "Node_2D_light": { - "tooltip": "Apply different shaped light on the image.", - "name": "2D Light", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Light only" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Light shape" - }, - { - "tooltip": "", - "name": "Center" - }, - { - "tooltip": "", - "name": "Range" - }, - { - "tooltip": "", - "name": "Intensity" - }, - { - "tooltip": "", - "name": "Color" - }, - { - "tooltip": "", - "name": "Start" - }, - { - "tooltip": "", - "name": "Finish" - }, - { - "tooltip": "", - "name": "Sweep" - }, - { - "tooltip": "", - "name": "Sweep end" - }, - { - "tooltip": "", - "name": "Banding" - }, - { - "tooltip": "Control how light fade out over distance.", - "name": "Attenuation" - }, - { - "tooltip": "", - "name": "Radial banding" - }, - { - "tooltip": "", - "name": "Radial start" - }, - { - "tooltip": "", - "name": "Radial band ratio" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Array_Add": { - "tooltip": "", - "name": "Array Add", - "outputs": [ - { - "tooltip": "", - "name": "Output" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - }, - { - "tooltip": "", - "name": "Spread array" - }, - { - "tooltip": "", - "name": "Value" - } - ] - }, - "Node_Strand_Render": { - "tooltip": "", - "name": "Strand Render", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Strand" - }, - { - "tooltip": "", - "name": "Thickness" - }, - { - "tooltip": "", - "name": "Thickness over length" - }, - { - "tooltip": "", - "name": "Random color" - }, - { - "tooltip": "", - "name": "Color over length" - }, - { - "tooltip": "", - "name": "Seed" - }, - { - "tooltip": "Render extra strands between the real strands.", - "name": "Child" - } - ] - }, - "Node_Sprite_Stack": { - "tooltip": "Create sprite stack either from repeating a single image or stacking different images using array.", - "name": "Sprite Stack", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Base shape" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Stack amount" - }, - { - "tooltip": "", - "name": "Stack shift" - }, - { - "tooltip": "", - "name": "Position" - }, - { - "tooltip": "", - "name": "Rotation" - }, - { - "tooltip": "", - "name": "Stack blend" - }, - { - "tooltip": "Alpha value for the last copy.", - "name": "Alpha end" - }, - { - "tooltip": "Make each copy move the original image.", - "name": "Move base" - } - ] - }, - "Node_Trail": { - "tooltip": "Blend animation by filling in the pixel 'in-between' two or more frames.", - "name": "Trail", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "Trail UV" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Max life" - }, - { - "tooltip": "", - "name": "Loop" - }, - { - "tooltip": "Maximum distance to search for movement, set to -1 to search the entire image.", - "name": "Max distance" - }, - { - "tooltip": "Make trail track pixels of the same color, instead of the closet pixels.", - "name": "Match color" - }, - { - "tooltip": "Blend color between two pixel smoothly.", - "name": "Blend color" - }, - { - "tooltip": "", - "name": "Alpha over life" - } - ] - }, - "Node_Color_RGB": { - "tooltip": "Create color from RGB value.", - "name": "RGB Color", - "outputs": [ - { - "tooltip": "", - "name": "Color" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Red" - }, - { - "tooltip": "", - "name": "Green" - }, - { - "tooltip": "", - "name": "Blue" - }, - { - "tooltip": "", - "name": "Normalized" - } - ] - }, - "Node_Level": { - "tooltip": "Adjust brightness of an image by changing its brightness range.", - "name": "Level", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "White" - }, - { - "tooltip": "", - "name": "Red" - }, - { - "tooltip": "", - "name": "Green" - }, - { - "tooltip": "", - "name": "Blue" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Image_Animated": { - "tooltip": "Load multiple images from your computer as animation.", - "name": "Animation", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Path" - }, - { - "tooltip": "", - "name": "Padding" - }, - { - "tooltip": "Stretch animation speed to match project length.", - "name": "Stretch frame" - }, - { - "tooltip": "", - "name": "Frame duration" - }, - { - "tooltip": "", - "name": "Animation end" - }, - { - "tooltip": "", - "name": "Set animation length to match" - } - ] - }, - "Node_Math": { - "tooltip": "", - "name": "Math", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "a" - }, - { - "tooltip": "", - "name": "b" - }, - { - "tooltip": "", - "name": "Degree angle" - }, - { - "tooltip": "", - "name": "To integer" - }, - { - "tooltip": "", - "name": "Amount" - } - ] - }, - "Node_Move_Point": { - "tooltip": "", - "name": "Translate Point", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Point" - }, - { - "tooltip": "", - "name": "Mode" - }, - { - "tooltip": "", - "name": "Shift" - }, - { - "tooltip": "", - "name": "Direction" - }, - { - "tooltip": "", - "name": "Distance" - } - ] - }, - "Node_Dither": { - "tooltip": "Reduce color and use dithering to preserve original color.", - "name": "Dither", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Palette" - }, - { - "tooltip": "", - "name": "Pattern" - }, - { - "tooltip": "", - "name": "Dither map" - }, - { - "tooltip": "", - "name": "Contrast" - }, - { - "tooltip": "", - "name": "Contrast map" - }, - { - "tooltip": "", - "name": "Mode" - }, - { - "tooltip": "", - "name": "Mask" - }, - { - "tooltip": "", - "name": "Mix" - }, - { - "tooltip": "", - "name": "Active" - } - ] - }, - "Node_Combine_RGB": { - "tooltip": "Combine 4 image in to one. Each image use to control RGBA channel.", - "name": "RGBA Combine", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Red" - }, - { - "tooltip": "", - "name": "Green" - }, - { - "tooltip": "", - "name": "Blue" - }, - { - "tooltip": "", - "name": "Alpha" - }, - { - "tooltip": "", - "name": "Sampling type" - } - ] - }, - "Node_Iterate_Sort": { - "tooltip": "Sort array using node graph.", - "name": "Sort Array", - "outputs": [ - { - "tooltip": "", - "name": "Array" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Array" - } - ] - }, - "Node_VFX_Destroy": { - "tooltip": "", - "name": "Destroy", - "outputs": [ - { - "tooltip": "", - "name": "Particles" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Particles" - }, - { - "tooltip": "", - "name": "Area" - }, - { - "tooltip": "", - "name": "Falloff" - }, - { - "tooltip": "", - "name": "Falloff distance" - }, - { - "tooltip": "", - "name": "Effect Vector" - }, - { - "tooltip": "", - "name": "Strength" - }, - { - "tooltip": "", - "name": "Rotate particle" - }, - { - "tooltip": "", - "name": "Scale particle" - } - ] - }, - "Node_9Slice": { - "tooltip": "Cut image into 3x3 parts, and scale\/repeat only the middle part.", - "name": "Nine Slice", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Splice" - }, - { - "tooltip": "", - "name": "Filling modes" - } - ] - }, - "Node_3D_Extrude": { - "tooltip": "Extrude 2D image into 3D object.", - "name": "3D Extrude", - "outputs": [ - { - "tooltip": "", - "name": "Surface out" - }, - { - "tooltip": "", - "name": "3D scene" - }, - { - "tooltip": "", - "name": "Normal pass" - }, - { - "tooltip": "", - "name": "3D vertex" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Surface in" - }, - { - "tooltip": "", - "name": "Dimension" - }, - { - "tooltip": "", - "name": "Object position" - }, - { - "tooltip": "", - "name": "Object rotation" - }, - { - "tooltip": "", - "name": "Object scale" - }, - { - "tooltip": "", - "name": "Render position" - }, - { - "tooltip": "", - "name": "Render rotation" - }, - { - "tooltip": "", - "name": "Render scale" - }, - { - "tooltip": "", - "name": "Manual generate" - }, - { - "tooltip": "", - "name": "Light direction" - }, - { - "tooltip": "", - "name": "Light height" - }, - { - "tooltip": "", - "name": "Light intensity" - }, - { - "tooltip": "", - "name": "Light color" - }, - { - "tooltip": "", - "name": "Ambient color" - }, - { - "tooltip": "", - "name": "Height map" - }, - { - "tooltip": "", - "name": "Always update" - }, - { - "tooltip": "", - "name": "Projection" - }, - { - "tooltip": "", - "name": "Field of view" - }, - { - "tooltip": "", - "name": "Scale view with dimension" - } - ] - }, - "Node_Compare": { - "tooltip": "", - "name": "Compare", - "outputs": [ - { - "tooltip": "", - "name": "Result" - } - ], - "inputs": [ - { - "tooltip": "", - "name": "Type" - }, - { - "tooltip": "", - "name": "a" - }, - { - "tooltip": "", - "name": "b" + "name": "Seed", + "tooltip": "" } ] }, "Node_Erode": { - "tooltip": "Remove pixel that are close to the border of the image.", "name": "Erode", + "tooltip": "Remove pixel that are close to the border of the image.", "outputs": [ { - "tooltip": "", - "name": "Surface out" + "name": "Surface out", + "tooltip": "" } ], "inputs": [ { - "tooltip": "", - "name": "Surface in" + "name": "Surface in", + "tooltip": "" }, { - "tooltip": "", - "name": "Width" + "name": "Width", + "tooltip": "" }, { - "tooltip": "", - "name": "Preserve border" + "name": "Preserve border", + "tooltip": "" }, { - "tooltip": "", - "name": "Use alpha" + "name": "Use alpha", + "tooltip": "" }, { - "tooltip": "", - "name": "Mask" + "name": "Mask", + "tooltip": "" }, { - "tooltip": "", - "name": "Mix" + "name": "Mix", + "tooltip": "" }, { - "tooltip": "", - "name": "Active" + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Image_Sheet": { + "name": "Splice Spritesheet", + "tooltip": "Cut up spritesheet into animation or image array.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Atlas Data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Sprite size", + "tooltip": "" + }, + { + "name": "Row", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Offset", + "tooltip": "" + }, + { + "name": "Spacing", + "tooltip": "" + }, + { + "name": "Padding", + "tooltip": "" + }, + { + "name": "Output", + "tooltip": "" + }, + { + "name": "Animation speed", + "tooltip": "" + }, + { + "name": "Orientation", + "tooltip": "" + }, + { + "name": "Auto fill", + "tooltip": "Automatically set amount based on sprite size." + }, + { + "name": "Sync animation", + "tooltip": "" + }, + { + "name": "Filter empty output", + "tooltip": "" + }, + { + "name": "Filtered Pixel", + "tooltip": "" + }, + { + "name": "Filtered Color", + "tooltip": "" + } + ] + }, + "Node_Iterator_Filter_Input": { + "name": "Input", + "tooltip": "", + "outputs": [ + { + "name": "Value in", + "tooltip": "" + } + ], + "inputs": [] + }, + "Node_CSV_File_Read": { + "name": "CSV File In", + "tooltip": "Load .csv as text, number array.", + "outputs": [ + { + "name": "Content", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Convert to number", + "tooltip": "" + } + ] + }, + "Node_Normal": { + "name": "Normal", + "tooltip": "Create normal map using greyscale value as height.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Height", + "tooltip": "" + }, + { + "name": "Smooth", + "tooltip": "Include diagonal pixel in normal calculation, which leads to smoother output." + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_ASE_File_Read": { + "name": "ASE File In", + "tooltip": "Load Aseprite file with support for layers, tags.", + "outputs": [ + { + "name": "Output", + "tooltip": "" + }, + { + "name": "Content", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Palette", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Generate layers", + "tooltip": "" + }, + { + "name": "Current tag", + "tooltip": "" + } + ] + }, + "Node_3D_Displace": { + "name": "3D Displace", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + }, + { + "name": "3D vertex", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "3D vertex", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + }, + { + "name": "Displacement map", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + } + ] + }, + "Node_String_Split": { + "name": "Split Text", + "tooltip": "", + "outputs": [ + { + "name": "Text", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Delimiter", + "tooltip": "Character that used to split text,\nleave blank to create character array." + } + ] + }, + "Node_Strand_Force_Apply": { + "name": "Strand Force Apply", + "tooltip": "", + "outputs": [ + { + "name": "Strand", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Strand", + "tooltip": "" + }, + { + "name": "Shape", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Turbulence", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Turbulence frequency", + "tooltip": "" + }, + { + "name": "Turbulence detail", + "tooltip": "" + } + ] + }, + "Node_Color_HSV": { + "name": "HSV Color", + "tooltip": "Create color from HSV value.", + "outputs": [ + { + "name": "Color", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Hue", + "tooltip": "" + }, + { + "name": "Saturation", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Normalized", + "tooltip": "" + } + ] + }, + "Node_Transform": { + "name": "Transform", + "tooltip": "Move, rotate, and scale image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Anchor", + "tooltip": "" + }, + { + "name": "Relative anchor", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Render Mode", + "tooltip": "" + }, + { + "name": "Rotate by velocity", + "tooltip": "Make the surface rotates to follow its movement." + }, + { + "name": "Output dimension type", + "tooltip": "" + }, + { + "name": "Round position", + "tooltip": "Round position to the closest integer value to avoid jittering." + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Counter": { + "name": "Frame Index", + "tooltip": "Output current frame as frame index, or animation progress (0 - 1).", + "outputs": [ + { + "name": "Value", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Start", + "tooltip": "" + }, + { + "name": "Speed", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "Counting mode\r\n - Frame count: Count value up\/down per frame.\r\n - Animation progress: Count from 0 (first frame) to 1 (last frame). " + } + ] + }, + "Node_String": { + "name": "Text", + "tooltip": "", + "outputs": [ + { + "name": "Text", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + } + ] + }, + "Node_Skew": { + "name": "Skew", + "tooltip": "Skew image horizontally, or vertically.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Axis", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Wrap", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Particle": { + "name": "Particle", + "tooltip": "Generate particle effect.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particle sprite", + "tooltip": "" + }, + { + "name": "Spawn delay", + "tooltip": "Frames delay between each particle spawn." + }, + { + "name": "Spawn amount", + "tooltip": "Amount of particle spawn in that frame." + }, + { + "name": "Spawn area", + "tooltip": "" + }, + { + "name": "Spawn distribution", + "tooltip": "" + }, + { + "name": "Lifespan", + "tooltip": "" + }, + { + "name": "Spawn direction", + "tooltip": "" + }, + { + "name": "Acceleration", + "tooltip": "" + }, + { + "name": "Orientation", + "tooltip": "" + }, + { + "name": "Rotational speed", + "tooltip": "" + }, + { + "name": "Spawn scale", + "tooltip": "" + }, + { + "name": "Scale over time", + "tooltip": "" + }, + { + "name": "Color over lifetime", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Alpha over time", + "tooltip": "" + }, + { + "name": "Rotate by direction", + "tooltip": "Make the particle rotates to follow its movement." + }, + { + "name": "Spawn type", + "tooltip": "" + }, + { + "name": "Spawn size", + "tooltip": "" + }, + { + "name": "Spawn velocity", + "tooltip": "" + }, + { + "name": "Gravity", + "tooltip": "" + }, + { + "name": "Wiggle", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + }, + { + "name": "Surface array", + "tooltip": "Whether to select image from an array in order, at random, or treat array as animation." + }, + { + "name": "Animation speed", + "tooltip": "" + }, + { + "name": "Scatter", + "tooltip": "" + }, + { + "name": "Boundary data", + "tooltip": "" + }, + { + "name": "On animation end", + "tooltip": "" + }, + { + "name": "Spawn", + "tooltip": "" + }, + { + "name": "Random blend", + "tooltip": "" + }, + { + "name": "Directed from center", + "tooltip": "Make particle move away from the spawn center." + }, + { + "name": "Distribution map", + "tooltip": "" + }, + { + "name": "Distribution data", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Gravity direction", + "tooltip": "" + }, + { + "name": "Turning", + "tooltip": "" + }, + { + "name": "Turn both directions", + "tooltip": "Apply randomized 1, -1 multiplier to the turning speed." + }, + { + "name": "Turn scale with speed", + "tooltip": "" + }, + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Round position", + "tooltip": "Round position to the closest integer value to avoid jittering." + }, + { + "name": "Blend mode", + "tooltip": "" + } + ] + }, + "Node_Colorize": { + "name": "Colorize", + "tooltip": "Map brightness of a pixel to a color from a gradient.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Gradient", + "tooltip": "" + }, + { + "name": "Gradient shift", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Multiply alpha", + "tooltip": "" + } + ] + }, + "Node_Level_Selector": { + "name": "Level Selector", + "tooltip": "Isolate part of the image that falls in the selected brightness range.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Mid point", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Image_Animated": { + "name": "Animation", + "tooltip": "Load multiple images from your computer as animation.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Padding", + "tooltip": "" + }, + { + "name": "Stretch frame", + "tooltip": "Stretch animation speed to match project length." + }, + { + "name": "Frame duration", + "tooltip": "" + }, + { + "name": "Animation end", + "tooltip": "" + }, + { + "name": "Set animation length to match", + "tooltip": "" + } + ] + }, + "Node_Line": { + "name": "Line", + "tooltip": "Draw line on an image. Connect path data to it to draw line from path.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Segment", + "tooltip": "" + }, + { + "name": "Width", + "tooltip": "" + }, + { + "name": "Wiggle", + "tooltip": "" + }, + { + "name": "Random seed", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "Draw line along path." + }, + { + "name": "Range", + "tooltip": "Range of the path to draw." + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Color over length", + "tooltip": "" + }, + { + "name": "Width over length", + "tooltip": "" + }, + { + "name": "Span width over path", + "tooltip": "Apply the full 'width over length' to the trimmed path." + }, + { + "name": "Round cap", + "tooltip": "" + }, + { + "name": "Round segment", + "tooltip": "" + }, + { + "name": "Span color over path", + "tooltip": "Apply the full 'color over length' to the trimmed path." + }, + { + "name": "Greyscale over width", + "tooltip": "" + }, + { + "name": "1px mode", + "tooltip": "Render pixel perfect 1px line." + }, + { + "name": "Texture", + "tooltip": "" + }, + { + "name": "Fix length", + "tooltip": "Fix length of each segment instead of segment count." + }, + { + "name": "Segment length", + "tooltip": "" + }, + { + "name": "Texture position", + "tooltip": "" + }, + { + "name": "Texture rotation", + "tooltip": "" + }, + { + "name": "Texture scale", + "tooltip": "" + } + ] + }, + "Node_Rigid_Object_Spawner": { + "name": "Object Spawner", + "tooltip": "", + "outputs": [ + { + "name": "Object", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Object", + "tooltip": "" + }, + { + "name": "Spawn area", + "tooltip": "" + }, + { + "name": "Spawn type", + "tooltip": "" + }, + { + "name": "Spawn delay", + "tooltip": "" + }, + { + "name": "Spawn amount", + "tooltip": "" + }, + { + "name": "Spawn frame", + "tooltip": "" + }, + { + "name": "Spawn", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + } + ] + }, + "Node_Tunnel_Out": { + "name": "Tunnel Out", + "tooltip": "Receive value from tunnel in of the same key.", + "outputs": [ + { + "name": "Value out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Name", + "tooltip": "" + } + ] + }, + "Node_Blur_Simple": { + "name": "Simple Blur", + "tooltip": "Blur image using simpler algorithm. Allowing for variable blur strength.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Blur mask", + "tooltip": "" + }, + { + "name": "Override color", + "tooltip": "Replace all color while keeping the alpha. Used to\nfix grey outline when bluring transparent pixel." + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Path_Trim": { + "name": "Trim Path", + "tooltip": "", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + } + ] + }, + "Node_Fluid_Render": { + "name": "Render Domain", + "tooltip": "", + "outputs": [ + { + "name": "Fluid", + "tooltip": "" + }, + { + "name": "Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Interpolate", + "tooltip": "" + }, + { + "name": "Draw Domain", + "tooltip": "" + } + ] + }, + "Node_Image_gif": { + "name": "Image GIF", + "tooltip": "Load animated .gif from your computer.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Set animation length to gif", + "tooltip": "" + } + ] + }, + "Node_Blur_Contrast": { + "name": "Contrast Blur", + "tooltip": "Blur only pixel of a similiar color.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "Brightness different to be blur together." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Blur_Directional": { + "name": "Directional Blur", + "tooltip": "Blur image given a direction.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Struct": { + "name": "Struct", + "tooltip": "", + "outputs": [ + { + "name": "Struct", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Key", + "tooltip": "" + }, + { + "name": "value", + "tooltip": "" + } + ] + }, + "Node_Average": { + "name": "Average", + "tooltip": "Average color of every pixels in the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Dilate": { + "name": "Dilate", + "tooltip": "Expand the image around a mid point.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Rigid_Variable": { + "name": "Rigidbody Variable", + "tooltip": "", + "outputs": [ + { + "name": "Positions", + "tooltip": "" + }, + { + "name": "Scales", + "tooltip": "" + }, + { + "name": "Rotations", + "tooltip": "" + }, + { + "name": "Blends", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Velocity", + "tooltip": "" + }, + { + "name": "Center of mass", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Object", + "tooltip": "" + } + ] + }, + "Node_Path_Sample": { + "name": "Sample Path", + "tooltip": "Sample a 2D position from a path", + "outputs": [ + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Ratio", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + } + ] + }, + "Node_String_Trim": { + "name": "Trim Text", + "tooltip": "", + "outputs": [ + { + "name": "Text", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Head", + "tooltip": "" + }, + { + "name": "Tail", + "tooltip": "" + }, + { + "name": "Trim", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "Set to progress to use ratio, where 0 means no change and 1 means the entire length of the text." + } + ] + }, + "Node_2D_light": { + "name": "2D Light", + "tooltip": "Apply different shaped light on the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Light only", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Light shape", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Intensity", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Start", + "tooltip": "" + }, + { + "name": "Finish", + "tooltip": "" + }, + { + "name": "Sweep", + "tooltip": "" + }, + { + "name": "Sweep end", + "tooltip": "" + }, + { + "name": "Banding", + "tooltip": "" + }, + { + "name": "Attenuation", + "tooltip": "Control how light fade out over distance." + }, + { + "name": "Radial banding", + "tooltip": "" + }, + { + "name": "Radial start", + "tooltip": "" + }, + { + "name": "Radial band ratio", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Array_Reverse": { + "name": "Array Reverse", + "tooltip": "", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + } + ] + }, + "Node_String_Get_Char": { + "name": "Get Character", + "tooltip": "", + "outputs": [ + { + "name": "Text", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Index", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + } + ] + }, + "Node_Iterator_Each_Input": { + "name": "Input", + "tooltip": "", + "outputs": [ + { + "name": "Value in", + "tooltip": "" + } + ], + "inputs": [] + }, + "Node_Palette_Extract": { + "name": "Palette Extract", + "tooltip": "Extract palette from an image.", + "outputs": [ + { + "name": "Palette", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Max colors", + "tooltip": "Amount of color in a palette." + }, + { + "name": "Seed", + "tooltip": "Random seed to be used to initialize K-mean algorithm." + }, + { + "name": "Algorithm", + "tooltip": "" + } + ] + }, + "Node_VFX_Attract": { + "name": "Attract", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Falloff distance", + "tooltip": "" + }, + { + "name": "Effect Vector", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Rotate particle", + "tooltip": "" + }, + { + "name": "Scale particle", + "tooltip": "" + } + ] + }, + "Node_Posterize": { + "name": "Posterize", + "tooltip": "Reduce and remap color to match a palette.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Palette", + "tooltip": "" + }, + { + "name": "Use palette", + "tooltip": "" + }, + { + "name": "Colors", + "tooltip": "" + }, + { + "name": "Gamma", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Wrap_Area": { + "name": "Area Warp", + "tooltip": "Wrap image to fit area value (x, y, w, h).", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Atlas_Draw": { + "name": "Draw Atlas", + "tooltip": "Render image atlas to a surface.", + "outputs": [ + { + "name": "Surface", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Atlas", + "tooltip": "" + } + ] + }, + "Node_Color_RGB": { + "name": "RGB Color", + "tooltip": "Create color from RGB value.", + "outputs": [ + { + "name": "Color", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Red", + "tooltip": "" + }, + { + "name": "Green", + "tooltip": "" + }, + { + "name": "Blue", + "tooltip": "" + }, + { + "name": "Normalized", + "tooltip": "" + } + ] + }, + "Node_Gradient_Points": { + "name": "4 Points Gradient", + "tooltip": "Create image from 4 color points.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Center 1", + "tooltip": "" + }, + { + "name": "Color 1", + "tooltip": "" + }, + { + "name": "Center 2", + "tooltip": "" + }, + { + "name": "Color 2", + "tooltip": "" + }, + { + "name": "Center 3", + "tooltip": "" + }, + { + "name": "Color 3", + "tooltip": "" + }, + { + "name": "Center 4", + "tooltip": "" + }, + { + "name": "Color 4", + "tooltip": "" + }, + { + "name": "Use palette", + "tooltip": "" + }, + { + "name": "Palette", + "tooltip": "" + } + ] + }, + "Node_Perlin": { + "name": "Perlin Noise", + "tooltip": "Generate perlin noise.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Iteration", + "tooltip": "" + }, + { + "name": "Tile", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Color mode", + "tooltip": "" + }, + { + "name": "Color R range", + "tooltip": "" + }, + { + "name": "Color G range", + "tooltip": "" + }, + { + "name": "Color B range", + "tooltip": "" + } + ] + }, + "Node_Color_adjust": { + "name": "Color Adjust", + "tooltip": "Adjust brightness, contrast, hue, saturation, value, alpha, and blend image with color.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Color out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Brightness", + "tooltip": "" + }, + { + "name": "Contrast", + "tooltip": "" + }, + { + "name": "Hue", + "tooltip": "" + }, + { + "name": "Saturation", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Blend", + "tooltip": "" + }, + { + "name": "Blend alpha", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Exposure", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Input Type", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + } + ] + }, + "Node_Math": { + "name": "Math", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Type", + "tooltip": "" + }, + { + "name": "a", + "tooltip": "" + }, + { + "name": "b", + "tooltip": "" + }, + { + "name": "Degree angle", + "tooltip": "" + }, + { + "name": "To integer", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + } + ] + }, + "Node_Shadow": { + "name": "Shadow", + "tooltip": "Apply shadow behind the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Grow", + "tooltip": "" + }, + { + "name": "Blur", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Warp": { + "name": "Warp", + "tooltip": "Warp image by freely moving the corners.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Top left", + "tooltip": "" + }, + { + "name": "Top right", + "tooltip": "" + }, + { + "name": "Bottom left", + "tooltip": "" + }, + { + "name": "Bottom right", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Dither": { + "name": "Dither", + "tooltip": "Reduce color and use dithering to preserve original color.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Palette", + "tooltip": "" + }, + { + "name": "Pattern", + "tooltip": "" + }, + { + "name": "Dither map", + "tooltip": "" + }, + { + "name": "Contrast", + "tooltip": "" + }, + { + "name": "Contrast map", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Crop": { + "name": "Crop", + "tooltip": "Crop out image to create smaller ones.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Crop", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Noise": { + "name": "Noise", + "tooltip": "Generate white noise.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Color mode", + "tooltip": "" + }, + { + "name": "Color R range", + "tooltip": "" + }, + { + "name": "Color G range", + "tooltip": "" + }, + { + "name": "Color B range", + "tooltip": "" + } + ] + }, + "Node_Strand_Gravity": { + "name": "Strand Gravity", + "tooltip": "", + "outputs": [ + { + "name": "Strand", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Strand", + "tooltip": "" + }, + { + "name": "Gravity", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + } + ] + }, + "Node_Iterate_Sort": { + "name": "Sort Array", + "tooltip": "Sort array using node graph.", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + } + ] + }, + "Node_Fluid_Group": { + "name": "FluidSim", + "tooltip": "Create group for fluid simulation.", + "outputs": [], + "inputs": [] + }, + "Node_Blur_Bokeh": { + "name": "Lens Blur", + "tooltip": "Create bokeh effect. Blur lighter color in a lens-like manner.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Unicode": { + "name": "Unicode", + "tooltip": "", + "outputs": [ + { + "name": "Character", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Unicode", + "tooltip": "" + } + ] + }, + "Node_String_Join": { + "name": "Join Text", + "tooltip": "", + "outputs": [ + { + "name": "Text", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text array", + "tooltip": "" + }, + { + "name": "Divider", + "tooltip": "" + } + ] + }, + "Node_Trail": { + "name": "Trail", + "tooltip": "Blend animation by filling in the pixel 'in-between' two or more frames.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Trail UV", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Max life", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + }, + { + "name": "Max distance", + "tooltip": "Maximum distance to search for movement, set to -1 to search the entire image." + }, + { + "name": "Match color", + "tooltip": "Make trail track pixels of the same color, instead of the closet pixels." + }, + { + "name": "Blend color", + "tooltip": "Blend color between two pixel smoothly." + }, + { + "name": "Alpha over life", + "tooltip": "" + } + ] + }, + "Node_3D_Transform": { + "name": "3D Transform", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "3D object", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + } + ] + }, + "Node_Iterator_Input": { + "name": "Input", + "tooltip": "", + "outputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Loop entrance", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Display type", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Input type", + "tooltip": "" + }, + { + "name": "Enum label", + "tooltip": "" + }, + { + "name": "Vector size", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + }, + { + "name": "Display preview gizmo", + "tooltip": "" + }, + { + "name": "Step", + "tooltip": "" + }, + { + "name": "Button Label", + "tooltip": "" + } + ] + }, + "Node_Display_Image": { + "name": "Display Image", + "tooltip": "Display image on the graph.", + "outputs": [], + "inputs": [ + { + "name": "Path", + "tooltip": "" + } + ] + }, + "Node_De_Corner": { + "name": "De-Corner", + "tooltip": "Attempt to remove single pixel corner from the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Tolerance", + "tooltip": "" + } + ] + }, + "Node_Atlas_Get": { + "name": "Atlas Get", + "tooltip": "", + "outputs": [ + { + "name": "Surface", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Blend", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Atlas", + "tooltip": "" + } + ] + }, + "Node_VFX_Variable": { + "name": "VFX Variable", + "tooltip": "", + "outputs": [ + { + "name": "Positions", + "tooltip": "" + }, + { + "name": "Scales", + "tooltip": "" + }, + { + "name": "Rotations", + "tooltip": "" + }, + { + "name": "Blending", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Life", + "tooltip": "" + }, + { + "name": "Max life", + "tooltip": "" + }, + { + "name": "Surface", + "tooltip": "" + }, + { + "name": "Velocity", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + } + ] + }, + "Node_Atlas": { + "name": "Pixel Expand", + "tooltip": "Replace transparent pixel with the closet non-transparent pixel.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_FFT": { + "name": "FFT", + "tooltip": "Perform fourier transform on number array.", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Data", + "tooltip": "" + }, + { + "name": "Preprocess Function", + "tooltip": "" + } + ] + }, + "Node_Trigger": { + "name": "Trigger", + "tooltip": "", + "outputs": [ + { + "name": "Trigger", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Trigger", + "tooltip": "" + }, + { + "name": "Trigger", + "tooltip": "" + } + ] + }, + "Node_Iterate_Filter": { + "name": "Filter Array", + "tooltip": "Filter array using condition.", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + } + ] + }, + "Node_Time_Remap": { + "name": "Time Remap", + "tooltip": "Remap image using texture as time map. Where brighter pixel means using pixel from an older frame.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Map", + "tooltip": "" + }, + { + "name": "Max life", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + } + ] + }, + "Node_Corner": { + "name": "Corner", + "tooltip": "Round out sharp corner of the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_De_Stray": { + "name": "De-Stray", + "tooltip": "Attempt to remove orphan pixel.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Tolerance", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_String_Merge": { + "name": "Combine Text", + "tooltip": "", + "outputs": [ + { + "name": "Text", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text A", + "tooltip": "" + }, + { + "name": "Text B", + "tooltip": "" + } + ] + }, + "Node_Vector_Cross_3D": { + "name": "Cross product 3D", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Point 1", + "tooltip": "" + }, + { + "name": "Point 2", + "tooltip": "" + } + ] + }, + "Node_Wiggler": { + "name": "Wiggler", + "tooltip": "Create smooth random value.", + "outputs": [ + { + "name": "Output", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Frequency", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Display", + "tooltip": "" + } + ] + }, + "Node_Group_Input": { + "name": "Input", + "tooltip": "", + "outputs": [ + { + "name": "Value", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Display type", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Input type", + "tooltip": "" + }, + { + "name": "Enum label", + "tooltip": "" + }, + { + "name": "Vector size", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + }, + { + "name": "Display preview gizmo", + "tooltip": "" + }, + { + "name": "Step", + "tooltip": "" + }, + { + "name": "Button Label", + "tooltip": "" + } + ] + }, + "Node_Array_Shift": { + "name": "Array Shift", + "tooltip": "", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + } + ] + }, + "Node_Rigid_Group": { + "name": "RigidSim", + "tooltip": "Create group for rigidbody simulation.", + "outputs": [], + "inputs": [] + }, + "Node_Array_Insert": { + "name": "Array Insert", + "tooltip": "", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Index", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Spread array", + "tooltip": "" + } + ] + }, + "Node_Palette_Sort": { + "name": "Sort Palette", + "tooltip": "", + "outputs": [ + { + "name": "Sorted palette", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Palette in", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + }, + { + "name": "Reverse", + "tooltip": "" + } + ] + }, + "Node_Scatter_Points": { + "name": "Scatter Points", + "tooltip": "Generate array of vector 2 points for scattering.", + "outputs": [ + { + "name": "Points", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Point area", + "tooltip": "" + }, + { + "name": "Point distribution", + "tooltip": "" + }, + { + "name": "Scatter", + "tooltip": "" + }, + { + "name": "Point amount", + "tooltip": "Amount of particle spawn in that frame." + }, + { + "name": "Distribution map", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Fixed position", + "tooltip": "Fix point position, and only select point in the area." + }, + { + "name": "Reference dimension", + "tooltip": "" + } + ] + }, + "Node_Combine_HSV": { + "name": "HSV Combine", + "tooltip": "Combine 4 image in to one. Each image use to control HSVA channel.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Hue", + "tooltip": "" + }, + { + "name": "Saturation", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + } + ] + }, + "Node_Group_Output": { + "name": "Output", + "tooltip": "", + "outputs": [], + "inputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + } + ] + }, + "Node_Surface_Replace": { + "name": "Replace Image", + "tooltip": "", + "outputs": [ + { + "name": "Surface Out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Base Image", + "tooltip": "" + }, + { + "name": "Target Image", + "tooltip": "" + }, + { + "name": "Replacement Image", + "tooltip": "" + }, + { + "name": "Color Threshold", + "tooltip": "How similiar the color need to be in order to be count as matched." + }, + { + "name": "Draw Base Image", + "tooltip": "" + }, + { + "name": "Fast Mode", + "tooltip": "" + }, + { + "name": "Pixel Threshold", + "tooltip": "How many pixel need to me matched to replace with replacement image." + }, + { + "name": "Array mode", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + } + ] + }, + "Node_VFX_Turbulence": { + "name": "Turbulence", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Falloff distance", + "tooltip": "" + }, + { + "name": "Effect Vector", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Rotate particle", + "tooltip": "" + }, + { + "name": "Scale particle", + "tooltip": "" + }, + { + "name": "Turbulence scale", + "tooltip": "" + } + ] + }, + "Node_Grid": { + "name": "Grid", + "tooltip": "Generate grid pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Gap", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Tile color", + "tooltip": "" + }, + { + "name": "Gap color", + "tooltip": "" + }, + { + "name": "Texture", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Shift axis", + "tooltip": "" + }, + { + "name": "Render type", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + } + ] + }, + "Node_Blur": { + "name": "Blur", + "tooltip": "Blur image smoothly.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Override color", + "tooltip": "Replace all color while keeping the alpha. Used to\nfix grey outline when bluring transparent pixel." + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Iterator_Length": { + "name": "Loop amount", + "tooltip": "", + "outputs": [ + { + "name": "Length", + "tooltip": "" + } + ], + "inputs": [] + }, + "Node_Text_File_Read": { + "name": "Text File In", + "tooltip": "Load .txt in as text.", + "outputs": [ + { + "name": "Content", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + } + ] + }, + "Node_Grid_Hex": { + "name": "Hexagonal Grid", + "tooltip": "Generate hexagonal grid pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Gap", + "tooltip": "" + }, + { + "name": "Tile color", + "tooltip": "" + }, + { + "name": "Gap color", + "tooltip": "" + }, + { + "name": "Render type", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Texture", + "tooltip": "" + } + ] + }, + "Node_Path": { + "name": "Path", + "tooltip": "", + "outputs": [ + { + "name": "Position out", + "tooltip": "" + }, + { + "name": "Path data", + "tooltip": "" + }, + { + "name": "Anchors", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path progress", + "tooltip": "Sample position from path." + }, + { + "name": "Loop", + "tooltip": "" + }, + { + "name": "Progress mode", + "tooltip": "" + }, + { + "name": "Round anchor", + "tooltip": "" + } + ] + }, + "Node_Checker": { + "name": "Checker", + "tooltip": "Genearte checkerboard pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Color 1", + "tooltip": "" + }, + { + "name": "Color 2", + "tooltip": "" + } + ] + }, + "Node_Array_Get": { + "name": "Array Get", + "tooltip": "", + "outputs": [ + { + "name": "Value", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Index", + "tooltip": "" + }, + { + "name": "Overflow", + "tooltip": "" + } + ] + }, + "Node_3D_Sphere": { + "name": "3D Sphere", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + }, + { + "name": "3D vertex", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Subdivisions", + "tooltip": "Amount of polygon in X and Y axis." + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render rotation", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Textures", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + } + ] + }, + "Node_Text": { + "name": "Draw Text", + "tooltip": "Draw text on an image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Font", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + }, + { + "name": "Anti-Aliasing ", + "tooltip": "" + }, + { + "name": "Character range", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Fixed dimension", + "tooltip": "" + }, + { + "name": "Horizontal alignment", + "tooltip": "" + }, + { + "name": "Vertical alignment", + "tooltip": "" + }, + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Padding", + "tooltip": "" + } + ] + }, + "Node_Move_Point": { + "name": "Translate Point", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Point", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + }, + { + "name": "Distance", + "tooltip": "" + } + ] + }, + "Node_VFX_Renderer": { + "name": "Renderer", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Round position", + "tooltip": "Round position to the closest integer value to avoid jittering." + }, + { + "name": "Blend mode", + "tooltip": "" + }, + { + "name": "Particles", + "tooltip": "" + } + ] + }, + "Node_Iterator_Index": { + "name": "Index", + "tooltip": "", + "outputs": [ + { + "name": "Loop index", + "tooltip": "" + } + ], + "inputs": [] + }, + "Node_Pixel_Sort": { + "name": "Pixel Sort", + "tooltip": "Sort pixel by brightness in horizontal, or vertial axis.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Iteration", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Alpha_Grey": { + "name": "Alpha to Grey", + "tooltip": "Convert alpha value into solid greyscale.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Path_Shift": { + "name": "Shift Path", + "tooltip": "Move path along its normal.", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Distance", + "tooltip": "" + } + ] + }, + "Node_Fluid_Turbulence": { + "name": "Turbulence", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Effect area", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + } + ] + }, + "Node_Compare": { + "name": "Compare", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Type", + "tooltip": "" + }, + { + "name": "a", + "tooltip": "" + }, + { + "name": "b", + "tooltip": "" + } + ] + }, + "Node_Find_Pixel": { + "name": "Find pixel", + "tooltip": "Get the position of the first pixel with a given color.", + "outputs": [ + { + "name": "Position", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Search color", + "tooltip": "" + } + ] + }, + "Node_VFX_Override": { + "name": "VFX Override", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "Positions", + "tooltip": "" + }, + { + "name": "Rotations", + "tooltip": "" + }, + { + "name": "Scales", + "tooltip": "" + }, + { + "name": "Blend", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Surface", + "tooltip": "" + } + ] + }, + "Node_Color": { + "name": "Color", + "tooltip": "", + "outputs": [ + { + "name": "Color", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Color", + "tooltip": "" + } + ] + }, + "Node_Morph_Surface": { + "name": "Morph Surface", + "tooltip": "Morph pixel bewteen two surfaces.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface from", + "tooltip": "" + }, + { + "name": "Surface to", + "tooltip": "" + }, + { + "name": "Morph amount", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "" + } + ] + }, + "Node_SDF": { + "name": "SDF", + "tooltip": "Create signed distance field using jump flooding algorithm.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Side", + "tooltip": "" + }, + { + "name": "Max distance", + "tooltip": "" + } + ] + }, + "Node_Vector_Split": { + "name": "Vector Split", + "tooltip": "", + "outputs": [ + { + "name": "x", + "tooltip": "" + }, + { + "name": "y", + "tooltip": "" + }, + { + "name": "z", + "tooltip": "" + }, + { + "name": "w", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Vector", + "tooltip": "" + } + ] + }, + "Node_Array": { + "name": "Array", + "tooltip": "", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Spread array", + "tooltip": "" + }, + { + "name": "Input", + "tooltip": "" + } + ] + }, + "Node_Color_Mix": { + "name": "Mix Color", + "tooltip": "", + "outputs": [ + { + "name": "Color", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Color from", + "tooltip": "" + }, + { + "name": "Color to", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + } + ] + }, + "Node_Lua_Global": { + "name": "Lua Global", + "tooltip": "", + "outputs": [ + { + "name": "Execution thread", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Lua code", + "tooltip": 14 + }, + { + "name": "Run order", + "tooltip": "" + }, + { + "name": "Execution thread", + "tooltip": "" + } + ] + }, + "Node_Switch": { + "name": "Switch", + "tooltip": "Given an index, output value base on index matching.", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Index", + "tooltip": "" + }, + { + "name": "Default value", + "tooltip": "" + }, + { + "name": "Case", + "tooltip": "" + }, + { + "name": "value", + "tooltip": "" + } + ] + }, + "Node_Composite": { + "name": "Composite", + "tooltip": "Combine multiple images with controllable position, rotation, scale.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Atlas data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Padding", + "tooltip": "" + }, + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Position 0", + "tooltip": "" + }, + { + "name": "Rotation 0", + "tooltip": "" + }, + { + "name": "Scale 0", + "tooltip": "" + } + ] + }, + "Node_Fluid_Add_Collider": { + "name": "Add Collider", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Collider", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + } + ] + }, + "Node_Invert": { + "name": "Invert", + "tooltip": "Invert color.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Random": { + "name": "Random", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "seed", + "tooltip": "" + }, + { + "name": "from", + "tooltip": "" + }, + { + "name": "to", + "tooltip": "" + } + ] + }, + "Node_HSV_Channel": { + "name": "HSV Extract", + "tooltip": "Extract HSVA channel on an image, each channel becomes its own image.", + "outputs": [ + { + "name": "Hue", + "tooltip": "" + }, + { + "name": "Saturation", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + } + ] + }, + "Node_Path_Anchor": { + "name": "Path Anchor", + "tooltip": "", + "outputs": [ + { + "name": "Anchor", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Postion", + "tooltip": "" + }, + { + "name": "Control point 1", + "tooltip": "" + }, + { + "name": "Control point 2", + "tooltip": "" + }, + { + "name": "Mirror control point", + "tooltip": "" + } + ] + }, + "Node_Alpha_Cutoff": { + "name": "Alpha Cutoff", + "tooltip": "Remove pixel with low alpha value.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Minimum", + "tooltip": "Any pixel with less alpha (more transparent) than this will be removed." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Curve": { + "name": "Curve", + "tooltip": "Adjust brightness of an image using curves.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Brightness", + "tooltip": "" + }, + { + "name": "Red", + "tooltip": "" + }, + { + "name": "Green", + "tooltip": "" + }, + { + "name": "Blue", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_WAV_File_Read": { + "name": "WAV File In", + "tooltip": "Load wav audio file.", + "outputs": [ + { + "name": "Data", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Sample rate", + "tooltip": "" + }, + { + "name": "Channels", + "tooltip": "" + }, + { + "name": "Duration (s)", + "tooltip": "" + }, + { + "name": "Loudness", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Sync lenght", + "tooltip": "" + } + ] + }, + "Node_Flood_Fill": { + "name": "Flood Fill", + "tooltip": "Filled connected pixel given position and color.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Colors", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "" + }, + { + "name": "Diagonal", + "tooltip": "" + } + ] + }, + "Node_Mesh_Warp": { + "name": "Mesh Warp", + "tooltip": "Wrap image by converting it to mesh, and using control points.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Mesh data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Sample", + "tooltip": "Amount of grid subdivision. Higher number means more grid, detail." + }, + { + "name": "Spring Force", + "tooltip": "" + }, + { + "name": "Mesh", + "tooltip": "" + }, + { + "name": "Diagonal Link", + "tooltip": "Include diagonal link to prevent drastic grid deformation." + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Link Strength", + "tooltip": "Link length preservation, setting it to 1 will prevent any stretching, contraction." + }, + { + "name": "Full Mesh", + "tooltip": "" + } + ] + }, + "Node_Grey_Alpha": { + "name": "Grey to Alpha", + "tooltip": "Convert greyscale to alpha value.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Replace color", + "tooltip": "Replace output with solid color." + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Color_Data": { + "name": "Color Data", + "tooltip": "Get data (rgb, hsv, brightness) from color.", + "outputs": [ + { + "name": "Red", + "tooltip": "" + }, + { + "name": "Green", + "tooltip": "" + }, + { + "name": "Blue", + "tooltip": "" + }, + { + "name": "Hue", + "tooltip": "" + }, + { + "name": "Saturation", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Brightness", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Normalize", + "tooltip": "" + } + ] + }, + "Node_Normal_Light": { + "name": "Normal Light", + "tooltip": "Light up the image using normal mapping.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Normal map", + "tooltip": "" + }, + { + "name": "Normal intensity", + "tooltip": "" + }, + { + "name": "Ambient", + "tooltip": "" + }, + { + "name": "Light position", + "tooltip": "" + }, + { + "name": "Light range", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Light type", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Scale": { + "name": "Scale", + "tooltip": "Simple node for scaling image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + }, + { + "name": "Target dimension", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Rigid_Force_Apply": { + "name": "Apply Force", + "tooltip": "", + "outputs": [ + { + "name": "Object", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Object", + "tooltip": "" + }, + { + "name": "Force type", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Torque", + "tooltip": "" + }, + { + "name": "Apply frame", + "tooltip": "Frame index to apply force." + }, + { + "name": "Force", + "tooltip": "" + }, + { + "name": "Scope", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + } + ] + }, + "Node_Array_Zip": { + "name": "Array Zip", + "tooltip": "", + "outputs": [ + { + "name": "Output", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + } + ] + }, + "Node_Json_File_Write": { + "name": "JSON File Out", + "tooltip": "Save data to .json file.", + "outputs": [], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Struct", + "tooltip": "" + }, + { + "name": "Key", + "tooltip": "" + }, + { + "name": "value", + "tooltip": "" + } + ] + }, + "Node_Threshold": { + "name": "Threshold", + "tooltip": "Set a threshold where pixel darker will becomes black, and brighter to white. Also works with alpha.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "" + }, + { + "name": "Smoothness", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Outline": { + "name": "Outline", + "tooltip": "Add border to the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Outline", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Width", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Blend", + "tooltip": "Blend outline color with the original color." + }, + { + "name": "Blend alpha", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Anti alising", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Start", + "tooltip": "Shift outline inside, outside the shape." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Iterator_Filter_Output": { + "name": "Output", + "tooltip": "", + "outputs": [], + "inputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Result", + "tooltip": "" + } + ] + }, + "Node_VFX_Wind": { + "name": "Wind", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Falloff distance", + "tooltip": "" + }, + { + "name": "Effect Vector", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Rotate particle", + "tooltip": "" + }, + { + "name": "Scale particle", + "tooltip": "" + } + ] + }, + "Node_Repeat": { + "name": "Repeat", + "tooltip": "Repeat image multiple times linearly, or in grid pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Pattern", + "tooltip": "" + }, + { + "name": "Repeat position", + "tooltip": "" + }, + { + "name": "Repeat rotation", + "tooltip": "" + }, + { + "name": "Scale multiply", + "tooltip": "" + }, + { + "name": "Angle range", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Start position", + "tooltip": "" + }, + { + "name": "Scale over copy", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "Make each copy follow along path." + }, + { + "name": "Path range", + "tooltip": "Range of the path to follow." + }, + { + "name": "Path shift", + "tooltip": "" + }, + { + "name": "Color over copy", + "tooltip": "" + }, + { + "name": "Alpha over copy", + "tooltip": "" + }, + { + "name": "Array select", + "tooltip": "Whether to select image from an array in order, at random, pr spread or each image to one output." + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Column", + "tooltip": "" + }, + { + "name": "Column shift", + "tooltip": "" + }, + { + "name": "Animator midpoint", + "tooltip": "" + }, + { + "name": "Animator range", + "tooltip": "" + }, + { + "name": "Animator position", + "tooltip": "" + }, + { + "name": "Animator rotation", + "tooltip": "" + }, + { + "name": "Animator scale", + "tooltip": "" + }, + { + "name": "Animator falloff", + "tooltip": "" + }, + { + "name": "Stack", + "tooltip": "Place each copy next to each other, taking surface dimension into account." + }, + { + "name": "Animator blend", + "tooltip": "" + }, + { + "name": "Animator alpha", + "tooltip": "" + } + ] + }, + "Node_Fluid_Domain": { + "name": "Fluid Domain", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Collision", + "tooltip": "" + }, + { + "name": "Material dissipation type", + "tooltip": "" + }, + { + "name": "Material dissipation", + "tooltip": "" + }, + { + "name": "Velocity dissipation type", + "tooltip": "" + }, + { + "name": "Velocity dissipation", + "tooltip": "" + }, + { + "name": "Acceleration", + "tooltip": "" + }, + { + "name": "Material intertia", + "tooltip": "" + }, + { + "name": "Initial pressure", + "tooltip": "" + }, + { + "name": "Material maccormack weight", + "tooltip": "" + }, + { + "name": "Velocity maccormack weight", + "tooltip": "" + }, + { + "name": "Wrap", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + } + ] + }, + "Node_Convolution": { + "name": "Convolution", + "tooltip": "Apply convolution operation on each pixel using a custom 3x3 kernel.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Kernel", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Gradient_Palette": { + "name": "Palette to Gradient", + "tooltip": "Create gradient from palette.", + "outputs": [ + { + "name": "Gradient", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Palette", + "tooltip": "" + }, + { + "name": "Custom positions", + "tooltip": "" + }, + { + "name": "Positions", + "tooltip": "Array of number indicating color position (0 - 1)." + }, + { + "name": "Blending", + "tooltip": "" + } + ] + }, + "Node_Sequence_Anim": { + "name": "Array to Anim", + "tooltip": "Convert array of images into animation.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Speed", + "tooltip": "" + }, + { + "name": "Sequence", + "tooltip": "" + }, + { + "name": "Overflow", + "tooltip": "" + } + ] + }, + "Node_Crop_Content": { + "name": "Crop Content", + "tooltip": "Crop out empty pixel pixel from the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Array", + "tooltip": "Cropping mode for dealing with image array." + }, + { + "name": "Padding", + "tooltip": "Add padding back after crop." + } + ] + }, + "Node_3D_Export": { + "name": "3D Export", + "tooltip": "", + "outputs": [], + "inputs": [ + { + "name": "Vertex data", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "Export location without '.obj' extension." + }, + { + "name": "Export texture", + "tooltip": "" + } + ] + }, + "Node_Strand_Update": { + "name": "Strand Update", + "tooltip": "", + "outputs": [ + { + "name": "Strand", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Strand", + "tooltip": "" + }, + { + "name": "Step", + "tooltip": "" + } + ] + }, + "Node_Rigid_Override": { + "name": "Rigidbody Override", + "tooltip": "", + "outputs": [ + { + "name": "Object", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Object", + "tooltip": "" + }, + { + "name": "Positions", + "tooltip": "" + }, + { + "name": "Scales", + "tooltip": "" + }, + { + "name": "Rotations", + "tooltip": "" + }, + { + "name": "Blends", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Velocity", + "tooltip": "" + } + ] + }, + "Node_Chromatic_Aberration": { + "name": "Chromatic Aberration", + "tooltip": "Apply chromatic aberration effect to the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Path_L_System": { + "name": "L system", + "tooltip": "", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Length", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Starting position", + "tooltip": "" + }, + { + "name": "Iteration", + "tooltip": "" + }, + { + "name": "Starting rule", + "tooltip": 37 + }, + { + "name": "End replacement", + "tooltip": "Replace symbol of the last generated rule, for example a=F to replace all a with F. Use comma to separate different replacements." + }, + { + "name": "Starting angle", + "tooltip": "" + }, + { + "name": "Name 0", + "tooltip": "" + }, + { + "name": "Rule 0", + "tooltip": "" + } + ] + }, + "Node_Display_Text": { + "name": "Display Text", + "tooltip": "Display text on the graph.", + "outputs": [], + "inputs": [ + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Style", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Line width", + "tooltip": "" + } + ] + }, + "Node_Canvas": { + "name": "Canvas", + "tooltip": "Draw on surface using brush, eraser, etc.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Preview", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Brush size", + "tooltip": "" + }, + { + "name": "Fill threshold", + "tooltip": "" + }, + { + "name": "Fill type", + "tooltip": "" + }, + { + "name": "Draw preview overlay", + "tooltip": "" + }, + { + "name": "Brush", + "tooltip": "" + }, + { + "name": "Surface amount", + "tooltip": "" + }, + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Background alpha", + "tooltip": "" + }, + { + "name": "Render background", + "tooltip": "" + } + ] + }, + "Node_VFX_Repel": { + "name": "Repel", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Falloff distance", + "tooltip": "" + }, + { + "name": "Effect Vector", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Rotate particle", + "tooltip": "" + }, + { + "name": "Scale particle", + "tooltip": "" + } + ] + }, + "Node_Solid": { + "name": "Solid", + "tooltip": "Create image of a single color.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Empty", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Use mask dimension", + "tooltip": "" + } + ] + }, + "Node_Condition": { + "name": "Condition", + "tooltip": "Given a condition, output one value if true, another value is false.", + "outputs": [ + { + "name": "Result", + "tooltip": "" + }, + { + "name": "Bool", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Check value", + "tooltip": "" + }, + { + "name": "Condition", + "tooltip": "" + }, + { + "name": "Compare to", + "tooltip": "" + }, + { + "name": "True", + "tooltip": "" + }, + { + "name": "False", + "tooltip": "" + }, + { + "name": "Eval mode", + "tooltip": "" + }, + { + "name": "Boolean", + "tooltip": "" + }, + { + "name": "Text 1", + "tooltip": "" + }, + { + "name": "Text 2", + "tooltip": "" + } + ] + }, + "Node_Feedback_Input": { + "name": "Input", + "tooltip": "", + "outputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Feedback loop", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Display type", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Input type", + "tooltip": "" + }, + { + "name": "Enum label", + "tooltip": "" + }, + { + "name": "Vector size", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + }, + { + "name": "Display preview gizmo", + "tooltip": "" + }, + { + "name": "Step", + "tooltip": "" + }, + { + "name": "Button Label", + "tooltip": "" + } + ] + }, + "Node_Render_Sprite_Sheet": { + "name": "Render Spritesheet", + "tooltip": "Create spritesheet from image array or animation.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Atlas Data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Sprites", + "tooltip": "" + }, + { + "name": "Sprite set", + "tooltip": "" + }, + { + "name": "Frame step", + "tooltip": "Number of frames until next sprite. Can be seen as (Step - 1) frame skip." + }, + { + "name": "Packing type", + "tooltip": "" + }, + { + "name": "Grid column", + "tooltip": "" + }, + { + "name": "Alignment", + "tooltip": "" + }, + { + "name": "Spacing", + "tooltip": "" + }, + { + "name": "Padding", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "Starting\/ending frames, set end to 0 to default to last frame." + } + ] + }, + "Node_RGB_Channel": { + "name": "RGBA Extract", + "tooltip": "Extract RGBA channel on an image, each channel becomes its own image.", + "outputs": [ + { + "name": "Red", + "tooltip": "" + }, + { + "name": "Green", + "tooltip": "" + }, + { + "name": "Blue", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Output type", + "tooltip": "" + } + ] + }, + "Node_Plot_Linear": { + "name": "Bar \/ Graph", + "tooltip": "Plot graph or bar chart from array of number.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Data", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Sample frequency", + "tooltip": "" + }, + { + "name": "Origin", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Base Color", + "tooltip": "" + }, + { + "name": "Graph Thickness", + "tooltip": "" + }, + { + "name": "Use Background", + "tooltip": "" + }, + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Value Offset", + "tooltip": "" + }, + { + "name": "Color Over Sample", + "tooltip": "" + }, + { + "name": "Trim mode", + "tooltip": "" + }, + { + "name": "Window Size", + "tooltip": "" + }, + { + "name": "Window Offset", + "tooltip": "" + }, + { + "name": "Spacing", + "tooltip": "" + }, + { + "name": "Bar Width", + "tooltip": "" + }, + { + "name": "Rounded Bar", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Flip Value", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + }, + { + "name": "Smooth", + "tooltip": "" + } + ] + }, + "Node_6radient_Out": { + "name": "Gradient", + "tooltip": "", + "outputs": [ + { + "name": "Gradient", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Gradient", + "tooltip": "" + }, + { + "name": "Sample", + "tooltip": "Position to sample a color from the gradient." + } + ] + }, + "Node_Shape_Polygon": { + "name": "Polygon Shape", + "tooltip": "Draw simple shapes using triangles.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Mesh", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Background color", + "tooltip": "" + }, + { + "name": "Shape color", + "tooltip": "" + }, + { + "name": "Shape", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Sides", + "tooltip": "" + }, + { + "name": "Inner radius", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Teeth", + "tooltip": "" + }, + { + "name": "Teeth height", + "tooltip": "" + }, + { + "name": "Teeth taper", + "tooltip": "" + }, + { + "name": "Angle range", + "tooltip": "" + }, + { + "name": "Round cap", + "tooltip": "" + }, + { + "name": "Mesh", + "tooltip": "" + } + ] + }, + "Node_Group": { + "name": "Group", + "tooltip": "", + "outputs": [], + "inputs": [] + }, + "Node_Fluid_Apply_Velocity": { + "name": "Apply Velocity", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Brush", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Velocity", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_String_Regex_Match": { + "name": "RegEx Match", + "tooltip": "", + "outputs": [ + { + "name": "Results", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Regex", + "tooltip": "" + } + ] + }, + "Node_Array_Length": { + "name": "Array Length", + "tooltip": "", + "outputs": [ + { + "name": "Size", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + } + ] + }, + "Node_Boolean": { + "name": "Boolean", + "tooltip": "", + "outputs": [ + { + "name": "Boolean", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Hide Background", + "tooltip": "" + }, + { + "name": "Name location", + "tooltip": "" + } + ] + }, + "Node_Noise_Tri": { + "name": "Triangular Noise", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Texture sample", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "" + } + ] + }, + "Node_Strand_Render": { + "name": "Strand Render", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Strand", + "tooltip": "" + }, + { + "name": "Thickness", + "tooltip": "" + }, + { + "name": "Thickness over length", + "tooltip": "" + }, + { + "name": "Random color", + "tooltip": "" + }, + { + "name": "Color over length", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Child", + "tooltip": "Render extra strands between the real strands." + } + ] + }, + "Node_Cellular": { + "name": "Cellular Noise", + "tooltip": "Generate voronoi pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Contrast", + "tooltip": "" + }, + { + "name": "Pattern", + "tooltip": "" + }, + { + "name": "Middle", + "tooltip": "" + }, + { + "name": "Radial scale", + "tooltip": "" + }, + { + "name": "Radial shatter", + "tooltip": "" + }, + { + "name": "Colored", + "tooltip": "" + } + ] + }, + "Node_Equation": { + "name": "Equation", + "tooltip": "Evaluate string of equation. With an option for setting variables.", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Equation", + "tooltip": "" + }, + { + "name": "Argument name", + "tooltip": "" + }, + { + "name": "Argument value", + "tooltip": "" + } + ] + }, + "Node_Zigzag": { + "name": "Zigzag", + "tooltip": "Generate zigzag pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Color 1", + "tooltip": "" + }, + { + "name": "Color 2", + "tooltip": "" + }, + { + "name": "Smooth", + "tooltip": "" + } + ] + }, + "Node_Bevel": { + "name": "Bevel", + "tooltip": "Apply 2D bevel on the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Height", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Slope", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + } + ] + }, + "Node_Vector4": { + "name": "Vector4", + "tooltip": "", + "outputs": [ + { + "name": "Vector", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "x", + "tooltip": "" + }, + { + "name": "y", + "tooltip": "" + }, + { + "name": "z", + "tooltip": "" + }, + { + "name": "w", + "tooltip": "" + }, + { + "name": "Integer", + "tooltip": "" + } + ] + }, + "Node_Struct_Get": { + "name": "Struct Get", + "tooltip": "", + "outputs": [ + { + "name": "Struct", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Struct", + "tooltip": "" + }, + { + "name": "Key", + "tooltip": "" + } + ] + }, + "Node_3D_Plane": { + "name": "3D Plane", + "tooltip": "Put 2D image on a plane in 3D space.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "3D vertex", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Constant dimension", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Texture scale", + "tooltip": "" + }, + { + "name": "Texture shift", + "tooltip": "" + }, + { + "name": "Subdiviion", + "tooltip": "" + }, + { + "name": "Normal axis", + "tooltip": "" + } + ] + }, + "Node_Strand_Create": { + "name": "Strand Create", + "tooltip": "", + "outputs": [ + { + "name": "Strand", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Density", + "tooltip": "How many strands to generate." + }, + { + "name": "Length", + "tooltip": "" + }, + { + "name": "Segment", + "tooltip": "" + }, + { + "name": "Elasticity", + "tooltip": "Length preservation, the higher the value the easier it is to stretch each segment." + }, + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Side", + "tooltip": "" + }, + { + "name": "Spring", + "tooltip": "Angular stiffness, the higher the value the easier it is to bend each segment." + }, + { + "name": "Structure", + "tooltip": "The ability to keep its original shape." + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Curl frequency", + "tooltip": "" + }, + { + "name": "Curliness", + "tooltip": "" + }, + { + "name": "Mesh", + "tooltip": "" + }, + { + "name": "Distribution", + "tooltip": "" + }, + { + "name": "Bake hair", + "tooltip": "Prevent strand reseting to apply manual modification. Unbaking will remove all changes." + }, + { + "name": "View fix hair", + "tooltip": "" + }, + { + "name": "Root strength", + "tooltip": "The force required to break strand from its root. Set to -1 to make strand infinitely strong." + } + ] + }, + "Node_Fluid_Vortex": { + "name": "Vortex", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Attraction", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + } + ] + }, + "Node_Gradient_Shift": { + "name": "Gradient Shift", + "tooltip": "Move gradients keys.", + "outputs": [ + { + "name": "Gradient", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Gradient", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Wrap", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + } + ] + }, + "Node_Path_Array": { + "name": "Path Array", + "tooltip": "", + "outputs": [ + { + "name": "Path array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + } + ] + }, + "Node_9Slice": { + "name": "Nine Slice", + "tooltip": "Cut image into 3x3 parts, and scale\/repeat only the middle part.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Splice", + "tooltip": "" + }, + { + "name": "Filling modes", + "tooltip": "" + } + ] + }, + "Node_Pin": { + "name": "Pin", + "tooltip": "Craete pin to organize your connection. Can be create by double clicking on a connection line.", + "outputs": [ + { + "name": "Out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "In", + "tooltip": "" + } + ] + }, + "Node_Padding": { + "name": "Padding", + "tooltip": "Make image bigger by adding space in 4 directions.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Padding", + "tooltip": "" + }, + { + "name": "Fill method", + "tooltip": "" + }, + { + "name": "Fill color", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Pad mode", + "tooltip": "" + }, + { + "name": "Target dimension", + "tooltip": "" + }, + { + "name": "Horizontal alignment", + "tooltip": "" + }, + { + "name": "Vertical alignment", + "tooltip": "" + } + ] + }, + "Node_Scatter": { + "name": "Scatter", + "tooltip": "Scatter image randomly multiple times.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Atlas data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Amount", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Distribution", + "tooltip": "" + }, + { + "name": "Point at center", + "tooltip": "Rotate each copy to face the spawn center." + }, + { + "name": "Uniform scaling", + "tooltip": "" + }, + { + "name": "Scatter", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Random blend", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Distribution map", + "tooltip": "" + }, + { + "name": "Distribution data", + "tooltip": "" + }, + { + "name": "Array", + "tooltip": "What to do when input array of surface.\r\n- Spread: Create Array of output each scattering single surface.\r\n- Mixed: Create single output scattering multiple images." + }, + { + "name": "Multiply alpha", + "tooltip": "" + }, + { + "name": "Use value", + "tooltip": "Apply the third value in each data point (if exist) on given properties." + }, + { + "name": "Blend mode", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + } + ] + }, + "Node_Export": { + "name": "Export", + "tooltip": "Export image, image array to file, image sequence, animation.", + "outputs": [ + { + "name": "Loop exit", + "tooltip": "" + }, + { + "name": "Preview", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface", + "tooltip": "" + }, + { + "name": "Paths", + "tooltip": "" + }, + { + "name": "Template", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Template guides", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + }, + { + "name": "Frame optimization", + "tooltip": "" + }, + { + "name": "Color merge", + "tooltip": "" + }, + { + "name": "Framerate", + "tooltip": "" + }, + { + "name": "Format", + "tooltip": "" + }, + { + "name": "Quality", + "tooltip": "" + }, + { + "name": "Sequence begin", + "tooltip": "" + } + ] + }, + "Node_Vector_Dot": { + "name": "Dot product", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Point 1", + "tooltip": "" + }, + { + "name": "Point 2", + "tooltip": "" + } + ] + }, + "Node_Camera": { + "name": "Camera", + "tooltip": "Create camera that crop image to fix dimension with control of position, zoom. Also can be use to create parallax effect.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Focus area", + "tooltip": "" + }, + { + "name": "Zoom", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Fix background", + "tooltip": "" + }, + { + "name": "Element 0", + "tooltip": "" + }, + { + "name": "Parallax 0", + "tooltip": "" + } + ] + }, + "Node_Rigid_Activate": { + "name": "Activate Physics", + "tooltip": "", + "outputs": [ + { + "name": "Object", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Object", + "tooltip": "" + }, + { + "name": "Physics activated", + "tooltip": "" + } + ] + }, + "Node_CSV_File_Write": { + "name": "CSV File Out", + "tooltip": "Save array as .csv file.", + "outputs": [], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Content", + "tooltip": "" + } + ] + }, + "Node_Audio_Window": { + "name": "Audio Window", + "tooltip": "Take a slice of an audio array based on the current frame.", + "outputs": [ + { + "name": "Windowed Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Audio Array", + "tooltip": "" + }, + { + "name": "Sample", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + } + ] + }, + "Node_Feedback": { + "name": "Feedback", + "tooltip": "Create group that reuse output from last frame to the current one.", + "outputs": [], + "inputs": [] + }, + "Node_Bloom": { + "name": "Bloom", + "tooltip": "Apply bloom effect, bluring and brighten the bright part of the image.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "Bloom blur radius." + }, + { + "name": "Tolerance", + "tooltip": "How bright a pixel should be to start blooming." + }, + { + "name": "Strength", + "tooltip": "Blend intensity." + }, + { + "name": "Bloom mask", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Array_Sort": { + "name": "Sort Number", + "tooltip": "", + "outputs": [ + { + "name": "Sorted array", + "tooltip": "" + }, + { + "name": "Sorted index", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array in", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + } + ] + }, + "Node_VFX_Spawner": { + "name": "Spawner", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "On create", + "tooltip": "" + }, + { + "name": "On step", + "tooltip": "" + }, + { + "name": "On destroy", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particle sprite", + "tooltip": "" + }, + { + "name": "Spawn delay", + "tooltip": "Frames delay between each particle spawn." + }, + { + "name": "Spawn amount", + "tooltip": "Amount of particle spawn in that frame." + }, + { + "name": "Spawn area", + "tooltip": "" + }, + { + "name": "Spawn distribution", + "tooltip": "" + }, + { + "name": "Lifespan", + "tooltip": "" + }, + { + "name": "Spawn direction", + "tooltip": "" + }, + { + "name": "Acceleration", + "tooltip": "" + }, + { + "name": "Orientation", + "tooltip": "" + }, + { + "name": "Rotational speed", + "tooltip": "" + }, + { + "name": "Spawn scale", + "tooltip": "" + }, + { + "name": "Scale over time", + "tooltip": "" + }, + { + "name": "Color over lifetime", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Alpha over time", + "tooltip": "" + }, + { + "name": "Rotate by direction", + "tooltip": "Make the particle rotates to follow its movement." + }, + { + "name": "Spawn type", + "tooltip": "" + }, + { + "name": "Spawn size", + "tooltip": "" + }, + { + "name": "Spawn velocity", + "tooltip": "" + }, + { + "name": "Gravity", + "tooltip": "" + }, + { + "name": "Wiggle", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + }, + { + "name": "Surface array", + "tooltip": "Whether to select image from an array in order, at random, or treat array as animation." + }, + { + "name": "Animation speed", + "tooltip": "" + }, + { + "name": "Scatter", + "tooltip": "" + }, + { + "name": "Boundary data", + "tooltip": "" + }, + { + "name": "On animation end", + "tooltip": "" + }, + { + "name": "Spawn", + "tooltip": "" + }, + { + "name": "Random blend", + "tooltip": "" + }, + { + "name": "Directed from center", + "tooltip": "Make particle move away from the spawn center." + }, + { + "name": "Distribution map", + "tooltip": "" + }, + { + "name": "Distribution data", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Gravity direction", + "tooltip": "" + }, + { + "name": "Turning", + "tooltip": "" + }, + { + "name": "Turn both directions", + "tooltip": "Apply randomized 1, -1 multiplier to the turning speed." + }, + { + "name": "Turn scale with speed", + "tooltip": "" + }, + { + "name": "Spawn trigger", + "tooltip": "" + }, + { + "name": "Step interval", + "tooltip": "How often the 'on step' event is triggered.\nWith 1 being trigger every frame, 2 means triggered once every 2 frames." + } + ] + }, + "Node_Json_File_Read": { + "name": "JSON File In", + "tooltip": "Load .json file using keys.", + "outputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Struct", + "tooltip": "" + }, + { + "name": "Values", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Key", + "tooltip": "" + } + ] + }, + "Node_Array_Remove": { + "name": "Array Remove", + "tooltip": "", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Index", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Spread array", + "tooltip": "" + } + ] + }, + "Node_String_Regex_Search": { + "name": "RegEx Search", + "tooltip": "", + "outputs": [ + { + "name": "Results", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Regex", + "tooltip": "" + } + ] + }, + "Node_Array_Shuffle": { + "name": "Shuffle Array", + "tooltip": "", + "outputs": [ + { + "name": "Shuffled array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array in", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + } + ] + }, + "Node_Combine_RGB": { + "name": "RGBA Combine", + "tooltip": "Combine 4 image in to one. Each image use to control RGBA channel.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Red", + "tooltip": "" + }, + { + "name": "Green", + "tooltip": "" + }, + { + "name": "Blue", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Sampling type", + "tooltip": "" + } + ] + }, + "Node_Path_Wave": { + "name": "Wave Path", + "tooltip": "", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Frequency", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Smooth", + "tooltip": "" + } + ] + }, + "Node_Gradient": { + "name": "Draw Gradient", + "tooltip": "Create image from gradient.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Gradient", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Loop", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + } + ] + }, + "Node_String_Length": { + "name": "Text Length", + "tooltip": "", + "outputs": [ + { + "name": "Text", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Text", + "tooltip": "" + }, + { + "name": "Mode", + "tooltip": "" + } + ] + }, + "Node_Color_replace": { + "name": "Replace Color", + "tooltip": "Replace color that match one palette with another palette.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Palette from", + "tooltip": "Color to be replaced." + }, + { + "name": "Palette to", + "tooltip": "Palette to be replaced to." + }, + { + "name": "Threshold", + "tooltip": "" + }, + { + "name": "Set others to black", + "tooltip": "Set pixel that doesn't match any color in 'palette from' to black." + }, + { + "name": "Multiply alpha", + "tooltip": "" + }, + { + "name": "Hard replace", + "tooltip": "Completely override pixel with new color instead of blending between it." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_VFX_Destroy": { + "name": "Destroy", + "tooltip": "", + "outputs": [ + { + "name": "Particles", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Particles", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Falloff distance", + "tooltip": "" + }, + { + "name": "Effect Vector", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Rotate particle", + "tooltip": "" + }, + { + "name": "Scale particle", + "tooltip": "" + } + ] + }, + "Node_Mesh_Transform": { + "name": "Mesh Transform", + "tooltip": "", + "outputs": [ + { + "name": "Mesh", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Mesh", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Anchor", + "tooltip": "" + } + ] + }, + "Node_Path_Map_Area": { + "name": "Remap Path", + "tooltip": "Scale path to fit a given area.", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Area", + "tooltip": "" + } + ] + }, + "Node_Text_File_Write": { + "name": "Text File Out", + "tooltip": "Save text as a .txt file.", + "outputs": [], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Content", + "tooltip": "" + } + ] + }, + "Node_Rigid_Render": { + "name": "Render", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Render dimension", + "tooltip": "" + }, + { + "name": "Object", + "tooltip": "" + } + ] + }, + "Node_Pack_Sprites": { + "name": "Pack Sprites", + "tooltip": "Combine array of images with different dimension using different algorithms.", + "outputs": [ + { + "name": "Packed image", + "tooltip": "" + }, + { + "name": "Atlas data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Sprites", + "tooltip": "" + }, + { + "name": "Algorithm", + "tooltip": "" + }, + { + "name": "Max width", + "tooltip": "" + }, + { + "name": "Max height", + "tooltip": "" + }, + { + "name": "Spacing", + "tooltip": "" + } + ] + }, + "Node_Array_Copy": { + "name": "Array Copy", + "tooltip": "", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Starting Index", + "tooltip": "" + }, + { + "name": "Size", + "tooltip": "" + } + ] + }, + "Node_Fluid_Domain_Queue": { + "name": "Queue Domain", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Input", + "tooltip": "" + } + ] + }, + "Node_Vector3": { + "name": "Vector3", + "tooltip": "", + "outputs": [ + { + "name": "Vector", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "x", + "tooltip": "" + }, + { + "name": "y", + "tooltip": "" + }, + { + "name": "z", + "tooltip": "" + }, + { + "name": "Integer", + "tooltip": "" + } + ] + }, + "Node_Path_Builder": { + "name": "Path Builder", + "tooltip": "Create path from array of vec2 points.", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Point array", + "tooltip": "" + }, + { + "name": "Connected", + "tooltip": "If set to true, will draw a single path from one point to another. If not set will treat each pair of points as an individual line." + } + ] + }, + "Node_Iterate_Each": { + "name": "Loop Array", + "tooltip": "Create group that iterate to each member in an array.", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + } + ] + }, + "Node_Noise_Simplex": { + "name": "Simplex Noise", + "tooltip": "Generate simplex noise, similiar to perlin noise with better fidelity but non-tilable.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Iteration", + "tooltip": "" + }, + { + "name": "Color mode", + "tooltip": "" + }, + { + "name": "Color R range", + "tooltip": "" + }, + { + "name": "Color G range", + "tooltip": "" + }, + { + "name": "Color B range", + "tooltip": "" + } + ] + }, + "Node_Level": { + "name": "Level", + "tooltip": "Adjust brightness of an image by changing its brightness range.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "White", + "tooltip": "" + }, + { + "name": "Red", + "tooltip": "" + }, + { + "name": "Green", + "tooltip": "" + }, + { + "name": "Blue", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Feedback_Output": { + "name": "Output", + "tooltip": "", + "outputs": [], + "inputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + }, + { + "name": "Feedback loop", + "tooltip": "" + } + ] + }, + "Node_Blur_Radial": { + "name": "Radial Blur", + "tooltip": "Blur image by rotating aroung a mid point.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Center", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_BW": { + "name": "BW", + "tooltip": "Convert color image to black and white.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Brightness", + "tooltip": "" + }, + { + "name": "Contrast", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_WAV_File_Write": { + "name": "WAV File Out", + "tooltip": "Save wav audio file.", + "outputs": [], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Audio Data", + "tooltip": "" + }, + { + "name": "Sample", + "tooltip": "" + }, + { + "name": "Bit Depth", + "tooltip": "" + }, + { + "name": "Remap Data", + "tooltip": "" + }, + { + "name": "Data Range", + "tooltip": "" + } + ] + }, + "Node_Anim_Curve": { + "name": "Evaluate Curve", + "tooltip": "Evaluate value from an animation curve.", + "outputs": [ + { + "name": "Curve", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Curve", + "tooltip": "" + }, + { + "name": "Progress", + "tooltip": "" + }, + { + "name": "Minimum", + "tooltip": "" + }, + { + "name": "Maximum", + "tooltip": "" + } + ] + }, + "Node_Path_Blend": { + "name": "Blend Path", + "tooltip": "Blend between 2 paths.", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path 1", + "tooltip": "" + }, + { + "name": "Path 2", + "tooltip": "" + }, + { + "name": "Ratio", + "tooltip": "" + } + ] + }, + "Node_Scale_Algo": { + "name": "Scale Algorithm", + "tooltip": "Scale image using scale2x, scale3x algorithm.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Algorithm", + "tooltip": "" + }, + { + "name": "Tolerance", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_3D_Repeat": { + "name": "3D Repeat", + "tooltip": "Repeat 3D object multiple times.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D objects", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "3D object", + "tooltip": "" + }, + { + "name": "Repeat", + "tooltip": "Amount of copies to be generated." + }, + { + "name": "Repeat position", + "tooltip": "" + }, + { + "name": "Repeat rotation", + "tooltip": "" + }, + { + "name": "Repeat scale", + "tooltip": "" + }, + { + "name": "Repeat pattern", + "tooltip": "" + }, + { + "name": "Axis", + "tooltip": "" + }, + { + "name": "Radius", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + } + ] + }, + "Node_Iterator_Sort_Input": { + "name": "Sort Input", + "tooltip": "", + "outputs": [ + { + "name": "Value in", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Value in", + "tooltip": "" + } + ] + }, + "Node_Iterate": { + "name": "Loop", + "tooltip": "Create group that reuse output as input repeatedly in one frame.", + "outputs": [], + "inputs": [ + { + "name": "Repeat", + "tooltip": "" + } + ] + }, + "Node_Pixel_Cloud": { + "name": "Pixel Cloud", + "tooltip": "Displace each pixel of the image randomly.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Strength map", + "tooltip": "" + }, + { + "name": "Color over lifetime", + "tooltip": "" + }, + { + "name": "Distance", + "tooltip": "" + }, + { + "name": "Alpha over lifetime", + "tooltip": "" + }, + { + "name": "Random blending", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Cache": { + "name": "Cache", + "tooltip": "Store current animation. Cache persisted between save.", + "outputs": [ + { + "name": "Cache surface", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + } + ] + }, + "Node_Texture_Remap": { + "name": "Texture Remap", + "tooltip": "Remap image using texture map. Where red channel control x position and green channel control y position.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "RG Map", + "tooltip": "Displacement map where red retermine the X position, and green determine the Y position." + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Displace": { + "name": "Displace", + "tooltip": "Distort image using another image as a map.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Displace map", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "Vector to displace pixel by." + }, + { + "name": "Strength", + "tooltip": "" + }, + { + "name": "Mid value", + "tooltip": "Brightness value to be use as a basis for 'no displacement'." + }, + { + "name": "Color data", + "tooltip": "Use color data set extra information.\r\n - Ignore: Don't use color data.\r\n - Vector: Use red as X displacement, green as Y displacement.\r\n - Angle: Use red as angle, green as distance." + }, + { + "name": "Iterate", + "tooltip": "If not set, then strength value is multiplied directly to the displacement.\r\nIf set, then strength value control how many times the effect applies on itself." + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Array_Set": { + "name": "Array Set", + "tooltip": "", + "outputs": [ + { + "name": "Array", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Index", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + } + ] + }, + "Node_Websocket_Sender": { + "name": "Websocket Sender", + "tooltip": "Create websocket server to send data to the network.", + "outputs": [], + "inputs": [ + { + "name": "Port", + "tooltip": "" + }, + { + "name": "Data type", + "tooltip": "" + }, + { + "name": "Struct", + "tooltip": "" + }, + { + "name": "Surface", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Target", + "tooltip": "" + } + ] + }, + "Node_Grid_Tri": { + "name": "Triangular Grid", + "tooltip": "Generate triangular grid pattern.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Gap", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Tile color", + "tooltip": "" + }, + { + "name": "Gap color", + "tooltip": "" + }, + { + "name": "Texture", + "tooltip": "" + }, + { + "name": "Render type", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + } + ] + }, + "Node_Vector_Cross_2D": { + "name": "Cross product 2D", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Point 1", + "tooltip": "" + }, + { + "name": "Point 2", + "tooltip": "" + } + ] + }, + "Node_Shadow_Cast": { + "name": "Cast Shadow", + "tooltip": "Apply light that create shadow using shadow mask.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Light mask", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Solid", + "tooltip": "" + }, + { + "name": "Light Position", + "tooltip": "" + }, + { + "name": "Soft light radius", + "tooltip": "" + }, + { + "name": "Light density", + "tooltip": "" + }, + { + "name": "Light type", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Light radius", + "tooltip": "" + }, + { + "name": "Render solid", + "tooltip": "" + }, + { + "name": "Use BG color", + "tooltip": "If checked, background color will be used as shadow caster." + }, + { + "name": "BG threshold", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Banding", + "tooltip": "" + }, + { + "name": "Attenuation", + "tooltip": "Control how light fade out over distance." + }, + { + "name": "Ambient occlusion", + "tooltip": "" + }, + { + "name": "Ambient occlusion strength", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Array_Add": { + "name": "Array Add", + "tooltip": "", + "outputs": [ + { + "name": "Output", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Array", + "tooltip": "" + }, + { + "name": "Spread array", + "tooltip": "" + }, + { + "name": "Value", + "tooltip": "" + } + ] + }, + "Node_Blend": { + "name": "Blend", + "tooltip": "Blend 2 images using different blendmodes.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Background", + "tooltip": "" + }, + { + "name": "Foreground", + "tooltip": "" + }, + { + "name": "Blend mode", + "tooltip": "" + }, + { + "name": "Opacity", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Fill mode", + "tooltip": "" + }, + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Constant dimension", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Preserve alpha", + "tooltip": "" + }, + { + "name": "Horizontal Align", + "tooltip": "" + }, + { + "name": "Vertical Align", + "tooltip": "" + } + ] + }, + "Node_Animation_Control": { + "name": "Animation Control", + "tooltip": "Control animation state with triggers.", + "outputs": [], + "inputs": [ + { + "name": "Toggle Play \/ Pause", + "tooltip": "" + }, + { + "name": "Pause", + "tooltip": "" + }, + { + "name": "Resume", + "tooltip": "" + }, + { + "name": "Play From Beginning", + "tooltip": "" + }, + { + "name": "Play once", + "tooltip": "" + }, + { + "name": "Skip Frames", + "tooltip": "" + }, + { + "name": "Skip Frames Count", + "tooltip": "" + } + ] + }, + "Node_Logic": { + "name": "Logic Opr", + "tooltip": "", + "outputs": [ + { + "name": "Result", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Type", + "tooltip": "" + }, + { + "name": "a", + "tooltip": "" + }, + { + "name": "b", + "tooltip": "" + } + ] + }, + "Node_Fluid_Add": { + "name": "Add Fluid", + "tooltip": "", + "outputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Fluid Domain", + "tooltip": "" + }, + { + "name": "Fluid brush", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Inherit velocity", + "tooltip": "" + }, + { + "name": "Density", + "tooltip": "" + } + ] + }, + "Node_Strand_Render_Texture": { + "name": "Strand Render Texture", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Strand", + "tooltip": "" + }, + { + "name": "Thickness", + "tooltip": "" + }, + { + "name": "Random color", + "tooltip": "" + }, + { + "name": "Texture", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + } + ] + }, + "Node_Noise_Hex": { + "name": "Hexagonal Noise", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Texture sample", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "" + } + ] + }, + "Node_Image_Sequence": { + "name": "Image Array", + "tooltip": "Load multiple images from your computer as array.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Paths", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Padding", + "tooltip": "" + }, + { + "name": "Canvas size", + "tooltip": "" + }, + { + "name": "Sizing method", + "tooltip": "" + } + ] + }, + "Node_Polar": { + "name": "Polar", + "tooltip": "Convert image to polar coordinate.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_3D_Cube": { + "name": "3D Cube", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + }, + { + "name": "3D vertex", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Main texture", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render rotation", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Textures per face", + "tooltip": "" + }, + { + "name": "Textures 0", + "tooltip": "" + }, + { + "name": "Textures 1", + "tooltip": "" + }, + { + "name": "Textures 2", + "tooltip": "" + }, + { + "name": "Textures 3", + "tooltip": "" + }, + { + "name": "Textures 4", + "tooltip": "" + }, + { + "name": "Textures 5", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + } + ] + }, + "Node_Frame": { + "name": "Frame", + "tooltip": "Create frame surrounding nodes.", + "outputs": [], + "inputs": [ + { + "name": "Size", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + } + ] + }, + "Node_Iterator_Each_Output": { + "name": "Output", + "tooltip": "", + "outputs": [ + { + "name": "Preview", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Value out", + "tooltip": "" + } + ] + }, + "Node_3D_Combine": { + "name": "3D Combine", + "tooltip": "Combine multiple 3D object to a single scene,", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D objects", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + }, + { + "name": "3D object", + "tooltip": "" + } + ] + }, + "Node_Atlas_Set": { + "name": "Atlas Set", + "tooltip": "", + "outputs": [ + { + "name": "Atlas", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Atlas", + "tooltip": "" + }, + { + "name": "Surface", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Blend", + "tooltip": "" + }, + { + "name": "Alpha", + "tooltip": "" + } + ] + }, + "Node_Image": { + "name": "Image", + "tooltip": "Load a single image from your computer.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Padding", + "tooltip": "" + } + ] + }, + "Node_Gradient_Extract": { + "name": "Gradient Data", + "tooltip": "Get palatte and array of key positions from gradient.", + "outputs": [ + { + "name": "Colors", + "tooltip": "" + }, + { + "name": "Positions", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Gradient", + "tooltip": "" + } + ] + }, + "Node_Gradient_Replace_Color": { + "name": "Gradient Replace", + "tooltip": "", + "outputs": [ + { + "name": "Gradient", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Gradient", + "tooltip": "" + }, + { + "name": "Color from", + "tooltip": "" + }, + { + "name": "Color to", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "" + } + ] + }, + "Node_Path_Transform": { + "name": "Transform Path", + "tooltip": "", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Anchor", + "tooltip": "" + } + ] + }, + "Node_Strand_Length_Adjust": { + "name": "Strand Length Adjust", + "tooltip": "", + "outputs": [ + { + "name": "Strand", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Strand", + "tooltip": "" + }, + { + "name": "Shape", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Direction", + "tooltip": "" + }, + { + "name": "Falloff", + "tooltip": "" + }, + { + "name": "Type", + "tooltip": "" + }, + { + "name": "Strength", + "tooltip": "" + } + ] + }, + "Node_Iterator_Sort_Output": { + "name": "Sort Output", + "tooltip": "", + "outputs": [], + "inputs": [ + { + "name": "Result", + "tooltip": "" + } + ] + }, + "Node_Tunnel_In": { + "name": "Tunnel In", + "tooltip": "Create tunnel for sending value based on key matching.", + "outputs": [], + "inputs": [ + { + "name": "Name", + "tooltip": "" + }, + { + "name": "Value in", + "tooltip": "" + } + ] + }, + "Node_Edge_Detect": { + "name": "Edge Detect", + "tooltip": "Edge detect by applying Sobel, Prewitt, or Laplacian kernel.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Algorithm", + "tooltip": "" + }, + { + "name": "Oversample mode", + "tooltip": "How to deal with pixel outside the surface.\n - Empty: Use empty pixel\n - Clamp: Repeat edge pixel\n - Repeat: Repeat texture." + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Sprite_Stack": { + "name": "Sprite Stack", + "tooltip": "Create sprite stack either from repeating a single image or stacking different images using array.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Base shape", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Stack amount", + "tooltip": "" + }, + { + "name": "Stack shift", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Rotation", + "tooltip": "" + }, + { + "name": "Stack blend", + "tooltip": "" + }, + { + "name": "Alpha end", + "tooltip": "Alpha value for the last copy." + }, + { + "name": "Move base", + "tooltip": "Make each copy move the original image." + } + ] + }, + "Node_Lua_Surface": { + "name": "Lua Surface", + "tooltip": "", + "outputs": [ + { + "name": "Execution thread", + "tooltip": "" + }, + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Function name", + "tooltip": "" + }, + { + "name": "Output dimension", + "tooltip": "" + }, + { + "name": "Lua code", + "tooltip": 14 + }, + { + "name": "Execution thread", + "tooltip": "" + }, + { + "name": "Execute on frame", + "tooltip": "" + }, + { + "name": "Argument name", + "tooltip": "" + }, + { + "name": "Argument type", + "tooltip": "" + }, + { + "name": "Argument value", + "tooltip": "" + } + ] + }, + "Node_Seperate_Shape": { + "name": "Separate Shape", + "tooltip": "Separate disconnected pixel each into an image in an image array.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Boundary data", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Tolerance", + "tooltip": "" + }, + { + "name": "Override color", + "tooltip": "" + }, + { + "name": "Color", + "tooltip": "" + }, + { + "name": "Ignore blank", + "tooltip": "Skip empty and black shape." + } + ] + }, + "Node_Vector2": { + "name": "Vector2", + "tooltip": "", + "outputs": [ + { + "name": "Vector", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "x", + "tooltip": "" + }, + { + "name": "y", + "tooltip": "" + }, + { + "name": "Integer", + "tooltip": "" + }, + { + "name": "Display", + "tooltip": "" + }, + { + "name": "Reset to center", + "tooltip": "" + } + ] + }, + "Node_Iterator_Output": { + "name": "Output", + "tooltip": "", + "outputs": [], + "inputs": [ + { + "name": "Value", + "tooltip": "" + }, + { + "name": "Order", + "tooltip": "" + }, + { + "name": "Loop exit", + "tooltip": "" + } + ] + }, + "Node_Path_Plot": { + "name": "Path plot", + "tooltip": "", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Output scale", + "tooltip": "" + }, + { + "name": "Coordinate", + "tooltip": "" + }, + { + "name": "Equation type", + "tooltip": "" + }, + { + "name": "0 function", + "tooltip": "" + }, + { + "name": "1 function", + "tooltip": "" + }, + { + "name": "Origin", + "tooltip": "" + }, + { + "name": "Range", + "tooltip": "" + }, + { + "name": "Input scale", + "tooltip": "" + }, + { + "name": "Input shift", + "tooltip": "" + } + ] + }, + "Node_Lua_Compute": { + "name": "Lua Compute", + "tooltip": "", + "outputs": [ + { + "name": "Execution thread", + "tooltip": "" + }, + { + "name": "Return value", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Function name", + "tooltip": "" + }, + { + "name": "Return type", + "tooltip": "" + }, + { + "name": "Lua code", + "tooltip": 14 + }, + { + "name": "Execution thread", + "tooltip": "" + }, + { + "name": "Execute on frame", + "tooltip": "" + }, + { + "name": "Argument name", + "tooltip": "" + }, + { + "name": "Argument type", + "tooltip": "" + }, + { + "name": "Argument value", + "tooltip": "" + } + ] + }, + "Node_Color_Remove": { + "name": "Remove Color", + "tooltip": "Remove color that match a palette.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Colors", + "tooltip": "" + }, + { + "name": "Threshold", + "tooltip": "" + }, + { + "name": "Mask", + "tooltip": "" + }, + { + "name": "Mix", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + }, + { + "name": "Invert", + "tooltip": "Keep the selected colors and remove the rest." + } + ] + }, + "Node_Mirror": { + "name": "Mirror", + "tooltip": "Reflect the image along a reflection line.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "Mirror mask", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Angle", + "tooltip": "" + }, + { + "name": "Active", + "tooltip": "" + } + ] + }, + "Node_Strand_Collision": { + "name": "Strand Collision", + "tooltip": "", + "outputs": [ + { + "name": "Strand", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Strand", + "tooltip": "" + }, + { + "name": "Collision mesh", + "tooltip": "" + } + ] + }, + "Node_3D_Extrude": { + "name": "3D Extrude", + "tooltip": "Extrude 2D image into 3D object.", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + }, + { + "name": "3D scene", + "tooltip": "" + }, + { + "name": "Normal pass", + "tooltip": "" + }, + { + "name": "3D vertex", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" + }, + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Object position", + "tooltip": "" + }, + { + "name": "Object rotation", + "tooltip": "" + }, + { + "name": "Object scale", + "tooltip": "" + }, + { + "name": "Render position", + "tooltip": "" + }, + { + "name": "Render rotation", + "tooltip": "" + }, + { + "name": "Render scale", + "tooltip": "" + }, + { + "name": "Manual generate", + "tooltip": "" + }, + { + "name": "Light direction", + "tooltip": "" + }, + { + "name": "Light height", + "tooltip": "" + }, + { + "name": "Light intensity", + "tooltip": "" + }, + { + "name": "Light color", + "tooltip": "" + }, + { + "name": "Ambient color", + "tooltip": "" + }, + { + "name": "Height map", + "tooltip": "" + }, + { + "name": "Always update", + "tooltip": "" + }, + { + "name": "Projection", + "tooltip": "" + }, + { + "name": "Field of view", + "tooltip": "" + }, + { + "name": "Scale view with dimension", + "tooltip": "" + } + ] + }, + "Node_Grid_Noise": { + "name": "Grid Noise", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Dimension", + "tooltip": "" + }, + { + "name": "Position", + "tooltip": "" + }, + { + "name": "Scale", + "tooltip": "" + }, + { + "name": "Seed", + "tooltip": "" + }, + { + "name": "Shift", + "tooltip": "" + }, + { + "name": "Texture sample", + "tooltip": "" + }, + { + "name": "Shift axis", + "tooltip": "" + }, + { + "name": "Color mode", + "tooltip": "" + }, + { + "name": "Color R range", + "tooltip": "" + }, + { + "name": "Color G range", + "tooltip": "" + }, + { + "name": "Color B range", + "tooltip": "" + } + ] + }, + "Node_Iterator_Each_Length": { + "name": "Array Length", + "tooltip": "", + "outputs": [ + { + "name": "Length", + "tooltip": "" + } + ], + "inputs": [] + }, + "Node_Path_Reverse": { + "name": "Reverse Path", + "tooltip": "", + "outputs": [ + { + "name": "Path", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Path", + "tooltip": "" + } + ] + }, + "Node_FXAA": { + "name": "FXAA", + "tooltip": "", + "outputs": [ + { + "name": "Surface out", + "tooltip": "" + } + ], + "inputs": [ + { + "name": "Surface in", + "tooltip": "" } ] } diff --git a/datafiles/data/themes/default.zip b/datafiles/data/themes/default.zip index 6fd89c6dc..1b2a87c7f 100644 Binary files a/datafiles/data/themes/default.zip and b/datafiles/data/themes/default.zip differ diff --git a/objects/_addon_custom/Alarm_0.gml b/objects/_addon_custom/Alarm_0.gml new file mode 100644 index 000000000..ee8674d46 --- /dev/null +++ b/objects/_addon_custom/Alarm_0.gml @@ -0,0 +1,7 @@ +/// @description +#region deserialize + if(!struct_has(LOAD_ADDON, name)) exit; + var _mp = json_parse(LOAD_ADDON[$ name]); + + lua_call(thread, "deserialize", _mp); +#endregion \ No newline at end of file diff --git a/objects/_addon_custom/Create_0.gml b/objects/_addon_custom/Create_0.gml index 424a58a5b..05693af58 100644 --- a/objects/_addon_custom/Create_0.gml +++ b/objects/_addon_custom/Create_0.gml @@ -2,6 +2,8 @@ event_inherited(); #region init + alarm[0] = 1; + function init(directory, _openDialog = true) { ID = UUID_generate(); global.ADDON_ID[? ID] = self; diff --git a/objects/_addon_custom/_addon_custom.yy b/objects/_addon_custom/_addon_custom.yy index b49c7be92..8f1f1d458 100644 --- a/objects/_addon_custom/_addon_custom.yy +++ b/objects/_addon_custom/_addon_custom.yy @@ -7,6 +7,7 @@ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":1,"eventType":3,"isDnD":false,}, {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,}, {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":1,"isDnD":false,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":2,"isDnD":false,}, ], "managed": true, "overriddenProperties": [], diff --git a/objects/addon/Create_0.gml b/objects/addon/Create_0.gml index 4e73a9b87..493d41072 100644 --- a/objects/addon/Create_0.gml +++ b/objects/addon/Create_0.gml @@ -1,3 +1,5 @@ /// @description -name = ""; -menu = []; \ No newline at end of file +#region load + name = ""; + menu = []; +#endregion diff --git a/objects/o_crash_handler/Create_0.gml b/objects/o_crash_handler/Create_0.gml new file mode 100644 index 000000000..7847a68fd --- /dev/null +++ b/objects/o_crash_handler/Create_0.gml @@ -0,0 +1,55 @@ +/// @description +gameframe_init(); +gameframe_button_array = []; +#region setup + window_set_size(640, 480); + display_set_gui_size(640, 480); + + window_set_caption("Pixel Composer crashed") + window_set_position( + (display_get_width() - 640) / 2, + (display_get_height() - 320) / 2); // center window +#endregion + +#region directory + globalvar DIRECTORY, APP_DIRECTORY; + DIRECTORY = ""; + + if(OS == os_windows) { + APP_DIRECTORY = environment_get_variable("userprofile") + "\\AppData\\Local\\PixelComposer\\"; + } else if(OS == os_macosx) { + var home_dir = environment_get_variable("HOME"); + if(string(home_dir) == "0") + log_message("DIRECTORY", "Directory not found."); + else + APP_DIRECTORY = string(home_dir) + "/PixelComposer/"; + } + + var perstPath = APP_DIRECTORY + "persistPreference.json"; + if(file_exists(perstPath)) { + PRESIST_PREF = json_load_struct(perstPath); + DIRECTORY = struct_has(PRESIST_PREF, "path")? PRESIST_PREF.path : ""; + } + + var dir_valid = DIRECTORY != "" && directory_exists(DIRECTORY); + if(!dir_valid) DIRECTORY = APP_DIRECTORY; +#endregion + +#region log + path = DIRECTORY + "log/crash_log.txt"; + if(!file_exists(path)) game_end(1); + + crash_content = file_text_read_all(path); + log_surface = surface_create(1, 1); + log_y = 0; + log_y_to = 0; + + LOCALE = { + config: { + per_character_line_break: true + } + } + + win_w = 640; + win_h = 320; +#endregion \ No newline at end of file diff --git a/objects/o_crash_handler/Draw_64.gml b/objects/o_crash_handler/Draw_64.gml new file mode 100644 index 000000000..1f3b29186 --- /dev/null +++ b/objects/o_crash_handler/Draw_64.gml @@ -0,0 +1,163 @@ +/// @description +gameframe_update(); + +draw_clear(#1c1c23); +var w = window_get_width(); +var h = window_get_height(); + +if(win_w != w || win_h != h) { + display_set_gui_size(w, h); + win_w = w; + win_h = h; +} + +draw_set_text(_f_p1, fa_left, fa_center, c_white); +draw_text(34, 18, "Pixel Composer crashed"); +draw_sprite_ext(s_noti_icon_error, 0, 18, 18, 0.5, 0.5, 0, c_white, 1); + +#region display + var bx0 = w - 32; + var by0 = 0; + var bx1 = w; + var by1 = 32; + if(point_in_rectangle(mouse_mx, mouse_my, bx0, by0, bx1, by1)) { + draw_sprite_ext(s_window_exit, 0, bx0 + 16, by0 + 16, 0.5, 0.5, 0, #eb004b, 1); + if(mouse_check_button(mb_left)) + game_end(); + } else + draw_sprite_ext(s_window_exit, 0, bx0 + 16, by0 + 16, 0.5, 0.5, 0, c_white, 1); + + var x0 = 8; + var y0 = 32; + var x1 = w - 8; + var y1 = h - 8 - 32 - 8; + var tw = x1 - x0; + var th = y1 - y0; + + draw_sprite_stretched(s_textbox, 3, x0, y0, tw, th); + draw_sprite_stretched(s_textbox, 0, x0, y0, tw, th); + + log_surface = surface_verify(log_surface, tw - 16, th - 16); + log_y = lerp_float(log_y, log_y_to, 5); + + var log_y_max = 0; + surface_set_target(log_surface); + draw_clear_alpha(0, 0); + BLEND_ALPHA_MULP + draw_set_text(_f_p1, fa_left, fa_top, c_white); + log_y_max = draw_text_ext_add(0, log_y, crash_content, -1, tw - 16); + BLEND_NORMAL + surface_reset_target(); + + log_y_max = max(0, log_y_max - th + 64); + if(mouse_wheel_down()) log_y_to = clamp(log_y_to - 64, -log_y_max, 0); + if(mouse_wheel_up()) log_y_to = clamp(log_y_to + 64, -log_y_max, 0); + + BLEND_ADD + draw_surface(log_surface, x0 + 8, y0 + 8); + BLEND_NORMAL +#endregion + +#region copy + draw_set_text(_f_p2, fa_left, fa_center, #8fde5d); + var bx1 = x1 - 8; + var bx0 = bx1 - 32 - string_width("Copy "); + var by0 = y0 + 8; + var by1 = by0 + 32; + + if(point_in_rectangle(mouse_mx, mouse_my, bx0, by0, bx1, by1)) { + if(mouse_check_button(mb_left)) { + draw_sprite_stretched_ext(s_button_hide_fill, 2, bx0, by0, bx1 - bx0, 32, #6d6d81, 1); + clipboard_set_text(crash_content); + } + + draw_sprite_stretched(s_button_hide_fill, 1, bx0, by0, bx1 - bx0, 32); + } + + draw_sprite_ext(s_copy, 0, bx0 + 16, by0 + 16, 0.5, 0.5, 0, #8fde5d, 1); + draw_text(bx0 + 32, by0 + 16, "Copy "); +#endregion + +#region close + draw_set_text(_f_p2, fa_center, fa_center, c_white); + var bw = 160; + var bh = 32; + var bx0 = w / 2 - bw / 2 - 8 - bw; + var by0 = h - 8 - bh; + + if(point_in_rectangle(mouse_mx, mouse_my, bx0, by0, bx0 + bw, by0 + bh)) { + if(mouse_check_button_pressed(mb_left)) + game_end(); + + if(mouse_check_button(mb_left)) + draw_sprite_stretched(s_button, 2, bx0, by0, bw, bh); + else + draw_sprite_stretched(s_button, 1, bx0, by0, bw, bh); + } else + draw_sprite_stretched(s_button, 0, bx0, by0, bw, bh); + draw_text(bx0 + bw / 2, by0 + bh / 2, "Close"); +#endregion + +#region open log + draw_set_text(_f_p2, fa_center, fa_center, c_white); + var bw = 160; + var bh = 32; + var bx0 = w / 2 - bw / 2; + var by0 = h - 8 - bh; + + if(point_in_rectangle(mouse_mx, mouse_my, bx0, by0, bx0 + bw, by0 + bh)) { + if(mouse_check_button_pressed(mb_left)) + shellOpenExplorer(DIRECTORY + "log"); + + if(mouse_check_button(mb_left)) + draw_sprite_stretched(s_button, 2, bx0, by0, bw, bh); + else + draw_sprite_stretched(s_button, 1, bx0, by0, bw, bh); + } else + draw_sprite_stretched(s_button, 0, bx0, by0, bw, bh); + draw_text(bx0 + bw / 2, by0 + bh / 2, "Open log folder"); +#endregion + +#region restart + draw_set_text(_f_p2, fa_center, fa_center, c_white); + var bw = 160; + var bh = 32; + var bx0 = w / 2 + bw / 2 + 8; + var by0 = h - 8 - bh; + + if(point_in_rectangle(mouse_mx, mouse_my, bx0, by0, bx0 + bw, by0 + bh)) { + if(mouse_check_button_pressed(mb_left)) { + var path = executable_get_pathname(); + execute_shell(path, "--crashed"); + } + + if(mouse_check_button(mb_left)) + draw_sprite_stretched(s_button, 2, bx0, by0, bw, bh); + else + draw_sprite_stretched(s_button, 1, bx0, by0, bw, bh); + } else + draw_sprite_stretched(s_button, 0, bx0, by0, bw, bh); + draw_text(bx0 + bw / 2, by0 + bh / 2, "Restart application"); +#endregion + +#region discord + draw_set_text(_f_p2, fa_center, fa_center, c_white); + var bw = 32; + var bh = 32; + var bx0 = w - 8 - bw; + var by0 = h - 8 - bh; + + if(point_in_rectangle(mouse_mx, mouse_my, bx0, by0, bx0 + bw, by0 + bh)) { + if(mouse_check_button_pressed(mb_left)) + url_open($"https://discord.com/channels/953634069646835773/1069552823047553076"); + + if(mouse_check_button(mb_left)) + draw_sprite_stretched(s_button_hide_fill, 2, bx0, by0, bw, bh); + else + draw_sprite_stretched(s_button_hide_fill, 1, bx0, by0, bw, bh); + } + + draw_sprite_ext(s_discord, 0, bx0 + 16, by0 + 16, 0.5, 0.5, 0, c_white, 0.5); +#endregion + +draw_sprite_stretched_ext(s_window_frame, 0, 0, 0, w, h, #eb004b, 1); \ No newline at end of file diff --git a/objects/o_crash_handler/o_crash_handler.yy b/objects/o_crash_handler/o_crash_handler.yy new file mode 100644 index 000000000..f90637e54 --- /dev/null +++ b/objects/o_crash_handler/o_crash_handler.yy @@ -0,0 +1,34 @@ +{ + "resourceType": "GMObject", + "resourceVersion": "1.0", + "name": "o_crash_handler", + "eventList": [ + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,}, + ], + "managed": true, + "overriddenProperties": [], + "parent": { + "name": "_crash_handler", + "path": "folders/_crash_handler.yy", + }, + "parentObjectId": null, + "persistent": false, + "physicsAngularDamping": 0.1, + "physicsDensity": 0.5, + "physicsFriction": 0.2, + "physicsGroup": 1, + "physicsKinematic": false, + "physicsLinearDamping": 0.1, + "physicsObject": false, + "physicsRestitution": 0.1, + "physicsSensor": false, + "physicsShape": 1, + "physicsShapePoints": [], + "physicsStartAwake": true, + "properties": [], + "solid": false, + "spriteId": null, + "spriteMaskId": null, + "visible": true, +} \ No newline at end of file diff --git a/objects/o_dialog_add_node/Create_0.gml b/objects/o_dialog_add_node/Create_0.gml index 302f8ab4e..4b46cf657 100644 --- a/objects/o_dialog_add_node/Create_0.gml +++ b/objects/o_dialog_add_node/Create_0.gml @@ -323,7 +323,8 @@ event_inherited(); // draw_set_text(f_p0, fa_center, fa_top, COLORS._main_text_sub); // draw_text(content_pane.w / 2, content_pane.h / 2 - ui(4), "Right click on a node and select 'Add to favorite'\nto add node to favorite panel."); //} - + var group_labels = []; + if(PREF_MAP[? "dialog_add_node_view"] == 0) { //grid var grid_size = ui(64); var grid_width = ui(80); @@ -335,7 +336,7 @@ event_inherited(); var cProg = 0; hh += grid_space; - grid_width = round(content_pane.surface_w - grid_space) / col - grid_space; + grid_width = round(content_pane.surface_w - grid_space) / col - grid_space; for(var index = 0; index < node_count; index++) { var _node = _list[| index]; @@ -348,12 +349,10 @@ event_inherited(); cProg = 0; curr_height = 0; - BLEND_OVERRIDE; - draw_sprite_stretched(THEME.group_label, 0, ui(16), yy, content_pane.surface_w - ui(32), ui(24)); - BLEND_NORMAL; - - draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); - draw_text(ui(16 + 16), yy + ui(12), __txt(_node)); + array_push(group_labels, { + y: yy, + text: __txt(_node) + }); hh += ui(24 + 12); yy += ui(24 + 12); @@ -417,6 +416,19 @@ event_inherited(); } } + var len = array_length(group_labels); + for( var i = 0; i < len; i++ ) { + var lb = group_labels[i]; + var _yy = max(lb.y, i == len - 1? ui(8) : min(ui(8), group_labels[i + 1].y - ui(32))); + + BLEND_OVERRIDE; + draw_sprite_stretched(THEME.group_label, 0, ui(16), _yy, content_pane.surface_w - ui(32), ui(24)); + BLEND_NORMAL; + + draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); + draw_text(ui(16 + 16), _yy + ui(12), lb.text); + } + hh += curr_height; yy += curr_height; } else if(PREF_MAP[? "dialog_add_node_view"] == 1) { //list @@ -436,12 +448,10 @@ event_inherited(); hh += ui(8); yy += ui(8); - BLEND_OVERRIDE; - draw_sprite_stretched(THEME.group_label, 0, ui(8), yy, content_pane.surface_w - ui(24), ui(24)); - BLEND_NORMAL; - - draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); - draw_text(ui(24), yy + ui(12), __txt(_node)); + array_push(group_labels, { + y: yy, + text: __txt(_node) + }); hh += ui(32); yy += ui(32); @@ -496,6 +506,19 @@ event_inherited(); yy += list_height; hh += list_height; } + + var len = array_length(group_labels); + for( var i = 0; i < len; i++ ) { + var lb = group_labels[i]; + var _yy = max(lb.y, i == len - 1? ui(8) : min(ui(8), group_labels[i + 1].y - ui(32))); + + BLEND_OVERRIDE; + draw_sprite_stretched(THEME.group_label, 0, ui(16), _yy, content_pane.surface_w - ui(32), ui(24)); + BLEND_NORMAL; + + draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text); + draw_text(ui(16 + 16), _yy + ui(12), lb.text); + } } if(ADD_NODE_PAGE == -1) diff --git a/objects/o_dialog_notifications/Create_0.gml b/objects/o_dialog_notifications/Create_0.gml index d3a5ddb7f..e04641cf5 100644 --- a/objects/o_dialog_notifications/Create_0.gml +++ b/objects/o_dialog_notifications/Create_0.gml @@ -30,7 +30,7 @@ event_inherited(); }), -1, menuItem(__txtx("noti_open_log", "Open log file"), function() { - shellOpenExplorer(DIRECTORY + "log.txt"); + shellOpenExplorer(DIRECTORY + "log/log.txt"); }), ]; diff --git a/objects/o_main/Create_0.gml b/objects/o_main/Create_0.gml index 1f3383c2d..76ff1c268 100644 --- a/objects/o_main/Create_0.gml +++ b/objects/o_main/Create_0.gml @@ -282,8 +282,12 @@ } #endregion -#region tween - tweenInit(); - +#region physics physics_world_update_iterations(100); #endregion + +#region dropper + globalvar NODE_DROPPER_TARGET, NODE_DROPPER_TARGET_CAN; + NODE_DROPPER_TARGET = noone; + NODE_DROPPER_TARGET_CAN = false; +#endregion \ No newline at end of file diff --git a/objects/o_main/Draw_75.gml b/objects/o_main/Draw_75.gml index a9296ddc4..4e702510c 100644 --- a/objects/o_main/Draw_75.gml +++ b/objects/o_main/Draw_75.gml @@ -137,6 +137,14 @@ if(OS == os_windows && gameframe_is_minimized()) exit; #region draw gui top PANEL_MAIN.drawGUI(); + + if(NODE_DROPPER_TARGET != noone) { + draw_sprite_ui(THEME.node_dropper, 0, mouse_x + ui(20), mouse_y + ui(20)); + if(mouse_press(mb_left, NODE_DROPPER_TARGET_CAN)) + NODE_DROPPER_TARGET = noone; + NODE_DROPPER_TARGET_CAN = true; + } else + NODE_DROPPER_TARGET_CAN = false; #endregion #region debug diff --git a/objects/o_main/Other_2.gml b/objects/o_main/Other_2.gml index 2483a4b67..bbda29f6b 100644 --- a/objects/o_main/Other_2.gml +++ b/objects/o_main/Other_2.gml @@ -54,6 +54,10 @@ var t = current_time; PREF_LOAD(); + var dir = string(DIRECTORY) + "log"; + if(!directory_exists(dir)) + directory_create(dir); + log_clear(); log_newline(); log_message("SESSION", "Begin"); diff --git a/objects/o_main/Step_0.gml b/objects/o_main/Step_0.gml index 643daf23a..63057fbed 100644 --- a/objects/o_main/Step_0.gml +++ b/objects/o_main/Step_0.gml @@ -152,9 +152,6 @@ if(OS == os_windows && gameframe_is_minimized()) exit; } #endregion -#region tween - //tweenStep(); -#endregion //print("===== Step end ====="); //if(keyboard_check_pressed(ord("Q"))) { diff --git a/objects/o_process_handler/Create_0.gml b/objects/o_process_handler/Create_0.gml new file mode 100644 index 000000000..750566f2e --- /dev/null +++ b/objects/o_process_handler/Create_0.gml @@ -0,0 +1,10 @@ +/// @description +#region process management + global.PROC_ID = bool(EnvironmentGetVariableExists("process_id"))? int64(EnvironmentGetVariable("process_id")) : 0; + EnvironmentSetVariable("process_id", string(global.PROC_ID + 1)); + + if (global.PROC_ID == 1) { // if spawn after the main windows + instance_destroy(o_main, false); + instance_create(0, 0, o_crash_handler); + } +#endregion \ No newline at end of file diff --git a/objects/o_process_handler/o_process_handler.yy b/objects/o_process_handler/o_process_handler.yy new file mode 100644 index 000000000..dc0c033b1 --- /dev/null +++ b/objects/o_process_handler/o_process_handler.yy @@ -0,0 +1,33 @@ +{ + "resourceType": "GMObject", + "resourceVersion": "1.0", + "name": "o_process_handler", + "eventList": [ + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,}, + ], + "managed": true, + "overriddenProperties": [], + "parent": { + "name": "main", + "path": "folders/main.yy", + }, + "parentObjectId": null, + "persistent": false, + "physicsAngularDamping": 0.1, + "physicsDensity": 0.5, + "physicsFriction": 0.2, + "physicsGroup": 1, + "physicsKinematic": false, + "physicsLinearDamping": 0.1, + "physicsObject": false, + "physicsRestitution": 0.1, + "physicsSensor": false, + "physicsShape": 1, + "physicsShapePoints": [], + "physicsStartAwake": true, + "properties": [], + "solid": false, + "spriteId": null, + "spriteMaskId": null, + "visible": true, +} \ No newline at end of file diff --git a/rooms/rm_main/rm_main.yy b/rooms/rm_main/rm_main.yy index e50cf1758..2d9800129 100644 --- a/rooms/rm_main/rm_main.yy +++ b/rooms/rm_main/rm_main.yy @@ -7,12 +7,14 @@ "inheritCreationOrder": false, "inheritLayers": false, "instanceCreationOrder": [ + {"name":"inst_5CA22FC1","path":"rooms/rm_main/rm_main.yy",}, {"name":"inst_78CD7A2C","path":"rooms/rm_main/rm_main.yy",}, ], "isDnd": false, "layers": [ {"resourceType":"GMRInstanceLayer","resourceVersion":"1.0","name":"Instances","depth":0,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"instances":[ {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_78CD7A2C","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"o_main","path":"objects/o_main/o_main.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":160.0,"y":160.0,}, + {"resourceType":"GMRInstance","resourceVersion":"1.0","name":"inst_5CA22FC1","colour":4294967295,"frozen":false,"hasCreationCode":false,"ignore":false,"imageIndex":0,"imageSpeed":1.0,"inheritCode":false,"inheritedItemId":null,"inheritItemSettings":false,"isDnd":false,"objectId":{"name":"o_process_handler","path":"objects/o_process_handler/o_process_handler.yy",},"properties":[],"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"x":160.0,"y":96.0,}, ],"layers":[],"properties":[],"userdefinedDepth":false,"visible":true,}, {"resourceType":"GMRBackgroundLayer","resourceVersion":"1.0","name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4280491036,"depth":100,"effectEnabled":true,"effectType":null,"gridX":16,"gridY":16,"hierarchyFrozen":false,"hspeed":0.0,"htiled":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"properties":[],"spriteId":null,"stretch":false,"userdefinedAnimFPS":false,"userdefinedDepth":false,"visible":true,"vspeed":0.0,"vtiled":false,"x":0,"y":0,}, ], diff --git a/scripts/BBMOD_DualQuaternion/BBMOD_DualQuaternion.yy b/scripts/BBMOD_DualQuaternion/BBMOD_DualQuaternion.yy index 6389fc4e4..3bd95a358 100644 --- a/scripts/BBMOD_DualQuaternion/BBMOD_DualQuaternion.yy +++ b/scripts/BBMOD_DualQuaternion/BBMOD_DualQuaternion.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Math", - "path": "folders/_Extensions/BBMOD/Math.yy", + "path": "folders/_extensions/BBMOD/Math.yy", }, } \ No newline at end of file diff --git a/scripts/BBMOD_Matrix/BBMOD_Matrix.yy b/scripts/BBMOD_Matrix/BBMOD_Matrix.yy index 36c09c982..285dd0a86 100644 --- a/scripts/BBMOD_Matrix/BBMOD_Matrix.yy +++ b/scripts/BBMOD_Matrix/BBMOD_Matrix.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Math", - "path": "folders/_Extensions/BBMOD/Math.yy", + "path": "folders/_extensions/BBMOD/Math.yy", }, } \ No newline at end of file diff --git a/scripts/BBMOD_Quaternion/BBMOD_Quaternion.yy b/scripts/BBMOD_Quaternion/BBMOD_Quaternion.yy index 242ceec0a..b340b441a 100644 --- a/scripts/BBMOD_Quaternion/BBMOD_Quaternion.yy +++ b/scripts/BBMOD_Quaternion/BBMOD_Quaternion.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Math", - "path": "folders/_Extensions/BBMOD/Math.yy", + "path": "folders/_extensions/BBMOD/Math.yy", }, } \ No newline at end of file diff --git a/scripts/BBMOD_Vec2/BBMOD_Vec2.yy b/scripts/BBMOD_Vec2/BBMOD_Vec2.yy index ea329e63d..d24af06fc 100644 --- a/scripts/BBMOD_Vec2/BBMOD_Vec2.yy +++ b/scripts/BBMOD_Vec2/BBMOD_Vec2.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Math", - "path": "folders/_Extensions/BBMOD/Math.yy", + "path": "folders/_extensions/BBMOD/Math.yy", }, } \ No newline at end of file diff --git a/scripts/BBMOD_Vec3/BBMOD_Vec3.yy b/scripts/BBMOD_Vec3/BBMOD_Vec3.yy index 05bb66673..27658af3b 100644 --- a/scripts/BBMOD_Vec3/BBMOD_Vec3.yy +++ b/scripts/BBMOD_Vec3/BBMOD_Vec3.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Math", - "path": "folders/_Extensions/BBMOD/Math.yy", + "path": "folders/_extensions/BBMOD/Math.yy", }, } \ No newline at end of file diff --git a/scripts/BBMOD_Vec4/BBMOD_Vec4.yy b/scripts/BBMOD_Vec4/BBMOD_Vec4.yy index 6e74ee30c..8c47d469c 100644 --- a/scripts/BBMOD_Vec4/BBMOD_Vec4.yy +++ b/scripts/BBMOD_Vec4/BBMOD_Vec4.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Math", - "path": "folders/_Extensions/BBMOD/Math.yy", + "path": "folders/_extensions/BBMOD/Math.yy", }, } \ No newline at end of file diff --git a/scripts/Tweener/Tweener.gml b/scripts/Tweener/Tweener.gml index 2ab315f4e..f25564973 100644 --- a/scripts/Tweener/Tweener.gml +++ b/scripts/Tweener/Tweener.gml @@ -52,14 +52,4 @@ function Tween(value, valType = TWEEN_VALUE.number, twType = TWEEN_TYPE.log, twS } static destroy = function() { array_remove(TWEEN_VALUES, self); } -} - -function tweenInit() { - globalvar TWEEN_VALUES; - TWEEN_VALUES = []; -} - -function tweenStep() { - for( var i = 0; i < array_length(TWEEN_VALUES); i++ ) - TWEEN_VALUES[i].step(); } \ No newline at end of file diff --git a/scripts/__bone/__bone.gml b/scripts/__bone/__bone.gml new file mode 100644 index 000000000..2de7f0553 --- /dev/null +++ b/scripts/__bone/__bone.gml @@ -0,0 +1,81 @@ +function __Bone(parent = noone, distance = 0, direction = 0, angle = 0, length = 0) constructor { + self.distance = distance; + self.direction = direction; + self.angle = angle; + self.length = length; + + self.is_main = false; + self.parent_anchor = true; + self.childs = []; + + self.parent = parent; + if(parent != noone) { + distance = parent.length; + direction = parent.angle; + } + + static addChild = function(bone) { + array_push(childs, bone); + return self; + } + + static getPoint = function(distance, direction) { + if(parent == noone) + return new Point(lengthdir_x(self.distance, self.direction), lengthdir_y(self.distance, self.direction)) + .add(lengthdir_x( distance, direction), lengthdir_y( distance, direction)); + + if(parent_anchor) { + var p = parent.getPoint(parent.length, parent.angle); + return p.add(lengthdir_x(distance, direction), lengthdir_y(distance, direction)); + } + + var p = parent.getPoint(self.distance, self.direction); + return p.add(lengthdir_x(distance, direction), lengthdir_y(distance, direction)); + } + + static draw = function(edit = false, _x = 0, _y = 0, _s = 1, _mx = 0, _my = 0, child = true, hovering = noone) { + var hover = noone; + + var p0 = getPoint(0, 0); + var p1 = getPoint(length, angle); + + p0.x = _x + p0.x * _s; + p0.y = _y + p0.y * _s; + p1.x = _x + p1.x * _s; + p1.y = _y + p1.y * _s; + + if(parent != noone) { + var aa = (hovering != noone && hovering[0] == self && hovering[1] == 2)? 1 : 0.75; + draw_set_color(COLORS._main_accent); + draw_set_alpha(aa); + draw_line_width2(p0.x, p0.y, p1.x, p1.y, 6, 2); + draw_set_alpha(1.00); + + if(edit && distance_to_line(_mx, _my, p0.x, p0.y, p1.x, p1.y) <= 6) + hover = [ self, 2 ]; + + if(!parent_anchor) { + if(edit && point_in_circle(_mx, _my, p0.x, p0.y, ui(12))) { + draw_sprite_colored(THEME.anchor_selector, 0, p0.x, p0.y); + hover = [ self, 0 ]; + } else + draw_sprite_colored(THEME.anchor_selector, 2, p0.x, p0.y); + } + + if(edit && point_in_circle(_mx, _my, p1.x, p1.y, ui(12))) { + draw_sprite_colored(THEME.anchor_selector, 0, p1.x, p1.y); + hover = [ self, 1 ]; + } else + draw_sprite_colored(THEME.anchor_selector, 2, p1.x, p1.y); + } + + if(child) + for( var i = 0; i < array_length(childs); i++ ) { + var h = childs[i].draw(edit, _x, _y, _s, _mx, _my, true, hovering) + if(hover == noone && h != noone) + hover = h; + } + + return hover; + } +} \ No newline at end of file diff --git a/scripts/__bone/__bone.yy b/scripts/__bone/__bone.yy new file mode 100644 index 000000000..615592a67 --- /dev/null +++ b/scripts/__bone/__bone.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "__bone", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "armature", + "path": "folders/nodes/data/compose/armature.yy", + }, +} \ No newline at end of file diff --git a/scripts/__point/__point.gml b/scripts/__point/__point.gml index a49af342a..2136cfefc 100644 --- a/scripts/__point/__point.gml +++ b/scripts/__point/__point.gml @@ -12,6 +12,10 @@ function Point(x = 0, y = 0) constructor { static add = function(x, y) { self.x += x; self.y += y; return self; } static addPoint = function(p) { self.x += p.x; self.y += p.y; return self; } + + static _add = function(x, y) { return new Point(self.x + x, self.y + y); } + static _addPoint = function(p) { return new Point(self.x + p.x, self.y + p.y); } + static lerpTo = function(p, rat) { return new Point( lerp(x, p.x, rat), lerp(y, p.y, rat) ); } static directionTo = function(p) { return point_direction(x, y, p.x, p.y); } static distanceTo = function(p) { return point_distance(x, y, p.x, p.y); } diff --git a/scripts/__strandSim/__strandSim.gml b/scripts/__strandSim/__strandSim.gml index 9ef69a1cb..0bbdbc73a 100644 --- a/scripts/__strandSim/__strandSim.gml +++ b/scripts/__strandSim/__strandSim.gml @@ -268,7 +268,7 @@ function Strand(sx = 0, sy = 0, amount = 5, length = 8, direct = 0, curlFreq = 4 nx = _x + nx * _s; ny = _y + ny * _s; - draw_circle(nx, ny, 3, false); + draw_circle_prec(nx, ny, 3, false); } } diff --git a/scripts/_node_strand_affector/_node_strand_affector.gml b/scripts/_node_strand_affector/_node_strand_affector.gml index 8d8af6dc0..0f57cdfe1 100644 --- a/scripts/_node_strand_affector/_node_strand_affector.gml +++ b/scripts/_node_strand_affector/_node_strand_affector.gml @@ -81,7 +81,7 @@ function _Node_Strand_Affector(_x, _y, _group = noone) : Node(_x, _y, _group) co draw_set_color(COLORS._main_accent); if(_typ == 0) { - draw_circle(px, py, _ran, true); + draw_circle_prec(px, py, _ran, true); var x0 = px - (_ran + fal); var y0 = py - (_ran + fal); diff --git a/scripts/addon_function/addon_function.gml b/scripts/addon_function/addon_function.gml index c2efb908d..c31c67b12 100644 --- a/scripts/addon_function/addon_function.gml +++ b/scripts/addon_function/addon_function.gml @@ -57,24 +57,31 @@ function addonContextSubMenu(_name, _content) constructor { } function addonTrigger(_addon, _openDialog = true) { - var _name = filename_name_only(_addon); - with(_addon_custom) { - if(name != _name) - continue; - - instance_destroy(); - return; - } - - var addonPath = DIRECTORY + "Addons\\" + _name; - if(!directory_exists(addonPath)) return; - - with(instance_create(0, 0, _addon_custom)) - init(addonPath, _openDialog); + if(addonActivated(_addon)) addonUnload(_addon); + else addonLoad(_addon, _openDialog); } function addonActivated(_addon) { var _name = filename_name_only(_addon); with(_addon_custom) if(name == _name) return true; return false; +} + +function addonLoad(_addon, _openDialog = true) { + var _name = filename_name_only(_addon); + var addonPath = DIRECTORY + "Addons\\" + _name; + if(!directory_exists(addonPath)) return; + + with(_addon_custom) if(name == _name) return; + + with(instance_create(0, 0, _addon_custom)) + init(addonPath, _openDialog); +} + +function addonUnload(_addon) { + var _name = filename_name_only(_addon); + var addonPath = DIRECTORY + "Addons\\" + _name; + if(!directory_exists(addonPath)) return; + + with(_addon_custom) if(name == _name) instance_destroy(); } \ No newline at end of file diff --git a/scripts/bbmod_lerp_delta_time/bbmod_lerp_delta_time.yy b/scripts/bbmod_lerp_delta_time/bbmod_lerp_delta_time.yy index c79486b5e..0d6c33634 100644 --- a/scripts/bbmod_lerp_delta_time/bbmod_lerp_delta_time.yy +++ b/scripts/bbmod_lerp_delta_time/bbmod_lerp_delta_time.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Math", - "path": "folders/_Extensions/BBMOD/Math.yy", + "path": "folders/_extensions/BBMOD/Math.yy", }, } \ No newline at end of file diff --git a/scripts/curveBox/curveBox.gml b/scripts/curveBox/curveBox.gml index 812e55482..0fe28ba45 100644 --- a/scripts/curveBox/curveBox.gml +++ b/scripts/curveBox/curveBox.gml @@ -132,9 +132,9 @@ function curveBox(_onModify) : widget() constructor { if(i > 0) { //draw pre line draw_line(bx0, by0, _x0, _y0); - draw_circle(bx0, by0, 3, false); + draw_circle_prec(bx0, by0, 3, false); if(hover && point_in_circle(msx, msy, bx0, by0, 10)) { - draw_circle(bx0, by0, 5, false); + draw_circle_prec(bx0, by0, 5, false); node_hovering = ind + 2; node_hover_typ = -1; } @@ -143,18 +143,18 @@ function curveBox(_onModify) : widget() constructor { if(i < points - 1) { //draw post line draw_line(ax0, ay0, _x0, _y0); - draw_circle(ax0, ay0, 3, false); + draw_circle_prec(ax0, ay0, 3, false); if(hover && point_in_circle(msx, msy, ax0, ay0, 10)) { - draw_circle(ax0, ay0, 5, false); + draw_circle_prec(ax0, ay0, 5, false); node_hovering = ind + 2; node_hover_typ = 1; } } draw_set_color(COLORS._main_accent); - draw_circle(_x0, _y0, 3, false); + draw_circle_prec(_x0, _y0, 3, false); if(hover && point_in_circle(msx, msy, _x0, _y0, 10)) { - draw_circle(_x0, _y0, 5, false); + draw_circle_prec(_x0, _y0, 5, false); node_hovering = ind + 2; node_hover_typ = 0; } diff --git a/scripts/debug/debug.gml b/scripts/debug/debug.gml index d7b85032e..7692b5557 100644 --- a/scripts/debug/debug.gml +++ b/scripts/debug/debug.gml @@ -15,7 +15,7 @@ function _log_template() { return $"{string(current_year)}/{string(current_month)}/{string(current_day)} {string_lead_zero(current_hour, 2)}:{string_lead_zero(current_minute, 2)}:{string_lead_zero(current_second, 2)} > "; } -function __log(title, str, fname = "log.txt") { +function __log(title, str, fname = "log/log.txt") { var path = DIRECTORY + fname; var f = file_text_open_append(path); var t = _log_template(); @@ -42,14 +42,14 @@ function log_crash(str) { } function log_newline() { - var path = DIRECTORY + "log.txt"; + var path = DIRECTORY + "log/log.txt"; var f = file_text_open_write(path); file_text_writeln(f); file_text_close(f); } function log_clear() { - var path = DIRECTORY + "log.txt"; + var path = DIRECTORY + "log/log.txt"; if(file_exists(path)) file_delete(path); } @@ -81,26 +81,14 @@ function setException() { tt += ex.stacktrace[i] + "\n"; } tt += "\n---------------------------- :( ----------------------------\n"; - - var path = string(DIRECTORY) + "crash_log.txt"; + + var path = DIRECTORY + "log/crash_log.txt"; file_text_write_all(path, tt); clipboard_set_text(tt); show_debug_message(tt); - - var tt = "\n-------------------------- OH NO --------------------------\n\n"; - tt += ex.longMessage; - tt += "\n---------------------------- :( ----------------------------\n"; - tt += "\n\nCrash log stored in clipboard and saved at " + path; - tt += "\n\nRelaunch the program?"; - - widget_set_caption("Pixel Composer crashed"); - widget_set_icon(DIRECTORY + "icon.png"); - - if(show_question(tt)) { - var path = executable_get_pathname(); - execute_shell(path, "--crashed"); - } + ExecProcessFromArgVAsync(GetArgVFromProcid(ProcIdFromSelf())); //create new dialog + return 0; }); } diff --git a/scripts/draw_circle_prec/draw_circle_prec.gml b/scripts/draw_circle_prec/draw_circle_prec.gml new file mode 100644 index 000000000..04fa56e03 --- /dev/null +++ b/scripts/draw_circle_prec/draw_circle_prec.gml @@ -0,0 +1,4 @@ +function draw_circle_prec(x, y, r, border, precision = 32) { + draw_set_circle_precision(precision); + draw_circle(x, y, r, border); +} \ No newline at end of file diff --git a/scripts/draw_circle_prec/draw_circle_prec.yy b/scripts/draw_circle_prec/draw_circle_prec.yy new file mode 100644 index 000000000..7fdd2f6af --- /dev/null +++ b/scripts/draw_circle_prec/draw_circle_prec.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "draw_circle_prec", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "draw", + "path": "folders/functions/draw.yy", + }, +} \ No newline at end of file diff --git a/scripts/draw_corner/draw_corner.gml b/scripts/draw_corner/draw_corner.gml index 3637cb925..2a1987b7f 100644 --- a/scripts/draw_corner/draw_corner.gml +++ b/scripts/draw_corner/draw_corner.gml @@ -1,4 +1,4 @@ -function draw_corner(x1, y1, xc, yc, x3, y3, thick = 1, col = c_white) { +function draw_corner(x1, y1, xc, yc, x3, y3, thick = 1, col = c_white, sample = 10) { var dir0 = point_direction(x1, y1, xc, yc); var dir1 = point_direction(x3, y3, xc, yc); @@ -10,9 +10,9 @@ function draw_corner(x1, y1, xc, yc, x3, y3, thick = 1, col = c_white) { var x4 = p4[0]; var y4 = p4[1]; - //draw_circle(x1, y1, 3, false); - //draw_circle(xc, yc, 3, false); - //draw_circle(x3, y3, 3, false); + //draw_circle_prec(x1, y1, 3, false); + //draw_circle_prec(xc, yc, 3, false); + //draw_circle_prec(x3, y3, 3, false); var ra = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4); if(ra == 0) return; @@ -26,7 +26,8 @@ function draw_corner(x1, y1, xc, yc, x3, y3, thick = 1, col = c_white) { draw_set_color(col); var ox, oy, nx, ny; - for( var i = 0; i <= 1; i += 0.1 ) { + var st = 1 / round(sample); + for( var i = 0; i <= 1; i += st ) { var a = d0 + angle_difference(d1, d0) * i; nx = px + lengthdir_x(r, a); ny = py + lengthdir_y(r, a); diff --git a/scripts/draw_line_curve/draw_line_curve.gml b/scripts/draw_line_curve/draw_line_curve.gml index 318c32eb0..1eb780284 100644 --- a/scripts/draw_line_curve/draw_line_curve.gml +++ b/scripts/draw_line_curve/draw_line_curve.gml @@ -39,8 +39,8 @@ function draw_line_curve_color(x0, y0, x1, y1, xc = noone, yc = noone, _s = 1, t if(xc == noone) xc = (x0 + x1) / 2; if(yc == noone) yc = (y0 + y1) / 2; - var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 16 * PREF_MAP[? "connection_line_sample"]); - sample = clamp(sample, 8, 128); + var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 32 * PREF_MAP[? "connection_line_sample"]); + sample = clamp(sample, 2, 128); var x2 = lerp(x0, x1, 0. - sign(x1 - x0) * 0.2) - abs(y1 - y0) * 0.1; var x3 = lerp(x0, x1, 1. + sign(x1 - x0) * 0.2) + abs(y1 - y0) * 0.1; @@ -88,8 +88,8 @@ function draw_line_curve_color(x0, y0, x1, y1, xc = noone, yc = noone, _s = 1, t } function draw_line_curve_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white) { - var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 16 * PREF_MAP[? "connection_line_sample"]); - sample = clamp(sample, 8, 128); + var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 32 * PREF_MAP[? "connection_line_sample"]); + sample = clamp(sample, 2, 128); var x2 = lerp(x0, x1, 0.9); var x3 = x1; @@ -125,8 +125,8 @@ function draw_line_curve_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_whit } function distance_to_curve(mx, my, x0, y0, x1, y1, xc, yc, _s) { - var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 16 * PREF_MAP[? "connection_line_sample"]); - sample = clamp(sample, 8, 128); + var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 32 * PREF_MAP[? "connection_line_sample"]); + sample = clamp(sample, 2, 128); var dist = 999999; var ox, oy, nx, ny, t, it; @@ -163,8 +163,8 @@ function distance_to_curve(mx, my, x0, y0, x1, y1, xc, yc, _s) { } function distance_to_curve_corner(mx, my, x0, y0, x1, y1, _s) { - var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 16 * PREF_MAP[? "connection_line_sample"]); - sample = clamp(sample, 8, 128); + var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 32 * PREF_MAP[? "connection_line_sample"]); + sample = clamp(sample, 2, 128); var dist = 999999; var ox, oy, nx, ny, t, it; diff --git a/scripts/draw_line_elbow/draw_line_elbow.gml b/scripts/draw_line_elbow/draw_line_elbow.gml index 8e9e42aa3..860924c57 100644 --- a/scripts/draw_line_elbow/draw_line_elbow.gml +++ b/scripts/draw_line_elbow/draw_line_elbow.gml @@ -1,4 +1,7 @@ function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { + var sample = corner / 4; + sample = clamp(sample, 1, 8); + if(cx == noone) cx = (x0 + x1) / 2; if(cy == noone) cy = (y0 + y1) / 2; @@ -6,13 +9,13 @@ function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, t var _x1 = max(x0, x1); var _y0 = min(y0, y1); var _y1 = max(y0, y1); - var th = thick / 2; + var th = thick / 2; var inv = x1 - 16 * indexOut * _s <= x0 + 16 * indexIn * _s; var rat = inv? (_y1 == _y0? 0.5 : (cy - _y0) / (_y1 - _y0)) : (_x1 == _x0? 0.5 : (cx - _x0) / (_x1 - _x0)); var cm = merge_color(col1, col2, clamp(rat, 0, 1)); - var iy = sign(y1 - y0); + var iy = sign(y1 - y0); var iy0 = sign(cy - y0); var iy1 = sign(y1 - cy); @@ -31,13 +34,13 @@ function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, t draw_line_round_color(xx1, cy + corner * iy1, xx1, y1 - corns * iy1, thick, cm, col2); if(corns) { - draw_corner(xx0 - corns, y0, xx0, y0, xx0, y0 + corns * iy0, thick, col1); - draw_corner(xx1, y1 - corns * iy1, xx1, y1, xx1 + corns, y1, thick, col2); + draw_corner(xx0 - corns, y0, xx0, y0, xx0, y0 + corns * iy0, thick, col1, sample); + draw_corner(xx1, y1 - corns * iy1, xx1, y1, xx1 + corns, y1, thick, col2, sample); } if(corner) { - draw_corner(xx0, cy - corner * iy0, xx0, cy, xx0 - corner, cy, thick, cm); - draw_corner(xx1 + corner, cy, xx1, cy, xx1, cy + corner * iy1, thick, cm); + draw_corner(xx0, cy - corner * iy0, xx0, cy, xx0 - corner, cy, thick, cm, sample); + draw_corner(xx1 + corner, cy, xx1, cy, xx1, cy + corner * iy1, thick, cm, sample); } } else { draw_set_color(col1); draw_line_width(x0, y0, xx0, y0, thick); @@ -56,8 +59,8 @@ function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, t draw_line_round_color(cx + corner * sign(x1 - cx), y1, x1, y1, thick, cm, col2); if(corner) { - draw_corner(cx - corner * sign(cx - x0), y0, cx, y0, cx, y0 + corner * iy, thick, cm); - draw_corner(cx, y1 - corner * iy, cx, y1, cx + corner * sign(x1 - cx), y1, thick, cm); + draw_corner(cx - corner * sign(cx - x0), y0, cx, y0, cx, y0 + corner * iy, thick, cm, sample); + draw_corner(cx, y1 - corner * iy, cx, y1, cx + corner * sign(x1 - cx), y1, thick, cm, sample); } } else { draw_line_dashed_color(x0, y0, cx, y0, thick, col1, cm, 12); @@ -68,6 +71,9 @@ function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, t } function draw_line_elbow_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { + var sample = corner / 4; + sample = clamp(sample, 1, 8); + var rat = abs(x0 - x1) / (abs(x0 - x1) + abs(y0 - y1)); var colc = merge_color(col1, col2, rat); corner = min(corner, abs(x0 - x1), abs(y0 - y1)); @@ -77,7 +83,7 @@ function draw_line_elbow_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_whit draw_line_round_color(x0, y0, x1 - corner * sx, y0, thick, col1, colc); draw_line_round_color(x1, y0 + corner * sy, x1, y1, thick, colc, col2); - draw_corner(x1 - corner * sx, y0, x1, y0, x1, y0 + corner * sy, thick, colc); + draw_corner(x1 - corner * sx, y0, x1, y0, x1, y0 + corner * sy, thick, colc, sample); } function distance_to_elbow(mx, my, x0, y0, x1, y1, cx, cy, _s, indexIn = 1, indexOut = 1) { diff --git a/scripts/draw_line_elbow_diag/draw_line_elbow_diag.gml b/scripts/draw_line_elbow_diag/draw_line_elbow_diag.gml index 16ace9ad2..109503c7a 100644 --- a/scripts/draw_line_elbow_diag/draw_line_elbow_diag.gml +++ b/scripts/draw_line_elbow_diag/draw_line_elbow_diag.gml @@ -1,4 +1,7 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, thick = 1, c1 = c_white, c2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { + var sample = corner / 4; + sample = clamp(sample, 1, 8); + if(cx == noone) cx = (x0 + x1) / 2; if(cy == noone) cy = (y0 + y1) / 2; @@ -58,9 +61,9 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = draw_line_round_color(x1s + _xcr, y0 + _xcr * iy, xx1 - _ycr, y1s - _ycr * iy, thick, cm, cm); - if(cS) draw_corner(xx1, y1 - cS * iy, xx1, y1, xx1 + cS, y1, thick, c2); - if(xcr) draw_corner(x1s - xcr, y0, x1s, y0, x1s + _xcr, y0 + _xcr * iy, thick, cm); - if(ycr) draw_corner(xx1 - _ycr, y1s - _ycr * iy, xx1, y1s, xx1, y1s + ycr * iy, thick, cm); + if(cS) draw_corner(xx1, y1 - cS * iy, xx1, y1, xx1 + cS, y1, thick, c2, sample); + if(xcr) draw_corner(x1s - xcr, y0, x1s, y0, x1s + _xcr, y0 + _xcr * iy, thick, cm, sample); + if(ycr) draw_corner(xx1 - _ycr, y1s - _ycr * iy, xx1, y1s, xx1, y1s + ycr * iy, thick, cm, sample); } else if(bot) { draw_line_round_color(x0, y0, xx0 - cS, y0, thick, c1, c1); draw_line_round_color(xx1, y1, x1, y1, thick, c2, c2); @@ -79,9 +82,9 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = draw_line_round_color(xx0 + _ycr, y1s + _ycr * iy, x1s - _xcr, y1 - _xcr * iy, thick, cm, cm); - if(cS) draw_corner(xx0 - cS, y0, xx0, y0, xx0, y0 + cS * iy, thick, c1); - if(xcr) draw_corner(x1s - _xcr, y1 - _xcr * iy, x1s, y1, x1s + xcr, y1, thick, cm); - if(ycr) draw_corner(xx0, y1s - ycr * iy, xx0, y1s, xx0 + _ycr, y1s + _ycr * iy, thick, cm); + if(cS) draw_corner(xx0 - cS, y0, xx0, y0, xx0, y0 + cS * iy, thick, c1, sample); + if(xcr) draw_corner(x1s - _xcr, y1 - _xcr * iy, x1s, y1, x1s + xcr, y1, thick, cm, sample); + if(ycr) draw_corner(xx0, y1s - ycr * iy, xx0, y1s, xx0 + _ycr, y1s + _ycr * iy, thick, cm, sample); } else { draw_line_round_color(x0, y0, xx0 - cS0, y0, thick, c1, c1); draw_line_round_color(xx1 + cS1, y1, x1, y1, thick, c2, c2); @@ -101,11 +104,11 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = draw_line_round_color(xx0 + _corY0, yC0 + _corY0 * iy, xx1 - _corY1, yC1 - _corY1 * iy, thick, cm, cm); - if(cS0) draw_corner(xx0 - cS0, y0, xx0, y0, xx0, y0 + cS0 * iy0, thick, c1); - if(cS1) draw_corner(xx1, y1 - cS1 * iy1, xx1, y1, xx1 + cS1, y1, thick, c2); + if(cS0) draw_corner(xx0 - cS0, y0, xx0, y0, xx0, y0 + cS0 * iy0, thick, c1, sample); + if(cS1) draw_corner(xx1, y1 - cS1 * iy1, xx1, y1, xx1 + cS1, y1, thick, c2, sample); - if(corY0) draw_corner(xx0, yC0 - corY0 * iy, xx0, yC0, xx0 + _corY0, yC0 + _corY0 * iy, thick, cm); - if(corY1) draw_corner(xx1, yC1 + corY1 * iy, xx1, yC1, xx1 - _corY1, yC1 - _corY1 * iy, thick, cm); + if(corY0) draw_corner(xx0, yC0 - corY0 * iy, xx0, yC0, xx0 + _corY0, yC0 + _corY0 * iy, thick, cm, sample); + if(corY1) draw_corner(xx1, yC1 + corY1 * iy, xx1, yC1, xx1 - _corY1, yC1 - _corY1 * iy, thick, cm, sample); } } else { var cR0 = min(cS, abs(y0 - cy) / 2); @@ -144,8 +147,8 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = draw_line_round_color( crX0 - _cR, crY0 + _cR * iy0, crX3 + _cR, crY3 - _cR * iy1, thick, cm, cm); if(cR) { - draw_corner( crX0, crY0 - cR * iy0, crX0, crY0, crX0 - _cR, crY0 + _cR * iy0, thick, cm); - draw_corner(crX3 + _cR, crY3 - _cR * iy1, crX3, crY3, crX3, crY3 + cR * iy1, thick, cm); + draw_corner( crX0, crY0 - cR * iy0, crX0, crY0, crX0 - _cR, crY0 + _cR * iy0, thick, cm, sample); + draw_corner(crX3 + _cR, crY3 - _cR * iy1, crX3, crY3, crX3, crY3 + cR * iy1, thick, cm, sample); } } else { draw_line_round_color( crX0, y0 + cR0 * iy0, crX0, crY0 - crn0 * iy0, thick, c1, cm); @@ -156,13 +159,13 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = draw_line_round_color(crX2 - _crn1 * ix, crY2 + _crn1 * iy1, crX3 + _crn1 * ix, crY3 - _crn1 * iy1, thick, cm, cm); if(crn0) { - draw_corner( crX0, crY0 - crn0 * iy0, crX0, crY0, crX0 - _crn0 * ix, crY0 + _crn0 * iy0, thick, cm); - draw_corner(crX1 + _crn0 * ix, crY1 - _crn0 * iy0, crX1, crY1, crX1 - crn0 * ix, crY1, thick, cm); + draw_corner( crX0, crY0 - crn0 * iy0, crX0, crY0, crX0 - _crn0 * ix, crY0 + _crn0 * iy0, thick, cm, sample); + draw_corner(crX1 + _crn0 * ix, crY1 - _crn0 * iy0, crX1, crY1, crX1 - crn0 * ix, crY1, thick, cm, sample); } if(crn1) { - draw_corner(crX2 + crn1 * ix, crY2, crX2, crY2, crX2 - _crn1 * ix, crY2 + _crn1 * iy1, thick, cm); - draw_corner( crX3, crY3 + crn1 * iy1, crX3, crY3, crX3 + _crn1 * ix, crY3 - _crn1 * iy1, thick, cm); + draw_corner(crX2 + crn1 * ix, crY2, crX2, crY2, crX2 - _crn1 * ix, crY2 + _crn1 * iy1, thick, cm, sample); + draw_corner( crX3, crY3 + crn1 * iy1, crX3, crY3, crX3 + _crn1 * ix, crY3 - _crn1 * iy1, thick, cm, sample); } } } @@ -187,8 +190,8 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = draw_line_round_color(_xc1 + corn, y1, x1, y1, thick, cm, c2); if(corn) { - draw_corner(_xc0 - corn, y0, _xc0, y0, _xc0 + cor2, y0 + cor2 * iy, thick, cm); - draw_corner(_xc1 - cor2, y1 - cor2 * iy, _xc1, y1, _xc1 + corn, y1, thick, cm); + draw_corner(_xc0 - corn, y0, _xc0, y0, _xc0 + cor2, y0 + cor2 * iy, thick, cm, sample); + draw_corner(_xc1 - cor2, y1 - cor2 * iy, _xc1, y1, _xc1 + corn, y1, thick, cm, sample); } } else { draw_line_dashed_color( x0, y0, _xc0, y0, thick, c1, cm, 12); @@ -199,6 +202,9 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = } function draw_line_elbow_diag_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { + var sample = corner / 4; + sample = clamp(sample, 1, 8); + var rat = abs(x0 - x1) / (abs(x0 - x1) + abs(y0 - y1)); var colc = merge_color(col1, col2, rat); @@ -212,8 +218,8 @@ function draw_line_elbow_diag_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c draw_line_round_color(x1 - (diag - cor2) * sx, y0 + cor2 * sy, x1 - cor2 * sx, y0 + (diag - cor2) * sy, thick, colc, colc); draw_line_round_color( x1, y0 + (diag + corner) * sy, x1, y1, thick, colc, col2); - draw_corner(x1 - (diag + corner) * sx, y0, x1 - diag * sx, y0, x1 - (diag - cor2) * sx, y0 + cor2 * sy, thick, colc); - draw_corner(x1 - cor2 * sx, y0 + (diag - cor2) * sy, x1, y0 + diag * sy, x1, y0 + (diag + corner) * sy, thick, colc); + draw_corner(x1 - (diag + corner) * sx, y0, x1 - diag * sx, y0, x1 - (diag - cor2) * sx, y0 + cor2 * sy, thick, colc, sample); + draw_corner(x1 - cor2 * sx, y0 + (diag - cor2) * sy, x1, y0 + diag * sy, x1, y0 + (diag + corner) * sy, thick, colc, sample); //draw_circle(x1 - diag * sx, y0, 4, false); //draw_circle(x1, y0 + diag * sy, 4, false); diff --git a/scripts/draw_line_round/draw_line_round.gml b/scripts/draw_line_round/draw_line_round.gml index 220ba23d6..cca1edd9d 100644 --- a/scripts/draw_line_round/draw_line_round.gml +++ b/scripts/draw_line_round/draw_line_round.gml @@ -1,6 +1,7 @@ function draw_line_round(x1, y1, x2, y2, w) { draw_line_width(x1, y1, x2, y2, w); - + + draw_set_circle_precision(8); draw_circle(x1, y1, w/2, false); draw_circle(x2, y2, w/2, false); } @@ -8,6 +9,7 @@ function draw_line_round(x1, y1, x2, y2, w) { function draw_line_round_color(x1, y1, x2, y2, w, c1, c2) { draw_line_width_color(x1, y1, x2, y2, w, c1, c2); + draw_set_circle_precision(8); draw_set_color(c1); draw_circle(x1, y1, w/2, false); diff --git a/scripts/draw_text_function/draw_text_function.gml b/scripts/draw_text_function/draw_text_function.gml index 372e74733..064218d4e 100644 --- a/scripts/draw_text_function/draw_text_function.gml +++ b/scripts/draw_text_function/draw_text_function.gml @@ -10,8 +10,9 @@ function draw_text_add(_x, _y, _text, scale = 1) { function draw_text_ext_add(_x, _y, _text, _sep, _w, scale = 1) { BLEND_ALPHA_MULP; - __draw_text_ext_transformed(_x, _y, _text, _sep, _w, scale, scale, 0); + var h = __draw_text_ext_transformed(_x, _y, _text, _sep, _w, scale, scale, 0); BLEND_NORMAL; + return h; } function draw_text_bbox(bbox, text) { @@ -28,7 +29,7 @@ function draw_text_cut(x, y, str, w, scale = 1) { function __draw_text_ext_transformed(_x, _y, _text, _sep, _w, sx, sy, rotation) { if(!LOCALE.config.per_character_line_break) { draw_text_ext_transformed(_x, _y, _text, _sep, _w, sx, sy, rotation); - return; + return string_height_ext(_text, _sep, _w) * sy; } var lines = []; @@ -40,11 +41,16 @@ function __draw_text_ext_transformed(_x, _y, _text, _sep, _w, sx, sy, rotation) var ch = string_char_at(_text, i); var ww = string_width(ch) * sx; - if(line_w + ww > _w) { + if(ch == "\n" || line_w + ww > _w) { array_push(lines, line); - line = ch; - line_w = ww; - } else { + if(ch != "\n") { + line = ch; + line_w = ww; + } else { + line = ""; + line_w = 0; + } + } else if(ch != "\n") { line += ch; line_w += ww; } @@ -81,6 +87,8 @@ function __draw_text_ext_transformed(_x, _y, _text, _sep, _w, sx, sy, rotation) draw_set_halign(ha); draw_set_valign(va); + + return hh; } #macro _string_width_ext string_width_ext diff --git a/scripts/gameframe/gameframe.yy b/scripts/gameframe/gameframe.yy index a7858346d..09fc8ff93 100644 --- a/scripts/gameframe/gameframe.yy +++ b/scripts/gameframe/gameframe.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Gameframe", - "path": "folders/_Extensions/Gameframe.yy", + "path": "folders/_extensions/Gameframe.yy", }, } \ No newline at end of file diff --git a/scripts/gameframe_macros/gameframe_macros.yy b/scripts/gameframe_macros/gameframe_macros.yy index 6248e1b38..b5cd4257a 100644 --- a/scripts/gameframe_macros/gameframe_macros.yy +++ b/scripts/gameframe_macros/gameframe_macros.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "Gameframe", - "path": "folders/_Extensions/Gameframe.yy", + "path": "folders/_extensions/Gameframe.yy", }, } \ No newline at end of file diff --git a/scripts/globals/globals.gml b/scripts/globals/globals.gml index 14c5f911e..62b0f1c50 100644 --- a/scripts/globals/globals.gml +++ b/scripts/globals/globals.gml @@ -1,11 +1,10 @@ #region save globalvar LOADING, LOADING_VERSION, APPENDING, CLONING, SAFE_MODE; + globalvar LOAD_ADDON; globalvar MODIFIED, CURRENT_PATH, READONLY, CONNECTION_CONFLICT, GLOBAL_SEED, ALWAYS_FULL; - globalvar RENDERING; - - RENDERING = false; LOADING = false; + LOAD_ADDON = {}; CLONING = false; LOADING_VERSION = 0; APPENDING = false; diff --git a/scripts/json_file/json_file.gml b/scripts/json_file/json_file.gml index 423228519..962357221 100644 --- a/scripts/json_file/json_file.gml +++ b/scripts/json_file/json_file.gml @@ -34,7 +34,7 @@ function json_save_struct(path, struct, pretty = false) { var s; if(pretty) - s = json_beautify(json_stringify(struct)); + s = json_stringify(struct, true); else s = json_stringify_minify(struct); diff --git a/scripts/load_function/load_function.gml b/scripts/load_function/load_function.gml index 34e09f247..635ceedf6 100644 --- a/scripts/load_function/load_function.gml +++ b/scripts/load_function/load_function.gml @@ -113,14 +113,10 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) { try { if(struct_has(_load_content, "addon")) { var _addon = _load_content.addon; - - with(addon) { - if(!struct_has(_addon, name)) continue; - var _mp = json_parse(_addon.name); - - lua_call(thread, "deserialize", _mp); - } - } + LOAD_ADDON = _addon; + struct_foreach(_addon, function(_name, _value) { addonLoad(_name, false); }); + } else + LOAD_ADDON = {}; } catch(e) { log_warning("LOAD, addon", exception_print(e)); } @@ -192,7 +188,7 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) { log_warning("LOAD, connect", exception_print(e)); } - UPDATE |= RENDER_TYPE.full; + Render(); LOADING = false; MODIFIED = false; diff --git a/scripts/locale_data/locale_data.gml b/scripts/locale_data/locale_data.gml index 990b5cb74..5ede0cb23 100644 --- a/scripts/locale_data/locale_data.gml +++ b/scripts/locale_data/locale_data.gml @@ -49,10 +49,10 @@ return __txtx(prefix + key, txt); } - function __txt_node_name(node) { + function __txt_node_name(node, def = "") { if(struct_has(LOCALE.node, node)) return LOCALE.node[$ node].name; - return node; + return def; } function __txt_node_tooltip(node, def = "") { diff --git a/scripts/nodeValue_drawer/nodeValue_drawer.gml b/scripts/nodeValue_drawer/nodeValue_drawer.gml index 097da43ba..4497c918b 100644 --- a/scripts/nodeValue_drawer/nodeValue_drawer.gml +++ b/scripts/nodeValue_drawer/nodeValue_drawer.gml @@ -43,23 +43,18 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc butx += ui(20); if(!global_var) { - if(jun.expUse) { - var validated = is_struct(jun.expTree) && jun.expTree.validate(); - draw_sprite_ui_uniform(THEME.node_use_expression, validated? 0 : 2, butx, lb_y, 1,, 0.8); - } else { - index = jun.visible; - draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 0.8); - if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) { - if(visi_hold != noone) - jun.visible = visi_hold; + index = jun.visible; + draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 0.8); + if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) { + if(visi_hold != noone) + jun.visible = visi_hold; - draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 1); - TOOLTIP = __txt("Visibility"); + draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 1); + TOOLTIP = __txt("Visibility"); - if(mouse_press(mb_left, _focus)) { - jun.visible = !jun.visible; - visi_hold = jun.visible; - } + if(mouse_press(mb_left, _focus)) { + jun.visible = !jun.visible; + visi_hold = jun.visible; } } } else @@ -172,6 +167,13 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc var ic_b = jun.expUse? c_white : COLORS._main_icon; if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, __txtx("panel_inspector_use_expression", "Use expression"), THEME.node_use_expression, jun.expUse, ic_b) == 2) jun.expUse = !jun.expUse; + + if(jun.expUse) { + bx -= ui(28); + var cc = NODE_DROPPER_TARGET == jun? COLORS._main_value_positive : COLORS._main_icon; + if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, __txtx("panel_inspector_dropper", "Node dropper"), THEME.node_dropper, 0, cc) == 2) + NODE_DROPPER_TARGET = NODE_DROPPER_TARGET == jun? noone : jun; + } } #endregion diff --git a/scripts/node_3d_obj/node_3D_obj.gml b/scripts/node_3d_obj/node_3D_obj.gml index 4eba0d140..45e27fb25 100644 --- a/scripts/node_3d_obj/node_3D_obj.gml +++ b/scripts/node_3d_obj/node_3D_obj.gml @@ -1,3 +1,16 @@ +function Node_create_3D_Obj(_x, _y, _group = noone) { + var path = ""; + if(!LOADING && !APPENDING && !CLONING) { + path = get_open_filename(".obj", ""); + key_release(); + if(path == "") return noone; + } + + var node = new Node_3D_Obj(_x, _y, _group); + node.setPath(path); + return node; +} + function Node_create_3D_Obj_path(_x, _y, path) { if(!file_exists(path)) return noone; @@ -146,6 +159,8 @@ function Node_3D_Obj(_x, _y, _group = noone) : Node(_x, _y, _group) constructor static updateObj = function(updateMat = true) { var _path = inputs[| 0].getValue(); + if(!file_exists(_path)) return; + var _flip = inputs[| 12].getValue(); var _dir = filename_dir(_path); var _pathMtl = string_copy(_path, 1, string_length(_path) - 4) + ".mtl"; diff --git a/scripts/node_FXAA/node_FXAA.gml b/scripts/node_FXAA/node_FXAA.gml index 06ba35053..763436836 100644 --- a/scripts/node_FXAA/node_FXAA.gml +++ b/scripts/node_FXAA/node_FXAA.gml @@ -3,8 +3,12 @@ function Node_FXAA(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + inputs[| 1] = nodeValue("Active", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true); + + active_index = 1; + input_display_list = [ - 0, + 1, 0, ] outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); diff --git a/scripts/node_armature/node_armature.gml b/scripts/node_armature/node_armature.gml new file mode 100644 index 000000000..343b48979 --- /dev/null +++ b/scripts/node_armature/node_armature.gml @@ -0,0 +1,150 @@ +function Node_Armature(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Armature Create"; + + //inputs[| 0] = nodeValue("Axis", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0); + + input_fix_len = ds_list_size(inputs); + data_length = 1; + + static createBone = function(parent, distance, direction) { + var bone = new __Bone(parent, distance, direction); + parent.addChild(bone); + + if(parent == attributes.bones) + bone.parent_anchor = false; + return bone; + } + + outputs[| 0] = nodeValue("Armature", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + + attributes.bones = new __Bone(); + attributes.bones.is_main = true; + + tools = [ + new NodeTool( "Add bones", THEME.path_tools_transform ), + new NodeTool( "Remove bones", THEME.path_tools_transform ), + ]; + + anchor_selecting = noone; + builder_bone = noone; + builder_type = 0; + builder_sx = 0; + builder_sy = 0; + builder_mx = 0; + builder_my = 0; + + static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { + anchor_selecting = attributes.bones.draw(active, _x, _y, _s, _mx, _my, true, anchor_selecting); + + var mx = (_mx - _x) / _s; + var my = (_my - _y) / _s; + + if(builder_bone != noone) { + var dir = point_direction(builder_sx, builder_sy, mx, my); + var dis = point_distance(builder_sx, builder_sy, mx, my); + + if(!key_mod_press(ALT)) { + if(builder_type == 0) { + var bo = builder_bone.getPoint(builder_bone.length, builder_bone.angle); + + builder_bone.direction = dir; + builder_bone.distance = dis; + + var bn = builder_bone.getPoint(0, 0); + + builder_bone.angle = point_direction(bo.x, bo.y, bn.x, bn.y); + builder_bone.length = point_distance( bo.x, bo.y, bn.x, bn.y); + } else if(builder_type == 1) { + var chs = []; + for( var i = 0; i < array_length(builder_bone.childs); i++ ) { + var ch = builder_bone.childs[i]; + chs[i] = ch.getPoint(ch.length, ch.angle); + } + + builder_bone.angle = dir; + builder_bone.length = dis; + + for( var i = 0; i < array_length(builder_bone.childs); i++ ) { + var ch = builder_bone.childs[i]; + var c0 = ch.getPoint(0, 0); + + ch.angle = point_direction(c0.x, c0.y, chs[i].x, chs[i].y); + ch.length = point_distance( c0.x, c0.y, chs[i].x, chs[i].y); + } + } + } else { + if(builder_type == 0) { + builder_bone.direction = dir; + builder_bone.distance = dis; + } else if(builder_type == 1) { + builder_bone.angle = dir; + builder_bone.length = dis; + } else if(builder_type == 2) { + var bo = builder_bone.getPoint(0, 0); + var bx = bo.x + (mx - builder_mx) / _s; + var by = bo.y + (my - builder_my) / _s; + + if(builder_bone.parent_anchor) { + + } else { + builder_bone.direction = point_direction(builder_sx, builder_sy, bx, by); + builder_bone.distance = point_distance( builder_sx, builder_sy, bx, by); + } + } + } + + if(mouse_release(mb_left)) + builder_bone = noone; + } + + if(isUsingTool(0)) { // builder + if(mouse_press(mb_left, active)) { + if(anchor_selecting == noone) { + builder_bone = createBone(attributes.bones, point_distance(0, 0, mx, my), point_direction(0, 0, mx, my)); + builder_type = 1; + builder_sx = mx; + builder_sy = my; + } else if(anchor_selecting[1] == 1) { + builder_bone = createBone(anchor_selecting[0], 0, 0); + builder_type = 1; + builder_sx = mx; + builder_sy = my; + } + } + } else { //mover + if(anchor_selecting != noone && mouse_press(mb_left, active)) { + builder_bone = anchor_selecting[0]; + builder_type = anchor_selecting[1]; + + if(builder_type == 0) { + var orig = builder_bone.parent.getPoint(0, 0); + builder_sx = orig.x; + builder_sy = orig.y; + } else if(builder_type == 1) { + var orig = builder_bone.getPoint(0, 0); + builder_sx = orig.x; + builder_sy = orig.y; + } else if(builder_type == 2) { + var _par = builder_bone.parent; + var orig = _par.getPoint(_par.length, _par.angle); + builder_sx = orig.x; + builder_sy = orig.y; + builder_mx = mx; + builder_my = my; + } + } + } + } + + static update = function(frame = ANIMATOR.current_frame) { + outputs[| 0].setValue(attributes.bones); + } + + static postDeserialize = function() { + var _inputs = load_map.inputs; + + for(var i = input_fix_len; i < array_length(_inputs); i += data_length) + createBone(); + } +} + diff --git a/scripts/node_armature/node_armature.yy b/scripts/node_armature/node_armature.yy new file mode 100644 index 000000000..203b14616 --- /dev/null +++ b/scripts/node_armature/node_armature.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_armature", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "armature", + "path": "folders/nodes/data/compose/armature.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_armature_bind/node_armature_bind.gml b/scripts/node_armature_bind/node_armature_bind.gml new file mode 100644 index 000000000..1032ab5c6 --- /dev/null +++ b/scripts/node_armature_bind/node_armature_bind.gml @@ -0,0 +1,784 @@ +function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "Armature Bind"; + + inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2) + .setDisplay(VALUE_DISPLAY.vector); + + attribute_surface_depth(); + attribute_interpolation(); + + input_fix_len = ds_list_size(inputs); + data_length = 4; + + attributes.layer_visible = []; + attributes.layer_selectable = []; + + hold_visibility = true; + hold_select = true; + layer_dragging = noone; + layer_remove = -1; + layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { + var amo = (ds_list_size(inputs) - input_fix_len) / data_length - 1; + if(array_length(current_data) != ds_list_size(inputs)) return 0; + + var lh = 32; + var _h = 8 + max(1, amo) * (lh + 4) + 8; + layer_renderer.h = _h; + draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, _x, _y, _w, _h, COLORS.node_composite_bg_blend, 1); + + var _vis = attributes.layer_visible; + var _sel = attributes.layer_selectable; + var ly = _y + 8; + var ssh = lh - 6; + var hoverIndex = noone; + draw_set_color(COLORS.node_composite_separator); + draw_line(_x + 16, ly, _x + _w - 16, ly); + + layer_remove = -1; + for(var i = 0; i < amo; i++) { + var ind = amo - i - 1; + var index = input_fix_len + ind * data_length; + var _surf = current_data[index + 0]; + var _pos = current_data[index + 1]; + + var _bx = _x + _w - 24; + var _cy = ly + i * (lh + 4); + + if(point_in_circle(_m[0], _m[1], _bx, _cy + lh / 2, 16)) { + draw_sprite_ui_uniform(THEME.icon_delete, 3, _bx, _cy + lh / 2, 1, COLORS._main_value_negative); + + if(mouse_press(mb_left, _focus)) + layer_remove = ind; + } else + draw_sprite_ui_uniform(THEME.icon_delete, 3, _bx, _cy + lh / 2, 1, COLORS._main_icon); + + if(!is_surface(_surf)) continue; + + var aa = (ind != layer_dragging || layer_dragging == noone)? 1 : 0.5; + var vis = _vis[ind]; + var sel = _sel[ind]; + var hover = point_in_rectangle(_m[0], _m[1], _x, _cy, _x + _w, _cy + lh); + + draw_set_color(COLORS.node_composite_separator); + draw_line(_x + 16, _cy + lh + 2, _x + _w - 16, _cy + lh + 2); + + var _bx = _x + 24 * 2 + 8; + if(point_in_circle(_m[0], _m[1], _bx, _cy + lh / 2, 12)) { + draw_sprite_ui_uniform(THEME.junc_visible, vis, _bx, _cy + lh / 2, 1, c_white); + + if(mouse_press(mb_left, _focus)) + hold_visibility = !_vis[ind]; + + if(mouse_click(mb_left, _focus) && _vis[ind] != hold_visibility) { + _vis[@ ind] = hold_visibility; + doUpdate(); + } + } else + draw_sprite_ui_uniform(THEME.junc_visible, vis, _bx, _cy + lh / 2, 1, COLORS._main_icon, 0.5 + 0.5 * vis); + + _bx += 24 + 8; + if(point_in_circle(_m[0], _m[1], _bx, _cy + lh / 2, 12)) { + draw_sprite_ui_uniform(THEME.cursor_select, sel, _bx, _cy + lh / 2, 1, c_white); + + if(mouse_press(mb_left, _focus)) + hold_select = !_sel[ind]; + + if(mouse_click(mb_left, _focus) && _sel[ind] != hold_select) + _sel[@ ind] = hold_select; + } else + draw_sprite_ui_uniform(THEME.cursor_select, sel, _bx, _cy + lh / 2, 1, COLORS._main_icon, 0.5 + 0.5 * sel); + + draw_set_color(COLORS.node_composite_bg); + var _sx0 = _bx + 24; + var _sx1 = _sx0 + ssh; + var _sy0 = _cy + 3; + var _sy1 = _sy0 + ssh; + draw_rectangle(_sx0, _sy0, _sx1, _sy1, true); + + var _ssw = surface_get_width(_surf); + var _ssh = surface_get_height(_surf); + var _sss = min(ssh / _ssw, ssh / _ssh); + draw_surface_ext_safe(_surf, _sx0, _sy0, _sss, _sss, 0, c_white, 1); + + draw_set_text(f_p1, fa_left, fa_center, hover? COLORS._main_text : COLORS._main_text); + draw_set_alpha(aa); + draw_text(_sx1 + 12, _cy + lh / 2, inputs[| index].name); + draw_set_alpha(1); + + if(_hover && point_in_rectangle(_m[0], _m[1], _x, _cy, _x + _w, _cy + lh)) { + hoverIndex = ind; + if(layer_dragging != noone) { + draw_set_color(COLORS._main_accent); + if(layer_dragging > ind) + draw_line_width(_x + 16, _cy + lh + 2, _x + _w - 16, _cy + lh + 2, 2); + else if(layer_dragging < ind) + draw_line_width(_x + 16, _cy - 2, _x + _w - 16, _cy - 2, 2); + } + } + + if(layer_dragging == noone || layer_dragging == ind) { + var _bx = _x + 24; + if(point_in_circle(_m[0], _m[1], _bx, _cy + lh / 2, 16)) { + draw_sprite_ui_uniform(THEME.hamburger, 3, _bx, _cy + lh / 2, .75, c_white); + + if(mouse_press(mb_left, _focus)) + layer_dragging = ind; + } else + draw_sprite_ui_uniform(THEME.hamburger, 3, _bx, _cy + lh / 2, .75, COLORS._main_icon); + } + } + + if(layer_dragging != noone && mouse_release(mb_left)) { + if(layer_dragging != hoverIndex && hoverIndex != noone) { + var index = input_fix_len + layer_dragging * data_length; + var targt = input_fix_len + hoverIndex * data_length; + var _vis = attributes.layer_visible; + var _sel = attributes.layer_selectable; + + var ext = []; + var vis = _vis[layer_dragging]; + array_delete(_vis, layer_dragging, 1); + array_insert(_vis, hoverIndex, vis); + + var sel = _sel[layer_dragging]; + array_delete(_sel, layer_dragging, 1); + array_insert(_sel, hoverIndex, sel); + + for( var i = 0; i < data_length; i++ ) { + ext[i] = inputs[| index]; + ds_list_delete(inputs, index); + } + + for( var i = 0; i < data_length; i++ ) { + ds_list_insert(inputs, targt + i, ext[i]); + } + + doUpdate(); + } + + layer_dragging = noone; + } + + return _h; + }); + + input_display_list = [ + ["Output", true], 0, + ["Layers", false], layer_renderer, + ["Surfaces", true], + ]; + input_display_list_len = array_length(input_display_list); + + function deleteLayer(index) { + var idx = input_fix_len + index * data_length; + for( var i = 0; i < data_length; i++ ) { + ds_list_delete(inputs, idx); + array_remove(input_display_list, idx + i); + } + for( var i = input_display_list_len; i < array_length(input_display_list); i++ ) { + if(input_display_list[i] > idx) + input_display_list[i] = input_display_list[i] - data_length; + } + doUpdate(); + } + + function createNewSurface() { + var index = ds_list_size(inputs); + var _s = floor((index - input_fix_len) / data_length); + + inputs[| index + 0] = nodeValue(_s? ("Surface " + string(_s)) : "Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + inputs[| index + 0].surface_index = index; + inputs[| index + 0].hover_effect = 0; + + inputs[| index + 1] = nodeValue("Position " + string(_s), self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ] ) + .setDisplay(VALUE_DISPLAY.vector) + .setUnitRef(function(index) { return [ overlay_w, overlay_h ]; }); + inputs[| index + 1].surface_index = index; + + inputs[| index + 2] = nodeValue("Rotation " + string(_s), self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 ) + .setDisplay(VALUE_DISPLAY.rotation); + inputs[| index + 2].surface_index = index; + + inputs[| index + 3] = nodeValue("Scale " + string(_s), self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ] ) + .setDisplay(VALUE_DISPLAY.vector); + inputs[| index + 3].surface_index = index; + + array_push(input_display_list, index + 0); + array_push(input_display_list, index + 1); + array_push(input_display_list, index + 2); + array_push(input_display_list, index + 3); + + while(_s >= array_length(attributes.layer_visible)) + array_push(attributes.layer_visible, true); + while(_s >= array_length(attributes.layer_selectable)) + array_push(attributes.layer_selectable, true); + } + if(!LOADING && !APPENDING) createNewSurface(); + + //function getInput() { return inputs[| ds_list_size(inputs) - data_length]; } + + outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + + outputs[| 1] = nodeValue("Atlas data", self, JUNCTION_CONNECT.output, VALUE_TYPE.atlas, []) + .rejectArrayProcess(); + + temp_surface = [ surface_create(1, 1), surface_create(1, 1) ]; + + surf_dragging = -1; + input_dragging = -1; + drag_type = 0; + dragging_sx = 0; + dragging_sy = 0; + dragging_mx = 0; + dragging_my = 0; + + rot_anc_x = 0; + rot_anc_y = 0; + + overlay_w = 0; + overlay_h = 0; + + atlas_data = []; + + static getInputAmount = function() { + return input_fix_len + (ds_list_size(inputs) - input_fix_len) / data_length; + } + + static getInputIndex = function(index) { + if(index < input_fix_len) return index; + return input_fix_len + (index - input_fix_len) * data_length; + } + + static setHeight = function() { + var _hi = ui(32); + var _ho = ui(32); + + for( var i = 0; i < getInputAmount(); i++ ) + if(inputs[| getInputIndex(i)].isVisible()) + _hi += 24; + + for( var i = 0; i < ds_list_size(outputs); i++ ) + if(outputs[| i].isVisible()) + _ho += 24; + + h = max(min_h, (preview_surface && previewable)? 128 : 0, _hi, _ho); + } + + static drawJunctions = function(_x, _y, _mx, _my, _s) { + if(!active) return; + var hover = noone; + var amo = array_length(input_display_list); + + var hov = PANEL_GRAPH._junction_hovering; + var ind = -1; + if(hov != noone && struct_has(hov, "surface_index")) + ind = hov.surface_index; + + for( var i = 0; i < getInputAmount(); i++ ) { + var idx = getInputIndex(i); + if(!inputs[| idx].isVisible()) continue; + + if(inputs[| idx].drawJunction(_s, _mx, _my, 1.5)) + hover = inputs[| idx]; + + if(idx >= input_fix_len && inputs[| idx].hover_effect > 0) { + var _px0 = 999999; + var _py0 = 999999; + var _px1 = -999999; + var _py1 = -999999; + var _drw = false; + var _hov = inputs[| idx].hover_effect; + + for( var j = 1; j < data_length; j++ ) { + if(!inputs[| idx + j].isVisible()) continue; + _px0 = min( _px0, inputs[| idx + j].x ); + _py0 = min( _py0, inputs[| idx + j].y ); + _px1 = max( _px1, inputs[| idx + j].x ); + _py1 = max( _py1, inputs[| idx + j].y ); + _drw = true; + } + + if(!_drw) continue; + + //if(_hov > 0.5) { + // var pilx = _px0 - 16 * _s; + // var pily = _py0 - 16 * _s; + // var pilw = _px1 - _px0 + 32 * _s; + // var pilh = _py1 - _py0 + 32 * _s; + + // draw_sprite_stretched_ext(THEME.node_bg_pill, 0, pilx, pily, pilw, pilh, COLORS._main_icon_dark, (_hov - 0.5) * 2); + //} + + for( var j = 1; j < data_length; j++ ) { + if(inputs[| idx + j].drawJunction(_s, _mx, _my, 1.5)) + hover = inputs[| idx + j]; + } + } + } + + for(var i = 0; i < ds_list_size(outputs); i++) + if(outputs[| i].drawJunction(_s, _mx, _my)) + hover = outputs[| i]; + + return hover; + } + + static drawJunctionNames = function(_x, _y, _mx, _my, _s) { + if(!active) return; + var amo = input_display_list == -1? ds_list_size(inputs) : array_length(input_display_list); + var jun; + + var xx = x * _s + _x; + var yy = y * _s + _y; + + show_input_name = PANEL_GRAPH.pHOVER && point_in_rectangle(_mx, _my, xx - 8 * _s, yy + 20 * _s, xx + 8 * _s, yy + h * _s); + show_output_name = PANEL_GRAPH.pHOVER && point_in_rectangle(_mx, _my, xx + (w - 8) * _s, yy + 20 * _s, xx + (w + 8) * _s, yy + h * _s); + + var hov = PANEL_GRAPH._junction_hovering; + var ind = -1; + if(hov != noone && struct_has(hov, "surface_index")) + ind = hov.surface_index; + + if(ind != -1) { + for( var j = 1; j < data_length; j++ ) { + if(ind + j >= ds_list_size(inputs)) break; + inputs[| ind + j].drawNameBG(_s); + } + + for( var j = 1; j < data_length; j++ ) { + if(ind + j >= ds_list_size(inputs)) break; + inputs[| ind + j].drawName(_s, _mx, _my); + } + + } else if(show_input_name) { + for( var i = 0; i < getInputAmount(); i++ ) { + var idx = getInputIndex(i); + + if(idx == ind) continue; + inputs[| idx].drawNameBG(_s); + } + + for( var i = 0; i < getInputAmount(); i++ ) { + var idx = getInputIndex(i); + + if(idx == ind) continue; + inputs[| idx].drawName(_s, _mx, _my); + } + } + + if(show_output_name) { + for(var i = 0; i < ds_list_size(outputs); i++) + outputs[| i].drawNameBG(_s); + + for(var i = 0; i < ds_list_size(outputs); i++) + outputs[| i].drawName(_s, _mx, _my); + } + } + + static preDraw = function(_x, _y, _s) { + var xx = x * _s + _x; + var yy = y * _s + _y; + var jun; + + var inamo = input_display_list == -1? ds_list_size(inputs) : array_length(input_display_list); + var _in = yy + ui(32) * _s; + + var hov = PANEL_GRAPH._junction_hovering; + var ind = -1; + if(hov != noone && struct_has(hov, "surface_index")) + ind = hov.surface_index; + + for( var i = 0; i < getInputAmount(); i++ ) { + var idx = getInputIndex(i); + jun = ds_list_get(inputs, idx, noone); + if(jun == noone || is_undefined(jun)) continue; + jun.x = xx; + jun.y = _in; + + if(i >= input_fix_len) { + jun.hover_effect = lerp_float(jun.hover_effect, ind == idx, 3); + var sp = jun.hover_effect * 24; + var sx = xx - sp * _s; + var sy = _in; + + for( var j = 1; j < data_length; j++ ) { + var _jun = ds_list_get(inputs, idx + j, noone); + _jun.x = sx; + _jun.y = sy; + + sy += sp * _s * _jun.isVisible(); + } + } + + _in += 24 * _s * jun.isVisible(); + } + + var outamo = output_display_list == -1? ds_list_size(outputs) : array_length(output_display_list); + + xx = xx + w * _s; + _in = yy + ui(32) * _s; + for(var i = 0; i < outamo; i++) { + var idx = getOutputJunctionIndex(i); + jun = outputs[| idx]; + + jun.x = xx; + jun.y = _in; + _in += 24 * _s * jun.isVisible(); + } + } + + static onValueFromUpdate = function(index) { + if(LOADING || APPENDING) return; + + if(index + data_length >= ds_list_size(inputs)) + createNewSurface(); + } + + static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { + var dim = inputs[| 0].getValue(); + var ww = dim[0]; + var hh = dim[1]; + + var x0 = _x; + var x1 = _x + ww * _s; + var y0 = _y; + var y1 = _y + hh * _s; + + if(input_dragging > -1) { + if(drag_type == NODE_COMPOSE_DRAG.move) { + var _dx = (_mx - dragging_mx) / _s; + var _dy = (_my - dragging_my) / _s; + + if(key_mod_press(SHIFT)) { + if(abs(_dx) > abs(_dy) + ui(16)) + _dy = 0; + else if(abs(_dy) > abs(_dx) + ui(16)) + _dx = 0; + else { + _dx = max(_dx, _dy); + _dy = _dx; + } + } + + var pos_x = value_snap(dragging_sx + _dx, _snx); + var pos_y = value_snap(dragging_sy + _dy, _sny); + + if(key_mod_press(ALT)) { + var _surf = current_data[input_dragging - 1]; + var _sw = surface_get_width(_surf); + var _sh = surface_get_height(_surf); + + var x0 = pos_x, x1 = pos_x + _sw; + var y0 = pos_y, y1 = pos_y + _sh; + var xc = (x0 + x1) / 2; + var yc = (y0 + y1) / 2; + var snap = 4; + + draw_set_color(COLORS._main_accent); + if(abs(x0 - 0) < snap) { + pos_x = 0; + draw_line_width(_x + _s * 0, 0, _x + _s * 0, WIN_H, 2); + } + + if(abs(y0 - 0) < snap) { + pos_y = 0; + draw_line_width(0, _y + _s * 0, WIN_W, _y + _s * 0, 2); + } + + if(abs(x1 - ww) < snap) { + pos_x = ww - _sw; + draw_line_width(_x + _s * ww, 0, _x + _s * ww, WIN_H, 2); + } + + if(abs(y1 - hh) < snap) { + pos_y = hh - _sh; + draw_line_width(0, _y + _s * hh, WIN_W, _y + _s * hh, 2); + } + + if(abs(xc - ww / 2) < snap) { + pos_x = ww / 2 - _sw / 2; + draw_line_width(_x + _s * ww / 2, 0, _x + _s * ww / 2, WIN_H, 2); + } + + if(abs(yc - hh / 2) < snap) { + pos_y = hh / 2 - _sh / 2; + draw_line_width(0, _y + _s * hh / 2, WIN_W, _y + _s * hh / 2, 2); + } + } + + if(inputs[| input_dragging].setValue([ pos_x, pos_y ])) + UNDO_HOLDING = true; + } else if(drag_type == NODE_COMPOSE_DRAG.rotate) { + var aa = point_direction(rot_anc_x, rot_anc_y, _mx, _my); + var da = angle_difference(dragging_mx, aa); + var sa; + + if(key_mod_press(CTRL)) + sa = round((dragging_sx - da) / 15) * 15; + else + sa = dragging_sx - da; + + if(inputs[| input_dragging].setValue(sa)) + UNDO_HOLDING = true; + } else if(drag_type == NODE_COMPOSE_DRAG.scale) { + var _surf = inputs[| surf_dragging + 0].getValue(); + var _rot = inputs[| surf_dragging + 2].getValue(); + var _sw = surface_get_width(_surf); + var _sh = surface_get_width(_surf); + + var _p = point_rotate(_mx - dragging_mx, _my - dragging_my, 0, 0, -_rot); + var sca_x = _p[0] / _s / _sw * 2; + var sca_y = _p[1] / _s / _sh * 2; + + if(key_mod_press(SHIFT)) { + sca_x = min(sca_x, sca_y); + sca_y = min(sca_x, sca_y); + } + + if(inputs[| input_dragging].setValue([ sca_x, sca_y ])) + UNDO_HOLDING = true; + } + + if(mouse_release(mb_left)) { + input_dragging = -1; + UNDO_HOLDING = false; + } + } + + var hovering = -1; + var hovering_type = 0; + var _vis = attributes.layer_visible; + var _sel = attributes.layer_selectable; + + var amo = (ds_list_size(inputs) - input_fix_len) / data_length; + if(array_length(current_data) < input_fix_len + amo * data_length) + return; + + for(var i = 0; i < amo; i++) { + var vis = _vis[i]; + var sel = _sel[i]; + if(!vis) continue; + + var index = input_fix_len + i * data_length; + var _surf = current_data[index + 0]; + var _pos = current_data[index + 1]; + var _rot = current_data[index + 2]; + var _sca = current_data[index + 3]; + + if(!_surf || is_array(_surf)) continue; + + var _ww = surface_get_width(_surf); + var _hh = surface_get_height(_surf); + var _sw = _ww * _sca[0]; + var _sh = _hh * _sca[1]; + + var cx = _pos[0] + _ww / 2; + var cy = _pos[1] + _hh / 2; + + var _d0 = point_rotate(cx - _sw / 2, cy - _sh / 2, cx, cy, _rot); + var _d1 = point_rotate(cx - _sw / 2, cy + _sh / 2, cx, cy, _rot); + var _d2 = point_rotate(cx + _sw / 2, cy - _sh / 2, cx, cy, _rot); + var _d3 = point_rotate(cx + _sw / 2, cy + _sh / 2, cx, cy, _rot); + var _rr = point_rotate(cx, cy - _sh / 2 - 1, cx, cy, _rot); + + _d0[0] = overlay_x(_d0[0], _x, _s); _d0[1] = overlay_y(_d0[1], _y, _s); + _d1[0] = overlay_x(_d1[0], _x, _s); _d1[1] = overlay_y(_d1[1], _y, _s); + _d2[0] = overlay_x(_d2[0], _x, _s); _d2[1] = overlay_y(_d2[1], _y, _s); + _d3[0] = overlay_x(_d3[0], _x, _s); _d3[1] = overlay_y(_d3[1], _y, _s); + _rr[0] = overlay_x(_rr[0], _x, _s); _rr[1] = overlay_y(_rr[1], _y, _s); + + var _borcol = COLORS.node_composite_overlay_border; + + var _ri = 0; + var _si = 0; + + if(!sel) continue; + + if(point_in_circle(_mx, _my, _d3[0], _d3[1], 12)) { + hovering = index; + hovering_type = NODE_COMPOSE_DRAG.scale; + _si = 1; + } else if(point_in_rectangle_points(_mx, _my, _d0[0], _d0[1], _d1[0], _d1[1], _d2[0], _d2[1], _d3[0], _d3[1])) { + hovering = index; + hovering_type = NODE_COMPOSE_DRAG.move; + } else if(point_in_circle(_mx, _my, _rr[0], _rr[1], 12)) { + hovering = index; + hovering_type = NODE_COMPOSE_DRAG.rotate; + _ri = 1; + } + + draw_sprite_colored(THEME.anchor_rotate, _ri, _rr[0], _rr[1],, _rot); + draw_sprite_colored(THEME.anchor_scale, _si, _d3[0], _d3[1],, _rot); + + draw_set_color(_borcol); + draw_line(_d0[0], _d0[1], _d1[0], _d1[1]); + draw_line(_d0[0], _d0[1], _d2[0], _d2[1]); + draw_line(_d3[0], _d3[1], _d1[0], _d1[1]); + draw_line(_d3[0], _d3[1], _d2[0], _d2[1]); + } + + if(hovering != -1) { + var _surf = current_data[hovering]; + var _pos = current_data[hovering + 1]; + var _rot = current_data[hovering + 2]; + var _sca = current_data[hovering + 3]; + + var _ww = surface_get_width(_surf); + var _hh = surface_get_height(_surf); + var _dx0 = _x + _pos[0] * _s; + var _dy0 = _y + _pos[1] * _s; + var _dx1 = _dx0 + _ww * _s; + var _dy1 = _dy0 + _hh * _s; + + var _sw = _ww * _sca[0]; + var _sh = _hh * _sca[1]; + + var cx = _pos[0] + _ww / 2; + var cy = _pos[1] + _hh / 2; + + var _d0 = point_rotate(cx - _sw / 2, cy - _sh / 2, cx, cy, _rot); + var _d1 = point_rotate(cx - _sw / 2, cy + _sh / 2, cx, cy, _rot); + var _d2 = point_rotate(cx + _sw / 2, cy - _sh / 2, cx, cy, _rot); + var _d3 = point_rotate(cx + _sw / 2, cy + _sh / 2, cx, cy, _rot); + + _d0[0] = overlay_x(_d0[0], _x, _s); _d0[1] = overlay_y(_d0[1], _y, _s); + _d1[0] = overlay_x(_d1[0], _x, _s); _d1[1] = overlay_y(_d1[1], _y, _s); + _d2[0] = overlay_x(_d2[0], _x, _s); _d2[1] = overlay_y(_d2[1], _y, _s); + _d3[0] = overlay_x(_d3[0], _x, _s); _d3[1] = overlay_y(_d3[1], _y, _s); + + if(hovering_type == NODE_COMPOSE_DRAG.move) { + draw_set_color(COLORS._main_accent); + draw_line_round(_d0[0], _d0[1], _d1[0], _d1[1], 2); + draw_line_round(_d0[0], _d0[1], _d2[0], _d2[1], 2); + draw_line_round(_d3[0], _d3[1], _d1[0], _d1[1], 2); + draw_line_round(_d3[0], _d3[1], _d2[0], _d2[1], 2); + + if(mouse_press(mb_left, active)) { + surf_dragging = hovering; + input_dragging = hovering + 1; + drag_type = hovering_type; + dragging_sx = _pos[0]; + dragging_sy = _pos[1]; + dragging_mx = _mx; + dragging_my = _my; + } + } else if(hovering_type == NODE_COMPOSE_DRAG.rotate) { //rot + if(mouse_press(mb_left, active)) { + surf_dragging = hovering; + input_dragging = hovering + 2; + drag_type = hovering_type; + dragging_sx = _rot; + rot_anc_x = _dx0 + _ww / 2 * _s; + rot_anc_y = _dy0 + _hh / 2 * _s; + dragging_mx = point_direction(rot_anc_x, rot_anc_y, _mx, _my); + } + } else if(hovering_type == NODE_COMPOSE_DRAG.scale) { //sca + if(mouse_press(mb_left, active)) { + surf_dragging = hovering; + input_dragging = hovering + 3; + drag_type = hovering_type; + dragging_sx = _sca[0]; + dragging_sy = _sca[1]; + dragging_mx = _dx0 + _ww / 2 * _s; + dragging_my = _dy0 + _hh / 2 * _s; + } + } + } + + if(layer_remove > -1) { + deleteLayer(layer_remove); + layer_remove = -1; + } + } + + static step = function() { + var _dim_type = getSingleValue(1); + + inputs[| 2].setVisible(_dim_type == COMPOSE_OUTPUT_SCALING.constant); + } + + static process_data = function(_outSurf, _data, _output_index, _array_index) { + if(_output_index == 1) return atlas_data; + if(_output_index == 0 && _array_index == 0) atlas_data = []; + + if(array_length(_data) < 4) return _outSurf; + var _dim = _data[0]; + var cDep = attrDepth(); + var ww = _dim[0], hh = _dim[1]; + + overlay_w = ww; + overlay_h = hh; + + if(is_surface(base)) + _outSurf = surface_size_to(_outSurf, ww, hh, cDep); + + for(var i = 0; i < 2; i++) { + temp_surface[i] = surface_verify(temp_surface[i], surface_get_width(_outSurf), surface_get_height(_outSurf), cDep); + + surface_set_target(temp_surface[i]); + DRAW_CLEAR + surface_reset_target(); + } + + var res_index = 0, bg = 0; + var imageAmo = (ds_list_size(inputs) - input_fix_len) / data_length; + var _vis = attributes.layer_visible; + + surface_set_shader(_outSurf, sh_sample, true, BLEND.alphamulp); + + for(var i = 0; i < imageAmo; i++) { + var vis = _vis[i]; + if(!vis) continue; + + var startDataIndex = input_fix_len + i * data_length; + var _s = _data[startDataIndex + 0]; + var _pos = _data[startDataIndex + 1]; + var _rot = _data[startDataIndex + 2]; + var _sca = _data[startDataIndex + 3]; + + if(!_s || is_array(_s)) continue; + + var _ww = surface_get_width(_s); + var _hh = surface_get_height(_s); + var _sw = _ww * _sca[0]; + var _sh = _hh * _sca[1]; + + var cx = _pos[0] + _ww / 2; + var cy = _pos[1] + _hh / 2; + + var _d0 = point_rotate(cx - _sw / 2, cy - _sh / 2, cx, cy, _rot); + + shader_set_interpolation(_s); + + array_push(atlas_data, new SurfaceAtlas(_s, [ _d0[0], _d0[1] ], _rot, [ _sca[0], _sca[1] ])); + draw_surface_ext_safe(_s, _d0[0], _d0[1], _sca[0], _sca[1], _rot); + } + surface_reset_shader(); + + return _outSurf; + } + + static postDeserialize = function() { + var _inputs = load_map.inputs; + + for(var i = input_fix_len; i < array_length(_inputs); i += data_length) + createNewSurface(); + } + + static attributeSerialize = function() { + var att = {}; + att.layer_visible = attributes.layer_visible; + att.layer_selectable = attributes.layer_selectable; + + return att; + } + + static attributeDeserialize = function(attr) { + if(struct_has(attr, "layer_visible")) + attributes.layer_visible = attr.layer_visible; + + if(struct_has(attr, "layer_selectable")) + attributes.layer_selectable = attr.layer_selectable; + } +} + diff --git a/scripts/node_armature_bind/node_armature_bind.yy b/scripts/node_armature_bind/node_armature_bind.yy new file mode 100644 index 000000000..31e8dd4d0 --- /dev/null +++ b/scripts/node_armature_bind/node_armature_bind.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_armature_bind", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "armature", + "path": "folders/nodes/data/compose/armature.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_armature_bind/node_array.yy b/scripts/node_armature_bind/node_array.yy new file mode 100644 index 000000000..7d8787e65 --- /dev/null +++ b/scripts/node_armature_bind/node_array.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_array", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_armature_bind/node_counter.yy b/scripts/node_armature_bind/node_counter.yy new file mode 100644 index 000000000..10832a0b0 --- /dev/null +++ b/scripts/node_armature_bind/node_counter.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_counter", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_base_convert/node_base_convert.gml b/scripts/node_base_convert/node_base_convert.gml index 0299986cc..d60185077 100644 --- a/scripts/node_base_convert/node_base_convert.gml +++ b/scripts/node_base_convert/node_base_convert.gml @@ -24,8 +24,8 @@ function Node_Base_Convert(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { draw_set_text(f_h5, fa_center, fa_center, COLORS._main_text); - var baseFrom = current_data[1]; - var baseTo = current_data[2]; + var baseFrom = array_safe_get(current_data, 1); + var baseTo = array_safe_get(current_data, 2); var bbox = drawGetBbox(xx, yy, _s); var b1 = BBOX().fromPoints(bbox.x0, bbox.y0, bbox.xc - _s * 8, bbox.y1); diff --git a/scripts/node_canvas/node_canvas.gml b/scripts/node_canvas/node_canvas.gml index 84d9b2dcc..d9608ccae 100644 --- a/scripts/node_canvas/node_canvas.gml +++ b/scripts/node_canvas/node_canvas.gml @@ -157,7 +157,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor draw_point(_x + 1, _y); draw_point(_x, _y + 1); } else - draw_circle(_x, _y, _siz / 2, 0); + draw_circle_prec(_x, _y, _siz / 2, 0); } else { var _sw = surface_get_width(_brush); var _sh = surface_get_height(_brush); diff --git a/scripts/node_collection/node_collection.gml b/scripts/node_collection/node_collection.gml index ffff3559f..6b671f85d 100644 --- a/scripts/node_collection/node_collection.gml +++ b/scripts/node_collection/node_collection.gml @@ -155,11 +155,11 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc LOG_IF(global.FLAG.render, $"→→→→→ Call get next node from group"); var nodes = []; - if(renderActive) { + if(isRenderActive()) { var allReady = true; for(var i = custom_input_index; i < ds_list_size(inputs); i++) { var _in = inputs[| i].from; - if(!_in.renderActive) continue; + if(!_in.isRenderActive()) continue; if(!_in.isRenderable()) { LOG_IF(global.FLAG.render, $"Node {_in.internalName} not ready, loop skip."); @@ -184,7 +184,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc var _to = _ot.value_to[| j]; var _node = _to.node; - if(!_node.renderActive) continue; + if(!_node.isRenderActive()) continue; if(_node.active && _to.value_from != noone && _to.value_from.node == group && _node.isRenderable()) array_push(nodes, _to.node); @@ -469,8 +469,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc static attributeDeserialize = function(attr) { if(struct_has(attr, "separator")) attributes.separator = json_parse(attr.separator); - attributes.w = attr.w; - attributes.h = attr.h; + attributes.w = struct_try_get(attr, "w", 128); + attributes.h = struct_try_get(attr, "h", 128); } } \ No newline at end of file diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index f798b837b..4f6548920 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -28,7 +28,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x internalName = str + string(irandom_range(10000, 99999)); NODE_NAME_MAP[? internalName] = self; - display_name = __txt_node_name(instanceof(self)); + display_name = __txt_node_name(instanceof(self), name); }); } @@ -399,10 +399,11 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } static resetRender = function() { setRenderStatus(false); } + static isRenderActive = function() { return renderActive || (PREF_MAP[? "render_all_export"] && ANIMATOR.rendering); } static isRenderable = function(log = false) { //Check if every input is ready (updated) if(!active) return false; - if(!renderActive) return false; + if(!isRenderActive()) return false; //if(group && struct_has(group, "iterationStatus") && group.iterationStatus() == ITERATION_STATUS.complete) return false; @@ -411,9 +412,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x if( _in.type == VALUE_TYPE.node) continue; var val_from = _in.value_from; - if( val_from == noone) continue; - if(!val_from.node.active) continue; - if(!val_from.node.renderActive) continue; + if( val_from == noone) continue; + if(!val_from.node.active) continue; + if(!val_from.node.isRenderActive()) continue; if(!val_from.node.rendered && !val_from.node.update_on_frame) { LOG_LINE_IF(global.FLAG.render, $"Node {internalName} is not renderable because input {val_from.node.internalName} is not rendered"); return false; @@ -471,6 +472,16 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x return point_in_rectangle(_mx, _my, xx, yy, xx + w * _s, yy + h * _s); } + draw_graph_culled = false; + static cullCheck = function(_x, _y, _s, minx, miny, maxx, maxy) { + var x0 = x * _s + _x; + var y0 = y * _s + _y; + var x1 = (x + w) * _s + _x; + var y1 = (y + h) * _s + _y; + + draw_graph_culled = !rectangle_in_rectangle(minx, miny, maxx, maxy, x0, y0, x1, y1); + } + static preDraw = function(_x, _y, _s) { var xx = x * _s + _x; var yy = y * _s + _y; @@ -519,6 +530,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } static drawNodeBase = function(xx, yy, _s) { + if(draw_graph_culled) return; if(!active) return; var aa = 0.25 + 0.5 * renderActive; draw_sprite_stretched_ext(bg_spr, 0, xx, yy, w * _s, h * _s, color, aa); @@ -534,6 +546,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } static drawNodeName = function(xx, yy, _s) { + if(draw_graph_culled) return; if(!active) return; draw_name = false; @@ -599,6 +612,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } static drawJunctionNames = function(_x, _y, _mx, _my, _s) { + if(draw_graph_culled) return; if(!active) return; var amo = input_display_list == -1? ds_list_size(inputs) : array_length(input_display_list); var jun; @@ -646,7 +660,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } } - static drawConnections = function(_x, _y, _s, mx, my, _active, aa = 1) { + static drawConnections = function(_x, _y, _s, mx, my, _active, aa = 1, minx = undefined, miny = undefined, maxx = undefined, maxy = undefined) { if(!active) return; var hovering = noone; @@ -668,10 +682,29 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } var st = 0; - if(hasInspector1Update()) st = -1; + if(hasInspector1Update()) st = -1; if(hasInspector2Update()) st = -2; + var _inputs = []; var drawLineIndex = 1; + for(var i = st; i < ds_list_size(inputs); i++) { + var jun; + if(i == -1) jun = inspectInput1; + else if(i == -2) jun = inspectInput2; + else jun = inputs[| i]; + + if(jun.value_from == noone) continue; + if(!jun.value_from.node.active) continue; + if(!jun.isVisible()) continue; + + if(i >= 0) + array_push(_inputs, jun); + } + + var len = array_length(_inputs); + for( var i = 0; i < len; i++ ) + _inputs[i].drawLineIndex = 1 + (i > len / 2? (len - 1 - i) : i) * 0.5; + for(var i = st; i < ds_list_size(inputs); i++) { var jun; if(i == -1) jun = inspectInput1; @@ -684,10 +717,17 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x if(jun.value_from == noone) continue; if(!jun.value_from.node.active) continue; if(!jun.isVisible()) continue; - jun.drawLineIndex = drawLineIndex; var frx = jun.value_from.x; var fry = jun.value_from.y; + + if(!is_undefined(minx)) { + if(jx < minx && frx < minx) continue; + if(jx > maxx && frx > maxx) continue; + + if(jy < miny && fry < miny) continue; + if(jy > maxy && fry > maxy) continue; + } var c0 = value_color(jun.value_from.type); var c1 = value_color(jun.type); @@ -762,7 +802,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x cx *= aa; cy *= aa; corner *= aa; - th = max(1, th); + th = max(1, round(th)); switch(PREF_MAP[? "curve_connection_line"]) { case 0 : @@ -790,14 +830,13 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x draw_line_elbow_diag_color(frx, fry, jx, jy, cx, cy, ss, th, c0, c1, corner, jun.value_from.drawLineIndex, jun.drawLineIndex, ty); break; } - - drawLineIndex += 0.5; } return hovering; } static drawPreview = function(xx, yy, _s) { + if(draw_graph_culled) return; if(!active) return; var _node = outputs[| preview_channel]; @@ -891,6 +930,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } static drawDimension = function(xx, yy, _s) { + if(draw_graph_culled) return; if(!active) return; if(_s * w < 64) return; @@ -923,9 +963,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } } - static drawNode = function(_x, _y, _mx, _my, _s) { + static drawNode = function(_x, _y, _mx, _my, _s) { + if(draw_graph_culled) return; if(!active) return; - //if(group != PANEL_GRAPH.getCurrentContext()) return; var xx = x * _s + _x; var yy = y * _s + _y; @@ -1121,7 +1161,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } static clearCache = function() { if(!use_cache) return; - if(!renderActive) return; + if(!isRenderActive()) return; if(array_length(cached_output) != ANIMATOR.frames_total) array_resize(cached_output, ANIMATOR.frames_total); @@ -1134,7 +1174,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } } static clearCacheForward = function() { - if(!renderActive) return; + if(!isRenderActive()) return; clearCache(); for( var i = 0; i < ds_list_size(outputs); i++ ) @@ -1358,7 +1398,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x if(struct_has(load_map, "outputs")) { var _outputs = load_map.outputs; - for(var i = 0; i < ds_list_size(outputs); i++) { + var amo = min(ds_list_size(outputs), array_length(_outputs)); + + for(var i = 0; i < amo; i++) { if(outputs[| i] == noone) continue; outputs[| i].applyDeserialize(_outputs[i], load_scale, preset); } diff --git a/scripts/node_display_image/node_display_image.gml b/scripts/node_display_image/node_display_image.gml index 67cd81327..d2f47c256 100644 --- a/scripts/node_display_image/node_display_image.gml +++ b/scripts/node_display_image/node_display_image.gml @@ -26,7 +26,7 @@ function Node_create_Display_Image_path(_x, _y, path) { } function Node_Display_Image(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { - name = ""; + name = "Display Image"; auto_height = false; inputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, "") diff --git a/scripts/node_export/node_export.gml b/scripts/node_export/node_export.gml index 7ca766b83..7c83ad76f 100644 --- a/scripts/node_export/node_export.gml +++ b/scripts/node_export/node_export.gml @@ -18,6 +18,23 @@ Animated WebP (.webp)|*.webp", return node; } +function exportAll() { + ANIMATOR.rendering = true; + Render(); + ANIMATOR.rendering = false; + + var key = ds_map_find_first(NODE_MAP); + repeat(ds_map_size(NODE_MAP)) { + var node = NODE_MAP[? key]; + key = ds_map_find_next(NODE_MAP, key); + + if(!node.active) continue; + if(instanceof(node) != "Node_Export") continue; + + node.doInspectorAction(); + } +} + enum NODE_EXPORT_FORMAT { single, sequence, @@ -412,25 +429,12 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor insp2UpdateTooltip = "Export All"; insp2UpdateIcon = [ THEME.play_all, 0, COLORS._main_value_positive ]; - static onInspector1Update = function() { + static onInspector1Update = function() { if(isInLoop()) UPDATE |= RENDER_TYPE.full; else doInspectorAction(); } - static onInspector2Update = function() { - var key = ds_map_find_first(NODE_MAP); - repeat(ds_map_size(NODE_MAP)) { - var node = NODE_MAP[? key]; - key = ds_map_find_next(NODE_MAP, key); - - if(!node.active) continue; - if(instanceof(node) != "Node_Export") continue; - - node.doInspectorAction(); - } - - if(isInLoop()) UPDATE |= RENDER_TYPE.full; - } + static onInspector2Update = function() { exportAll(); } static doInspectorAction = function() { if(LOADING || APPENDING) return; @@ -440,6 +444,10 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor var form = inputs[| 3].getValue(); if(form == NODE_EXPORT_FORMAT.single) { + ANIMATOR.rendering = true; + Render(); + ANIMATOR.rendering = false; + export(); return; } diff --git a/scripts/node_feedback/node_feedback.gml b/scripts/node_feedback/node_feedback.gml index 27c9d54c2..9b33a03b5 100644 --- a/scripts/node_feedback/node_feedback.gml +++ b/scripts/node_feedback/node_feedback.gml @@ -24,7 +24,7 @@ function Node_Feedback(_x, _y, _group = noone) : Node_Collection(_x, _y, _group) var allReady = true; for(var i = custom_input_index; i < ds_list_size(inputs); i++) { var _in = inputs[| i].from; - if(!_in.renderActive) continue; + if(!_in.isRenderActive()) continue; allReady &= _in.isRenderable() } diff --git a/scripts/node_fluid_repulse/node_fluid_repulse.gml b/scripts/node_fluid_repulse/node_fluid_repulse.gml index 207fc2632..bd0d24b6f 100644 --- a/scripts/node_fluid_repulse/node_fluid_repulse.gml +++ b/scripts/node_fluid_repulse/node_fluid_repulse.gml @@ -31,7 +31,7 @@ function Node_Fluid_Repulse(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group) var py = _y + _pos[1] * _s; draw_set_color(COLORS._main_accent); - draw_circle(px, py, _rad * _s, true); + draw_circle_prec(px, py, _rad * _s, true); inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny, 0, 1, THEME.anchor_scale_hori); diff --git a/scripts/node_fluid_vortex/node_fluid_vortex.gml b/scripts/node_fluid_vortex/node_fluid_vortex.gml index c46f71b71..cdec68c09 100644 --- a/scripts/node_fluid_vortex/node_fluid_vortex.gml +++ b/scripts/node_fluid_vortex/node_fluid_vortex.gml @@ -35,7 +35,7 @@ function Node_Fluid_Vortex(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group) var py = _y + _pos[1] * _s; draw_set_color(COLORS._main_accent); - draw_circle(px, py, _rad * _s, true); + draw_circle_prec(px, py, _rad * _s, true); inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny, 0, 1, THEME.anchor_scale_hori); diff --git a/scripts/node_group_output/node_group_output.gml b/scripts/node_group_output/node_group_output.gml index e0028ae54..030aca695 100644 --- a/scripts/node_group_output/node_group_output.gml +++ b/scripts/node_group_output/node_group_output.gml @@ -45,7 +45,7 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr var nodes = []; for(var j = 0; j < ds_list_size(outParent.value_to); j++) { var _to = outParent.value_to[| j]; - if(!_to.node.renderActive) continue; + if(!_to.node.isRenderActive()) continue; //printIf(global.FLAG.render, "Value to " + _to.name); if(!_to.node.active || _to.value_from == noone) { diff --git a/scripts/node_guide/node_guide.gml b/scripts/node_guide/node_guide.gml index 4d1d030e2..07919a72d 100644 --- a/scripts/node_guide/node_guide.gml +++ b/scripts/node_guide/node_guide.gml @@ -11,6 +11,7 @@ function __generate_node_data() { var dir = DIRECTORY + "Nodes/"; if(!directory_exists(dir)) directory_create(dir); var data = {}; + var junc = {}; var locale = {}; repeat(amo) { @@ -20,18 +21,23 @@ function __generate_node_data() { if(_b.name == "") continue; - var _data = {}; - _data.node = _n.node; + var _data = variable_clone(_n, 1); + + var _junc = {}; + _junc.node = _n.node; var _loca = {}; _loca.name = _n.name; _loca.tooltip = _n.tooltip; - var _din = [], _dot = []; + var _jin = [], _jot = []; var _lin = [], _lot = []; + var _din = [], _dot = []; for( var i = 0; i < ds_list_size(_b.inputs); i++ ) { - _din[i] = { + _din[i] = variable_clone(_b.inputs[| i], 1); + + _jin[i] = { type: _b.inputs[| i].type, visible: _b.inputs[| i].visible? 1 : 0, }; @@ -43,7 +49,9 @@ function __generate_node_data() { } for( var i = 0; i < ds_list_size(_b.outputs); i++ ) { - _dot[i] = { + _dot[i] = variable_clone(_b.outputs[| i], 1); + + _jot[i] = { type: _b.outputs[| i].type, visible: _b.outputs[| i].visible? 1 : 0, }; @@ -54,17 +62,23 @@ function __generate_node_data() { }; } - _data.inputs = _din; - _data.outputs = _dot; - data[$ _n.name] = _data; + _junc.inputs = _jin; + _junc.outputs = _jot; + junc[$ _n.name] = _junc; _loca.inputs = _lin; _loca.outputs = _lot; locale[$ _n.node] = _loca; + + _data.inputs = _din; + _data.outputs = _dot; + data[$ _n.name] = _data; } - json_save_struct(dir + "nodes.json", data, false); - json_save_struct(dir + "lnodes.json", locale, true); + json_save_struct(dir + "node_data.json", data, true); + json_save_struct(dir + "node_junctions.json", junc, false); + json_save_struct(dir + "node_locale.json", locale, true); + shellOpenExplorer(dir); CLONING = false; game_end(); diff --git a/scripts/node_keyframe/node_keyframe.gml b/scripts/node_keyframe/node_keyframe.gml index 3004a88ac..c448daa46 100644 --- a/scripts/node_keyframe/node_keyframe.gml +++ b/scripts/node_keyframe/node_keyframe.gml @@ -95,10 +95,10 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor { } static lerpValue = function(from, to, _lrp) { - if(prop.type == VALUE_TYPE.color) { - var _f = from.value; - var _t = to.value; + var _f = from.value; + var _t = to.value; + if(prop.type == VALUE_TYPE.color) { if(is_array(_f)) { var amo = max(array_length(_f), array_length(_t)); var res = array_create(amo); @@ -110,18 +110,18 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor { return processType(merge_color(_f, _t, _lrp)); } - - if(typeArray(prop.display_type) && is_array(from.value)) { - var _vec = array_create(array_length(from.value)); + + if(is_array(_f)) { + var _vec = array_create(array_length(_f)); for(var i = 0; i < array_length(_vec); i++) - _vec[i] = processType(lerp(from.value[i], to.value[i], _lrp)); + _vec[i] = processType(lerp(_f[i], _t[i], _lrp)); return _vec; } if(prop.type == VALUE_TYPE.text) - return processType(from.value); - - return processType(lerp(from.value, to.value, _lrp)); + return processType(_f); + + return processType(lerp(_f, _t, _lrp)); } static getName = function() { return prop.name + suffix; } diff --git a/scripts/node_logic_operate/node_logic_operate.gml b/scripts/node_logic_operate/node_logic_operate.gml index 8e8cc38a8..bc777ef0f 100644 --- a/scripts/node_logic_operate/node_logic_operate.gml +++ b/scripts/node_logic_operate/node_logic_operate.gml @@ -50,7 +50,6 @@ function Node_Logic(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { data_length = 1; function createNewInput() { - print("Create") var index = ds_list_size(inputs); var jname = chr(ord("a") + index - 1); diff --git a/scripts/node_path_anchor/node_path_anchor.gml b/scripts/node_path_anchor/node_path_anchor.gml index ecf302880..4b8999650 100644 --- a/scripts/node_path_anchor/node_path_anchor.gml +++ b/scripts/node_path_anchor/node_path_anchor.gml @@ -47,7 +47,7 @@ function Node_Path_Anchor(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou if(!_mir) active &= !inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny); else - draw_circle(c2x, c2y, 4, false); + draw_circle_prec(c2x, c2y, 4, false); } function process_data(_output, _data, _output_index, _array_index = 0) { diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index d207c05f0..e9b3c5ee7 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -26,7 +26,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { return self; } - static getName = function() { return __txt_node_name(node); } + static getName = function() { return __txt_node_name(node, name); } static getTooltip = function() { return __txt_node_tooltip(node, tooltip); } function build(_x, _y, _group = PANEL_GRAPH.getCurrentContext(), _param = "") { @@ -261,6 +261,9 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(transform, "Nine Slice", s_node_9patch, "Node_9Slice", [1, Node_9Slice], ["9 slice", "splice"], "Cut image into 3x3 parts, and scale/repeat only the middle part."); addNodeObject(transform, "Padding", s_node_padding, "Node_Padding", [1, Node_Padding],, "Make image bigger by adding space in 4 directions."); + //ds_list_add(transform, "Armature"); + //addNodeObject(transform, "Armature Create", s_node_compose, "Node_Armature", [1, Node_Armature], ["rigging", "bone"], ""); + var filter = ds_list_create(); addNodeCatagory("Filter", filter); ds_list_add(filter, "Combines"); @@ -343,7 +346,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(threeD, "Sprite Stack", s_node_stack, "Node_Sprite_Stack", [1, Node_Sprite_Stack],, "Create sprite stack either from repeating a single image or stacking different images using array."); ds_list_add(threeD, "3D generates"); - addNodeObject(threeD, "3D Object", s_node_3d_obj, "Node_3D_Obj", [1, Node_3D_Obj],, "Load .obj file from your computer as a 3D object."); + addNodeObject(threeD, "3D Object", s_node_3d_obj, "Node_3D_Obj", [0, Node_create_3D_Obj],, "Load .obj file from your computer as a 3D object."); addNodeObject(threeD, "3D Plane", s_node_3d_plane, "Node_3D_Plane", [1, Node_3D_Plane],, "Put 2D image on a plane in 3D space."); addNodeObject(threeD, "3D Cube", s_node_3d_cube, "Node_3D_Cube", [1, Node_3D_Cube]); addNodeObject(threeD, "3D Cylinder", s_node_3d_cylinder, "Node_3D_Cylinder", [1, Node_3D_Cylinder]); @@ -760,7 +763,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { } function attribute_surface_depth(label = true) { - depth_array = inputs[| 0].type == VALUE_TYPE.surface? global.SURFACE_FORMAT_NAME_PROCESS : global.SURFACE_FORMAT_NAME; + var depth_array = inputs[| 0].type == VALUE_TYPE.surface? global.SURFACE_FORMAT_NAME_PROCESS : global.SURFACE_FORMAT_NAME; attributes.color_depth = array_find(depth_array, "8 bit RGBA"); if(label) array_push(attributeEditors, "Surface"); diff --git a/scripts/node_rigid_force_apply/node_rigid_force_apply.gml b/scripts/node_rigid_force_apply/node_rigid_force_apply.gml index f8f4ec460..2253a704c 100644 --- a/scripts/node_rigid_force_apply/node_rigid_force_apply.gml +++ b/scripts/node_rigid_force_apply/node_rigid_force_apply.gml @@ -68,7 +68,7 @@ function Node_Rigid_Force_Apply(_x, _y, _group = noone) : Node(_x, _y, _group) c draw_set_color(COLORS._main_accent); draw_set_alpha(0.5); - draw_circle(px, py, _rad * _s, 1); + draw_circle_prec(px, py, _rad * _s, 1); draw_set_alpha(1); inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); diff --git a/scripts/node_rigid_object/node_rigid_object.gml b/scripts/node_rigid_object/node_rigid_object.gml index b62a2af15..b8e648e84 100644 --- a/scripts/node_rigid_object/node_rigid_object.gml +++ b/scripts/node_rigid_object/node_rigid_object.gml @@ -194,7 +194,7 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr //draw_text(_dx, _dy - 8, i); if(isNotUsingTool()) - draw_circle(_dx, _dy, 4, false) + draw_circle_prec(_dx, _dy, 4, false) else { draw_sprite_colored(THEME.anchor_selector, hover == i, _dx, _dy); if(point_distance(_mx, _my, _dx, _dy) < 8) diff --git a/scripts/node_strand_create/node_strand_create.gml b/scripts/node_strand_create/node_strand_create.gml index afb953ac2..8f9ac1e75 100644 --- a/scripts/node_strand_create/node_strand_create.gml +++ b/scripts/node_strand_create/node_strand_create.gml @@ -327,7 +327,7 @@ function Node_Strand_Create(_x, _y, _group = noone) : Node(_x, _y, _group) const var fall = tool_push.attribute.fall; draw_set_color(COLORS._main_accent); - draw_circle(_mx, _my, rad * _s, true); + draw_circle_prec(_mx, _my, rad * _s, true); draw_circle_dash(_mx, _my, rad * _s * (1 - fall), true); draw_circle_dash(_mx, _my, rad * _s * (1 + fall), true); @@ -378,7 +378,7 @@ function Node_Strand_Create(_x, _y, _group = noone) : Node(_x, _y, _group) const var fall = isUsingTool(2)? tool_stretch.attribute.fall : tool_cut.attribute.fall; draw_set_color(COLORS._main_accent); - draw_circle(_mx, _my, rad * _s, true); + draw_circle_prec(_mx, _my, rad * _s, true); draw_circle_dash(_mx, _my, rad * _s * (1 - fall), true); draw_circle_dash(_mx, _my, rad * _s * (1 + fall), true); @@ -392,7 +392,7 @@ function Node_Strand_Create(_x, _y, _group = noone) : Node(_x, _y, _group) const var fall = tool_grab.attribute.fall; draw_set_color(COLORS._main_accent); - draw_circle(_mx, _my, rad * _s, true); + draw_circle_prec(_mx, _my, rad * _s, true); draw_circle_dash(_mx, _my, rad * _s * (1 - fall), true); draw_circle_dash(_mx, _my, rad * _s * (1 + fall), true); diff --git a/scripts/node_tool/node_tool.gml b/scripts/node_tool/node_tool.gml index 7e18f98a8..866d5fd4b 100644 --- a/scripts/node_tool/node_tool.gml +++ b/scripts/node_tool/node_tool.gml @@ -43,5 +43,10 @@ function NodeTool(name, spr) constructor { } else PANEL_PREVIEW.tool_current = self; } + + if(PANEL_PREVIEW.tool_current == self) + onToggle(); } + + static onToggle = function() {} } \ No newline at end of file diff --git a/scripts/node_transform/node_transform.gml b/scripts/node_transform/node_transform.gml index cfd0a526c..686719fa1 100644 --- a/scripts/node_transform/node_transform.gml +++ b/scripts/node_transform/node_transform.gml @@ -489,7 +489,7 @@ function Node_Transform(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) ny = _y + _pos[1] * _s; draw_set_alpha(1); - draw_circle(nx, ny, 4, false); + draw_circle_prec(nx, ny, 4, false); if(i) { draw_set_alpha(0.5); draw_line_dashed(ox, oy, nx, ny); diff --git a/scripts/node_tunnel_in/node_tunnel_in.gml b/scripts/node_tunnel_in/node_tunnel_in.gml index 2af9c5e8e..542954c60 100644 --- a/scripts/node_tunnel_in/node_tunnel_in.gml +++ b/scripts/node_tunnel_in/node_tunnel_in.gml @@ -90,14 +90,14 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct var amo = ds_map_size(TUNNELS_IN_MAP); var k = ds_map_find_first(TUNNELS_IN_MAP); repeat(amo) { - if(ds_map_exists(NODE_MAP, k)) + if(ds_map_exists(NODE_MAP, k) && struct_has(NODE_MAP[? k], "resetMap")) NODE_MAP[? k].resetMap(); k = ds_map_find_next(TUNNELS_IN_MAP, k); } var k = ds_map_find_first(TUNNELS_IN_MAP); repeat(amo) { - if(ds_map_exists(NODE_MAP, k)) + if(ds_map_exists(NODE_MAP, k) && struct_has(NODE_MAP[? k], "checkDuplicate")) NODE_MAP[? k].checkDuplicate(); k = ds_map_find_next(TUNNELS_IN_MAP, k); } diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 463900dcc..a59592951 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -393,7 +393,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru draw_line_shift_x = 0; draw_line_shift_y = 0; - draw_line_thick = new Tween(1,,, 1.5); + draw_line_thick = 1; draw_line_shift_hover = false; drawLineIndex = 1; @@ -425,8 +425,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru express_edit = new textArea(TEXTBOX_INPUT.text, function(str) { expression = str; - expTree = evaluateFunctionTree(expression); - node.triggerRender(); + expressionUpdate(); }); express_edit.boxColor = COLORS._main_value_positive; express_edit.align = fa_left; @@ -849,6 +848,11 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru } resetDisplay(); + static expressionUpdate = function() { + expTree = evaluateFunctionTree(expression); + node.triggerRender(); + } + static onValidate = function() { if(!validateValue) return; var _val = value_validation, str = ""; @@ -927,7 +931,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru } if(display_type == VALUE_DISPLAY.area) { - var dispType = nodeFrom.extra_data[0]; + var dispType = array_safe_get(nodeFrom.extra_data, 0, AREA_MODE.area); var surfGet = nodeFrom.display_data; if(!applyUnit || surfGet == -1) return value; @@ -1216,7 +1220,10 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru cache_array[0] = false; cache_value[0] = false; - if(!LOADING) MODIFIED = true; + if(!LOADING) { + //print("setValueDirect"); + MODIFIED = true; + } } onValidate(); @@ -1657,8 +1664,9 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru animator.deserialize(struct_try_get(_map, "raw_value"), scale); if(struct_has(_map, "animators")) { - var anims = _map.animators; - for( var i = 0; i < array_length(anims); i++ ) + var anims = _map.animators; + var amo = min(array_length(anims), array_length(animators)); + for( var i = 0; i < amo; i++ ) animators[i].deserialize(anims[i], scale); } diff --git a/scripts/node_wav_file_read/node_wav_file_read.gml b/scripts/node_wav_file_read/node_wav_file_read.gml index aa99ec04e..2d6832dd5 100644 --- a/scripts/node_wav_file_read/node_wav_file_read.gml +++ b/scripts/node_wav_file_read/node_wav_file_read.gml @@ -66,7 +66,7 @@ function Node_WAV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const first_update = false; - output_display_list = [ 0, 2, 3, 4, 1, 5 ]; + output_display_list = [ 0, 1, 2, 3, 4, 5 ]; audio_surface = -1; preview_audio = -1; diff --git a/scripts/node_wiggler/node_wiggler.gml b/scripts/node_wiggler/node_wiggler.gml index 707c7e17e..4851f639e 100644 --- a/scripts/node_wiggler/node_wiggler.gml +++ b/scripts/node_wiggler/node_wiggler.gml @@ -45,10 +45,10 @@ function Node_Wiggler(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c } static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { - var ran = current_data[0]; - var fre = current_data[1]; - var sed = current_data[2]; - var disp = current_data[3]; + var ran = array_safe_get(current_data, 0); + var fre = array_safe_get(current_data, 1); + var sed = array_safe_get(current_data, 2); + var disp = array_safe_get(current_data, 3); var time = ANIMATOR.current_frame; var total_time = ANIMATOR.frames_total; diff --git a/scripts/node_wrap_mesh/node_wrap_mesh.gml b/scripts/node_wrap_mesh/node_wrap_mesh.gml index 8e51f9071..d942ac1cf 100644 --- a/scripts/node_wrap_mesh/node_wrap_mesh.gml +++ b/scripts/node_wrap_mesh/node_wrap_mesh.gml @@ -122,7 +122,7 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) draw_set_color(COLORS._main_accent); var rad = 16; - draw_circle(_mx, _my, rad, true); + draw_circle_prec(_mx, _my, rad, true); var _xx = (_mx - _x) / _s; var _yy = (_my - _y) / _s; @@ -168,10 +168,10 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) static draw = function(_x, _y, _s) { if(pin) { draw_set_color(COLORS._main_accent); - draw_circle(_x + x * _s, _y + y * _s, 3, false); + draw_circle_prec(_x + x * _s, _y + y * _s, 3, false); } else { draw_set_color(COLORS.node_overlay_gizmo_inactive); - draw_circle(_x + x * _s, _y + y * _s, 2, false); + draw_circle_prec(_x + x * _s, _y + y * _s, 2, false); } } @@ -292,7 +292,10 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) var ww = useArray? surface_get_width(surf[0]) : surface_get_width(surf); var hh = useArray? surface_get_height(surf[0]) : surface_get_height(surf); - var fullmh = inputs[| 7].getValue() || useArray; + var fullmh = inputs[| 7].getValue(); + if(is_array(fullmh)) fullmh = false; + fullmh |= useArray; + var gw = ww / sample; var gh = hh / sample; var cont = noone; @@ -519,13 +522,13 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) static postConnect = function() { setTriangle(); - if(loadPin != noone) { - for( var i = 0; i < ds_list_size(loadPin); i++ ) { - var ind = loadPin[| i]; - if(ind < array_length(points)) - points[ind].pin = true; - } - loadPin = noone; + if(loadPin == noone) return; + + for( var i = 0; i < array_length(loadPin); i++ ) { + var ind = loadPin[i]; + if(ind < array_length(points)) + points[ind].pin = true; } + loadPin = noone; } } \ No newline at end of file diff --git a/scripts/panel_animation/panel_animation.gml b/scripts/panel_animation/panel_animation.gml index f1a56e9a0..235978f12 100644 --- a/scripts/panel_animation/panel_animation.gml +++ b/scripts/panel_animation/panel_animation.gml @@ -421,7 +421,7 @@ function Panel_Animation() : PanelContent() constructor { draw_line(bar_line_x, ui(12), bar_line_x, bar_h - PANEL_PAD); draw_set_text(f_p2, fa_center, fa_bottom, COLORS._main_text_sub); - draw_text(bar_line_x, ui(16), string(i)); + draw_text_add(bar_line_x, ui(16), string(i)); } var bar_line_x = (ANIMATOR.current_frame + 1) * ui(timeline_scale) + timeline_shift; @@ -430,7 +430,7 @@ function Panel_Animation() : PanelContent() constructor { draw_line(bar_line_x, ui(12), bar_line_x, bar_h - PANEL_PAD); draw_set_text(f_p2, fa_center, fa_bottom, cc); - draw_text(bar_line_x, ui(16), string(ANIMATOR.current_frame + 1)); + draw_text_add(bar_line_x, ui(16), string(ANIMATOR.current_frame + 1)); #endregion #region cache @@ -883,7 +883,7 @@ function Panel_Animation() : PanelContent() constructor { draw_set_color(cc); draw_set_alpha(aa); - draw_text(ui(32), ty - 2, animator.getName()); + draw_text_add(ui(32), ty - 2, animator.getName()); draw_set_alpha(1); } @@ -1522,7 +1522,7 @@ function Panel_Animation() : PanelContent() constructor { for(var i = timeline_separate; i <= ANIMATOR.frames_total; i += timeline_separate) { var bar_line_x = i * ui(timeline_scale) + timeline_shift; draw_set_text(f_p2, fa_right, fa_top, COLORS._main_text_sub); - draw_text(bar_line_x - ui(2), PANEL_PAD, string(i)); + draw_text_add(bar_line_x - ui(2), PANEL_PAD, string(i)); } var bar_line_x = (ANIMATOR.current_frame + 1) * ui(timeline_scale) + timeline_shift; @@ -1537,7 +1537,7 @@ function Panel_Animation() : PanelContent() constructor { draw_rectangle(bar_line_x - tx, PANEL_PAD, bar_line_x, hh, false); draw_set_text(f_p2, fa_right, fa_top, COLORS._main_text_on_accent); - draw_text(bar_line_x - ui(2), PANEL_PAD, cf); + draw_text_add(bar_line_x - ui(2), PANEL_PAD, cf); #endregion gpu_set_blendmode(bm_subtract); @@ -1616,15 +1616,15 @@ function Panel_Animation() : PanelContent() constructor { if(y1 - y0 < ui(40)) { draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text_sub); - draw_text(ui(16), cy, __txt("Frame")); + draw_text_add(ui(16), cy, __txt("Frame")); draw_set_text(f_p1, fa_right, fa_center, ANIMATOR.is_playing? COLORS._main_accent : COLORS._main_text_sub); - draw_text(w - ui(16), cy, txt); + draw_text_add(w - ui(16), cy, txt); } else { draw_set_text(f_p1, fa_center, fa_center, COLORS._main_text_sub); - draw_text(w / 2, cy - ui(12), __txt("Frame")); + draw_text_add(w / 2, cy - ui(12), __txt("Frame")); draw_set_text(f_h5, fa_center, fa_center, ANIMATOR.is_playing? COLORS._main_accent : COLORS._main_text_sub); - draw_text(w / 2, cy + ui(6), txt); + draw_text_add(w / 2, cy + ui(6), txt); } return; } diff --git a/scripts/panel_collection/panel_collection.gml b/scripts/panel_collection/panel_collection.gml index 054b60085..4094490ff 100644 --- a/scripts/panel_collection/panel_collection.gml +++ b/scripts/panel_collection/panel_collection.gml @@ -229,7 +229,7 @@ function Panel_Collection() : PanelContent() constructor { if(meta.version != SAVEFILE_VERSION) { draw_set_color(COLORS._main_accent); - draw_circle(_boxx + grid_size - ui(8), yy + grid_size - ui(8), 3, false); + draw_circle_prec(_boxx + grid_size - ui(8), yy + grid_size - ui(8), 3, false); } } diff --git a/scripts/panel_function/panel_function.gml b/scripts/panel_function/panel_function.gml index 95743e476..06ea41f77 100644 --- a/scripts/panel_function/panel_function.gml +++ b/scripts/panel_function/panel_function.gml @@ -313,7 +313,7 @@ if(!ds_list_empty(panel.childs)) { for( var i = 0; i < ds_list_size(panel.childs); i++ ) - cont[i] = _panelSerializeArray(panel.childs[| i]); + cont[i] = _panelSerializeArray(panel.childs[| i] ); } else { for( var i = 0; i < array_length(panel.content); i++ ) cont[i] = instanceof(panel.content[i]); @@ -338,9 +338,9 @@ if(!is_struct(panel)) return; if(instanceof(panel) != "Panel") return; if(array_length(panel.content) == 0) return; - if(!panel.content.expandable) return; + if(!panel.getContent().expandable) return; - PANEL_MAIN.childs[| 1].setContent(panel.content); + PANEL_MAIN.childs[| 1].setContent(panel.getContent()); FULL_SCREEN_CONTENT = panel; } #endregion diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index e47c64daf..22e46208f 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -391,10 +391,13 @@ function Panel_Graph() : PanelContent() constructor { var gr_x = graph_x * graph_s; var gr_y = graph_y * graph_s; - //var t = current_time; - for(var i = 0; i < ds_list_size(nodes_list); i++) - nodes_list[| i].preDraw(gr_x, gr_y, graph_s); - //print("Predraw time: " + string(current_time - t)); t = current_time; + var log = false; + var t = current_time; + for(var i = 0; i < ds_list_size(nodes_list); i++) { + nodes_list[| i].cullCheck(gr_x, gr_y, graph_s, -32, -32, w + 32, h + 64); + nodes_list[| i].preDraw(gr_x, gr_y, graph_s, gr_x, gr_y); + } + printIf(log, "Predraw time: " + string(current_time - t)); t = current_time; #region draw frame for(var i = 0; i < ds_list_size(nodes_list); i++) { @@ -402,7 +405,7 @@ function Panel_Graph() : PanelContent() constructor { nodes_list[| i].drawNode(gr_x, gr_y, mx, my, graph_s); } #endregion - //print("Frame draw time: " + string(current_time - t)); t = current_time; + printIf(log, "Frame draw time: " + string(current_time - t)); t = current_time; #region hover node_hovering = noone; @@ -425,10 +428,16 @@ function Panel_Graph() : PanelContent() constructor { if(node_hovering) node_hovering.onDrawHover(gr_x, gr_y, mx, my, graph_s); #endregion - //print("Hover time: " + string(current_time - t)); t = current_time; + printIf(log, "Hover time: " + string(current_time - t)); t = current_time; - if(mouse_on_graph && pFOCUS) { - if(mouse_press(mb_left) && !key_mod_press(ALT)) { + if(mouse_on_graph && pHOVER) { + if(NODE_DROPPER_TARGET != noone && node_hovering) { + node_hovering.draw_droppable = true; + if(mouse_press(mb_left, NODE_DROPPER_TARGET_CAN)) { + NODE_DROPPER_TARGET.expression += node_hovering.internalName; + NODE_DROPPER_TARGET.expressionUpdate(); + } + } else if(mouse_press(mb_left, pFOCUS) && !key_mod_press(ALT)) { if(key_mod_press(SHIFT)) { if(ds_list_empty(nodes_select_list) && node_focus) ds_list_add(nodes_select_list, node_focus); @@ -485,7 +494,7 @@ function Panel_Graph() : PanelContent() constructor { } } - if(mouse_press(mb_right)) { + if(mouse_press(mb_right, pFOCUS)) { node_hover = node_hovering; if(node_hover) { var menu = []; @@ -646,7 +655,7 @@ function Panel_Graph() : PanelContent() constructor { } } } - //print("Node selection time: " + string(current_time - t)); t = current_time; + printIf(log, "Node selection time: " + string(current_time - t)); t = current_time; if(node_focus) node_focus.drawActive(gr_x, gr_y, graph_s); @@ -656,7 +665,7 @@ function Panel_Graph() : PanelContent() constructor { if(!_node) continue; _node.drawActive(gr_x, gr_y, graph_s); } - //print("Draw active: " + string(current_time - t)); t = current_time; + printIf(log, "Draw active: " + string(current_time - t)); t = current_time; var aa = PREF_MAP[? "connection_line_aa"]; connection_surface = surface_verify(connection_surface, w * aa, h * aa); @@ -666,10 +675,11 @@ function Panel_Graph() : PanelContent() constructor { var hov = noone; var hoverable = !bool(node_dragging) && pHOVER; for(var i = 0; i < ds_list_size(nodes_list); i++) { - var _hov = nodes_list[| i].drawConnections(gr_x, gr_y, graph_s, mx, my, hoverable, aa); + var _hov = nodes_list[| i].drawConnections(gr_x, gr_y, graph_s, mx, my, hoverable, aa, -64, -64, w + 64, h + 64); if(_hov != noone && is_struct(_hov)) hov = _hov; } - //print("Draw connection: " + string(current_time - t)); t = current_time; + printIf(log, "Draw connection: " + string(current_time - t)); t = current_time; + surface_reset_target(); shader_set(sh_downsample); shader_set_f("down", aa); @@ -681,7 +691,7 @@ function Panel_Graph() : PanelContent() constructor { value_focus = noone; #region draw node - //var t = current_time; + var t = current_time; for(var i = 0; i < ds_list_size(nodes_list); i++) nodes_list[| i].onDrawNodeBehind(gr_x, gr_y, mx, my, graph_s); @@ -706,7 +716,8 @@ function Panel_Graph() : PanelContent() constructor { for(var i = 0; i < ds_list_size(nodes_list); i++) nodes_list[| i].drawBadge(gr_x, gr_y, graph_s); - //print("Draw node: " + string(current_time - t)); t = current_time; + + printIf(log, "Draw node: " + string(current_time - t)); t = current_time; #endregion #region dragging @@ -811,7 +822,7 @@ function Panel_Graph() : PanelContent() constructor { } } } - //print("Drag node time : " + string(current_time - t)); t = current_time; + printIf(log, "Drag node time : " + string(current_time - t)); t = current_time; if(mouse_release(mb_left)) node_dragging = noone; @@ -899,7 +910,7 @@ function Panel_Graph() : PanelContent() constructor { } #endregion - //print("Draw selection frame : " + string(current_time - t)); t = current_time; + printIf(log, "Draw selection frame : " + string(current_time - t)); t = current_time; } function doDuplicate() { diff --git a/scripts/panel_graph_export_image/panel_graph_export_image.gml b/scripts/panel_graph_export_image/panel_graph_export_image.gml index 7dfba105e..c45c17230 100644 --- a/scripts/panel_graph_export_image/panel_graph_export_image.gml +++ b/scripts/panel_graph_export_image/panel_graph_export_image.gml @@ -23,6 +23,7 @@ function graph_export_image(allList, nodeList, settings = {}) { for( var i = 0; i < ds_list_size(nodeList); i++ ) { var _node = nodeList[| i]; + _node.draw_graph_culled = false; var _x = _node.x * scale; var _y = _node.y * scale; diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index 117359b6f..c83e83124 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -139,7 +139,7 @@ function Panel_Inspector() : PanelContent() constructor { draw_sprite_ui(THEME.arrow, meta_display[i][1]? 0 : 3, ui(16), yy + ui(32) / 2, 1, 1, 0, COLORS.panel_inspector_group_bg, 1); draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text_inner); - draw_text(ui(32), yy + ui(32) / 2, _txt); + draw_text_add(ui(32), yy + ui(32) / 2, _txt); yy += ui(32 + 8); hh += ui(32 + 8); @@ -211,7 +211,7 @@ function Panel_Inspector() : PanelContent() constructor { var bxc = bx + bw / 2 - (string_width(txt) + ui(48)) / 2; var byc = by + bh / 2; draw_sprite_ui(icon, 0, bxc + ui(24), byc,,,, colr); - draw_text(bxc + ui(48), byc, txt); + draw_text_add(bxc + ui(48), byc, txt); bx += bw + ui(4); @@ -225,7 +225,7 @@ function Panel_Inspector() : PanelContent() constructor { var bxc = bx + bw / 2 - (string_width(txt) + ui(48)) / 2; var byc = by + bh / 2; draw_sprite_ui(icon, 0, bxc + ui(24), byc,,,, colr); - draw_text(bxc + ui(48), byc, txt); + draw_text_add(bxc + ui(48), byc, txt); } else { var bw = bbw; @@ -240,7 +240,7 @@ function Panel_Inspector() : PanelContent() constructor { var bxc = bx + bw / 2 - (string_width(txt) + ui(48)) / 2; var byc = by + bh / 2; draw_sprite_ui(icon, 0, bxc + ui(24), byc,,,, colr); - draw_text(bxc + ui(48), byc, txt); + draw_text_add(bxc + ui(48), byc, txt); } yy += bh + ui(16); @@ -367,7 +367,7 @@ function Panel_Inspector() : PanelContent() constructor { } draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text); - draw_text(ui(32), yy + ui(32) / 2, txt); + draw_text_add(ui(32), yy + ui(32) / 2, txt); hh += ui(32 + 8); @@ -400,7 +400,7 @@ function Panel_Inspector() : PanelContent() constructor { draw_sprite_stretched_ext(THEME.group_label, 0, 0, yy + ui(8), con_w, ui(32), COLORS.panel_inspector_output_label, 0.85); draw_set_text(f_p0b, fa_center, fa_center, COLORS._main_text_sub); - draw_text(xc, yy + ui(8 + 16), __txt("Outputs")); + draw_text_add(xc, yy + ui(8 + 16), __txt("Outputs")); continue; } else { var outInd = i - amoIn - 1; @@ -443,10 +443,18 @@ function Panel_Inspector() : PanelContent() constructor { } } - if(_hover && point_in_rectangle(_m[0], _m[1], 4, _selY, contentPane.surface_w - ui(4), _selY + _selH)) { + if(_hover && point_in_rectangle(_m[0], _m[1], ui(4), _selY, contentPane.surface_w - ui(4), _selY + _selH)) { _HOVERING_ELEMENT = jun; - draw_sprite_stretched_ext(THEME.prop_selecting, 0, 4, _selY, contentPane.surface_w - ui(8), _selH, COLORS._main_accent, 1); + if(NODE_DROPPER_TARGET != noone && NODE_DROPPER_TARGET != jun) { + draw_sprite_stretched_ext(THEME.ui_panel_active, 0, ui(4), _selY, contentPane.surface_w - ui(8), _selH, COLORS._main_value_positive, 1); + if(mouse_press(mb_left, NODE_DROPPER_TARGET_CAN)) { + NODE_DROPPER_TARGET.expression += $"{jun.node.internalName}.{jun.connect_type == JUNCTION_CONNECT.input? "inputs" : "outputs"}.{jun.internalName}"; + NODE_DROPPER_TARGET.expressionUpdate(); + } + } else + draw_sprite_stretched_ext(THEME.prop_selecting, 0, 4, _selY, contentPane.surface_w - ui(8), _selH, COLORS._main_accent, 1); + if(anim_toggling) { jun.setAnim(!jun.is_anim); PANEL_ANIMATION.updatePropertyList(); @@ -540,7 +548,7 @@ function Panel_Inspector() : PanelContent() constructor { tb_node_name.draw(ui(64), ui(14), w - ui(128), ui(32), txt, [mx, my], VALUE_DISPLAY.node_title); draw_set_text(f_p1, fa_center, fa_center, COLORS._main_text_sub); - draw_text(w / 2 + ui(8), ui(56), inspecting.name); + draw_text_add(w / 2 + ui(8), ui(56), inspecting.name); draw_set_text(f_p3, fa_center, fa_center, COLORS._main_text_sub); draw_set_alpha(0.65); diff --git a/scripts/panel_menu/panel_menu.gml b/scripts/panel_menu/panel_menu.gml index 0dd64e69b..9b82ca71e 100644 --- a/scripts/panel_menu/panel_menu.gml +++ b/scripts/panel_menu/panel_menu.gml @@ -147,6 +147,9 @@ function Panel_Menu() : PanelContent() constructor { node.doInspectorAction(); } }), + menuItem(__txtx("panel_menu_export_render_all", "Render disabled node when export"), + function() { PREF_MAP[? "render_all_export"] = !PREF_MAP[? "render_all_export"]; },,, + function() { return PREF_MAP[? "render_all_export"]; } ), ]], [ __txt("Panels"), [ menuItem(__txt("Workspace"), function(_dat) { @@ -212,6 +215,9 @@ function Panel_Menu() : PanelContent() constructor { menuItem(__txtx("panel_debug_console", "Debug console"), function() { panelAdd("Panel_Console", true) }), + menuItem(__txtx("panel_menu_tester", "Tester"), function() { + var dia = dialogPanelCall(new Panel_Test()); + }), -1, menuItem(__txtx("panel_menu_test_load_all", "Load all current collections"), function() { @@ -231,7 +237,8 @@ function Panel_Menu() : PanelContent() constructor { __test_load_all_nodes(); }), menuItem(__txtx("panel_menu_test_gen_guide", "Generate node guide"), function() { - __generate_node_data(); + var dia = dialogPanelCall(new Panel_Node_Data_Gen()); + dia.destroy_on_click_out = false; }), -1, menuItem(__txtx("panel_menu_test_crash", "Force crash"), function() { diff --git a/scripts/panel_node_data_gen/panel_node_data_gen.gml b/scripts/panel_node_data_gen/panel_node_data_gen.gml new file mode 100644 index 000000000..7dd16ffbc --- /dev/null +++ b/scripts/panel_node_data_gen/panel_node_data_gen.gml @@ -0,0 +1,140 @@ +var _filter = ["x", "y", "updated", "rendered", "show_output_name", "insp2UpdateIcon", "preview_trans", "value_validation", "group", "draw_padding", "draw_droppable", + "preview_drop_y", "badgeInspect", "preview_mx", "temp_surface", "load_scale", "node_id", "show_input_name", "graph_h", "display_data", "drawLineIndex", "draw_line_shift_x", + "draw_line_shift_y", "cache_array", "drag_mx", "drag_my", "expTree", "value_to", "draw_line_thick", "expUse", "expression", "drag_sx", "drag_sy", "drag_type", "con_node", + "cache_value", "show_graph", "preview_x", "preview_y", "badgePreview", "data_list", "open_rx", "open_ry", "parent", "active", "cached_output", "current_data", "cache_result", + "draw_graph_culled", "dopesheet_y", "render_time", "renderActive", "preview_speed", "preview_drop_x", "preview_drop_y", "inspecting", "value_to_arr", "draw_name" ]; +global.node_data_filter = ds_map_create(); +for( var i = 0; i < array_length(_filter); i++ ) + global.node_data_filter[? _filter[i]] = 1; + +function __node_data_clone(struct) { + var _var = variable_struct_get_names(struct); + var _str = {}; + + for( var i = 0; i < array_length(_var); i++ ) { + if(ds_map_exists(global.node_data_filter, _var[i])) continue; + + var val = struct[$ _var[i]]; + if(is_struct(val)) continue; + if(is_array(val)) { + for( var j = 0; j < array_length(val); j++ ) { + if(is_struct(val[j])) + val[j] = __node_data_clone(val[j]); + } + } + + _str[$ _var[i]] = val; + } + + return _str; +} + +function Panel_Node_Data_Gen() : PanelContent() constructor { + w = ui(640); + h = ui(64); + + title = "Dump node data"; + amo = ds_map_size(ALL_NODES); + cur = 0; + key = ds_map_find_first(ALL_NODES); + + CLONING = true; + NODE_EXTRACT = true; + + dir = DIRECTORY + "Nodes/"; + if(!directory_exists(dir)) directory_create(dir); + data = {}; + junc = {}; + locale = {}; + + game_set_speed(99999, gamespeed_fps); + + function drawContent(panel) { + draw_clear_alpha(COLORS.panel_bg_clear, 0); + draw_set_text(f_p0, fa_center, fa_top, COLORS._main_text); + draw_text(w / 2, ui(8), cur + 2 < amo? "Dumping node data... (Program terminate on complete)" : "Writing JSON"); + + var bx0 = ui(8); + var by0 = ui(40); + var bx1 = w - ui(8); + var by1 = h - ui(8); + + var bw = bx1 - bx0; + var bh = by1 - by0; + + draw_sprite_stretched(THEME.progress_bar, 0, bx0, by0, bw, bh); + draw_sprite_stretched(THEME.progress_bar, 1, bx0, by0, bw * cur / amo, bh); + + var _n = ALL_NODES[? key]; + var _b = _n.build(0, 0); + key = ds_map_find_next(ALL_NODES, key); + + if(_b.name == "") return; + + var _data = __node_data_clone(_b); + + var _junc = {}; + _junc.node = _n.node; + + var _loca = {}; + _loca.name = _n.name; + _loca.tooltip = _n.tooltip; + + var _jin = [], _jot = []; + var _lin = [], _lot = []; + var _din = [], _dot = []; + + for( var i = 0; i < ds_list_size(_b.inputs); i++ ) { + _din[i] = __node_data_clone(_b.inputs[| i]); + + _jin[i] = { + type: _b.inputs[| i].type, + visible: _b.inputs[| i].visible? 1 : 0, + }; + + _lin[i] = { + name: _b.inputs[| i]._initName, + tooltip: _b.inputs[| i].tooltip, + }; + } + + for( var i = 0; i < ds_list_size(_b.outputs); i++ ) { + _dot[i] = __node_data_clone(_b.outputs[| i]); + + _jot[i] = { + type: _b.outputs[| i].type, + visible: _b.outputs[| i].visible? 1 : 0, + }; + + _lot[i] = { + name: _b.outputs[| i]._initName, + tooltip: _b.outputs[| i].tooltip, + }; + } + + nodeDelete(_b); + + _junc.inputs = _jin; + _junc.outputs = _jot; + junc[$ _n.name] = _junc; + + _loca.inputs = _lin; + _loca.outputs = _lot; + locale[$ _n.node] = _loca; + + _data.inputs = _din; + _data.outputs = _dot; + data[$ _n.name] = _data; + + cur++; + if(cur < amo) return; + + json_save_struct(dir + "node_data.json", data, false); + json_save_struct(dir + "node_junctions.json", junc, false); + json_save_struct(dir + "node_locale.json", locale, true); + shellOpenExplorer(dir); + + CLONING = false; + game_end(); + } +} \ No newline at end of file diff --git a/scripts/panel_node_data_gen/panel_node_data_gen.yy b/scripts/panel_node_data_gen/panel_node_data_gen.yy new file mode 100644 index 000000000..6c0ed8597 --- /dev/null +++ b/scripts/panel_node_data_gen/panel_node_data_gen.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "panel_node_data_gen", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "_others", + "path": "folders/panels/_others.yy", + }, +} \ No newline at end of file diff --git a/scripts/panel_notification/panel_notification.gml b/scripts/panel_notification/panel_notification.gml index ca1e2f91e..bb492ec38 100644 --- a/scripts/panel_notification/panel_notification.gml +++ b/scripts/panel_notification/panel_notification.gml @@ -29,7 +29,7 @@ function Panel_Notification() : PanelContent() constructor { }), -1, menuItem(__txtx("noti_open_log", "Open log file"), function() { - shellOpenExplorer(DIRECTORY + "log.txt"); + shellOpenExplorer(DIRECTORY + "log/log.txt"); }), ]; diff --git a/scripts/panel_test/panel_test.gml b/scripts/panel_test/panel_test.gml new file mode 100644 index 000000000..e49c67110 --- /dev/null +++ b/scripts/panel_test/panel_test.gml @@ -0,0 +1,61 @@ +function Panel_Test() : PanelContent() constructor { + w = ui(480); + h = ui(160); + title = "Tester"; + + test_dir = ""; + tb_test_dir = new textBox(TEXTBOX_INPUT.text, function(txt) { test_dir = txt; }); + + testing = false; + test_files = []; + test_index = 0; + + function startTesting() { + if(testing) return; + + testing = true; + test_index = 0; + + test_files = []; + var f = file_find_first(test_dir + "/*", fa_none); + var _f = ""; + + while(f != "") { + var path = test_dir + f; + if(filename_ext(path) == ".pxc") + array_push(test_files, path); + f = file_find_next(); + } + + for( var i = 0; i < array_length(test_files); i++ ) { + run_in(i * 2, function(i) { LOAD_PATH(test_files[i]); test_index = i }, i); + } + } + + function drawContent(panel) { + draw_clear_alpha(COLORS.panel_bg_clear, 0); + + var yy = 8; + var hh = TEXTBOX_HEIGHT; + + draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text); + draw_text(8, yy + hh / 2, "Directory"); + + tb_test_dir.setActiveFocus(pFOCUS, pHOVER); + tb_test_dir.draw(128, yy, w - 8 - 128, hh, test_dir, [ mx, my ]); + yy += hh + 8; + + if(testing) { + draw_sprite_stretched(THEME.progress_bar, 0, 8, yy, w - 16, hh); + draw_sprite_stretched(THEME.progress_bar, 1, 8, yy, (w - 16) * test_index / array_length(test_files), hh); + + if(test_index == array_length(test_files) - 1) + testing = false; + } else { + if(buttonInstant(THEME.button, 8, yy, w - 16, hh, [ mx, my ], pFOCUS, pHOVER) == 2) + startTesting(); + draw_set_text(f_p0, fa_center, fa_center, COLORS._main_text); + draw_text(w / 2, yy + hh / 2, "Start test"); + } + } +} \ No newline at end of file diff --git a/scripts/panel_test/panel_test.yy b/scripts/panel_test/panel_test.yy new file mode 100644 index 000000000..cb1cbe52e --- /dev/null +++ b/scripts/panel_test/panel_test.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "panel_test", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "_others", + "path": "folders/panels/_others.yy", + }, +} \ No newline at end of file diff --git a/scripts/preferences/preferences.gml b/scripts/preferences/preferences.gml index 9d065b03f..c32917f76 100644 --- a/scripts/preferences/preferences.gml +++ b/scripts/preferences/preferences.gml @@ -68,6 +68,8 @@ PREF_MAP[? "show_crash_dialog"] = false; PREF_MAP[? "save_file_minify"] = true; + + PREF_MAP[? "render_all_export"] = true; #endregion #region hotkeys diff --git a/scripts/preview_overlay_puppet/preview_overlay_puppet.gml b/scripts/preview_overlay_puppet/preview_overlay_puppet.gml index 73df07599..b8d1b3fe9 100644 --- a/scripts/preview_overlay_puppet/preview_overlay_puppet.gml +++ b/scripts/preview_overlay_puppet/preview_overlay_puppet.gml @@ -19,7 +19,7 @@ function preview_overlay_puppet(interact, active, _x, _y, _s, _mx, _my, _snx, _s switch(_val[PUPPET_CONTROL.mode]) { case PUPPET_FORCE_MODE.move : draw_line_width2(_ax, _ay, _ax1, _ay1, 6, 1); - draw_circle(_ax, _ay, __wd * _s, true); + draw_circle_prec(_ax, _ay, __wd * _s, true); draw_sprite_colored(THEME.anchor_selector, 0, _ax, _ay); draw_sprite_colored(THEME.anchor_selector, 2, _ax1, _ay1); @@ -89,7 +89,7 @@ function preview_overlay_puppet(interact, active, _x, _y, _s, _mx, _my, _snx, _s if(point_in_circle(_mx, _my, rx, ry, 8)) { draw_set_color(COLORS._main_accent); - draw_circle(_ax, _ay, 64, true); + draw_circle_prec(_ax, _ay, 64, true); hover = 6; draw_sprite_colored(THEME.anchor_rotate, 1, rx, ry,, dir - 45); diff --git a/scripts/preview_overlay_rotation/preview_overlay_rotation.gml b/scripts/preview_overlay_rotation/preview_overlay_rotation.gml index 4f8664172..487bdfcd5 100644 --- a/scripts/preview_overlay_rotation/preview_overlay_rotation.gml +++ b/scripts/preview_overlay_rotation/preview_overlay_rotation.gml @@ -10,7 +10,7 @@ function preview_overlay_rotation(interact, active, _x, _y, _s, _mx, _my, _snx, if(drag_type) { draw_set_color(COLORS._main_accent); draw_set_alpha(0.5); - draw_circle(_x, _y, _rad, true); + draw_circle_prec(_x, _y, _rad, true); draw_set_alpha(1); draw_sprite_colored(THEME.anchor_rotate, 1, _ax, _ay, 1, _val - 90); @@ -30,7 +30,7 @@ function preview_overlay_rotation(interact, active, _x, _y, _s, _mx, _my, _snx, if(interact && point_in_circle(_mx, _my, _ax, _ay, 8)) { draw_set_color(COLORS._main_accent); draw_set_alpha(0.5); - draw_circle(_x, _y, _rad, true); + draw_circle_prec(_x, _y, _rad, true); draw_set_alpha(1); hover = 1; diff --git a/scripts/process_functions/process_functions.gml b/scripts/process_functions/process_functions.gml new file mode 100644 index 000000000..47d78ee89 --- /dev/null +++ b/scripts/process_functions/process_functions.gml @@ -0,0 +1,22 @@ +function GetArgVFromProcid(proc_id) { + var kinfo_proc, kinfo_argv; + kinfo_proc = ProcInfoFromProcIdEx(proc_id, KINFO_EXEP | KINFO_ARGV); + kinfo_argv[0] = ExecutableImageFilePath(kinfo_proc); + if (CommandLineLength(kinfo_proc) >= 2) { + for (var i = 1; i < CommandLineLength(kinfo_proc); i++) + kinfo_argv[i] = CommandLine(kinfo_proc, i); + } + FreeProcInfo(kinfo_proc); + return kinfo_argv; +} + +function ExecProcessFromArgVAsync(kinfo_argv) { + var cmdline = ""; + for (var i = 0; i < array_length(kinfo_argv); i++) { + var tmp = string_replace_all(kinfo_argv[i], "\\", "\\\\"); + tmp = "\"" + string_replace_all(tmp, "\"", "\\\"") + "\""; + if (i < array_length(kinfo_argv) - 1) tmp += " "; + cmdline += tmp; + } + return ProcessExecuteAsync(cmdline); +} \ No newline at end of file diff --git a/scripts/process_functions/process_functions.yy b/scripts/process_functions/process_functions.yy new file mode 100644 index 000000000..a009c6b13 --- /dev/null +++ b/scripts/process_functions/process_functions.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "process_functions", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "functions", + "path": "folders/functions.yy", + }, +} \ No newline at end of file diff --git a/scripts/render_data/render_data.gml b/scripts/render_data/render_data.gml index ec07ce325..daf3ffdbf 100644 --- a/scripts/render_data/render_data.gml +++ b/scripts/render_data/render_data.gml @@ -16,7 +16,7 @@ function __nodeLeafList(_list) { for( var i = 0; i < ds_list_size(_list); i++ ) { var _node = _list[| i]; if(!_node.active) continue; - if(!_node.renderActive) continue; + if(!_node.isRenderActive()) continue; var _startNode = _node.isRenderable(); if(_startNode) { @@ -80,11 +80,11 @@ $"============================== RENDER START [frame {string(ANIMATOR.current_fr key = ds_map_find_next(NODE_MAP, key); if(is_undefined(_node)) continue; - if(!is_struct(_node)) continue; + if(!is_struct(_node)) continue; if(array_exists(global.group_inputs, instanceof(_node))) continue; - if(!_node.active) continue; - if(!_node.renderActive) continue; + if(!_node.active) continue; + if(!_node.isRenderActive()) continue; if(_node.rendered) { LOG_IF(global.FLAG.render, $"Skip rendered {_node.internalName}"); continue; @@ -128,7 +128,7 @@ $"============================== RENDER START [frame {string(ANIMATOR.current_fr if(runAction && rendering.hasInspector1Update()) rendering.inspector1Update(); - } else if(rendering.renderActive) { + } else if(rendering.isRenderActive()) { RENDER_QUEUE.enqueue(rendering); } @@ -168,11 +168,11 @@ function RenderList(list) { var _node = list[| i]; if(is_undefined(_node)) continue; - if(!is_struct(_node)) continue; + if(!is_struct(_node)) continue; - if(!_node.active) continue; - if(!_node.renderActive) continue; - if(_node.rendered) continue; + if(!_node.active) continue; + if(!_node.isRenderActive()) continue; + if(_node.rendered) continue; if(_node.isRenderable()) ds_queue_enqueue(queue, _node); @@ -200,7 +200,7 @@ function RenderList(list) { if(runAction && rendering.hasInspector1Update()) rendering.inspector1Update(); - } else if(rendering.renderActive) { + } else if(rendering.isRenderActive()) { RENDER_QUEUE.enqueue(rendering); } @@ -233,11 +233,11 @@ function RenderListAction(list, context = PANEL_GRAPH.getCurrentContext()) { var _node = list[| i]; if(is_undefined(_node)) continue; - if(!is_struct(_node)) continue; + if(!is_struct(_node)) continue; - if(!_node.active) continue; - if(!_node.renderActive) continue; - if(_node.rendered) continue; + if(!_node.active) continue; + if(!_node.isRenderActive()) continue; + if(_node.rendered) continue; if(_node.isRenderable()) { RENDER_QUEUE.enqueue(_node); @@ -264,7 +264,7 @@ function RenderListAction(list, context = PANEL_GRAPH.getCurrentContext()) { if(runAction && rendering.hasInspector1Update()) rendering.inspector1Update(); - } else if(rendering.renderActive) { + } else if(rendering.isRenderActive()) { RENDER_QUEUE.enqueue(rendering); } diff --git a/scripts/rotatorRange/rotatorRange.gml b/scripts/rotatorRange/rotatorRange.gml index 3efb61d3d..8edb5c555 100644 --- a/scripts/rotatorRange/rotatorRange.gml +++ b/scripts/rotatorRange/rotatorRange.gml @@ -68,7 +68,7 @@ function rotatorRange(_onModify) : widget() constructor { draw_line_width(sx, sy, ex, ey, ui(8)); draw_set_alpha(1); - draw_circle(ex, ey, ui(4), 0); + draw_circle_prec(ex, ey, ui(4), 0); } #endregion diff --git a/scripts/surface_functions/surface_functions.gml b/scripts/surface_functions/surface_functions.gml index acba74e43..8f4c50145 100644 --- a/scripts/surface_functions/surface_functions.gml +++ b/scripts/surface_functions/surface_functions.gml @@ -105,6 +105,8 @@ function is_surface(s) { function surface_verify(surf, w, h, format = surface_rgba8unorm) { gml_pragma("forceinline"); + w = round(w); + h = round(h); if(!is_surface(surf)) return surface_create_valid(w, h, format); diff --git a/sprites/s_button/86d248e9-7f98-433e-aecc-3a370ea667ba.png b/sprites/s_button/86d248e9-7f98-433e-aecc-3a370ea667ba.png new file mode 100644 index 000000000..88b6c5697 Binary files /dev/null and b/sprites/s_button/86d248e9-7f98-433e-aecc-3a370ea667ba.png differ diff --git a/sprites/s_button/9159f584-4f9b-4d9e-8d87-bea41f41d844.png b/sprites/s_button/9159f584-4f9b-4d9e-8d87-bea41f41d844.png new file mode 100644 index 000000000..ea9fa1859 Binary files /dev/null and b/sprites/s_button/9159f584-4f9b-4d9e-8d87-bea41f41d844.png differ diff --git a/sprites/s_button/d03f8e70-f7a7-402d-855e-4abc46edb05f.png b/sprites/s_button/d03f8e70-f7a7-402d-855e-4abc46edb05f.png new file mode 100644 index 000000000..581e4ebae Binary files /dev/null and b/sprites/s_button/d03f8e70-f7a7-402d-855e-4abc46edb05f.png differ diff --git a/sprites/s_button/d8b045f5-3e6a-4697-908c-dac18f6df0e9.png b/sprites/s_button/d8b045f5-3e6a-4697-908c-dac18f6df0e9.png new file mode 100644 index 000000000..107a84a27 Binary files /dev/null and b/sprites/s_button/d8b045f5-3e6a-4697-908c-dac18f6df0e9.png differ diff --git a/sprites/s_button/ea25a8e8-4532-4d25-9c72-6b252fdfba36.png b/sprites/s_button/ea25a8e8-4532-4d25-9c72-6b252fdfba36.png new file mode 100644 index 000000000..af476759b Binary files /dev/null and b/sprites/s_button/ea25a8e8-4532-4d25-9c72-6b252fdfba36.png differ diff --git a/sprites/s_button/layers/86d248e9-7f98-433e-aecc-3a370ea667ba/f0af2579-5f0e-43f9-833b-2f16caea5837.png b/sprites/s_button/layers/86d248e9-7f98-433e-aecc-3a370ea667ba/f0af2579-5f0e-43f9-833b-2f16caea5837.png new file mode 100644 index 000000000..88b6c5697 Binary files /dev/null and b/sprites/s_button/layers/86d248e9-7f98-433e-aecc-3a370ea667ba/f0af2579-5f0e-43f9-833b-2f16caea5837.png differ diff --git a/sprites/s_button/layers/9159f584-4f9b-4d9e-8d87-bea41f41d844/f0af2579-5f0e-43f9-833b-2f16caea5837.png b/sprites/s_button/layers/9159f584-4f9b-4d9e-8d87-bea41f41d844/f0af2579-5f0e-43f9-833b-2f16caea5837.png new file mode 100644 index 000000000..ea9fa1859 Binary files /dev/null and b/sprites/s_button/layers/9159f584-4f9b-4d9e-8d87-bea41f41d844/f0af2579-5f0e-43f9-833b-2f16caea5837.png differ diff --git a/sprites/s_button/layers/d03f8e70-f7a7-402d-855e-4abc46edb05f/db943c7b-fc8c-4b19-876e-9ad68a03d1bb.png b/sprites/s_button/layers/d03f8e70-f7a7-402d-855e-4abc46edb05f/db943c7b-fc8c-4b19-876e-9ad68a03d1bb.png new file mode 100644 index 000000000..581e4ebae Binary files /dev/null and b/sprites/s_button/layers/d03f8e70-f7a7-402d-855e-4abc46edb05f/db943c7b-fc8c-4b19-876e-9ad68a03d1bb.png differ diff --git a/sprites/s_button/layers/d8b045f5-3e6a-4697-908c-dac18f6df0e9/f0af2579-5f0e-43f9-833b-2f16caea5837.png b/sprites/s_button/layers/d8b045f5-3e6a-4697-908c-dac18f6df0e9/f0af2579-5f0e-43f9-833b-2f16caea5837.png new file mode 100644 index 000000000..107a84a27 Binary files /dev/null and b/sprites/s_button/layers/d8b045f5-3e6a-4697-908c-dac18f6df0e9/f0af2579-5f0e-43f9-833b-2f16caea5837.png differ diff --git a/sprites/s_button/layers/ea25a8e8-4532-4d25-9c72-6b252fdfba36/f0af2579-5f0e-43f9-833b-2f16caea5837.png b/sprites/s_button/layers/ea25a8e8-4532-4d25-9c72-6b252fdfba36/f0af2579-5f0e-43f9-833b-2f16caea5837.png new file mode 100644 index 000000000..af476759b Binary files /dev/null and b/sprites/s_button/layers/ea25a8e8-4532-4d25-9c72-6b252fdfba36/f0af2579-5f0e-43f9-833b-2f16caea5837.png differ diff --git a/sprites/s_button/s_button.yy b/sprites/s_button/s_button.yy new file mode 100644 index 000000000..ccc9e23ed --- /dev/null +++ b/sprites/s_button/s_button.yy @@ -0,0 +1,103 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_button", + "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":"d8b045f5-3e6a-4697-908c-dac18f6df0e9",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"9159f584-4f9b-4d9e-8d87-bea41f41d844",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"86d248e9-7f98-433e-aecc-3a370ea667ba",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"ea25a8e8-4532-4d25-9c72-6b252fdfba36",}, + ], + "gridX": 0, + "gridY": 0, + "height": 16, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"f0af2579-5f0e-43f9-833b-2f16caea5837","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": { + "resourceType": "GMNineSliceData", + "resourceVersion": "1.0", + "bottom": 7, + "enabled": true, + "guideColour": [ + 4294902015, + 4294902015, + 4294902015, + 4294902015, + ], + "highlightColour": 1728023040, + "highlightStyle": 0, + "left": 6, + "right": 6, + "tileMode": [ + 0, + 0, + 0, + 0, + 0, + ], + "top": 7, + }, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_button", + "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": 4.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":"d8b045f5-3e6a-4697-908c-dac18f6df0e9","path":"sprites/s_button/s_button.yy",},},},"Disabled":false,"id":"1048f96a-1502-4c3e-a0f0-d1b9cd904807","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"9159f584-4f9b-4d9e-8d87-bea41f41d844","path":"sprites/s_button/s_button.yy",},},},"Disabled":false,"id":"ea529bb4-f1a0-4128-a055-12716bf5b771","IsCreationKey":false,"Key":1.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"86d248e9-7f98-433e-aecc-3a370ea667ba","path":"sprites/s_button/s_button.yy",},},},"Disabled":false,"id":"7075eb46-be22-4a26-ac35-0f292d6a0736","IsCreationKey":false,"Key":2.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"ea25a8e8-4532-4d25-9c72-6b252fdfba36","path":"sprites/s_button/s_button.yy",},},},"Disabled":false,"id":"3badf882-bed3-4607-8b10-ca9d30a04eda","IsCreationKey":false,"Key":3.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_button_hide_fill/065c1dd2-bfaf-4b83-8140-ff077b47dcae.png b/sprites/s_button_hide_fill/065c1dd2-bfaf-4b83-8140-ff077b47dcae.png new file mode 100644 index 000000000..607794301 Binary files /dev/null and b/sprites/s_button_hide_fill/065c1dd2-bfaf-4b83-8140-ff077b47dcae.png differ diff --git a/sprites/s_button_hide_fill/5ec9ef77-ba34-486d-8577-cfd528bba5f8.png b/sprites/s_button_hide_fill/5ec9ef77-ba34-486d-8577-cfd528bba5f8.png new file mode 100644 index 000000000..068081c0d Binary files /dev/null and b/sprites/s_button_hide_fill/5ec9ef77-ba34-486d-8577-cfd528bba5f8.png differ diff --git a/sprites/s_button_hide_fill/713ea1df-4ee1-4aab-90b0-4125e978b2bd.png b/sprites/s_button_hide_fill/713ea1df-4ee1-4aab-90b0-4125e978b2bd.png new file mode 100644 index 000000000..25d1975ec Binary files /dev/null and b/sprites/s_button_hide_fill/713ea1df-4ee1-4aab-90b0-4125e978b2bd.png differ diff --git a/sprites/s_button_hide_fill/7ca2af40-8a76-414d-9aeb-eb0d04189313.png b/sprites/s_button_hide_fill/7ca2af40-8a76-414d-9aeb-eb0d04189313.png new file mode 100644 index 000000000..25d1975ec Binary files /dev/null and b/sprites/s_button_hide_fill/7ca2af40-8a76-414d-9aeb-eb0d04189313.png differ diff --git a/sprites/s_button_hide_fill/8797a4ed-9003-45f6-b2a5-24296442d1ef.png b/sprites/s_button_hide_fill/8797a4ed-9003-45f6-b2a5-24296442d1ef.png new file mode 100644 index 000000000..635c93746 Binary files /dev/null and b/sprites/s_button_hide_fill/8797a4ed-9003-45f6-b2a5-24296442d1ef.png differ diff --git a/sprites/s_button_hide_fill/c8e56c44-f478-48b5-96b2-4f0459979d42.png b/sprites/s_button_hide_fill/c8e56c44-f478-48b5-96b2-4f0459979d42.png new file mode 100644 index 000000000..6bfbc0a89 Binary files /dev/null and b/sprites/s_button_hide_fill/c8e56c44-f478-48b5-96b2-4f0459979d42.png differ diff --git a/sprites/s_button_hide_fill/d55d8484-6fc1-4924-9094-526ce9d2fc50.png b/sprites/s_button_hide_fill/d55d8484-6fc1-4924-9094-526ce9d2fc50.png new file mode 100644 index 000000000..635c93746 Binary files /dev/null and b/sprites/s_button_hide_fill/d55d8484-6fc1-4924-9094-526ce9d2fc50.png differ diff --git a/sprites/s_button_hide_fill/f51474d1-21a0-463c-95c9-c35a8134e24e.png b/sprites/s_button_hide_fill/f51474d1-21a0-463c-95c9-c35a8134e24e.png new file mode 100644 index 000000000..9bc717624 Binary files /dev/null and b/sprites/s_button_hide_fill/f51474d1-21a0-463c-95c9-c35a8134e24e.png differ diff --git a/sprites/s_button_hide_fill/layers/065c1dd2-bfaf-4b83-8140-ff077b47dcae/509af631-9d22-495c-b8e0-3d75b75d74fd.png b/sprites/s_button_hide_fill/layers/065c1dd2-bfaf-4b83-8140-ff077b47dcae/509af631-9d22-495c-b8e0-3d75b75d74fd.png new file mode 100644 index 000000000..607794301 Binary files /dev/null and b/sprites/s_button_hide_fill/layers/065c1dd2-bfaf-4b83-8140-ff077b47dcae/509af631-9d22-495c-b8e0-3d75b75d74fd.png differ diff --git a/sprites/s_button_hide_fill/layers/5ec9ef77-ba34-486d-8577-cfd528bba5f8/509af631-9d22-495c-b8e0-3d75b75d74fd.png b/sprites/s_button_hide_fill/layers/5ec9ef77-ba34-486d-8577-cfd528bba5f8/509af631-9d22-495c-b8e0-3d75b75d74fd.png new file mode 100644 index 000000000..068081c0d Binary files /dev/null and b/sprites/s_button_hide_fill/layers/5ec9ef77-ba34-486d-8577-cfd528bba5f8/509af631-9d22-495c-b8e0-3d75b75d74fd.png differ diff --git a/sprites/s_button_hide_fill/layers/713ea1df-4ee1-4aab-90b0-4125e978b2bd/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png b/sprites/s_button_hide_fill/layers/713ea1df-4ee1-4aab-90b0-4125e978b2bd/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png new file mode 100644 index 000000000..25d1975ec Binary files /dev/null and b/sprites/s_button_hide_fill/layers/713ea1df-4ee1-4aab-90b0-4125e978b2bd/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png differ diff --git a/sprites/s_button_hide_fill/layers/7ca2af40-8a76-414d-9aeb-eb0d04189313/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png b/sprites/s_button_hide_fill/layers/7ca2af40-8a76-414d-9aeb-eb0d04189313/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png new file mode 100644 index 000000000..25d1975ec Binary files /dev/null and b/sprites/s_button_hide_fill/layers/7ca2af40-8a76-414d-9aeb-eb0d04189313/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png differ diff --git a/sprites/s_button_hide_fill/layers/8797a4ed-9003-45f6-b2a5-24296442d1ef/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png b/sprites/s_button_hide_fill/layers/8797a4ed-9003-45f6-b2a5-24296442d1ef/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png new file mode 100644 index 000000000..635c93746 Binary files /dev/null and b/sprites/s_button_hide_fill/layers/8797a4ed-9003-45f6-b2a5-24296442d1ef/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png differ diff --git a/sprites/s_button_hide_fill/layers/c8e56c44-f478-48b5-96b2-4f0459979d42/509af631-9d22-495c-b8e0-3d75b75d74fd.png b/sprites/s_button_hide_fill/layers/c8e56c44-f478-48b5-96b2-4f0459979d42/509af631-9d22-495c-b8e0-3d75b75d74fd.png new file mode 100644 index 000000000..6bfbc0a89 Binary files /dev/null and b/sprites/s_button_hide_fill/layers/c8e56c44-f478-48b5-96b2-4f0459979d42/509af631-9d22-495c-b8e0-3d75b75d74fd.png differ diff --git a/sprites/s_button_hide_fill/layers/d55d8484-6fc1-4924-9094-526ce9d2fc50/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png b/sprites/s_button_hide_fill/layers/d55d8484-6fc1-4924-9094-526ce9d2fc50/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png new file mode 100644 index 000000000..635c93746 Binary files /dev/null and b/sprites/s_button_hide_fill/layers/d55d8484-6fc1-4924-9094-526ce9d2fc50/e8e96b20-cf79-4e54-8cec-eba8053e42e3.png differ diff --git a/sprites/s_button_hide_fill/layers/f51474d1-21a0-463c-95c9-c35a8134e24e/509af631-9d22-495c-b8e0-3d75b75d74fd.png b/sprites/s_button_hide_fill/layers/f51474d1-21a0-463c-95c9-c35a8134e24e/509af631-9d22-495c-b8e0-3d75b75d74fd.png new file mode 100644 index 000000000..9bc717624 Binary files /dev/null and b/sprites/s_button_hide_fill/layers/f51474d1-21a0-463c-95c9-c35a8134e24e/509af631-9d22-495c-b8e0-3d75b75d74fd.png differ diff --git a/sprites/s_button_hide_fill/s_button_hide_fill.yy b/sprites/s_button_hide_fill/s_button_hide_fill.yy new file mode 100644 index 000000000..47a15aeca --- /dev/null +++ b/sprites/s_button_hide_fill/s_button_hide_fill.yy @@ -0,0 +1,103 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_button_hide_fill", + "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":"065c1dd2-bfaf-4b83-8140-ff077b47dcae",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"c8e56c44-f478-48b5-96b2-4f0459979d42",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"f51474d1-21a0-463c-95c9-c35a8134e24e",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"5ec9ef77-ba34-486d-8577-cfd528bba5f8",}, + ], + "gridX": 0, + "gridY": 0, + "height": 16, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"509af631-9d22-495c-b8e0-3d75b75d74fd","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": { + "resourceType": "GMNineSliceData", + "resourceVersion": "1.0", + "bottom": 7, + "enabled": true, + "guideColour": [ + 4294902015, + 4294902015, + 4294902015, + 4294902015, + ], + "highlightColour": 1728023040, + "highlightStyle": 0, + "left": 7, + "right": 7, + "tileMode": [ + 0, + 0, + 0, + 0, + 0, + ], + "top": 7, + }, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_button_hide_fill", + "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": 4.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":"065c1dd2-bfaf-4b83-8140-ff077b47dcae","path":"sprites/s_button_hide_fill/s_button_hide_fill.yy",},},},"Disabled":false,"id":"3cecfaf0-7e54-4927-a0aa-54885642cb88","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"c8e56c44-f478-48b5-96b2-4f0459979d42","path":"sprites/s_button_hide_fill/s_button_hide_fill.yy",},},},"Disabled":false,"id":"86179853-294c-4b66-a442-a31458ffbe04","IsCreationKey":false,"Key":1.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"f51474d1-21a0-463c-95c9-c35a8134e24e","path":"sprites/s_button_hide_fill/s_button_hide_fill.yy",},},},"Disabled":false,"id":"63523589-5050-48b5-a858-3e9f0bdcf2a0","IsCreationKey":false,"Key":2.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"5ec9ef77-ba34-486d-8577-cfd528bba5f8","path":"sprites/s_button_hide_fill/s_button_hide_fill.yy",},},},"Disabled":false,"id":"0d6a9c0c-ea96-473b-b6a9-74b1f05fe6d3","IsCreationKey":false,"Key":3.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_copy/5d8b8619-f807-4905-98d6-c54633c07f11.png b/sprites/s_copy/5d8b8619-f807-4905-98d6-c54633c07f11.png new file mode 100644 index 000000000..04a44a1b3 Binary files /dev/null and b/sprites/s_copy/5d8b8619-f807-4905-98d6-c54633c07f11.png differ diff --git a/sprites/s_copy/layers/5d8b8619-f807-4905-98d6-c54633c07f11/9c066229-9fae-490e-9093-233e0e69bced.png b/sprites/s_copy/layers/5d8b8619-f807-4905-98d6-c54633c07f11/9c066229-9fae-490e-9093-233e0e69bced.png new file mode 100644 index 000000000..04a44a1b3 Binary files /dev/null and b/sprites/s_copy/layers/5d8b8619-f807-4905-98d6-c54633c07f11/9c066229-9fae-490e-9093-233e0e69bced.png differ diff --git a/sprites/s_copy/s_copy.yy b/sprites/s_copy/s_copy.yy new file mode 100644 index 000000000..a1306ed31 --- /dev/null +++ b/sprites/s_copy/s_copy.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_copy", + "bbox_bottom": 42, + "bbox_left": 6, + "bbox_right": 42, + "bbox_top": 6, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"5d8b8619-f807-4905-98d6-c54633c07f11",}, + ], + "gridX": 0, + "gridY": 0, + "height": 48, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"9c066229-9fae-490e-9093-233e0e69bced","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_copy", + "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":"5d8b8619-f807-4905-98d6-c54633c07f11","path":"sprites/s_copy/s_copy.yy",},},},"Disabled":false,"id":"01f8475d-1473-4d62-ab62-7ca0349f2006","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 24, + "yorigin": 24, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 48, +} \ No newline at end of file diff --git a/sprites/s_discord/f5141a79-ced7-430d-9873-c03da1fafd32.png b/sprites/s_discord/f5141a79-ced7-430d-9873-c03da1fafd32.png new file mode 100644 index 000000000..dd517af1f Binary files /dev/null and b/sprites/s_discord/f5141a79-ced7-430d-9873-c03da1fafd32.png differ diff --git a/sprites/s_discord/layers/f5141a79-ced7-430d-9873-c03da1fafd32/b421890a-8a19-40e0-925f-8cea4c4a6438.png b/sprites/s_discord/layers/f5141a79-ced7-430d-9873-c03da1fafd32/b421890a-8a19-40e0-925f-8cea4c4a6438.png new file mode 100644 index 000000000..dd517af1f Binary files /dev/null and b/sprites/s_discord/layers/f5141a79-ced7-430d-9873-c03da1fafd32/b421890a-8a19-40e0-925f-8cea4c4a6438.png differ diff --git a/sprites/s_discord/s_discord.yy b/sprites/s_discord/s_discord.yy new file mode 100644 index 000000000..119d0789b --- /dev/null +++ b/sprites/s_discord/s_discord.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_discord", + "bbox_bottom": 39, + "bbox_left": 3, + "bbox_right": 44, + "bbox_top": 8, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"f5141a79-ced7-430d-9873-c03da1fafd32",}, + ], + "gridX": 0, + "gridY": 0, + "height": 48, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"b421890a-8a19-40e0-925f-8cea4c4a6438","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_discord", + "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":"f5141a79-ced7-430d-9873-c03da1fafd32","path":"sprites/s_discord/s_discord.yy",},},},"Disabled":false,"id":"8b5242ad-13e0-4573-951b-973e8188a83b","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 24, + "yorigin": 24, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 48, +} \ No newline at end of file diff --git a/sprites/s_node_warp_mesh/s_node_warp_mesh.yy b/sprites/s_node_warp_mesh/s_node_warp_mesh.yy index 553b08a53..3ac724699 100644 --- a/sprites/s_node_warp_mesh/s_node_warp_mesh.yy +++ b/sprites/s_node_warp_mesh/s_node_warp_mesh.yy @@ -57,7 +57,7 @@ {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"65a2bea1-1c8c-49cd-b536-64caed42e9c5","path":"sprites/s_node_warp_mesh/s_node_warp_mesh.yy",},},},"Disabled":false,"id":"89865563-c0bc-4338-9e0f-0fb7378e4673","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, ], - "visibleRange": {"x":0.0,"y":0.0,}, + "visibleRange": null, "volume": 1.0, "xorigin": 32, "yorigin": 32, diff --git a/sprites/s_noti_icon_error/8763bf7c-96f6-44de-b0fc-52ab024226bd.png b/sprites/s_noti_icon_error/8763bf7c-96f6-44de-b0fc-52ab024226bd.png new file mode 100644 index 000000000..1356c578b Binary files /dev/null and b/sprites/s_noti_icon_error/8763bf7c-96f6-44de-b0fc-52ab024226bd.png differ diff --git a/sprites/s_noti_icon_error/layers/8763bf7c-96f6-44de-b0fc-52ab024226bd/159c2412-9871-43d7-80f1-cb346e6d6449.png b/sprites/s_noti_icon_error/layers/8763bf7c-96f6-44de-b0fc-52ab024226bd/159c2412-9871-43d7-80f1-cb346e6d6449.png new file mode 100644 index 000000000..1356c578b Binary files /dev/null and b/sprites/s_noti_icon_error/layers/8763bf7c-96f6-44de-b0fc-52ab024226bd/159c2412-9871-43d7-80f1-cb346e6d6449.png differ diff --git a/sprites/s_noti_icon_error/s_noti_icon_error.yy b/sprites/s_noti_icon_error/s_noti_icon_error.yy new file mode 100644 index 000000000..35240b91f --- /dev/null +++ b/sprites/s_noti_icon_error/s_noti_icon_error.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_noti_icon_error", + "bbox_bottom": 37, + "bbox_left": 2, + "bbox_right": 37, + "bbox_top": 2, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"8763bf7c-96f6-44de-b0fc-52ab024226bd",}, + ], + "gridX": 0, + "gridY": 0, + "height": 40, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"159c2412-9871-43d7-80f1-cb346e6d6449","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_noti_icon_error", + "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":"8763bf7c-96f6-44de-b0fc-52ab024226bd","path":"sprites/s_noti_icon_error/s_noti_icon_error.yy",},},},"Disabled":false,"id":"9efc3122-c395-40a1-8768-608c96a092bf","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": 20, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 40, +} \ No newline at end of file diff --git a/sprites/s_textbox/1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e.png b/sprites/s_textbox/1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e.png new file mode 100644 index 000000000..6a1e4aa20 Binary files /dev/null and b/sprites/s_textbox/1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e.png differ diff --git a/sprites/s_textbox/64d1d0d4-973b-435a-ad06-5d8d501b393a.png b/sprites/s_textbox/64d1d0d4-973b-435a-ad06-5d8d501b393a.png new file mode 100644 index 000000000..4726363c9 Binary files /dev/null and b/sprites/s_textbox/64d1d0d4-973b-435a-ad06-5d8d501b393a.png differ diff --git a/sprites/s_textbox/6d937a21-3259-4987-9ed3-80d0201dae2b.png b/sprites/s_textbox/6d937a21-3259-4987-9ed3-80d0201dae2b.png new file mode 100644 index 000000000..14b329542 Binary files /dev/null and b/sprites/s_textbox/6d937a21-3259-4987-9ed3-80d0201dae2b.png differ diff --git a/sprites/s_textbox/93ea438d-26cf-4528-9935-675a1a8bfbac.png b/sprites/s_textbox/93ea438d-26cf-4528-9935-675a1a8bfbac.png new file mode 100644 index 000000000..f3a1e480a Binary files /dev/null and b/sprites/s_textbox/93ea438d-26cf-4528-9935-675a1a8bfbac.png differ diff --git a/sprites/s_textbox/layers/1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e/064984a7-c12c-4ca2-b32d-507aeb3fd206.png b/sprites/s_textbox/layers/1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e/064984a7-c12c-4ca2-b32d-507aeb3fd206.png new file mode 100644 index 000000000..6a1e4aa20 Binary files /dev/null and b/sprites/s_textbox/layers/1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e/064984a7-c12c-4ca2-b32d-507aeb3fd206.png differ diff --git a/sprites/s_textbox/layers/64d1d0d4-973b-435a-ad06-5d8d501b393a/064984a7-c12c-4ca2-b32d-507aeb3fd206.png b/sprites/s_textbox/layers/64d1d0d4-973b-435a-ad06-5d8d501b393a/064984a7-c12c-4ca2-b32d-507aeb3fd206.png new file mode 100644 index 000000000..4726363c9 Binary files /dev/null and b/sprites/s_textbox/layers/64d1d0d4-973b-435a-ad06-5d8d501b393a/064984a7-c12c-4ca2-b32d-507aeb3fd206.png differ diff --git a/sprites/s_textbox/layers/6d937a21-3259-4987-9ed3-80d0201dae2b/064984a7-c12c-4ca2-b32d-507aeb3fd206.png b/sprites/s_textbox/layers/6d937a21-3259-4987-9ed3-80d0201dae2b/064984a7-c12c-4ca2-b32d-507aeb3fd206.png new file mode 100644 index 000000000..14b329542 Binary files /dev/null and b/sprites/s_textbox/layers/6d937a21-3259-4987-9ed3-80d0201dae2b/064984a7-c12c-4ca2-b32d-507aeb3fd206.png differ diff --git a/sprites/s_textbox/layers/93ea438d-26cf-4528-9935-675a1a8bfbac/064984a7-c12c-4ca2-b32d-507aeb3fd206.png b/sprites/s_textbox/layers/93ea438d-26cf-4528-9935-675a1a8bfbac/064984a7-c12c-4ca2-b32d-507aeb3fd206.png new file mode 100644 index 000000000..f3a1e480a Binary files /dev/null and b/sprites/s_textbox/layers/93ea438d-26cf-4528-9935-675a1a8bfbac/064984a7-c12c-4ca2-b32d-507aeb3fd206.png differ diff --git a/sprites/s_textbox/s_textbox.yy b/sprites/s_textbox/s_textbox.yy new file mode 100644 index 000000000..445c39242 --- /dev/null +++ b/sprites/s_textbox/s_textbox.yy @@ -0,0 +1,103 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_textbox", + "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":"1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"6d937a21-3259-4987-9ed3-80d0201dae2b",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"93ea438d-26cf-4528-9935-675a1a8bfbac",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"64d1d0d4-973b-435a-ad06-5d8d501b393a",}, + ], + "gridX": 0, + "gridY": 0, + "height": 12, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"064984a7-c12c-4ca2-b32d-507aeb3fd206","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": { + "resourceType": "GMNineSliceData", + "resourceVersion": "1.0", + "bottom": 5, + "enabled": true, + "guideColour": [ + 4294902015, + 4294902015, + 4294902015, + 4294902015, + ], + "highlightColour": 1728023040, + "highlightStyle": 0, + "left": 5, + "right": 5, + "tileMode": [ + 0, + 0, + 0, + 0, + 0, + ], + "top": 5, + }, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_textbox", + "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": 4.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":"1b5dfd3d-1965-42e2-8be4-d4535c0e7a7e","path":"sprites/s_textbox/s_textbox.yy",},},},"Disabled":false,"id":"5aea7ad1-113d-4754-9702-da669b30331e","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"6d937a21-3259-4987-9ed3-80d0201dae2b","path":"sprites/s_textbox/s_textbox.yy",},},},"Disabled":false,"id":"7743b3e2-2b69-47c1-b542-cd5f32a7b259","IsCreationKey":false,"Key":1.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"93ea438d-26cf-4528-9935-675a1a8bfbac","path":"sprites/s_textbox/s_textbox.yy",},},},"Disabled":false,"id":"33ac43c7-8080-4c3f-84b4-b400541e6b67","IsCreationKey":false,"Key":2.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"64d1d0d4-973b-435a-ad06-5d8d501b393a","path":"sprites/s_textbox/s_textbox.yy",},},},"Disabled":false,"id":"c2496a9b-7bee-4dfb-bfe2-4a27b5c78361","IsCreationKey":false,"Key":3.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_window_exit/a60c514e-d686-4aff-8215-687e80d34ead.png b/sprites/s_window_exit/a60c514e-d686-4aff-8215-687e80d34ead.png new file mode 100644 index 000000000..3f1b1ac11 Binary files /dev/null and b/sprites/s_window_exit/a60c514e-d686-4aff-8215-687e80d34ead.png differ diff --git a/sprites/s_window_exit/layers/a60c514e-d686-4aff-8215-687e80d34ead/cd356c7c-4386-42e1-93d9-0709797468c7.png b/sprites/s_window_exit/layers/a60c514e-d686-4aff-8215-687e80d34ead/cd356c7c-4386-42e1-93d9-0709797468c7.png new file mode 100644 index 000000000..3f1b1ac11 Binary files /dev/null and b/sprites/s_window_exit/layers/a60c514e-d686-4aff-8215-687e80d34ead/cd356c7c-4386-42e1-93d9-0709797468c7.png differ diff --git a/sprites/s_window_exit/s_window_exit.yy b/sprites/s_window_exit/s_window_exit.yy new file mode 100644 index 000000000..d11270882 --- /dev/null +++ b/sprites/s_window_exit/s_window_exit.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_window_exit", + "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":"a60c514e-d686-4aff-8215-687e80d34ead",}, + ], + "gridX": 0, + "gridY": 0, + "height": 32, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"cd356c7c-4386-42e1-93d9-0709797468c7","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_window_exit", + "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":"a60c514e-d686-4aff-8215-687e80d34ead","path":"sprites/s_window_exit/s_window_exit.yy",},},},"Disabled":false,"id":"f885dae1-48e4-428a-9623-31181fce18bb","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 16, + "yorigin": 16, + }, + "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_window_frame/0a950d5e-3c05-4361-b250-0f38ec70c922.png b/sprites/s_window_frame/0a950d5e-3c05-4361-b250-0f38ec70c922.png new file mode 100644 index 000000000..540fd7ac3 Binary files /dev/null and b/sprites/s_window_frame/0a950d5e-3c05-4361-b250-0f38ec70c922.png differ diff --git a/sprites/s_window_frame/layers/0a950d5e-3c05-4361-b250-0f38ec70c922/ad6bfd62-f3db-475a-9221-c905b673347d.png b/sprites/s_window_frame/layers/0a950d5e-3c05-4361-b250-0f38ec70c922/ad6bfd62-f3db-475a-9221-c905b673347d.png new file mode 100644 index 000000000..540fd7ac3 Binary files /dev/null and b/sprites/s_window_frame/layers/0a950d5e-3c05-4361-b250-0f38ec70c922/ad6bfd62-f3db-475a-9221-c905b673347d.png differ diff --git a/sprites/s_window_frame/s_window_frame.yy b/sprites/s_window_frame/s_window_frame.yy new file mode 100644 index 000000000..9b1002ade --- /dev/null +++ b/sprites/s_window_frame/s_window_frame.yy @@ -0,0 +1,100 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_window_frame", + "bbox_bottom": 11, + "bbox_left": 0, + "bbox_right": 11, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "ConfigValues": { + "Itch": {"textureGroupId":"{\"name\":\"Default\",\"path\":\"texturegroups/Default\"}",}, + }, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"0a950d5e-3c05-4361-b250-0f38ec70c922",}, + ], + "gridX": 0, + "gridY": 0, + "height": 12, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"ad6bfd62-f3db-475a-9221-c905b673347d","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": { + "resourceType": "GMNineSliceData", + "resourceVersion": "1.0", + "bottom": 5, + "enabled": true, + "guideColour": [ + 4294902015, + 4294902015, + 4294902015, + 4294902015, + ], + "highlightColour": 1728023040, + "highlightStyle": 0, + "left": 5, + "right": 5, + "tileMode": [ + 0, + 0, + 0, + 0, + 0, + ], + "top": 5, + }, + "origin": 4, + "parent": { + "name": "sprites", + "path": "folders/_crash_handler/sprites.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_window_frame", + "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":"0a950d5e-3c05-4361-b250-0f38ec70c922","path":"sprites/s_window_frame/s_window_frame.yy",},},},"Disabled":false,"id":"9363dbb5-188a-4f19-b6f0-f7157c1a9e3e","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