interlace node

This commit is contained in:
Tanasart 2024-06-28 16:54:13 +07:00
parent 3d4fe3447f
commit be6ba22147
19 changed files with 332 additions and 23 deletions

View file

@ -836,6 +836,7 @@
{"name":"node_image_grid","order":3,"path":"scripts/node_image_grid/node_image_grid.yy",}, {"name":"node_image_grid","order":3,"path":"scripts/node_image_grid/node_image_grid.yy",},
{"name":"node_image_sequence","order":3,"path":"scripts/node_image_sequence/node_image_sequence.yy",}, {"name":"node_image_sequence","order":3,"path":"scripts/node_image_sequence/node_image_sequence.yy",},
{"name":"node_image_sheet","order":4,"path":"scripts/node_image_sheet/node_image_sheet.yy",}, {"name":"node_image_sheet","order":4,"path":"scripts/node_image_sheet/node_image_sheet.yy",},
{"name":"node_interlaced","order":25,"path":"scripts/node_interlaced/node_interlaced.yy",},
{"name":"node_interpret_number","order":3,"path":"scripts/node_interpret_number/node_interpret_number.yy",}, {"name":"node_interpret_number","order":3,"path":"scripts/node_interpret_number/node_interpret_number.yy",},
{"name":"node_invert","order":6,"path":"scripts/node_invert/node_invert.yy",}, {"name":"node_invert","order":6,"path":"scripts/node_invert/node_invert.yy",},
{"name":"node_isosurf","order":3,"path":"scripts/node_isosurf/node_isosurf.yy",}, {"name":"node_isosurf","order":3,"path":"scripts/node_isosurf/node_isosurf.yy",},
@ -1455,6 +1456,7 @@
{"name":"sh_grid_tri","order":3,"path":"shaders/sh_grid_tri/sh_grid_tri.yy",}, {"name":"sh_grid_tri","order":3,"path":"shaders/sh_grid_tri/sh_grid_tri.yy",},
{"name":"sh_herringbone_tile","order":5,"path":"shaders/sh_herringbone_tile/sh_herringbone_tile.yy",}, {"name":"sh_herringbone_tile","order":5,"path":"shaders/sh_herringbone_tile/sh_herringbone_tile.yy",},
{"name":"sh_image_trace","order":34,"path":"shaders/sh_image_trace/sh_image_trace.yy",}, {"name":"sh_image_trace","order":34,"path":"shaders/sh_image_trace/sh_image_trace.yy",},
{"name":"sh_interlaced","order":58,"path":"shaders/sh_interlaced/sh_interlaced.yy",},
{"name":"sh_invert","order":17,"path":"shaders/sh_invert/sh_invert.yy",}, {"name":"sh_invert","order":17,"path":"shaders/sh_invert/sh_invert.yy",},
{"name":"sh_jpeg_recons","order":1,"path":"shaders/sh_jpeg_recons/sh_jpeg_recons.yy",}, {"name":"sh_jpeg_recons","order":1,"path":"shaders/sh_jpeg_recons/sh_jpeg_recons.yy",},
{"name":"sh_kuwahara_ani","order":37,"path":"shaders/sh_kuwahara_ani/sh_kuwahara_ani.yy",}, {"name":"sh_kuwahara_ani","order":37,"path":"shaders/sh_kuwahara_ani/sh_kuwahara_ani.yy",},
@ -1839,6 +1841,7 @@
{"name":"s_node_image_transform_3d","order":25,"path":"sprites/s_node_image_transform_3d/s_node_image_transform_3d.yy",}, {"name":"s_node_image_transform_3d","order":25,"path":"sprites/s_node_image_transform_3d/s_node_image_transform_3d.yy",},
{"name":"s_node_image","order":1,"path":"sprites/s_node_image/s_node_image.yy",}, {"name":"s_node_image","order":1,"path":"sprites/s_node_image/s_node_image.yy",},
{"name":"s_node_input","order":6,"path":"sprites/s_node_input/s_node_input.yy",}, {"name":"s_node_input","order":6,"path":"sprites/s_node_input/s_node_input.yy",},
{"name":"s_node_interlace","order":68,"path":"sprites/s_node_interlace/s_node_interlace.yy",},
{"name":"s_node_interpret_number","order":30,"path":"sprites/s_node_interpret_number/s_node_interpret_number.yy",}, {"name":"s_node_interpret_number","order":30,"path":"sprites/s_node_interpret_number/s_node_interpret_number.yy",},
{"name":"s_node_invert","order":30,"path":"sprites/s_node_invert/s_node_invert.yy",}, {"name":"s_node_invert","order":30,"path":"sprites/s_node_invert/s_node_invert.yy",},
{"name":"s_node_isosurf","order":1,"path":"sprites/s_node_isosurf/s_node_isosurf.yy",}, {"name":"s_node_isosurf","order":1,"path":"sprites/s_node_isosurf/s_node_isosurf.yy",},

