midi, mk falls, particle bg

This commit is contained in:
Tanasart 2024-01-12 16:38:58 +07:00
parent 233141e09c
commit 19e230afba
30 changed files with 773 additions and 13 deletions

View file

@ -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",},

View file

@ -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",},},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -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;

View file

@ -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",
}

View file

@ -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;
}
}

View file

@ -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",
},
}

View file

@ -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",
}

View file

@ -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
}

View file

@ -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",
},
}

View file

@ -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

View file

@ -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
}

View file

@ -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",
},
}

View file

@ -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;

View file

@ -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");

View file

@ -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);

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 807 B

76
sprites/s_midi/s_midi.yy Normal file
View file

@ -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<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 2.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","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<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","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<SpriteFrameKeyframe>","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,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -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<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 1.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","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<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","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,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -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<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 1.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","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<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","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,
}