diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index c4bfe6918..93afd0d06 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -284,6 +284,7 @@ {"name":"FLIP","order":19,"path":"extensions/FLIP/FLIP.yy",}, {"name":"gameframe_native","order":2,"path":"extensions/gameframe_native/gameframe_native.yy",}, {"name":"GMSSimpleMIDI","order":17,"path":"extensions/GMSSimpleMIDI/GMSSimpleMIDI.yy",}, + {"name":"sh_tile","order":7,"path":"shaders/sh_tile/sh_tile.yy",}, {"name":"libborderless","order":1,"path":"extensions/libborderless/libborderless.yy",}, {"name":"libdlgmodule","order":15,"path":"extensions/libdlgmodule/libdlgmodule.yy",}, {"name":"libfilesystem","order":14,"path":"extensions/libfilesystem/libfilesystem.yy",}, @@ -815,7 +816,7 @@ {"name":"node_colors_replace","order":10,"path":"scripts/node_colors_replace/node_colors_replace.yy",}, {"name":"node_combine_hsv","order":2,"path":"scripts/node_combine_hsv/node_combine_hsv.yy",}, {"name":"node_compare","order":16,"path":"scripts/node_compare/node_compare.yy",}, - {"name":"node_composite_tag","order":8,"path":"scripts/node_composite_tag/node_composite_tag.yy",}, + {"name":"node_composite_tag","order":9,"path":"scripts/node_composite_tag/node_composite_tag.yy",}, {"name":"node_composite","order":3,"path":"scripts/node_composite/node_composite.yy",}, {"name":"node_condition","order":4,"path":"scripts/node_condition/node_condition.yy",}, {"name":"node_connection_path","order":1,"path":"scripts/node_connection_path/node_connection_path.yy",}, @@ -1199,7 +1200,7 @@ {"name":"node_surface_data","order":5,"path":"scripts/node_surface_data/node_surface_data.yy",}, {"name":"node_surface_from_buffer","order":2,"path":"scripts/node_surface_from_buffer/node_surface_from_buffer.yy",}, {"name":"node_surface_replace","order":14,"path":"scripts/node_surface_replace/node_surface_replace.yy",}, - {"name":"node_surface_tag","order":7,"path":"scripts/node_surface_tag/node_surface_tag.yy",}, + {"name":"node_surface_tag","order":8,"path":"scripts/node_surface_tag/node_surface_tag.yy",}, {"name":"node_surface_to_color","order":1,"path":"scripts/node_surface_to_color/node_surface_to_color.yy",}, {"name":"node_svg","order":7,"path":"scripts/node_svg/node_svg.yy",}, {"name":"node_switch","order":9,"path":"scripts/node_switch/node_switch.yy",}, @@ -2438,6 +2439,7 @@ {"name":"s_node_tile_rule","order":4,"path":"sprites/s_node_tile_rule/s_node_tile_rule.yy",}, {"name":"s_node_tile_tilemap_export","order":3,"path":"sprites/s_node_tile_tilemap_export/s_node_tile_tilemap_export.yy",}, {"name":"s_node_tile_tileset","order":1,"path":"sprites/s_node_tile_tileset/s_node_tile_tileset.yy",}, + {"name":"s_node_tile","order":28,"path":"sprites/s_node_tile/s_node_tile.yy",}, {"name":"s_node_time_remap","order":68,"path":"sprites/s_node_time_remap/s_node_time_remap.yy",}, {"name":"s_node_timeline_preview","order":2,"path":"sprites/s_node_timeline_preview/s_node_timeline_preview.yy",}, {"name":"s_node_to_number","order":2,"path":"sprites/s_node_to_number/s_node_to_number.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 1223c89ae..7bd5a4a2f 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1104,6 +1104,7 @@ {"$GMIncludedFile":"","%Name":"tooltip_spr.png","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Skew","name":"tooltip_spr.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Tile_Random","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"tooltip_spr.png","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Tile_Random","name":"tooltip_spr.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Tile","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Transform","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"tooltip_spr.png","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Transform","name":"tooltip_spr.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Warp","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -1317,11 +1318,7 @@ {"$GMIncludedFile":"","%Name":"Canvas.png","CopyToMask":-1,"filePath":"datafiles/data/Welcome files/Templates","name":"Canvas.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"Canvas.pxc","CopyToMask":-1,"filePath":"datafiles/data/Welcome files/Templates","name":"Canvas.pxc","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"Welcome files.zip","CopyToMask":-1,"filePath":"datafiles/data/Welcome files","name":"Welcome files.zip","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, - {"$GMIncludedFile":"","%Name":"dllcredits.txt","ConfigValues":{ - "Itch":{ - "CopyToMask":"0", - }, - },"CopyToMask":0,"filePath":"datafiles","name":"dllcredits.txt","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"dllcredits.txt","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":0,"filePath":"datafiles","name":"dllcredits.txt","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"dlltest1.dll","CopyToMask":-1,"filePath":"datafiles","name":"dlltest1.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"ffmpeg.exe","CopyToMask":-1,"filePath":"datafiles/ffmpeg/bin","name":"ffmpeg.exe","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"LICENSE","CopyToMask":-1,"filePath":"datafiles/ffmpeg","name":"LICENSE","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -1340,11 +1337,7 @@ {"$GMIncludedFile":"","%Name":"mf.dll","CopyToMask":-1,"filePath":"datafiles","name":"mf.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"mfcore.dll","CopyToMask":-1,"filePath":"datafiles","name":"mfcore.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"mfplat.dll","CopyToMask":-1,"filePath":"datafiles","name":"mfplat.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, - {"$GMIncludedFile":"","%Name":"PixelComposer_profile-2.provisionprofile","ConfigValues":{ - "Itch":{ - "CopyToMask":"2", - }, - },"CopyToMask":-1,"filePath":"datafiles","name":"PixelComposer_profile-2.provisionprofile","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"PixelComposer_profile-2.provisionprofile","ConfigValues":{"Itch":{"CopyToMask":"2",},},"CopyToMask":-1,"filePath":"datafiles","name":"PixelComposer_profile-2.provisionprofile","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"data.win","CopyToMask":-1,"filePath":"datafiles/report","name":"data.win","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"execute_shell_simple_ext_x64.dll","CopyToMask":-1,"filePath":"datafiles/report","name":"execute_shell_simple_ext_x64.dll","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"options.ini","CopyToMask":-1,"filePath":"datafiles/report","name":"options.ini","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -2952,6 +2945,7 @@ {"id":{"name":"sh_FXAA","path":"shaders/sh_FXAA/sh_FXAA.yy",},}, {"id":{"name":"sh_gamma_map","path":"shaders/sh_gamma_map/sh_gamma_map.yy",},}, {"id":{"name":"sh_get_max_downsampled","path":"shaders/sh_get_max_downsampled/sh_get_max_downsampled.yy",},}, + {"id":{"name":"sh_tile","path":"shaders/sh_tile/sh_tile.yy",},}, {"id":{"name":"sh_get_min_downsampled","path":"shaders/sh_get_min_downsampled/sh_get_min_downsampled.yy",},}, {"id":{"name":"sh_glow","path":"shaders/sh_glow/sh_glow.yy",},}, {"id":{"name":"sh_gradient_display_alpha","path":"shaders/sh_gradient_display_alpha/sh_gradient_display_alpha.yy",},}, @@ -3801,6 +3795,7 @@ {"id":{"name":"s_node_tile_rule","path":"sprites/s_node_tile_rule/s_node_tile_rule.yy",},}, {"id":{"name":"s_node_tile_tilemap_export","path":"sprites/s_node_tile_tilemap_export/s_node_tile_tilemap_export.yy",},}, {"id":{"name":"s_node_tile_tileset","path":"sprites/s_node_tile_tileset/s_node_tile_tileset.yy",},}, + {"id":{"name":"s_node_tile","path":"sprites/s_node_tile/s_node_tile.yy",},}, {"id":{"name":"s_node_time_remap","path":"sprites/s_node_time_remap/s_node_time_remap.yy",},}, {"id":{"name":"s_node_timeline_preview","path":"sprites/s_node_timeline_preview/s_node_timeline_preview.yy",},}, {"id":{"name":"s_node_to_number","path":"sprites/s_node_to_number/s_node_to_number.yy",},}, diff --git a/datafiles/data/Nodes/Internal.zip b/datafiles/data/Nodes/Internal.zip index e8ba9ce2b..964c5fa96 100644 Binary files a/datafiles/data/Nodes/Internal.zip and b/datafiles/data/Nodes/Internal.zip differ diff --git a/datafiles/data/Nodes/Internal/Transform/Node_Tile/info.json b/datafiles/data/Nodes/Internal/Transform/Node_Tile/info.json new file mode 100644 index 000000000..d1da1dc75 --- /dev/null +++ b/datafiles/data/Nodes/Internal/Transform/Node_Tile/info.json @@ -0,0 +1,10 @@ +{ + "name":"Tile", + "tooltip":"Repeat images on a larger surface.", + "spr":"s_node_tile", + "pxc_version":118090, + "baseNode":"Node_Tile", + "io":[ + "surface" + ], +} \ No newline at end of file diff --git a/datafiles/data/Nodes/display_data.json b/datafiles/data/Nodes/display_data.json index a78fa6757..27737e8ef 100644 --- a/datafiles/data/Nodes/display_data.json +++ b/datafiles/data/Nodes/display_data.json @@ -332,7 +332,8 @@ "Node_Composite", "Node_9Slice", "Node_Padding", - "Node_Tile_Random" + "Node_Tile", + "Node_Tile_Random", ] }, { diff --git a/objects/o_dialog_group_input_order/Create_0.gml b/objects/o_dialog_group_input_order/Create_0.gml index ebf6f6069..745cad370 100644 --- a/objects/o_dialog_group_input_order/Create_0.gml +++ b/objects/o_dialog_group_input_order/Create_0.gml @@ -2,6 +2,7 @@ event_inherited(); #region data + dialog_resizable = true; dialog_w = ui(320); dialog_h = ui(400); diff --git a/objects/o_dialog_group_output_order/Create_0.gml b/objects/o_dialog_group_output_order/Create_0.gml index b18b388ff..31c59d933 100644 --- a/objects/o_dialog_group_output_order/Create_0.gml +++ b/objects/o_dialog_group_output_order/Create_0.gml @@ -2,6 +2,7 @@ event_inherited(); #region data + dialog_resizable = true; dialog_w = ui(320); dialog_h = ui(400); diff --git a/scripts/node_cache/node_cache.gml b/scripts/node_cache/node_cache.gml index 9457c503e..faddd1298 100644 --- a/scripts/node_cache/node_cache.gml +++ b/scripts/node_cache/node_cache.gml @@ -54,6 +54,7 @@ function Node_Cache(_x, _y, _group = noone) : __Node_Cache(_x, _y, _group) const static postDeserialize = function() { refreshCacheGroup(); + if(!attributes.serialize) return; if(!struct_has(load_map, "cache")) return; cache_content = json_try_parse(load_map.cache); cache_loading_progress = 0; diff --git a/scripts/node_cache_array/node_cache_array.gml b/scripts/node_cache_array/node_cache_array.gml index e15bc0ccf..8ff2cefae 100644 --- a/scripts/node_cache_array/node_cache_array.gml +++ b/scripts/node_cache_array/node_cache_array.gml @@ -84,6 +84,7 @@ function Node_Cache_Array(_x, _y, _group = noone) : __Node_Cache(_x, _y, _group) static postDeserialize = function() { refreshCacheGroup(); + if(!attributes.serialize) return; if(!struct_has(load_map, "cache")) return; cache_content = json_try_parse(load_map.cache); cache_loading_progress = 0; diff --git a/scripts/node_cache_base/node_cache_base.gml b/scripts/node_cache_base/node_cache_base.gml index aaf5a6bbd..6d305435a 100644 --- a/scripts/node_cache_base/node_cache_base.gml +++ b/scripts/node_cache_base/node_cache_base.gml @@ -11,9 +11,13 @@ function __Node_Cache(_x, _y, _group = noone) : Node(_x, _y, _group) constructor group_alpha = 0; vertex_hash = ""; + attributes.serialize = true; + array_push(attributeEditors, "Cache"); + array_push(attributeEditors, [ "Serizalize Data", function() /*=>*/ {return attributes.serialize}, new checkBox(function() /*=>*/ { attributes.serialize = !attributes.serialize; }) ]); + setTrigger(1, "Generate cache group", [ THEME.cache_group, 0, COLORS._main_icon ]); - if(NOT_LOAD) run_in(1, function() { onInspector1Update(); }); + if(NOT_LOAD) run_in(1, function() /*=>*/ {return onInspector1Update()}); static removeNode = function(node) { if(node.cache_group != self) return; @@ -36,7 +40,8 @@ function __Node_Cache(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } static enableNodeGroup = function() { - if(LOADING || APPENDING) return; + if(LOADING || APPENDING) return; + if(!attributes.serialize) return; for( var i = 0, n = array_length(cache_group_members); i < n; i++ ) cache_group_members[i].renderActive = true; @@ -44,7 +49,8 @@ function __Node_Cache(_x, _y, _group = noone) : Node(_x, _y, _group) constructor } static disableNodeGroup = function() { - if(LOADING || APPENDING) return; + if(LOADING || APPENDING) return; + if(!attributes.serialize) return; if(IS_PLAYING && IS_LAST_FRAME) for( var i = 0, n = array_length(cache_group_members); i < n; i++ ) diff --git a/scripts/node_composite/node_composite.gml b/scripts/node_composite/node_composite.gml index 55c4d8630..d3a03d9ac 100644 --- a/scripts/node_composite/node_composite.gml +++ b/scripts/node_composite/node_composite.gml @@ -598,6 +598,9 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) var amo = getInputAmount(); var anchors = array_create(array_length(inputs)); + if(amo == 0) dynamic_input_inspecting = noone; + dynamic_input_inspecting = min(dynamic_input_inspecting, amo - 1); + for(var i = 0; i < amo; i++) { var vis = _vis[i]; var sel = _sel[i]; diff --git a/scripts/node_tile/node_tile.gml b/scripts/node_tile/node_tile.gml index 9b9103637..5a9c13513 100644 --- a/scripts/node_tile/node_tile.gml +++ b/scripts/node_tile/node_tile.gml @@ -1,15 +1,49 @@ function Node_Tile(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { - name = "Tile"; + name = "Tile"; - newInput(0, nodeValue_Surface("Base texture", self)); + newInput(0, nodeValue_Surface("Surface In", self)); - newInput(1, nodeValue_Surface("Border texture", self)); + newInput(1, nodeValue_Enum_Scroll("Scaling Type", self, 0, [ "Fix Dimension", "Relative To Input" ])); - newOutput(0, nodeValue_Output("", self, VALUE_TYPE.surface, noone)); + newInput(2, nodeValue_Dimension(self)); + + newInput(3, nodeValue_Vec2("Amount", self, [ 2, 2 ])); + + newOutput(0, nodeValue_Output("Surface Out", self, VALUE_TYPE.surface, noone)); - input_display_list = [ 0 ]; + input_display_list = [ 0, + ["Tiling", false], 1, 2, 3, + ]; static step = function() {} - static processData = function(_outSurf, _data, _output_index, _array_index = 0) { return _outSurf; } + static processData = function(_outSurf, _data, _output_index, _array_index = 0) { + var _surf = _data[0]; + var _type = _data[1]; + var _dim = _data[2]; + var _amo = _data[3]; + + inputs[2].setVisible(_type == 0); + inputs[3].setVisible(_type == 1); + + if(!is_surface(_surf)) return _outSurf; + + var _idim = surface_get_dimension(_surf); + var _sw = _dim[0]; + var _sh = _dim[1]; + + if(_type == 1) { + _sw = _idim[0] * _amo[0]; + _sh = _idim[1] * _amo[1]; + } + + _outSurf = surface_verify(_outSurf, _sw, _sh); + surface_set_shader(_outSurf, sh_tile); + shader_set_2("scale", [ _sw / _idim[0], _sh / _idim[1] ]); + + draw_surface_stretched(_surf, 0, 0, _sw, _sh); + surface_reset_shader(); + + return _outSurf; + } } \ No newline at end of file diff --git a/shaders/sh_tile/sh_tile.fsh b/shaders/sh_tile/sh_tile.fsh new file mode 100644 index 000000000..15dcd7faa --- /dev/null +++ b/shaders/sh_tile/sh_tile.fsh @@ -0,0 +1,8 @@ +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 scale; + +void main() { + gl_FragColor = texture2D(gm_BaseTexture, fract(v_vTexcoord * scale)); +} \ No newline at end of file diff --git a/shaders/sh_tile/sh_tile.vsh b/shaders/sh_tile/sh_tile.vsh new file mode 100644 index 000000000..1a5ddfa49 --- /dev/null +++ b/shaders/sh_tile/sh_tile.vsh @@ -0,0 +1,14 @@ +attribute vec3 in_Position; // (x, y, z) +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; +} \ No newline at end of file diff --git a/shaders/sh_tile/sh_tile.yy b/shaders/sh_tile/sh_tile.yy new file mode 100644 index 000000000..a130d8e6d --- /dev/null +++ b/shaders/sh_tile/sh_tile.yy @@ -0,0 +1,13 @@ +{ + "$GMShader":"", + "%Name":"sh_tile", + "name":"sh_tile", + "parent":{ + "name":"compose", + "path":"folders/nodes/data/compose.yy", + }, + "resourceType":"GMShader", + "resourceVersion":"2.0", + "tags":[], + "type":1, +} \ No newline at end of file diff --git a/sprites/s_node_tile/1887b28a-646c-4674-a4ea-009b6c808c29.png b/sprites/s_node_tile/1887b28a-646c-4674-a4ea-009b6c808c29.png new file mode 100644 index 000000000..1e532772f Binary files /dev/null and b/sprites/s_node_tile/1887b28a-646c-4674-a4ea-009b6c808c29.png differ diff --git a/sprites/s_node_tile/layers/1887b28a-646c-4674-a4ea-009b6c808c29/517e9ab9-bb05-41ee-8ec0-23ee012c42af.png b/sprites/s_node_tile/layers/1887b28a-646c-4674-a4ea-009b6c808c29/517e9ab9-bb05-41ee-8ec0-23ee012c42af.png new file mode 100644 index 000000000..1e532772f Binary files /dev/null and b/sprites/s_node_tile/layers/1887b28a-646c-4674-a4ea-009b6c808c29/517e9ab9-bb05-41ee-8ec0-23ee012c42af.png differ diff --git a/sprites/s_node_tile/s_node_tile.yy b/sprites/s_node_tile/s_node_tile.yy new file mode 100644 index 000000000..546e317ac --- /dev/null +++ b/sprites/s_node_tile/s_node_tile.yy @@ -0,0 +1,90 @@ +{ + "$GMSprite":"", + "%Name":"s_node_tile", + "bboxMode":0, + "bbox_bottom":61, + "bbox_left":2, + "bbox_right":61, + "bbox_top":2, + "collisionKind":1, + "collisionTolerance":0, + "DynamicTexturePage":false, + "edgeFiltering":false, + "For3D":false, + "frames":[ + {"$GMSpriteFrame":"","%Name":"1887b28a-646c-4674-a4ea-009b6c808c29","name":"1887b28a-646c-4674-a4ea-009b6c808c29","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + ], + "gridX":0, + "gridY":0, + "height":64, + "HTile":false, + "layers":[ + {"$GMImageLayer":"","%Name":"517e9ab9-bb05-41ee-8ec0-23ee012c42af","blendMode":0,"displayName":"default","isLocked":false,"name":"517e9ab9-bb05-41ee-8ec0-23ee012c42af","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,}, + ], + "name":"s_node_tile", + "nineSlice":null, + "origin":4, + "parent":{ + "name":"transform", + "path":"folders/nodes/icons/transform.yy", + }, + "preMultiplyAlpha":false, + "resourceType":"GMSprite", + "resourceVersion":"2.0", + "sequence":{ + "$GMSequence":"", + "%Name":"s_node_tile", + "autoRecord":true, + "backdropHeight":768, + "backdropImageOpacity":0.5, + "backdropImagePath":"", + "backdropWidth":1366, + "backdropXOffset":0.0, + "backdropYOffset":0.0, + "events":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "eventStubScript":null, + "eventToFunction":{}, + "length":1.0, + "lockOrigin":false, + "moments":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "name":"s_node_tile", + "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":"","Keyframes":[ + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"1887b28a-646c-4674-a4ea-009b6c808c29","path":"sprites/s_node_tile/s_node_tile.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"c7e8ee4a-a518-43e3-aefa-b822966a84d0","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + ],"resourceType":"KeyframeStore","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, +} \ No newline at end of file