View file

@ -1245,6 +1245,7 @@
{"id":{"name":"node_image_sequence","path":"scripts/node_image_sequence/node_image_sequence.yy",},}, {"id":{"name":"node_image_sequence","path":"scripts/node_image_sequence/node_image_sequence.yy",},},
{"id":{"name":"node_image_sheet","path":"scripts/node_image_sheet/node_image_sheet.yy",},}, {"id":{"name":"node_image_sheet","path":"scripts/node_image_sheet/node_image_sheet.yy",},},
{"id":{"name":"node_image","path":"scripts/node_image/node_image.yy",},}, {"id":{"name":"node_image","path":"scripts/node_image/node_image.yy",},},
{"id":{"name":"node_interlaced","path":"scripts/node_interlaced/node_interlaced.yy",},},
{"id":{"name":"node_interpret_number","path":"scripts/node_interpret_number/node_interpret_number.yy",},}, {"id":{"name":"node_interpret_number","path":"scripts/node_interpret_number/node_interpret_number.yy",},},
{"id":{"name":"node_invert","path":"scripts/node_invert/node_invert.yy",},}, {"id":{"name":"node_invert","path":"scripts/node_invert/node_invert.yy",},},
{"id":{"name":"node_isosurf","path":"scripts/node_isosurf/node_isosurf.yy",},}, {"id":{"name":"node_isosurf","path":"scripts/node_isosurf/node_isosurf.yy",},},
@ -1961,6 +1962,7 @@
{"id":{"name":"sh_grid","path":"shaders/sh_grid/sh_grid.yy",},}, {"id":{"name":"sh_grid","path":"shaders/sh_grid/sh_grid.yy",},},
{"id":{"name":"sh_herringbone_tile","path":"shaders/sh_herringbone_tile/sh_herringbone_tile.yy",},}, {"id":{"name":"sh_herringbone_tile","path":"shaders/sh_herringbone_tile/sh_herringbone_tile.yy",},},
{"id":{"name":"sh_image_trace","path":"shaders/sh_image_trace/sh_image_trace.yy",},}, {"id":{"name":"sh_image_trace","path":"shaders/sh_image_trace/sh_image_trace.yy",},},
{"id":{"name":"sh_interlaced","path":"shaders/sh_interlaced/sh_interlaced.yy",},},
{"id":{"name":"sh_interpret_number","path":"shaders/sh_interpret_number/sh_interpret_number.yy",},}, {"id":{"name":"sh_interpret_number","path":"shaders/sh_interpret_number/sh_interpret_number.yy",},},
{"id":{"name":"sh_invert","path":"shaders/sh_invert/sh_invert.yy",},}, {"id":{"name":"sh_invert","path":"shaders/sh_invert/sh_invert.yy",},},
{"id":{"name":"sh_jpeg_dct","path":"shaders/sh_jpeg_dct/sh_jpeg_dct.yy",},}, {"id":{"name":"sh_jpeg_dct","path":"shaders/sh_jpeg_dct/sh_jpeg_dct.yy",},},
@ -2401,6 +2403,7 @@
{"id":{"name":"s_node_image_transform_3d","path":"sprites/s_node_image_transform_3d/s_node_image_transform_3d.yy",},}, {"id":{"name":"s_node_image_transform_3d","path":"sprites/s_node_image_transform_3d/s_node_image_transform_3d.yy",},},
{"id":{"name":"s_node_image","path":"sprites/s_node_image/s_node_image.yy",},}, {"id":{"name":"s_node_image","path":"sprites/s_node_image/s_node_image.yy",},},
{"id":{"name":"s_node_input","path":"sprites/s_node_input/s_node_input.yy",},}, {"id":{"name":"s_node_input","path":"sprites/s_node_input/s_node_input.yy",},},
{"id":{"name":"s_node_interlace","path":"sprites/s_node_interlace/s_node_interlace.yy",},},
{"id":{"name":"s_node_interpret_number","path":"sprites/s_node_interpret_number/s_node_interpret_number.yy",},}, {"id":{"name":"s_node_interpret_number","path":"sprites/s_node_interpret_number/s_node_interpret_number.yy",},},
{"id":{"name":"s_node_invert","path":"sprites/s_node_invert/s_node_invert.yy",},}, {"id":{"name":"s_node_invert","path":"sprites/s_node_invert/s_node_invert.yy",},},
{"id":{"name":"s_node_isosurf","path":"sprites/s_node_isosurf/s_node_isosurf.yy",},}, {"id":{"name":"s_node_isosurf","path":"sprites/s_node_isosurf/s_node_isosurf.yy",},},

