diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index c5c8e2694..74a9a0a4e 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -460,6 +460,7 @@ {"name":"node_stripe","order":4,"path":"scripts/node_stripe/node_stripe.yy",}, {"name":"sh_texture_atlas","order":39,"path":"shaders/sh_texture_atlas/sh_texture_atlas.yy",}, {"name":"__vec4","order":9,"path":"scripts/__vec4/__vec4.yy",}, + {"name":"GMSSimpleMIDI","order":15,"path":"extensions/GMSSimpleMIDI/GMSSimpleMIDI.yy",}, {"name":"s_node_fluidSim_domain","order":6,"path":"sprites/s_node_fluidSim_domain/s_node_fluidSim_domain.yy",}, {"name":"s_node_displace","order":20,"path":"sprites/s_node_displace/s_node_displace.yy",}, {"name":"sh_polar","order":1,"path":"shaders/sh_polar/sh_polar.yy",}, @@ -643,6 +644,7 @@ {"name":"animation_controller","order":1,"path":"scripts/animation_controller/animation_controller.yy",}, {"name":"Obj_FirebaseFirestore_Document_Delete","order":3,"path":"objects/Obj_FirebaseFirestore_Document_Delete/Obj_FirebaseFirestore_Document_Delete.yy",}, {"name":"node_module_test","order":19,"path":"scripts/node_module_test/node_module_test.yy",}, + {"name":"node_graph_preview","order":22,"path":"scripts/node_graph_preview/node_graph_preview.yy",}, {"name":"s_node_shadow","order":36,"path":"sprites/s_node_shadow/s_node_shadow.yy",}, {"name":"Spout","order":14,"path":"extensions/Spout/Spout.yy",}, {"name":"s_node_grid_hex_noise","order":21,"path":"sprites/s_node_grid_hex_noise/s_node_grid_hex_noise.yy",}, @@ -893,6 +895,7 @@ {"name":"pcx_parse","order":3,"path":"scripts/pcx_parse/pcx_parse.yy",}, {"name":"node_9slice","order":5,"path":"scripts/node_9slice/node_9slice.yy",}, {"name":"fd_rectangle_add_velocity_surface","order":24,"path":"scripts/fd_rectangle_add_velocity_surface/fd_rectangle_add_velocity_surface.yy",}, + {"name":"s_node_midi","order":24,"path":"sprites/s_node_midi/s_node_midi.yy",}, {"name":"sh_find_boundary_stretch_y","order":2,"path":"shaders/sh_find_boundary_stretch_y/sh_find_boundary_stretch_y.yy",}, {"name":"BBMOD_Vec2","order":4,"path":"scripts/BBMOD_Vec2/BBMOD_Vec2.yy",}, {"name":"sh_grid_hex","order":1,"path":"shaders/sh_grid_hex/sh_grid_hex.yy",}, @@ -1654,6 +1657,7 @@ {"name":"panel_history","order":7,"path":"scripts/panel_history/panel_history.yy",}, {"name":"sh_channel_H","order":3,"path":"shaders/sh_channel_H/sh_channel_H.yy",}, {"name":"rotatorRandom","order":1,"path":"scripts/rotatorRandom/rotatorRandom.yy",}, + {"name":"node_mk_falls","order":11,"path":"scripts/node_mk_falls/node_mk_falls.yy",}, {"name":"node_spout_send","order":19,"path":"scripts/node_spout_send/node_spout_send.yy",}, {"name":"s_node_RGB","order":34,"path":"sprites/s_node_RGB/s_node_RGB.yy",}, {"name":"fd_rectangle_draw","order":9,"path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",}, @@ -1739,6 +1743,7 @@ {"name":"draw_line_dashed","order":7,"path":"scripts/draw_line_dashed/draw_line_dashed.yy",}, {"name":"pseudo_regex","order":7,"path":"scripts/pseudo_regex/pseudo_regex.yy",}, {"name":"node_invert","order":6,"path":"scripts/node_invert/node_invert.yy",}, + {"name":"s_node_mk_fall","order":9,"path":"sprites/s_node_mk_fall/s_node_mk_fall.yy",}, {"name":"draw_background_stretched","order":5,"path":"scripts/draw_background_stretched/draw_background_stretched.yy",}, {"name":"s_biterator_canvas","order":15,"path":"sprites/s_biterator_canvas/s_biterator_canvas.yy",}, {"name":"s_node_audio_volume","order":5,"path":"sprites/s_node_audio_volume/s_node_audio_volume.yy",}, @@ -1762,6 +1767,7 @@ {"name":"draw_arc","order":22,"path":"scripts/draw_arc/draw_arc.yy",}, {"name":"sh_fd_advect_velocity_1_glsl","order":7,"path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",}, {"name":"mac_window_step","order":1,"path":"scripts/mac_window_step/mac_window_step.yy",}, + {"name":"node_midi_in","order":20,"path":"scripts/node_midi_in/node_midi_in.yy",}, {"name":"s_node_image","order":1,"path":"sprites/s_node_image/s_node_image.yy",}, {"name":"__node_value_processor","order":6,"path":"scripts/__node_value_processor/__node_value_processor.yy",}, {"name":"hotkey_data","order":16,"path":"scripts/hotkey_data/hotkey_data.yy",}, @@ -1851,6 +1857,7 @@ {"name":"dialog_management","order":2,"path":"scripts/dialog_management/dialog_management.yy",}, {"name":"draw_shapes","order":10,"path":"scripts/draw_shapes/draw_shapes.yy",}, {"name":"sh_surface_replace_fast_replace","order":3,"path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",}, + {"name":"s_midi","order":25,"path":"sprites/s_midi/s_midi.yy",}, {"name":"node_solid","order":5,"path":"scripts/node_solid/node_solid.yy",}, {"name":"sh_blend_luma","order":19,"path":"shaders/sh_blend_luma/sh_blend_luma.yy",}, {"name":"fd_rectangle_set_material_dissipation_value","order":5,"path":"scripts/fd_rectangle_set_material_dissipation_value/fd_rectangle_set_material_dissipation_value.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index aa1fb86cc..d2e0a2848 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -679,6 +679,7 @@ {"id":{"name":"node_stripe","path":"scripts/node_stripe/node_stripe.yy",},}, {"id":{"name":"sh_texture_atlas","path":"shaders/sh_texture_atlas/sh_texture_atlas.yy",},}, {"id":{"name":"__vec4","path":"scripts/__vec4/__vec4.yy",},}, + {"id":{"name":"GMSSimpleMIDI","path":"extensions/GMSSimpleMIDI/GMSSimpleMIDI.yy",},}, {"id":{"name":"s_node_fluidSim_domain","path":"sprites/s_node_fluidSim_domain/s_node_fluidSim_domain.yy",},}, {"id":{"name":"s_node_displace","path":"sprites/s_node_displace/s_node_displace.yy",},}, {"id":{"name":"sh_polar","path":"shaders/sh_polar/sh_polar.yy",},}, @@ -884,6 +885,7 @@ {"id":{"name":"animation_controller","path":"scripts/animation_controller/animation_controller.yy",},}, {"id":{"name":"Obj_FirebaseFirestore_Document_Delete","path":"objects/Obj_FirebaseFirestore_Document_Delete/Obj_FirebaseFirestore_Document_Delete.yy",},}, {"id":{"name":"node_module_test","path":"scripts/node_module_test/node_module_test.yy",},}, + {"id":{"name":"node_graph_preview","path":"scripts/node_graph_preview/node_graph_preview.yy",},}, {"id":{"name":"s_node_shadow","path":"sprites/s_node_shadow/s_node_shadow.yy",},}, {"id":{"name":"Spout","path":"extensions/Spout/Spout.yy",},}, {"id":{"name":"s_node_grid_hex_noise","path":"sprites/s_node_grid_hex_noise/s_node_grid_hex_noise.yy",},}, @@ -1170,6 +1172,7 @@ {"id":{"name":"pcx_parse","path":"scripts/pcx_parse/pcx_parse.yy",},}, {"id":{"name":"node_9slice","path":"scripts/node_9slice/node_9slice.yy",},}, {"id":{"name":"fd_rectangle_add_velocity_surface","path":"scripts/fd_rectangle_add_velocity_surface/fd_rectangle_add_velocity_surface.yy",},}, + {"id":{"name":"s_node_midi","path":"sprites/s_node_midi/s_node_midi.yy",},}, {"id":{"name":"sh_find_boundary_stretch_y","path":"shaders/sh_find_boundary_stretch_y/sh_find_boundary_stretch_y.yy",},}, {"id":{"name":"sprite_add_functions","path":"scripts/sprite_add_functions/sprite_add_functions.yy",},}, {"id":{"name":"BBMOD_Vec2","path":"scripts/BBMOD_Vec2/BBMOD_Vec2.yy",},}, @@ -2042,6 +2045,7 @@ {"id":{"name":"panel_history","path":"scripts/panel_history/panel_history.yy",},}, {"id":{"name":"sh_channel_H","path":"shaders/sh_channel_H/sh_channel_H.yy",},}, {"id":{"name":"rotatorRandom","path":"scripts/rotatorRandom/rotatorRandom.yy",},}, + {"id":{"name":"node_mk_falls","path":"scripts/node_mk_falls/node_mk_falls.yy",},}, {"id":{"name":"node_spout_send","path":"scripts/node_spout_send/node_spout_send.yy",},}, {"id":{"name":"s_node_RGB","path":"sprites/s_node_RGB/s_node_RGB.yy",},}, {"id":{"name":"fd_rectangle_draw","path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",},}, @@ -2140,6 +2144,7 @@ {"id":{"name":"draw_line_dashed","path":"scripts/draw_line_dashed/draw_line_dashed.yy",},}, {"id":{"name":"pseudo_regex","path":"scripts/pseudo_regex/pseudo_regex.yy",},}, {"id":{"name":"node_invert","path":"scripts/node_invert/node_invert.yy",},}, + {"id":{"name":"s_node_mk_fall","path":"sprites/s_node_mk_fall/s_node_mk_fall.yy",},}, {"id":{"name":"draw_background_stretched","path":"scripts/draw_background_stretched/draw_background_stretched.yy",},}, {"id":{"name":"s_node_path","path":"sprites/s_node_path/s_node_path.yy",},}, {"id":{"name":"s_biterator_canvas","path":"sprites/s_biterator_canvas/s_biterator_canvas.yy",},}, @@ -2168,6 +2173,7 @@ {"id":{"name":"draw_arc","path":"scripts/draw_arc/draw_arc.yy",},}, {"id":{"name":"sh_fd_advect_velocity_1_glsl","path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",},}, {"id":{"name":"mac_window_step","path":"scripts/mac_window_step/mac_window_step.yy",},}, + {"id":{"name":"node_midi_in","path":"scripts/node_midi_in/node_midi_in.yy",},}, {"id":{"name":"s_node_image","path":"sprites/s_node_image/s_node_image.yy",},}, {"id":{"name":"__node_value_processor","path":"scripts/__node_value_processor/__node_value_processor.yy",},}, {"id":{"name":"hotkey_data","path":"scripts/hotkey_data/hotkey_data.yy",},}, @@ -2275,6 +2281,7 @@ {"id":{"name":"draw_shapes","path":"scripts/draw_shapes/draw_shapes.yy",},}, {"id":{"name":"node_channels","path":"scripts/node_channels/node_channels.yy",},}, {"id":{"name":"sh_surface_replace_fast_replace","path":"shaders/sh_surface_replace_fast_replace/sh_surface_replace_fast_replace.yy",},}, + {"id":{"name":"s_midi","path":"sprites/s_midi/s_midi.yy",},}, {"id":{"name":"node_solid","path":"scripts/node_solid/node_solid.yy",},}, {"id":{"name":"node_atlas_draw","path":"scripts/node_atlas_draw/node_atlas_draw.yy",},}, {"id":{"name":"sh_blend_luma","path":"shaders/sh_blend_luma/sh_blend_luma.yy",},}, diff --git a/fonts/_f_sdf/_f_sdf.old.png b/fonts/_f_sdf/_f_sdf.old.png index 0d2c1cfb3..7fb73745b 100644 Binary files a/fonts/_f_sdf/_f_sdf.old.png and b/fonts/_f_sdf/_f_sdf.old.png differ diff --git a/fonts/_f_sdf/_f_sdf.png b/fonts/_f_sdf/_f_sdf.png index 947bd8e9a..983f14b48 100644 Binary files a/fonts/_f_sdf/_f_sdf.png and b/fonts/_f_sdf/_f_sdf.png differ diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.old.png b/fonts/_f_sdf_medium/_f_sdf_medium.old.png index bfd45bbb8..d60f86b7c 100644 Binary files a/fonts/_f_sdf_medium/_f_sdf_medium.old.png and b/fonts/_f_sdf_medium/_f_sdf_medium.old.png differ diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.png b/fonts/_f_sdf_medium/_f_sdf_medium.png index 72e5d2d3e..7e3fd6800 100644 Binary files a/fonts/_f_sdf_medium/_f_sdf_medium.png and b/fonts/_f_sdf_medium/_f_sdf_medium.png differ diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index 3d3f1f8ae..fceb63716 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -1347,6 +1347,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x static onDrawHover = function(_x, _y, _mx, _my, _s) {} + static drawPreviewBackground = function(_x, _y, _mx, _my, _s) { return false; } + static drawBadge = function(_x, _y, _s) { #region if(!active) return; var xx = x * _s + _x + w * _s; diff --git a/scripts/node_graph_preview/node_checkerboard.yy b/scripts/node_graph_preview/node_checkerboard.yy new file mode 100644 index 000000000..f65eb196c --- /dev/null +++ b/scripts/node_graph_preview/node_checkerboard.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, + "resourceVersion": "1.0", + "name": "node_checkerboard", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_graph_preview/node_graph_preview.gml b/scripts/node_graph_preview/node_graph_preview.gml new file mode 100644 index 000000000..d8a279bec --- /dev/null +++ b/scripts/node_graph_preview/node_graph_preview.gml @@ -0,0 +1,126 @@ +function Node_Graph_Preview(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Graph Preview"; + preview_draw = true; + + min_h = 128; + + inputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone) + .rejectArray(); + + inputs[| 1] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) + .setDisplay(VALUE_DISPLAY.vector) + .rejectArray(); + + inputs[| 2] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) + .rejectArray(); + + inputs[| 3] = nodeValue("Sticky", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true) + .rejectArray(); + + inputs[| 4] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5) + .setDisplay(VALUE_DISPLAY.slider) + .rejectArray(); + + input_display_list = [ 0, + ["Display", false], 1, 2, 4, 3, + ] + + surf = noone; + stick = true; + pos_x = x; + pos_y = y; + sca = 1; + alpha = 1; + + dragging = noone; + drag_sx = 0; + drag_sy = 0; + drag_mx = 0; + drag_my = 0; + + static update = function(frame = CURRENT_FRAME) { #region + var _surf = getInputData(0); + var _posi = getInputData(1); + var _scal = getInputData(2); + var _stck = getInputData(3); + var _alph = getInputData(4); + + surf = _surf; + pos_x = _posi[0]; + pos_y = _posi[1]; + sca = _scal; + stick = _stck; + alpha = _alph; + } #endregion + + static getGraphPreviewSurface = function() { return surf; } + + static drawPreviewBackground = function(_x, _y, _mx, _my, _s) { + if(!is_surface(surf)) return false; + + var xx = stick? pos_x : _x + pos_x * _s; + var yy = stick? pos_y : _y + pos_y * _s; + var ss = stick? sca : sca * _s; + + draw_surface_ext(surf, xx, yy, ss, ss, 0, c_white, alpha); + + if(dragging == 1) { + var _x0 = stick? drag_sx + (_mx - drag_mx) : drag_sx + (_mx - drag_mx) / _s; + var _y0 = stick? drag_sy + (_my - drag_my) : drag_sy + (_my - drag_my) / _s; + + inputs[| 1].setValue([ _x0, _y0 ]); + + if(mouse_release(mb_left)) + dragging = noone; + } + + if(dragging == 2) { + var _sw = surface_get_width_safe(surf); + var _sh = surface_get_height_safe(surf); + var _ss = min((_mx - drag_sx) / _sw, (_my - drag_sy) / _sh); + + inputs[| 2].setValue(stick? _ss : _ss / _s); + + if(mouse_release(mb_left)) + dragging = noone; + } + + var _hov = false; + + if(PANEL_INSPECTOR.inspecting == self) { + var _sw = surface_get_width_safe(surf); + var _sh = surface_get_height_safe(surf); + + var _x1 = xx + _sw * ss; + var _y1 = yy + _sh * ss; + + draw_set_color(COLORS._main_accent); + draw_rectangle(xx, yy, _x1, _y1, true); + draw_sprite_colored(THEME.anchor_selector, 0, _x1, _y1); + + if(point_in_circle(_mx, _my, _x1, _y1, 12)) { + _hov = true; + + if(mouse_press(mb_left, is_instanceof(FOCUS, Panel) && FOCUS.getContent() == PANEL_GRAPH)) { + dragging = 2; + drag_sx = xx; + drag_sy = yy; + drag_mx = _mx; + drag_my = _my; + } + } else if(point_in_rectangle(_mx, _my, xx, yy, _x1, _y1)) { + _hov = true; + + if(mouse_press(mb_left, is_instanceof(FOCUS, Panel) && FOCUS.getContent() == PANEL_GRAPH)) { + dragging = 1; + drag_sx = pos_x; + drag_sy = pos_y; + drag_mx = _mx; + drag_my = _my; + } + } + } + + return _hov; + } +} \ No newline at end of file diff --git a/scripts/node_graph_preview/node_graph_preview.yy b/scripts/node_graph_preview/node_graph_preview.yy new file mode 100644 index 000000000..08546eaf3 --- /dev/null +++ b/scripts/node_graph_preview/node_graph_preview.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_graph_preview", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "misc", + "path": "folders/nodes/data/misc.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_graph_preview/node_stripe.yy b/scripts/node_graph_preview/node_stripe.yy new file mode 100644 index 000000000..3c179d416 --- /dev/null +++ b/scripts/node_graph_preview/node_stripe.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, + "resourceVersion": "1.0", + "name": "node_stripe", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_midi_in/node_midi_in.gml b/scripts/node_midi_in/node_midi_in.gml new file mode 100644 index 000000000..0008c9c1d --- /dev/null +++ b/scripts/node_midi_in/node_midi_in.gml @@ -0,0 +1,93 @@ +globalvar MIDI_INPORT; +MIDI_INPORT = noone; + +function Node_MIDI_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "MIDI In"; + update_on_frame = true; + + w = 128; + min_h = 128; + + rtmidi_init(); + rtmidi_ignore_messages(true, true, true); + + var inps = rtmidi_probe_ins(); + var _miniNames = []; + for( var i = 0; i < inps; i++ ) + _miniNames[i] = rtmidi_name_in(i); + + inputs[| 0] = nodeValue("Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) + .setDisplay(VALUE_DISPLAY.enum_scroll, { data: _miniNames, update_hover: false }) + .rejectArray(); + + outputs[| 0] = nodeValue("Raw Message", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, []); + + outputs[| 1] = nodeValue("Pressing notes", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, []); + + outputs[| 2] = nodeValue("Note velocity", self, JUNCTION_CONNECT.output, VALUE_TYPE.struct, {}); + + outputs[| 3] = nodeValue("Direct values", self, JUNCTION_CONNECT.output, VALUE_TYPE.struct, {}); + + notesPressing = []; + notesVelocity = {}; + values = {}; + + attributes.live_update = true; + array_push(attributeEditors, ["Live update", function() { return attributes.live_update; }, + new checkBox(function() { attributes.live_update = !attributes.live_update; })] + ); + + static step = function() { #region + LIVE_UPDATE = attributes.live_update; + } #endregion + + static update = function() { #region + var _inport = inputs[| 0].getValue(); + if(_inport != MIDI_INPORT) { + rtmidi_set_inport(_inport); + MIDI_INPORT = _inport; + } + + var b = rtmidi_check_message(); + var a = []; + + for (var i = 0; i < b; i++) { + a[i] = rtmidi_get_message(i); + } + + if(array_length(a) >= 3) { + var _typ = a[0]; + + if (_typ <= 159) { + var vnote = a[1]; + var velo = a[2]; + + if (_typ <= 143) array_remove(notesPressing, vnote); //note off + else array_push_unique(notesPressing, vnote); //note on + + notesVelocity[$ vnote] = velo; + } else if (_typ == 176) { + var vkey = a[1]; + var vval = a[2]; + + values[$ vkey] = vval; + } + } + + if(b) print(a); + + outputs[| 0].setValue(a); + outputs[| 1].setValue(notesPressing); + outputs[| 2].setValue(notesVelocity); + outputs[| 3].setValue(values); + + } #endregion + + static onDestroy = function() { rtmidi_deinit(); } + + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region + var bbox = drawGetBbox(xx, yy, _s); + draw_sprite_fit(s_midi, 0, bbox.xc, bbox.yc, bbox.w, bbox.h); + draw_sprite_fit(s_midi, 1, bbox.xc, bbox.yc, bbox.w, bbox.h, array_empty(notesPressing)? c_white : COLORS._main_accent); + } #endregion +} \ No newline at end of file diff --git a/scripts/node_midi_in/node_midi_in.yy b/scripts/node_midi_in/node_midi_in.yy new file mode 100644 index 000000000..45f44cf6f --- /dev/null +++ b/scripts/node_midi_in/node_midi_in.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_midi_in", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "IO", + "path": "folders/nodes/data/IO.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_mk_brownian/node_mk_brownian.gml b/scripts/node_mk_brownian/node_mk_brownian.gml index 7f1984df4..0ad73edf8 100644 --- a/scripts/node_mk_brownian/node_mk_brownian.gml +++ b/scripts/node_mk_brownian/node_mk_brownian.gml @@ -2,7 +2,7 @@ function Node_MK_Brownian(_x, _y, _group = noone) : Node(_x, _y, _group) constru name = "MK Brownian"; update_on_frame = true; - inputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); + inputs[| 0] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); inputs[| 1] = nodeValue("Sprite", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); @@ -31,9 +31,13 @@ function Node_MK_Brownian(_x, _y, _group = noone) : Node(_x, _y, _group) constru inputs[| 11] = nodeValue("Turn", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + inputs[| 12] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF) + .setDisplay(VALUE_DISPLAY.vector); + outputs[| 0] = nodeValue("Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); - input_display_list = [ new Inspector_Sprite(s_MKFX), 0, 8, + input_display_list = [ new Inspector_Sprite(s_MKFX), 8, + ["Dimension", false], 0, 12, ["Particles", false], 1, ["Spawn", false], 3, 2, ["Movement", false], 5, 4, 9, @@ -86,17 +90,19 @@ function Node_MK_Brownian(_x, _y, _group = noone) : Node(_x, _y, _group) constru var _dirs = getInputData(9); var _dira = getInputData(10); var _turn = getInputData(11); + var _dim = getInputData(12); var _sed = _seed; - if(!is_surface(_surf)) return; + if(is_surface(_surf)) _dim = surface_get_dimension(_surf) var _outSurf = outputs[| 0].getValue(); - _outSurf = surface_verify(_outSurf, surface_get_width_safe(_surf), surface_get_height_safe(_surf)); + _outSurf = surface_verify(_outSurf, _dim[0], _dim[1]); outputs[| 0].setValue(_outSurf); surface_set_target(_outSurf); DRAW_CLEAR + BLEND_OVERRIDE draw_surface_safe(_surf); BLEND_ALPHA_MULP diff --git a/scripts/node_mk_falls/node_mk_falls.gml b/scripts/node_mk_falls/node_mk_falls.gml new file mode 100644 index 000000000..9ec0c9bfe --- /dev/null +++ b/scripts/node_mk_falls/node_mk_falls.gml @@ -0,0 +1,204 @@ +function Node_MK_Fall(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "MK Fall"; + update_on_frame = true; + + inputs[| 0] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); + + inputs[| 1] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 2] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random()); + + inputs[| 3] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, AREA_DEF) + .setDisplay(VALUE_DISPLAY.area); + + inputs[| 4] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 10); + + inputs[| 5] = nodeValue("Gravity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1); + + inputs[| 6] = nodeValue("X Swing", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 4, 4 ]) + .setDisplay(VALUE_DISPLAY.range, { linked : true }); + + inputs[| 7] = nodeValue("Y Swing", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) + .setDisplay(VALUE_DISPLAY.range, { linked : true }); + + inputs[| 8] = nodeValue("Swing frequency", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) + .setDisplay(VALUE_DISPLAY.range, { linked : true }); + + inputs[| 9] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 4, 2 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 10] = nodeValue("Speed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) + .setDisplay(VALUE_DISPLAY.range, { linked : true }); + + inputs[| 11] = nodeValue("X Momentum", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) + .setDisplay(VALUE_DISPLAY.range, { linked : true }); + + inputs[| 12] = nodeValue("Wind", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 13] = nodeValue("Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.gradient, new gradientObject(c_white) ) + + inputs[| 14] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_11); + + inputs[| 15] = nodeValue("Ground", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + + inputs[| 16] = nodeValue("Ground levels", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ DEF_SURF_H / 2, DEF_SURF_H ]) + .setDisplay(VALUE_DISPLAY.range); + + outputs[| 0] = nodeValue("Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + + input_display_list = [ new Inspector_Sprite(s_MKFX), 2, + ["Dimension", false], 0, 1, + ["Spawn", false], 3, 4, + ["Physics", false], 10, 5, 12, + ["Swing", false], 8, 6, 7, 11, + ["Render", false], 9, 13, 14, + ["Ground", true, 15], 16, + ]; + + _gravity = 0; + _speed = [ 0, 0 ]; + _xswing = [ 0, 0 ]; + _xswinn = [ 0, 0 ]; + _yswing = [ 0, 0 ]; + _fswing = [ 0, 0 ]; + _wind = [ 0, 0 ]; + _ground = noone; + + static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { + inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); + + if(getInputData(15)) { + var _gr = getInputData(16); + var _y0 = _y + _gr[0] * _s; + var _y1 = _y + _gr[1] * _s; + + draw_set_color(COLORS._main_accent); + draw_line(0, _y0, 999999, _y0); + draw_line(0, _y1, 999999, _y1); + } + } + + static getPosition = function(ind, t, _area) { #region + random_set_seed(ind); + + var _px = irandom_range(_area[0] - _area[2], _area[0] + _area[2]); + var _py = irandom_range(_area[1] - _area[3], _area[1] + _area[3]); + + var _sg = choose(1, -1); + + var _sx = random_range(_xswing[0], _xswing[1]); + var _nx = random_range(_xswinn[0], _xswinn[1]); + var _sy = random_range(_yswing[0], _yswing[1]); + var _sw = random_range(_fswing[0], _fswing[1]); + var _sp = random_range(_speed [0], _speed [1]); + + var _gr = _ground == noone? 999999 : random_range(_ground[0], _ground[1]); + + var _vx = 0; + var _vy = 1; + + var _p0; + var _p1 = [ _px, _py ]; + + for(var i = -2; i < t; i++) { + var _i = i / TOTAL_FRAMES * pi * 4; + + _vx = sin(_sw * _sp * _i) * _sg * _sx * (1 + i / TOTAL_FRAMES * _nx); + _vy += sin(_sw / _sp * _i * 2) * _sy; + + if(_py <= _gr || i < 0) { + _p0 = [ _p1[0], _p1[1] ]; + _p1 = [ _px, _py ]; + } + + if(_py <= _gr) { + _px += (_vx + _wind[0]) * _sp; + _py += (_vy + _wind[1]) * _sp; + } + + _vy += _gravity * _sp; + } + + return [ _p0, _p1, [ _px, _py ] ]; + } #endregion + + static update = function() { #region + var _surf = getInputData(0); + var _dim = getInputData(1); + var _seed = getInputData(2); + var _area = getInputData(3); + var _amou = getInputData(4); + _gravity = getInputData(5); + _xswing = getInputData(6); + _yswing = getInputData(7); + _fswing = getInputData(8); + var _size = getInputData(9); + _speed = getInputData(10); + _xswinn = getInputData(11); + _wind = getInputData(12); + var _colr = getInputData(13); + var _alph = getInputData(14); + _ground = getInputData(15)? getInputData(16) : noone; + + var _sed = _seed; + + if(is_surface(_surf)) _dim = surface_get_dimension(_surf); + + var _outSurf = outputs[| 0].getValue(); + _outSurf = surface_verify(_outSurf, _dim[0], _dim[1]); + outputs[| 0].setValue(_outSurf); + + surface_set_target(_outSurf); + DRAW_CLEAR + + BLEND_OVERRIDE + draw_surface_safe(_surf); + BLEND_ALPHA_MULP + + for( var i = 0; i < _amou; i++ ) { + _sed += 100; + + var _ind = random_seed(1, _sed + 5); + var _lifs = irandom_seed(TOTAL_FRAMES, _sed); + var _lif = (_lifs + CURRENT_FRAME) % TOTAL_FRAMES; + + var _pos = getPosition(_sed, _lif, _area); + var _p0 = _pos[0]; + var _p1 = _pos[1]; + var _p2 = _pos[2]; + + var _dr0 = point_direction(_p1[0], _p1[1], _p0[0], _p0[1]); + var _dr2 = point_direction(_p1[0], _p1[1], _p2[0], _p2[1]); + + var _p11 = [ _p1[0] + lengthdir_x(_size[1], _dr0 + 90), + _p1[1] + lengthdir_y(_size[1], _dr0 + 90) ]; + var _p12 = [ _p1[0] + lengthdir_x(_size[1], _dr0 - 90), + _p1[1] + lengthdir_y(_size[1], _dr0 - 90) ]; + var _p00 = [ _p1[0] + lengthdir_x(_size[0], _dr0), + _p1[1] + lengthdir_y(_size[0], _dr0) ]; + var _p22 = [ _p1[0] + lengthdir_x(_size[0], _dr2), + _p1[1] + lengthdir_y(_size[0], _dr2) ]; + + var _cc = _colr.eval(_ind); + var _aa = eval_curve_x(_alph, _lif / TOTAL_FRAMES); + + draw_set_color(_cc); + draw_set_alpha(_aa); + + draw_primitive_begin(pr_trianglestrip); + + draw_vertex(_p00[0], _p00[1]); + draw_vertex(_p11[0], _p11[1]); + draw_vertex(_p12[0], _p12[1]); + draw_vertex(_p22[0], _p22[1]); + + draw_primitive_end(); + + draw_set_alpha(1); + } + BLEND_NORMAL + surface_reset_target(); + } #endregion +} \ No newline at end of file diff --git a/scripts/node_mk_falls/node_mk_falls.yy b/scripts/node_mk_falls/node_mk_falls.yy new file mode 100644 index 000000000..d4979c867 --- /dev/null +++ b/scripts/node_mk_falls/node_mk_falls.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_mk_falls", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "MK effects", + "path": "folders/nodes/data/MK effects.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_particle/node_particle.gml b/scripts/node_particle/node_particle.gml index dfac34e69..58a462570 100644 --- a/scripts/node_particle/node_particle.gml +++ b/scripts/node_particle/node_particle.gml @@ -17,12 +17,15 @@ function Node_Particle(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y, _ .rejectArray() .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Normal", "Alpha", "Additive" ]); + inputs[| input_len + 3] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone ) + .rejectArray(); + outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); attribute_surface_depth(); attribute_interpolation(); - array_insert(input_display_list, 0, ["Output", true], input_len + 0); + array_insert(input_display_list, 0, ["Output", true], input_len + 3, input_len + 0); array_push(input_display_list, input_len + 1, input_len + 2); def_surface = -1; @@ -62,8 +65,12 @@ function Node_Particle(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y, _ var _inSurf = getInputData(0); var _arr_type = getInputData(22); var _dim = getInputData(input_len + 0); + var _bg = getInputData(input_len + 3); + var _outSurf = outputs[| 0].getValue(); + if(is_surface(_bg)) _dim = surface_get_dimension(_bg) + if(is_array(_inSurf) && _arr_type == 3) { var _len = array_length(_inSurf); if(!is_array(_outSurf)) @@ -90,20 +97,26 @@ function Node_Particle(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y, _ } #endregion function render(_time = CURRENT_FRAME) { #region - var _dim = inputs[| input_len + 0].getValue(_time); - var _exact = inputs[| input_len + 1].getValue(_time); - var _blend = inputs[| input_len + 2].getValue(_time); - var _outSurf = outputs[| 0].getValue(); + var _dim = inputs[| input_len + 0].getValue(_time); + var _exact = inputs[| input_len + 1].getValue(_time); + var _blend = inputs[| input_len + 2].getValue(_time); + var _bg = inputs[| input_len + 3].getValue(_time); + + var _outSurf = outputs[| 0].getValue(); + + if(is_surface(_bg)) _dim = surface_get_dimension(_bg) if(render_amount == 0) { surface_set_shader(_outSurf); + if(is_surface(_bg)) draw_surface(_bg, 0, 0); + switch(_blend) { case PARTICLE_BLEND_MODE.normal: BLEND_NORMAL; break; case PARTICLE_BLEND_MODE.alpha: BLEND_ALPHA; break; case PARTICLE_BLEND_MODE.additive: BLEND_ADD; break; } - + shader_set_interpolation(_outSurf); for(var i = 0; i < attributes.part_amount; i++) if(parts[i].active) parts[i].draw(_exact, _dim[0], _dim[1]); @@ -112,6 +125,8 @@ function Node_Particle(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y, _ for( var o = 0, n = array_length(_outSurf); o < n; o++ ) { surface_set_shader(_outSurf[o]); + if(is_surface(_bg)) draw_surface(_bg, 0, 0); + switch(_blend) { case PARTICLE_BLEND_MODE.normal: BLEND_NORMAL; break; case PARTICLE_BLEND_MODE.alpha: BLEND_ALPHA; break; diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 12fa884e1..0a897c240 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -457,6 +457,7 @@ function __initNodes() { addNodeObject(input, "Websocket Receiver", s_node_websocket_receive, "Node_Websocket_Receiver", [1, Node_Websocket_Receiver],, "Create websocket server to receive data from the network.").setVersion(1145); addNodeObject(input, "Websocket Sender", s_node_websocket_send, "Node_Websocket_Sender", [1, Node_Websocket_Sender],, "Create websocket server to send data to the network.").setVersion(1145); addNodeObject(input, "Spout Sender", s_node_spout, "Node_Spout_Send", [1, Node_Spout_Send],, "Send surface through Spout.").setVersion(11600); + addNodeObject(input, "MIDI In", s_node_midi, "Node_MIDI_In", [1, Node_MIDI_In],, "Receive MIDI message.").setVersion(11630); #endregion var transform = ds_list_create(); #region @@ -673,6 +674,7 @@ function __initNodes() { addNodeObject(generator, "MK Tile", s_node_mk_tile, "Node_MK_Tile", [1, Node_MK_Tile]).setVersion(11600); addNodeObject(generator, "MK Flag", s_node_mk_flag, "Node_MK_Flag", [1, Node_MK_Flag]).setVersion(11600); addNodeObject(generator, "MK Brownian", s_node_mk_brownian, "Node_MK_Brownian", [1, Node_MK_Brownian]).setVersion(11630); + addNodeObject(generator, "MK Fall", s_node_mk_fall, "Node_MK_Fall", [1, Node_MK_Fall], ["Leaf"]).setVersion(11630); //addNodeObject(generator, "MK Sparkle", s_node_mk_sparkle, "Node_MK_Sparkle", [1, Node_MK_Sparkle]).patreonExtra(); #endregion @@ -895,8 +897,9 @@ function __initNodes() { addNodeObject(node, "Cache Array", s_node_cache_array, "Node_Cache_Array", [1, Node_Cache_Array],, "Store current animation as array. Cache persisted between save.").setVersion(1130); ds_list_add(node, "Debug"); - addNodeObject(node, "Print", s_node_print, "Node_Print", [1, Node_Print], ["debug log"], "Display text to notification.").setVersion(1145); - addNodeObject(node, "Widget Test", s_node_print, "Node_Widget_Test", [1, Node_Widget_Test]); + addNodeObject(node, "Print", s_node_print, "Node_Print", [1, Node_Print], ["debug log"], "Display text to notification.").setVersion(1145); + addNodeObject(node, "Widget Test", s_node_print, "Node_Widget_Test", [1, Node_Widget_Test]); + addNodeObject(node, "Graph Preview", s_node_image, "Node_Graph_Preview", [1, Node_Graph_Preview]); //addNodeObject(node, "Module Test", s_node_print, "Node_Module_Test", [1, Node_Module_Test]); ds_list_add(node, "System"); diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index 37a57835b..6f1fc17be 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -59,6 +59,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { mouse_grid_x = 0; mouse_grid_y = 0; mouse_on_graph = false; + + node_bg_hovering = false; #endregion #region ---- nodes ---- @@ -717,6 +719,19 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { draw_set_alpha(1); } #endregion + function drawBasePreview() { #region + var gr_x = graph_x * graph_s; + var gr_y = graph_y * graph_s; + var _hov = false; + + for(var i = 0; i < ds_list_size(nodes_list); i++) { + var h = nodes_list[| i].drawPreviewBackground(gr_x, gr_y, mx, my, graph_s); + _hov |= h; + } + + return _hov; + } #endregion + function drawNodes() { #region if(selection_block-- > 0) return; @@ -1192,7 +1207,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { nodes_junction_d = noone; } - if(mouse_on_graph && mouse_press(mb_left, pFOCUS) && !graph_dragging_key && !graph_zooming_key) { + if(mouse_on_graph && !node_bg_hovering && mouse_press(mb_left, pFOCUS) && !graph_dragging_key && !graph_zooming_key) { if(junction_hovering && junction_hovering.draw_line_shift_hover) { nodes_select_mx = mx; nodes_select_my = my; @@ -1655,6 +1670,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { bg_color = context == noone? COLORS.panel_bg_clear : merge_color(COLORS.panel_bg_clear, context.getColor(), 0.05); draw_clear(bg_color); + node_bg_hovering = drawBasePreview(); drawGrid(); draw_set_text(f_p0, fa_right, fa_top, COLORS._main_text_sub); diff --git a/sprites/s_midi/89ae1769-5df7-4002-afc6-38a51e880678.png b/sprites/s_midi/89ae1769-5df7-4002-afc6-38a51e880678.png new file mode 100644 index 000000000..be8082f50 Binary files /dev/null and b/sprites/s_midi/89ae1769-5df7-4002-afc6-38a51e880678.png differ diff --git a/sprites/s_midi/af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8.png b/sprites/s_midi/af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8.png new file mode 100644 index 000000000..447ccce42 Binary files /dev/null and b/sprites/s_midi/af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8.png differ diff --git a/sprites/s_midi/layers/89ae1769-5df7-4002-afc6-38a51e880678/4511771d-04ac-401a-a25d-e5d84015369b.png b/sprites/s_midi/layers/89ae1769-5df7-4002-afc6-38a51e880678/4511771d-04ac-401a-a25d-e5d84015369b.png new file mode 100644 index 000000000..be8082f50 Binary files /dev/null and b/sprites/s_midi/layers/89ae1769-5df7-4002-afc6-38a51e880678/4511771d-04ac-401a-a25d-e5d84015369b.png differ diff --git a/sprites/s_midi/layers/af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8/4511771d-04ac-401a-a25d-e5d84015369b.png b/sprites/s_midi/layers/af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8/4511771d-04ac-401a-a25d-e5d84015369b.png new file mode 100644 index 000000000..447ccce42 Binary files /dev/null and b/sprites/s_midi/layers/af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8/4511771d-04ac-401a-a25d-e5d84015369b.png differ diff --git a/sprites/s_midi/s_midi.yy b/sprites/s_midi/s_midi.yy new file mode 100644 index 000000000..bf25d0f7d --- /dev/null +++ b/sprites/s_midi/s_midi.yy @@ -0,0 +1,76 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_midi", + "bbox_bottom": 110, + "bbox_left": 16, + "bbox_right": 111, + "bbox_top": 17, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"89ae1769-5df7-4002-afc6-38a51e880678",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8",}, + ], + "gridX": 0, + "gridY": 0, + "height": 128, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"4511771d-04ac-401a-a25d-e5d84015369b","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "IO", + "path": "folders/nodes/icons/IO.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_midi", + "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": 2.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":"89ae1769-5df7-4002-afc6-38a51e880678","path":"sprites/s_midi/s_midi.yy",},},},"Disabled":false,"id":"2d23286c-f8ee-4ce2-aeb8-424d528253eb","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"af4ba22d-7ed0-40c3-8ead-3e74b0f7d3a8","path":"sprites/s_midi/s_midi.yy",},},},"Disabled":false,"id":"f951eaa0-c88c-49db-92f1-e9c8f453adc1","IsCreationKey":false,"Key":1.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 64, + "yorigin": 64, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 128, +} \ No newline at end of file diff --git a/sprites/s_node_midi/b60d962d-74ac-46be-893b-537591f21bd4.png b/sprites/s_node_midi/b60d962d-74ac-46be-893b-537591f21bd4.png new file mode 100644 index 000000000..637fcd37a Binary files /dev/null and b/sprites/s_node_midi/b60d962d-74ac-46be-893b-537591f21bd4.png differ diff --git a/sprites/s_node_midi/layers/b60d962d-74ac-46be-893b-537591f21bd4/a0236e25-d479-4e8d-b08a-2fe40e1cde9a.png b/sprites/s_node_midi/layers/b60d962d-74ac-46be-893b-537591f21bd4/a0236e25-d479-4e8d-b08a-2fe40e1cde9a.png new file mode 100644 index 000000000..637fcd37a Binary files /dev/null and b/sprites/s_node_midi/layers/b60d962d-74ac-46be-893b-537591f21bd4/a0236e25-d479-4e8d-b08a-2fe40e1cde9a.png differ diff --git a/sprites/s_node_midi/s_node_midi.yy b/sprites/s_node_midi/s_node_midi.yy new file mode 100644 index 000000000..7783652a8 --- /dev/null +++ b/sprites/s_node_midi/s_node_midi.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_midi", + "bbox_bottom": 62, + "bbox_left": 1, + "bbox_right": 62, + "bbox_top": 1, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"b60d962d-74ac-46be-893b-537591f21bd4",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"a0236e25-d479-4e8d-b08a-2fe40e1cde9a","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "IO", + "path": "folders/nodes/icons/IO.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_midi", + "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":"b60d962d-74ac-46be-893b-537591f21bd4","path":"sprites/s_node_midi/s_node_midi.yy",},},},"Disabled":false,"id":"a82898be-930f-4c4c-bbce-dcd75a9fc4b1","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file diff --git a/sprites/s_node_mk_fall/cff2c3a7-802b-4e7a-b73f-f32cb184a627.png b/sprites/s_node_mk_fall/cff2c3a7-802b-4e7a-b73f-f32cb184a627.png new file mode 100644 index 000000000..7907215d1 Binary files /dev/null and b/sprites/s_node_mk_fall/cff2c3a7-802b-4e7a-b73f-f32cb184a627.png differ diff --git a/sprites/s_node_mk_fall/layers/cff2c3a7-802b-4e7a-b73f-f32cb184a627/e6452777-7a4b-4618-9d6f-67fcff002646.png b/sprites/s_node_mk_fall/layers/cff2c3a7-802b-4e7a-b73f-f32cb184a627/e6452777-7a4b-4618-9d6f-67fcff002646.png new file mode 100644 index 000000000..7907215d1 Binary files /dev/null and b/sprites/s_node_mk_fall/layers/cff2c3a7-802b-4e7a-b73f-f32cb184a627/e6452777-7a4b-4618-9d6f-67fcff002646.png differ diff --git a/sprites/s_node_mk_fall/s_node_mk_fall.yy b/sprites/s_node_mk_fall/s_node_mk_fall.yy new file mode 100644 index 000000000..974643649 --- /dev/null +++ b/sprites/s_node_mk_fall/s_node_mk_fall.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_mk_fall", + "bbox_bottom": 63, + "bbox_left": 0, + "bbox_right": 63, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"cff2c3a7-802b-4e7a-b73f-f32cb184a627",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"e6452777-7a4b-4618-9d6f-67fcff002646","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "MK effects", + "path": "folders/nodes/icons/MK effects.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_mk_fall", + "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":"cff2c3a7-802b-4e7a-b73f-f32cb184a627","path":"sprites/s_node_mk_fall/s_node_mk_fall.yy",},},},"Disabled":false,"id":"4acd4820-beee-4d0a-b5ad-02798cb8c92c","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file