View file

@ -38,7 +38,7 @@
LATEST_VERSION = 11700; LATEST_VERSION = 11700;
VERSION = 11760; VERSION = 11760;
SAVE_VERSION = 11700; SAVE_VERSION = 11700;
VERSION_STRING = "1.17.6"; VERSION_STRING = "1.17.6.001";
BUILD_NUMBER = 11760; BUILD_NUMBER = 11760;
globalvar HOTKEYS, HOTKEY_CONTEXT; globalvar HOTKEYS, HOTKEY_CONTEXT;

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "filter",
"path": "folders/nodes/data/filter.yy",
},
"resourceVersion": "1.0",
"name": "node_alpha_to_grey",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "filter",
"path": "folders/nodes/data/filter.yy",
},
"resourceVersion": "1.0",
"name": "node_bw",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "filter",
"path": "folders/nodes/data/filter.yy",
},
"resourceVersion": "1.0",
"name": "node_color_adjustment",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "process",
"path": "folders/nodes/data/process.yy",
},
"resourceVersion": "1.0",
"name": "node_color_replacement",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "filter",
"path": "folders/nodes/data/filter.yy",
},
"resourceVersion": "1.0",
"name": "node_greyscale",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -0,0 +1,72 @@
function Node_Interlaced(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "Interlace";
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
inputs[| 1] = nodeValue("Active", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true);
active_index = 1;
inputs[| 2] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
inputs[| 3] = nodeValue("Mix", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
.setDisplay(VALUE_DISPLAY.slider);
inputs[| 4] = nodeValue("Channel", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0b1111)
.setDisplay(VALUE_DISPLAY.toggle, { data: array_create(4, THEME.inspector_channel) });
__init_mask_modifier(2); // inputs 5, 6
inputs[| 7] = nodeValue("Axis", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_button, [ "X", "Y" ]);
inputs[| 8] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1);
inputs[| 9] = nodeValue("Invert", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
temp_surface = [ ];
input_display_list = [ 1,
["Surface", false], 0, 2, 3, 4,
["Effects", false], 7, 8, 9,
];
attribute_surface_depth();
static step = function() { #region
__step_mask_modifier();
} #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) { #region
var _surf = _data[0];
var _axis = _data[7];
var _size = _data[8];
var _invt = _data[9];
var _dim = surface_get_dimension(_surf);
surface_set_shader(_outSurf, sh_interlaced);
shader_set_i("useSurf", CURRENT_FRAME > 1);
shader_set_surface("prevFrame", array_safe_get(temp_surface, _array_index));
shader_set_2("dimension", _dim);
shader_set_i("axis", _axis);
shader_set_i("invert", _invt);
shader_set_f("size", _size);
draw_surface_safe(_surf);
surface_reset_shader();
temp_surface[_array_index] = surface_verify(array_safe_get(temp_surface, _array_index), _dim[0], _dim[1]);
surface_set_shader(temp_surface[_array_index], noone);
draw_surface_safe(_surf);
surface_reset_shader();
__process_mask_modifier(_data);
_outSurf = mask_apply(_data[0], _outSurf, _data[2], _data[3]);
_outSurf = channel_apply(_data[0], _outSurf, _data[4]);
return _outSurf;
} #endregion
}

View file

@ -0,0 +1,13 @@
{
"$GMScript":"",
"%Name":"node_interlaced",
"isCompatibility":false,
"isDnD":false,
"name":"node_interlaced",
"parent":{
"name":"effects",
"path":"folders/nodes/data/filter/effects.yy",
},
"resourceType":"GMScript",
"resourceVersion":"2.0",
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "process",
"path": "folders/nodes/data/process.yy",
},
"resourceVersion": "1.0",
"name": "node_outline",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -39,7 +39,7 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
static processData = function(_outSurf, _data, _output_index, _array_index = 0) { return _outSurf; } static processData = function(_outSurf, _data, _output_index, _array_index = 0) { return _outSurf; }
static getSingleValue = function(_index, _arr = preview_index, output = false) { #region static getSingleValue = function(_index, _arr = preview_index, output = false) {
var _l = output? outputs : inputs; var _l = output? outputs : inputs;
var _n = _l[| _index]; var _n = _l[| _index];
var _in = output? _n.getValue() : getInputData(_index); var _in = output? _n.getValue() : getInputData(_index);
@ -57,9 +57,9 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
} }
return array_safe_get_fast(_in, _aIndex); return array_safe_get_fast(_in, _aIndex);
} #endregion }
static getDimension = function(arr = 0) { #region static getDimension = function(arr = 0) {
if(dimension_index == -1) return [ 1, 1 ]; if(dimension_index == -1) return [ 1, 1 ];
var _in = getSingleValue(dimension_index, arr); var _in = getSingleValue(dimension_index, arr);
@ -74,9 +74,9 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
return _in; return _in;
return [1, 1]; return [1, 1];
} #endregion }
static processDataArray = function(outIndex) { #region static processDataArray = function(outIndex) {
var _output = outputs[| outIndex]; var _output = outputs[| outIndex];
var _out = _output.getValue(); var _out = _output.getValue();
var _atlas = false; var _atlas = false;
@ -214,9 +214,9 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
} }
return _out; return _out;
} #endregion }
static processBatchOutput = function() { #region static processBatchOutput = function() {
var _is = ds_list_size(inputs); var _is = ds_list_size(inputs);
var _os = ds_list_size(outputs); var _os = ds_list_size(outputs);
var _dep = attrDepth(); var _dep = attrDepth();
@ -277,19 +277,19 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
for( var i = 0, n = _os; i < n; i++ ) for( var i = 0, n = _os; i < n; i++ )
outputs[| i].setValue(_outputs[i]); outputs[| i].setValue(_outputs[i]);
} #endregion }
static processOutput = function() { #region static processOutput = function() {
for(var i = 0; i < ds_list_size(outputs); i++) { for(var i = 0; i < ds_list_size(outputs); i++) {
var val = outputs[| i].process_array? processDataArray(i) : processData(outputs[| i].getValue(), noone, i); var val = outputs[| i].process_array? processDataArray(i) : processData(outputs[| i].getValue(), noone, i);
if(val != undefined) if(val != undefined)
outputs[| i].setValue(val); outputs[| i].setValue(val);
} }
} #endregion }
static preGetInputs = function() {} static preGetInputs = function() {}
static getInputs = function() { #region static getInputs = function() {
preGetInputs(); preGetInputs();
var _len = ds_list_size(inputs); var _len = ds_list_size(inputs);
@ -361,9 +361,9 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
all_inputs[i][l] = inputs[| i].arrayBalance(_in[_index]); all_inputs[i][l] = inputs[| i].arrayBalance(_in[_index]);
} #endregion } #endregion
} #endregion }
static update = function(frame = CURRENT_FRAME) { #region static update = function(frame = CURRENT_FRAME) {
processData_prebatch(); processData_prebatch();
if(batch_output) processBatchOutput(); if(batch_output) processBatchOutput();
@ -373,23 +373,23 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
postProcess(); postProcess();
postPostProcess(); postPostProcess();
} #endregion }
static postProcess = function() {} static postProcess = function() {}
static postPostProcess = function() {} static postPostProcess = function() {}
static processSerialize = function(_map) { #region static processSerialize = function(_map) {
_map.array_process = attributes.array_process; _map.array_process = attributes.array_process;
} #endregion }
static processDeserialize = function() { #region static processDeserialize = function() {
attributes.array_process = struct_try_get(load_map, "array_process", ARRAY_PROCESS.loop); attributes.array_process = struct_try_get(load_map, "array_process", ARRAY_PROCESS.loop);
} #endregion }
///////////////////// CACHE ///////////////////// ///////////////////// CACHE /////////////////////
static cacheCurrentFrameIndex = function(_frame, index) { #region static cacheCurrentFrameIndex = function(_frame, index) {
cacheArrayCheck(); cacheArrayCheck();
if(CURRENT_FRAME < 0) return; if(CURRENT_FRAME < 0) return;
if(CURRENT_FRAME >= array_length(cached_output)) return; if(CURRENT_FRAME >= array_length(cached_output)) return;
@ -401,13 +401,13 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
array_safe_set(cache_result, CURRENT_FRAME, true); array_safe_set(cache_result, CURRENT_FRAME, true);
return cached_output[CURRENT_FRAME]; return cached_output[CURRENT_FRAME];
} #endregion }
static getCacheFrameIndex = function(frame = CURRENT_FRAME, index = 0) { #region static getCacheFrameIndex = function(frame = CURRENT_FRAME, index = 0) {
if(frame < 0) return false; if(frame < 0) return false;
if(!cacheExist(frame)) return noone; if(!cacheExist(frame)) return noone;
var surf = array_safe_get_fast(cached_output, frame); var surf = array_safe_get_fast(cached_output, frame);
return array_safe_get_fast(surf, index); return array_safe_get_fast(surf, index);
} #endregion }
} }

View file

@ -612,6 +612,7 @@ function __initNodes() {
addNodeObject(filter, "Vignette", s_node_vignette, "Node_Vignette", [1, Node_Vignette],, "Apply vignette effect to the border.").setVersion(11630); addNodeObject(filter, "Vignette", s_node_vignette, "Node_Vignette", [1, Node_Vignette],, "Apply vignette effect to the border.").setVersion(11630);
addNodeObject(filter, "FXAA", s_node_FXAA, "Node_FXAA", [1, Node_FXAA],, "Apply fast approximate anti-aliasing to te image."); addNodeObject(filter, "FXAA", s_node_FXAA, "Node_FXAA", [1, Node_FXAA],, "Apply fast approximate anti-aliasing to te image.");
addNodeObject(filter, "JPEG", s_node_JPEG, "Node_JPEG", [1, Node_JPEG],, "Apply JPEG compression to the image.").setVersion(11730); addNodeObject(filter, "JPEG", s_node_JPEG, "Node_JPEG", [1, Node_JPEG],, "Apply JPEG compression to the image.").setVersion(11730);
addNodeObject(filter, "Interlace", s_node_interlace, "Node_Interlaced", [1, Node_Interlaced],, "Apply interlace effect to an image.").setVersion(11760);
addNodeObject(filter, "Blend Edge", s_node_blend_edge, "Node_Blend_Edge", [1, Node_Blend_Edge]).setVersion(11740); addNodeObject(filter, "Blend Edge", s_node_blend_edge, "Node_Blend_Edge", [1, Node_Blend_Edge]).setVersion(11740);
ds_list_add(filter, "Colors"); ds_list_add(filter, "Colors");

View file

@ -0,0 +1,24 @@
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform int useSurf;
uniform sampler2D prevFrame;
uniform vec2 dimension;
uniform int axis;
uniform int invert;
uniform float size;
void main() {
vec2 px = v_vTexcoord * dimension - .5;
px /= size;
vec2 md = mod(px, 2.);
if(invert == 1)
md = 1. - md;
gl_FragColor = vec4(0.);
if((axis == 0 && md.y < 1.) || (axis == 1 && md.x < 1.))
gl_FragColor = texture2D( gm_BaseTexture, v_vTexcoord );
else if(useSurf == 1)
gl_FragColor = texture2D( prevFrame, v_vTexcoord );
}

View file

@ -0,0 +1,19 @@
//
// Simple passthrough vertex shader
//
attribute vec3 in_Position; // (x,y,z)
//attribute vec3 in_Normal; // (x,y,z) unused in this shader.
attribute vec4 in_Colour; // (r,g,b,a)
attribute vec2 in_TextureCoord; // (u,v)
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
void main()
{
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
v_vColour = in_Colour;
v_vTexcoord = in_TextureCoord;
}

View file

@ -0,0 +1,12 @@
{
"$GMShader":"",
"%Name":"sh_interlaced",
"name":"sh_interlaced",
"parent":{
"name":"filter",
"path":"folders/shader/filter.yy",
},
"resourceType":"GMShader",
"resourceVersion":"2.0",
"type":1,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,90 @@
{
"$GMSprite":"",
"%Name":"s_node_interlace",
"bboxMode":0,
"bbox_bottom":63,
"bbox_left":0,
"bbox_right":63,
"bbox_top":0,
"collisionKind":1,
"collisionTolerance":0,
"DynamicTexturePage":false,
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"1e97260f-8a9a-4556-91ed-7d59be5b095c","name":"1e97260f-8a9a-4556-91ed-7d59be5b095c","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":64,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"4d76f170-b94f-4c41-81bf-c7a0647f4884","blendMode":0,"displayName":"default","isLocked":false,"name":"4d76f170-b94f-4c41-81bf-c7a0647f4884","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_node_interlace",
"nineSlice":null,
"origin":4,
"parent":{
"name":"filter",
"path":"folders/nodes/icons/filter.yy",
},
"preMultiplyAlpha":false,
"resourceType":"GMSprite",
"resourceVersion":"2.0",
"sequence":{
"$GMSequence":"",
"%Name":"s_node_interlace",
"autoRecord":true,
"backdropHeight":768,
"backdropImageOpacity":0.5,
"backdropImagePath":"",
"backdropWidth":1366,
"backdropXOffset":0.0,
"backdropYOffset":0.0,
"events":{
"$KeyframeStore<MessageEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MessageEventKeyframe>",
"resourceVersion":"2.0",
},
"eventStubScript":null,
"eventToFunction":{},
"length":1.0,
"lockOrigin":false,
"moments":{
"$KeyframeStore<MomentsEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MomentsEventKeyframe>",
"resourceVersion":"2.0",
},
"name":"s_node_interlace",
"playback":1,
"playbackSpeed":30.0,
"playbackSpeedType":0,
"resourceType":"GMSequence",
"resourceVersion":"2.0",
"showBackdrop":true,
"showBackdropImage":false,
"timeUnits":1,
"tracks":[
{"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"1e97260f-8a9a-4556-91ed-7d59be5b095c","path":"sprites/s_node_interlace/s_node_interlace.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"1aa16e81-d840-47ad-a004-ce3dba211fe8","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange":null,
"volume":1.0,
"xorigin":32,
"yorigin":32,
},
"swatchColours":null,
"swfPrecision":0.5,
"textureGroupId":{
"name":"Default",
"path":"texturegroups/Default",
},
"type":0,
"VTile":false,
"width":64,
}