diff --git a/addons/csharp_ldtk_importer/LdtkImporter.cs b/addons/csharp_ldtk_importer/LdtkImporter.cs index 9659ffd..d20a2bd 100644 --- a/addons/csharp_ldtk_importer/LdtkImporter.cs +++ b/addons/csharp_ldtk_importer/LdtkImporter.cs @@ -1,6 +1,29 @@ using Godot; using System; -public partial class LdtkImporter : Node +namespace CSharpLdtkImporter; + + +[Tool] +public partial class LdtkImporter : EditorPlugin { + private LdtkResourceImporter _importer; + + public override void _EnterTree() + { + GD.Print("LdtkImporter: Plugin has been enabled."); + + _importer = new LdtkResourceImporter(); + AddImportPlugin(_importer); + + GD.Print("LdtkImporter: Import plugin registered."); + } + + public override void _ExitTree() + { + RemoveImportPlugin(_importer); + _importer = null; + GD.Print("LdtkImporter: Import plugin unregistered."); + GD.Print("LdtkImporter: Plugin has been disabled."); + } } diff --git a/addons/csharp_ldtk_importer/LdtkResourceImporter.cs b/addons/csharp_ldtk_importer/LdtkResourceImporter.cs new file mode 100644 index 0000000..1b6ca02 --- /dev/null +++ b/addons/csharp_ldtk_importer/LdtkResourceImporter.cs @@ -0,0 +1,95 @@ +using System.Text.Json; +using CSharpLdtkImporter.Models; +using Godot; +using Godot.Collections; + +namespace CSharpLdtkImporter; + +[Tool] +public partial class LdtkResourceImporter : EditorImportPlugin +{ + public override string _GetImporterName() => "ldtk.importer"; + public override string _GetVisibleName() => "LDtk Level Importer"; + public override string[] _GetRecognizedExtensions() => new string[] { "ldtk" }; + public override string _GetResourceType() => "PackedScene"; + public override string _GetSaveExtension() => "tscn"; + public override int _GetPresetCount() => 0; + public override float _GetPriority() => 1.0f; + + public override Error _Import(string sourceFile, string savePath, Godot.Collections.Dictionary options, Godot.Collections.Array platformVariants, Godot.Collections.Array genFiles) + { + // 1. Read the .ldtk file content + using var file = FileAccess.Open(sourceFile, FileAccess.ModeFlags.Read); + if (file == null) + { + GD.PushError($"Failed to open LDTK file: {sourceFile}"); + return Error.CantOpen; + } + string jsonContent = file.GetAsText(); + + // 2. Deserialize the JSON into our C# data models + LdtkData ldtkData; + try + { + ldtkData = JsonSerializer.Deserialize(jsonContent); + } + catch (JsonException e) + { + GD.PushError($"Failed to parse LDTK JSON: {e.Message}"); + return Error.ParseError; + } + + if (ldtkData == null) + { + GD.PushError("Parsed LDTK data is null."); + return Error.Failed; + } + + // 3. Use the Scene Builder to generate the Godot scene + var builder = new LdtkSceneBuilder(ldtkData, sourceFile); + var rootNode = builder.BuildLdtkProjectRoot(); + + var scene = new PackedScene(); + scene.Pack(rootNode); + + var newSceneNodeCount = scene.GetState().GetNodeCount(); + + GD.Print($"New scene node count: {newSceneNodeCount}, expected: {rootNode.GetChildCount() + 1} (including root)"); + + // 4. Save the generated scene + var destinationPath = $"{savePath}.{_GetSaveExtension()}"; + var error = ResourceSaver.Save(scene, destinationPath); + if (error != Error.Ok) + { + GD.PushError($"Failed to save generated scene to {destinationPath}"); + } + + return error; + } + + public override Array _GetImportOptions(string path, int presetIndex) + { + var options = new Array() + { + new() + { + { "name", "import_entities" }, + { "default_value", true }, + { "usage", (int)(PropertyUsageFlags.Default | PropertyUsageFlags.UpdateAllIfModified) } + }, + new() + { + { "name", "import_tilemaps" }, + { "default_value", true }, + { "usage", (int)(PropertyUsageFlags.Default | PropertyUsageFlags.UpdateAllIfModified) } + } + }; + + return options; + } + + public override bool _GetOptionVisibility(string path, StringName optionName, Dictionary options) + { + return true; + } +} \ No newline at end of file diff --git a/addons/csharp_ldtk_importer/LdtkResourceImporter.cs.uid b/addons/csharp_ldtk_importer/LdtkResourceImporter.cs.uid new file mode 100644 index 0000000..7b52488 --- /dev/null +++ b/addons/csharp_ldtk_importer/LdtkResourceImporter.cs.uid @@ -0,0 +1 @@ +uid://dbybnkjcgt6tn diff --git a/addons/csharp_ldtk_importer/LdtkSceneBuilder.cs b/addons/csharp_ldtk_importer/LdtkSceneBuilder.cs new file mode 100644 index 0000000..8f802b6 --- /dev/null +++ b/addons/csharp_ldtk_importer/LdtkSceneBuilder.cs @@ -0,0 +1,152 @@ +using System.Linq; +using CSharpLdtkImporter.Models; +using Godot; + +namespace CSharpLdtkImporter; + +public class LdtkSceneBuilder +{ + private readonly LdtkData _ldtkData; + private readonly string _basePath; + private readonly Godot.Collections.Dictionary _tileSetCache = new(); + + public LdtkSceneBuilder(LdtkData ldtkData, string sourceFile) + { + _ldtkData = ldtkData; + _basePath = sourceFile.GetBaseDir(); + } + + public Node2D BuildLdtkProjectRoot() + { + var root = new Node2D { Name = "LDTKProject" }; + + // Step 1: Build the entire node hierarchy in memory. + foreach (var level in _ldtkData.Levels) + { + var levelNode = BuildLevel(level); + root.AddChild(levelNode); + } + + // Step 2: After the tree is built, set the owner for all descendants. + // This is the crucial step that fixes the "Invalid owner" error. + SetOwnerRecursive(root, root); + + return root; + } + + // A helper function to recursively set the owner on all children. + private void SetOwnerRecursive(Node node, Node owner) + { + foreach (var child in node.GetChildren()) + { + child.Owner = owner; + SetOwnerRecursive(child, owner); + } + } + + private Node2D BuildLevel(LdtkLevel level) + { + var levelRoot = new Node2D { Name = level.Identifier }; + + foreach (var layer in level.LayerInstances.Reverse()) + { + var layerNode = layer.Type switch + { + "Tiles" => BuildTileMapLayer(layer), + "AutoLayer" => BuildTileMapLayer(layer), + "Entities" => BuildEntityLayer(layer), + _ => new Node2D { Name = $"{layer.Identifier}_Unsupported" } + }; + + levelRoot.AddChild(layerNode); + } + + return levelRoot; + } + + private TileMapLayer BuildTileMapLayer(LdtkLayerInstance layer) + { + var tileMapLayer = new TileMapLayer { Name = layer.Identifier }; + if (!layer.TilesetDefUid.HasValue) return tileMapLayer; + + var tileSet = GetOrCreateTileSet(layer.TilesetDefUid.Value); + if (tileSet == null) return tileMapLayer; + tileMapLayer.TileSet = tileSet; + + var allTiles = layer.GridTiles.Concat(layer.AutoLayerTiles); + if (tileMapLayer.TileSet.GetSource(0) is not TileSetAtlasSource atlasSource) return tileMapLayer; + + int atlasWidthInTiles = atlasSource.GetAtlasGridSize().X; + if (atlasWidthInTiles == 0) return tileMapLayer; + + foreach (var tile in allTiles) + { + var gridCoords = new Vector2I(tile.Px[0] / layer.GridSize, tile.Px[1] / layer.GridSize); + var atlasCoords = new Vector2I(tile.TileId % atlasWidthInTiles, tile.TileId / atlasWidthInTiles); + long alternativeId = 0; + if ((tile.FlipBits & 1) == 1) alternativeId |= TileSetAtlasSource.TransformFlipH; + if ((tile.FlipBits & 2) == 2) alternativeId |= TileSetAtlasSource.TransformFlipV; + tileMapLayer.SetCell(gridCoords, 0, atlasCoords, (int)alternativeId); + } + return tileMapLayer; + } + + private Node2D BuildEntityLayer(LdtkLayerInstance layer) + { + var entityLayerRoot = new Node2D { Name = layer.Identifier }; + foreach (var entity in layer.EntityInstances) + { + var marker = new Marker2D + { + Name = entity.Identifier, + Position = new Vector2(entity.Px[0], entity.Px[1]) + }; + entityLayerRoot.AddChild(marker); + } + return entityLayerRoot; + } + + private TileSet GetOrCreateTileSet(int tilesetDefUid) + { + if (_tileSetCache.TryGetValue(tilesetDefUid, out var cachedTileSet)) return cachedTileSet; + + var tilesetDef = _ldtkData.Defs.Tilesets.FirstOrDefault(t => t.Uid == tilesetDefUid); + if (tilesetDef?.RelPath == null) return null; + + var texturePath = _basePath.PathJoin(tilesetDef.RelPath); + var texture = ResourceLoader.Load(texturePath); + + if (texture == null) + { + GD.PushError($"LDTK Importer: Could not load texture at path: {texturePath}"); + return null; + } + + var newTileSet = new TileSet + { + TileShape = TileSet.TileShapeEnum.Square, + TileLayout = TileSet.TileLayoutEnum.Stacked, + TileSize = new Vector2I(tilesetDef.TileGridSize, tilesetDef.TileGridSize) + }; + + var atlasSource = new TileSetAtlasSource + { + Texture = texture, + TextureRegionSize = new Vector2I(tilesetDef.TileGridSize, tilesetDef.TileGridSize) + }; + + newTileSet.AddSource(atlasSource); + + var (widthInTiles, heightInTiles) = (texture.GetWidth() / tilesetDef.TileGridSize, texture.GetHeight() / tilesetDef.TileGridSize); + for (int x = 0; x < widthInTiles; x++) + { + for (int y = 0; y < heightInTiles; y++) + { + atlasSource.CreateTile(new Vector2I(x, y)); + } + } + + _tileSetCache[tilesetDefUid] = newTileSet; + return newTileSet; + } +} \ No newline at end of file diff --git a/addons/csharp_ldtk_importer/LdtkSceneBuilder.cs.uid b/addons/csharp_ldtk_importer/LdtkSceneBuilder.cs.uid new file mode 100644 index 0000000..5e275b0 --- /dev/null +++ b/addons/csharp_ldtk_importer/LdtkSceneBuilder.cs.uid @@ -0,0 +1 @@ +uid://nf7qcxuuaajw diff --git a/addons/csharp_ldtk_importer/Models/LdtkData.cs b/addons/csharp_ldtk_importer/Models/LdtkData.cs new file mode 100644 index 0000000..659cac7 --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkData.cs @@ -0,0 +1,30 @@ +using System.Text.Json.Serialization; + +namespace CSharpLdtkImporter.Models; + +public class LdtkData +{ + [JsonPropertyName("levels")] + public LdtkLevel[] Levels { get; set; } + + [JsonPropertyName("defs")] + public LdtkDefinitions Defs { get; set; } +} + +public class LdtkDefinitions +{ + [JsonPropertyName("tilesets")] + public LdtkTilesetDef[] Tilesets { get; set; } +} + +public class LdtkTilesetDef +{ + [JsonPropertyName("uid")] + public int Uid { get; set; } + + [JsonPropertyName("relPath")] + public string RelPath { get; set; } + + [JsonPropertyName("tileGridSize")] + public int TileGridSize { get; set; } +} \ No newline at end of file diff --git a/addons/csharp_ldtk_importer/Models/LdtkData.cs.uid b/addons/csharp_ldtk_importer/Models/LdtkData.cs.uid new file mode 100644 index 0000000..cfae81b --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkData.cs.uid @@ -0,0 +1 @@ +uid://8f7a424k36sb diff --git a/addons/csharp_ldtk_importer/Models/LdtkEntityInstance.cs b/addons/csharp_ldtk_importer/Models/LdtkEntityInstance.cs new file mode 100644 index 0000000..299324b --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkEntityInstance.cs @@ -0,0 +1,12 @@ +using System.Text.Json.Serialization; + +namespace CSharpLdtkImporter.Models; + +public class LdtkEntityInstance +{ + [JsonPropertyName("__identifier")] + public string Identifier { get; set; } + + [JsonPropertyName("px")] + public int[] Px { get; set; } +} \ No newline at end of file diff --git a/addons/csharp_ldtk_importer/Models/LdtkEntityInstance.cs.uid b/addons/csharp_ldtk_importer/Models/LdtkEntityInstance.cs.uid new file mode 100644 index 0000000..9a22c98 --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkEntityInstance.cs.uid @@ -0,0 +1 @@ +uid://ck2tr052fmrx2 diff --git a/addons/csharp_ldtk_importer/Models/LdtkLayerInstance.cs b/addons/csharp_ldtk_importer/Models/LdtkLayerInstance.cs new file mode 100644 index 0000000..6aaf2f7 --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkLayerInstance.cs @@ -0,0 +1,27 @@ +using System.Text.Json.Serialization; + +namespace CSharpLdtkImporter.Models; + +public class LdtkLayerInstance +{ + [JsonPropertyName("__identifier")] + public string Identifier { get; set; } + + [JsonPropertyName("__type")] + public string Type { get; set; } + + [JsonPropertyName("__gridSize")] + public int GridSize { get; set; } + + [JsonPropertyName("__tilesetDefUid")] + public int? TilesetDefUid { get; set; } // Nullable for entity layers + + [JsonPropertyName("gridTiles")] + public LdtkTileInstance[] GridTiles { get; set; } + + [JsonPropertyName("autoLayerTiles")] + public LdtkTileInstance[] AutoLayerTiles { get; set; } + + [JsonPropertyName("entityInstances")] + public LdtkEntityInstance[] EntityInstances { get; set; } +} \ No newline at end of file diff --git a/addons/csharp_ldtk_importer/Models/LdtkLayerInstance.cs.uid b/addons/csharp_ldtk_importer/Models/LdtkLayerInstance.cs.uid new file mode 100644 index 0000000..7a2200e --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkLayerInstance.cs.uid @@ -0,0 +1 @@ +uid://crre3v7sfnqq6 diff --git a/addons/csharp_ldtk_importer/Models/LdtkLevel.cs b/addons/csharp_ldtk_importer/Models/LdtkLevel.cs new file mode 100644 index 0000000..24e90db --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkLevel.cs @@ -0,0 +1,12 @@ +using System.Text.Json.Serialization; + +namespace CSharpLdtkImporter.Models; + +public class LdtkLevel +{ + [JsonPropertyName("identifier")] + public string Identifier { get; set; } + + [JsonPropertyName("layerInstances")] + public LdtkLayerInstance[] LayerInstances { get; set; } +} \ No newline at end of file diff --git a/addons/csharp_ldtk_importer/Models/LdtkLevel.cs.uid b/addons/csharp_ldtk_importer/Models/LdtkLevel.cs.uid new file mode 100644 index 0000000..681ff46 --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkLevel.cs.uid @@ -0,0 +1 @@ +uid://c5kc2tyb2kf1e diff --git a/addons/csharp_ldtk_importer/Models/LdtkTileInstance.cs b/addons/csharp_ldtk_importer/Models/LdtkTileInstance.cs new file mode 100644 index 0000000..bf90569 --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkTileInstance.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Serialization; + +namespace CSharpLdtkImporter.Models; + +public class LdtkTileInstance +{ + // Pixel coordinates [x,y] + [JsonPropertyName("px")] + public int[] Px { get; set; } + + // Tile ID in the tileset + [JsonPropertyName("t")] + public int TileId { get; set; } + + // Flip bits (0=none, 1=X, 2=Y, 3=X&Y) + [JsonPropertyName("f")] + public int FlipBits { get; set; } +} \ No newline at end of file diff --git a/addons/csharp_ldtk_importer/Models/LdtkTileInstance.cs.uid b/addons/csharp_ldtk_importer/Models/LdtkTileInstance.cs.uid new file mode 100644 index 0000000..799f339 --- /dev/null +++ b/addons/csharp_ldtk_importer/Models/LdtkTileInstance.cs.uid @@ -0,0 +1 @@ +uid://dal7woqq2nlrd diff --git a/addons/csharp_ldtk_importer/plugin.cfg b/addons/csharp_ldtk_importer/plugin.cfg index bfb67f7..eb15671 100644 --- a/addons/csharp_ldtk_importer/plugin.cfg +++ b/addons/csharp_ldtk_importer/plugin.cfg @@ -4,4 +4,4 @@ name="C# LDTK Importer" description="Imports LDtk level files as Godot scenes." author="Gabriel Kaszewski" version="1.0" -script="LdtkImporter.cs" \ No newline at end of file +script="LdtkImporter.cs" diff --git a/assets/PS_Tileset_10_nes.png b/assets/PS_Tileset_10_nes.png new file mode 100644 index 0000000..4b75891 Binary files /dev/null and b/assets/PS_Tileset_10_nes.png differ diff --git a/assets/PS_Tileset_10_nes.png.import b/assets/PS_Tileset_10_nes.png.import new file mode 100644 index 0000000..49304ba --- /dev/null +++ b/assets/PS_Tileset_10_nes.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4ssxvikdpnld" +path="res://.godot/imported/PS_Tileset_10_nes.png-4155769689f4e11687b219cee5a0f90d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/PS_Tileset_10_nes.png" +dest_files=["res://.godot/imported/PS_Tileset_10_nes.png-4155769689f4e11687b219cee5a0f90d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/test.ldtk b/assets/test.ldtk new file mode 100644 index 0000000..a0b1bf1 --- /dev/null +++ b/assets/test.ldtk @@ -0,0 +1,1267 @@ +{ + "__header__": { + "fileType": "LDtk Project JSON", + "app": "LDtk", + "doc": "https://ldtk.io/json", + "schema": "https://ldtk.io/files/JSON_SCHEMA.json", + "appAuthor": "Sebastien 'deepnight' Benard", + "appVersion": "1.5.3", + "url": "https://ldtk.io" + }, + "iid": "2c2f2ff0-8560-11f0-9745-f307d35f41a0", + "jsonVersion": "1.5.3", + "appBuildId": 488493, + "nextUid": 25, + "identifierStyle": "Capitalize", + "toc": [], + "worldLayout": "Free", + "worldGridWidth": 256, + "worldGridHeight": 256, + "defaultLevelWidth": 256, + "defaultLevelHeight": 256, + "defaultPivotX": 0, + "defaultPivotY": 0, + "defaultGridSize": 16, + "defaultEntityWidth": 16, + "defaultEntityHeight": 16, + "bgColor": "#40465B", + "defaultLevelBgColor": "#696A79", + "minifyJson": false, + "externalLevels": false, + "exportTiled": false, + "simplifiedExport": false, + "imageExportMode": "None", + "exportLevelBg": true, + "pngFilePattern": null, + "backupOnSave": false, + "backupLimit": 10, + "backupRelPath": null, + "levelNamePattern": "Level_%idx", + "tutorialDesc": null, + "customCommands": [], + "flags": [], + "defs": { "layers": [ + { + "__type": "IntGrid", + "identifier": "IntGrid", + "type": "IntGrid", + "uid": 4, + "doc": null, + "uiColor": null, + "gridSize": 16, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [{ "value": 1, "identifier": null, "color": "#000000", "tile": null, "groupUid": 0 }], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": 1, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "AutoLayer", + "identifier": "AutoLayer", + "type": "AutoLayer", + "uid": 3, + "doc": null, + "uiColor": null, + "gridSize": 16, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 1, + "hideInList": false, + "hideFieldsWhenInactive": false, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [ + { + "uid": 5, + "name": "Rules for #1", + "color": null, + "icon": null, + "active": true, + "isOptional": false, + "rules": [ + { + "uid": 6, + "active": true, + "size": 3, + "tileRectsIds": [[6]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 2045032, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 7, + "active": true, + "size": 3, + "tileRectsIds": [[8]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7544561, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 8, + "active": true, + "size": 3, + "tileRectsIds": [[10]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4121707, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 9, + "active": true, + "size": 3, + "tileRectsIds": [[9]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8441246, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 10, + "active": true, + "size": 3, + "tileRectsIds": [[1]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,-1,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9245755, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 11, + "active": true, + "size": 3, + "tileRectsIds": [[20]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6934509, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 12, + "active": true, + "size": 3, + "tileRectsIds": [[52]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,-1,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4918683, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 13, + "active": true, + "size": 3, + "tileRectsIds": [[65]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 3815445, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 14, + "active": true, + "size": 3, + "tileRectsIds": [[2]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,-1,0,0,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 4497180, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 15, + "active": true, + "size": 3, + "tileRectsIds": [[36]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,-1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8985885, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 16, + "active": true, + "size": 3, + "tileRectsIds": [[66]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,0,0,-1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1077838, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 17, + "active": true, + "size": 3, + "tileRectsIds": [[32]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,-1,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 1034472, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 18, + "active": true, + "size": 3, + "tileRectsIds": [[17]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [-1,1,0,1,1,0,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6881683, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 19, + "active": true, + "size": 3, + "tileRectsIds": [[19]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,1,-1,0,1,1,0,0,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 9751220, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 20, + "active": true, + "size": 3, + "tileRectsIds": [[51]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,0,1,1,0,1,-1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 7373843, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 21, + "active": true, + "size": 3, + "tileRectsIds": [[49]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [0,0,0,1,1,0,-1,1,0], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 8722666, + "perlinScale": 0.2, + "perlinOctaves": 2 + }, + { + "uid": 22, + "active": true, + "size": 1, + "tileRectsIds": [[34]], + "alpha": 1, + "chance": 1, + "breakOnMatch": true, + "pattern": [1], + "flipX": false, + "flipY": false, + "xModulo": 1, + "yModulo": 1, + "xOffset": 0, + "yOffset": 0, + "tileXOffset": 0, + "tileYOffset": 0, + "tileRandomXMin": 0, + "tileRandomXMax": 0, + "tileRandomYMin": 0, + "tileRandomYMax": 0, + "checker": "None", + "tileMode": "Single", + "pivotX": 0, + "pivotY": 0, + "outOfBoundsValue": 1, + "invalidated": false, + "perlinActive": false, + "perlinSeed": 6253825, + "perlinScale": 0.2, + "perlinOctaves": 2 + } + ], + "usesWizard": true, + "requiredBiomeValues": [], + "biomeRequirementMode": 0 + } + ], + "autoSourceLayerDefUid": 4, + "tilesetDefUid": 1, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + } + ], "entities": [], "tilesets": [ + { + "__cWid": 16, + "__cHei": 12, + "identifier": "PS_Tileset_10_nes2", + "uid": 1, + "relPath": "PS_Tileset_10_nes.png", + "embedAtlas": null, + "pxWid": 256, + "pxHei": 192, + "tileGridSize": 16, + "spacing": 0, + "padding": 0, + "tags": [], + "tagsSourceEnumUid": null, + "enumTags": [], + "customData": [], + "savedSelections": [], + "cachedPixelData": { + "opaqueTiles": "001000000000000001110000000000000111000000000000001000000000000000000000000000000000000000000000100010000000000000000000000000000010000000000000100010000000000011111000000000001111011111111100", + "averageColors": "0000f762f762f76200000000c7720000e772f772e7720000a752a862a862a872f762f841f740f841f7720000696369635a734a732b742b749650976197619761f840f740f740f740f84000004a735a7369636963bb72cb73ab52ab62ab62ab72e840f840f740f840e840000059635a6359635963bb72cb739b519b619b619b610000e840e840e8400000000069635a735a73696349632a741b8549631b854a7400000000000000000000000026d36853396319645863197469645a635a635a63f740f840e840f840f7406470f591647055a155a10000000095b2f851f851f865e840674000006840e8406450e66164509460946015b215b2d4705a635a635a6300000000f5bf0000000000009c8400004c843c84667266717a73f841f851f866f762878300008683f762000016d316d316c316d316c316c3000000005a635a63f740f851f762f851f7401d862d775e777e7719a627a658a577a50000f951f877f840f840f840f8400000f742f742f852f852f852f852f852f852f85200000000" + } + } + ], "enums": [], "externalEnums": [], "levelFields": [] }, + "levels": [ + { + "identifier": "Level_0", + "iid": "2c2f5701-8560-11f0-9745-15402af9175c", + "uid": 0, + "worldX": 0, + "worldY": 0, + "worldDepth": 0, + "pxWid": 256, + "pxHei": 256, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": true, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [], + "layerInstances": [ + { + "__identifier": "IntGrid", + "__type": "IntGrid", + "__cWid": 16, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "PS_Tileset_10_nes.png", + "iid": "b1627600-8560-11f0-9745-65535c97b981", + "levelId": 0, + "layerDefUid": 4, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, + 1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1, + 1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1, + 1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1 + ], + "autoLayerTiles": [], + "seed": 1403021, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + }, + { + "__identifier": "AutoLayer", + "__type": "AutoLayer", + "__cWid": 16, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "PS_Tileset_10_nes.png", + "iid": "a5378820-8560-11f0-9745-c1e4f0960f5c", + "levelId": 0, + "layerDefUid": 3, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [ + { "px": [80,80], "src": [32,32], "f": 0, "t": 34, "d": [22,85], "a": 1 }, + { "px": [96,80], "src": [32,32], "f": 0, "t": 34, "d": [22,86], "a": 1 }, + { "px": [112,80], "src": [32,32], "f": 0, "t": 34, "d": [22,87], "a": 1 }, + { "px": [128,80], "src": [32,32], "f": 0, "t": 34, "d": [22,88], "a": 1 }, + { "px": [160,144], "src": [32,32], "f": 0, "t": 34, "d": [22,154], "a": 1 }, + { "px": [176,144], "src": [32,32], "f": 0, "t": 34, "d": [22,155], "a": 1 }, + { "px": [192,144], "src": [32,32], "f": 0, "t": 34, "d": [22,156], "a": 1 }, + { "px": [208,144], "src": [32,32], "f": 0, "t": 34, "d": [22,157], "a": 1 }, + { "px": [224,144], "src": [32,32], "f": 0, "t": 34, "d": [22,158], "a": 1 }, + { "px": [240,144], "src": [32,32], "f": 0, "t": 34, "d": [22,159], "a": 1 }, + { "px": [240,160], "src": [32,32], "f": 0, "t": 34, "d": [22,175], "a": 1 }, + { "px": [208,240], "src": [32,32], "f": 0, "t": 34, "d": [22,253], "a": 1 }, + { "px": [224,240], "src": [32,32], "f": 0, "t": 34, "d": [22,254], "a": 1 }, + { "px": [240,240], "src": [32,32], "f": 0, "t": 34, "d": [22,255], "a": 1 }, + { "px": [240,0], "src": [16,48], "f": 0, "t": 49, "d": [21,15], "a": 1 }, + { "px": [144,96], "src": [16,48], "f": 0, "t": 49, "d": [21,105], "a": 1 }, + { "px": [224,160], "src": [16,48], "f": 0, "t": 49, "d": [21,174], "a": 1 }, + { "px": [240,176], "src": [16,48], "f": 0, "t": 49, "d": [21,191], "a": 1 }, + { "px": [0,0], "src": [48,48], "f": 0, "t": 51, "d": [20,0], "a": 1 }, + { "px": [80,96], "src": [48,48], "f": 0, "t": 51, "d": [20,101], "a": 1 }, + { "px": [144,80], "src": [48,16], "f": 0, "t": 19, "d": [19,89], "a": 1 }, + { "px": [160,128], "src": [48,16], "f": 0, "t": 19, "d": [19,138], "a": 1 }, + { "px": [80,144], "src": [48,16], "f": 0, "t": 19, "d": [19,149], "a": 1 }, + { "px": [0,240], "src": [48,16], "f": 0, "t": 19, "d": [19,240], "a": 1 }, + { "px": [144,144], "src": [16,16], "f": 0, "t": 17, "d": [18,153], "a": 1 }, + { "px": [240,224], "src": [16,16], "f": 0, "t": 17, "d": [18,239], "a": 1 }, + { "px": [192,240], "src": [16,16], "f": 0, "t": 17, "d": [18,252], "a": 1 }, + { "px": [240,16], "src": [0,32], "f": 0, "t": 32, "d": [17,31], "a": 1 }, + { "px": [240,32], "src": [0,32], "f": 0, "t": 32, "d": [17,47], "a": 1 }, + { "px": [240,48], "src": [0,32], "f": 0, "t": 32, "d": [17,63], "a": 1 }, + { "px": [240,64], "src": [0,32], "f": 0, "t": 32, "d": [17,79], "a": 1 }, + { "px": [64,80], "src": [0,32], "f": 0, "t": 32, "d": [17,84], "a": 1 }, + { "px": [64,96], "src": [0,32], "f": 0, "t": 32, "d": [17,100], "a": 1 }, + { "px": [64,112], "src": [0,32], "f": 0, "t": 32, "d": [17,116], "a": 1 }, + { "px": [144,112], "src": [0,32], "f": 0, "t": 32, "d": [17,121], "a": 1 }, + { "px": [64,128], "src": [0,32], "f": 0, "t": 32, "d": [17,132], "a": 1 }, + { "px": [144,128], "src": [0,32], "f": 0, "t": 32, "d": [17,137], "a": 1 }, + { "px": [64,144], "src": [0,32], "f": 0, "t": 32, "d": [17,148], "a": 1 }, + { "px": [240,192], "src": [0,32], "f": 0, "t": 32, "d": [17,207], "a": 1 }, + { "px": [240,208], "src": [0,32], "f": 0, "t": 32, "d": [17,223], "a": 1 }, + { "px": [16,0], "src": [32,64], "f": 0, "t": 66, "d": [16,1], "a": 1 }, + { "px": [32,0], "src": [32,64], "f": 0, "t": 66, "d": [16,2], "a": 1 }, + { "px": [48,0], "src": [32,64], "f": 0, "t": 66, "d": [16,3], "a": 1 }, + { "px": [64,0], "src": [32,64], "f": 0, "t": 66, "d": [16,4], "a": 1 }, + { "px": [80,0], "src": [32,64], "f": 0, "t": 66, "d": [16,5], "a": 1 }, + { "px": [96,0], "src": [32,64], "f": 0, "t": 66, "d": [16,6], "a": 1 }, + { "px": [112,0], "src": [32,64], "f": 0, "t": 66, "d": [16,7], "a": 1 }, + { "px": [128,0], "src": [32,64], "f": 0, "t": 66, "d": [16,8], "a": 1 }, + { "px": [144,0], "src": [32,64], "f": 0, "t": 66, "d": [16,9], "a": 1 }, + { "px": [160,0], "src": [32,64], "f": 0, "t": 66, "d": [16,10], "a": 1 }, + { "px": [176,0], "src": [32,64], "f": 0, "t": 66, "d": [16,11], "a": 1 }, + { "px": [192,0], "src": [32,64], "f": 0, "t": 66, "d": [16,12], "a": 1 }, + { "px": [208,0], "src": [32,64], "f": 0, "t": 66, "d": [16,13], "a": 1 }, + { "px": [224,0], "src": [32,64], "f": 0, "t": 66, "d": [16,14], "a": 1 }, + { "px": [96,96], "src": [32,64], "f": 0, "t": 66, "d": [16,102], "a": 1 }, + { "px": [112,96], "src": [32,64], "f": 0, "t": 66, "d": [16,103], "a": 1 }, + { "px": [128,96], "src": [32,64], "f": 0, "t": 66, "d": [16,104], "a": 1 }, + { "px": [80,160], "src": [32,64], "f": 0, "t": 66, "d": [16,165], "a": 1 }, + { "px": [96,160], "src": [32,64], "f": 0, "t": 66, "d": [16,166], "a": 1 }, + { "px": [112,160], "src": [32,64], "f": 0, "t": 66, "d": [16,167], "a": 1 }, + { "px": [128,160], "src": [32,64], "f": 0, "t": 66, "d": [16,168], "a": 1 }, + { "px": [144,160], "src": [32,64], "f": 0, "t": 66, "d": [16,169], "a": 1 }, + { "px": [160,160], "src": [32,64], "f": 0, "t": 66, "d": [16,170], "a": 1 }, + { "px": [176,160], "src": [32,64], "f": 0, "t": 66, "d": [16,171], "a": 1 }, + { "px": [192,160], "src": [32,64], "f": 0, "t": 66, "d": [16,172], "a": 1 }, + { "px": [208,160], "src": [32,64], "f": 0, "t": 66, "d": [16,173], "a": 1 }, + { "px": [0,16], "src": [64,32], "f": 0, "t": 36, "d": [15,16], "a": 1 }, + { "px": [0,32], "src": [64,32], "f": 0, "t": 36, "d": [15,32], "a": 1 }, + { "px": [0,48], "src": [64,32], "f": 0, "t": 36, "d": [15,48], "a": 1 }, + { "px": [0,64], "src": [64,32], "f": 0, "t": 36, "d": [15,64], "a": 1 }, + { "px": [0,80], "src": [64,32], "f": 0, "t": 36, "d": [15,80], "a": 1 }, + { "px": [0,96], "src": [64,32], "f": 0, "t": 36, "d": [15,96], "a": 1 }, + { "px": [160,96], "src": [64,32], "f": 0, "t": 36, "d": [15,106], "a": 1 }, + { "px": [0,112], "src": [64,32], "f": 0, "t": 36, "d": [15,112], "a": 1 }, + { "px": [80,112], "src": [64,32], "f": 0, "t": 36, "d": [15,117], "a": 1 }, + { "px": [160,112], "src": [64,32], "f": 0, "t": 36, "d": [15,122], "a": 1 }, + { "px": [0,128], "src": [64,32], "f": 0, "t": 36, "d": [15,128], "a": 1 }, + { "px": [80,128], "src": [64,32], "f": 0, "t": 36, "d": [15,133], "a": 1 }, + { "px": [0,144], "src": [64,32], "f": 0, "t": 36, "d": [15,144], "a": 1 }, + { "px": [0,160], "src": [64,32], "f": 0, "t": 36, "d": [15,160], "a": 1 }, + { "px": [0,176], "src": [64,32], "f": 0, "t": 36, "d": [15,176], "a": 1 }, + { "px": [0,192], "src": [64,32], "f": 0, "t": 36, "d": [15,192], "a": 1 }, + { "px": [0,208], "src": [64,32], "f": 0, "t": 36, "d": [15,208], "a": 1 }, + { "px": [0,224], "src": [64,32], "f": 0, "t": 36, "d": [15,224], "a": 1 }, + { "px": [80,64], "src": [32,0], "f": 0, "t": 2, "d": [14,69], "a": 1 }, + { "px": [96,64], "src": [32,0], "f": 0, "t": 2, "d": [14,70], "a": 1 }, + { "px": [112,64], "src": [32,0], "f": 0, "t": 2, "d": [14,71], "a": 1 }, + { "px": [128,64], "src": [32,0], "f": 0, "t": 2, "d": [14,72], "a": 1 }, + { "px": [176,128], "src": [32,0], "f": 0, "t": 2, "d": [14,139], "a": 1 }, + { "px": [192,128], "src": [32,0], "f": 0, "t": 2, "d": [14,140], "a": 1 }, + { "px": [208,128], "src": [32,0], "f": 0, "t": 2, "d": [14,141], "a": 1 }, + { "px": [224,128], "src": [32,0], "f": 0, "t": 2, "d": [14,142], "a": 1 }, + { "px": [240,128], "src": [32,0], "f": 0, "t": 2, "d": [14,143], "a": 1 }, + { "px": [96,144], "src": [32,0], "f": 0, "t": 2, "d": [14,150], "a": 1 }, + { "px": [112,144], "src": [32,0], "f": 0, "t": 2, "d": [14,151], "a": 1 }, + { "px": [128,144], "src": [32,0], "f": 0, "t": 2, "d": [14,152], "a": 1 }, + { "px": [208,224], "src": [32,0], "f": 0, "t": 2, "d": [14,237], "a": 1 }, + { "px": [224,224], "src": [32,0], "f": 0, "t": 2, "d": [14,238], "a": 1 }, + { "px": [16,240], "src": [32,0], "f": 0, "t": 2, "d": [14,241], "a": 1 }, + { "px": [32,240], "src": [32,0], "f": 0, "t": 2, "d": [14,242], "a": 1 }, + { "px": [48,240], "src": [32,0], "f": 0, "t": 2, "d": [14,243], "a": 1 }, + { "px": [64,240], "src": [32,0], "f": 0, "t": 2, "d": [14,244], "a": 1 }, + { "px": [80,240], "src": [32,0], "f": 0, "t": 2, "d": [14,245], "a": 1 }, + { "px": [96,240], "src": [32,0], "f": 0, "t": 2, "d": [14,246], "a": 1 }, + { "px": [112,240], "src": [32,0], "f": 0, "t": 2, "d": [14,247], "a": 1 }, + { "px": [128,240], "src": [32,0], "f": 0, "t": 2, "d": [14,248], "a": 1 }, + { "px": [144,240], "src": [32,0], "f": 0, "t": 2, "d": [14,249], "a": 1 }, + { "px": [160,240], "src": [32,0], "f": 0, "t": 2, "d": [14,250], "a": 1 }, + { "px": [176,240], "src": [32,0], "f": 0, "t": 2, "d": [14,251], "a": 1 }, + { "px": [240,80], "src": [16,64], "f": 0, "t": 65, "d": [13,95], "a": 1 }, + { "px": [64,160], "src": [16,64], "f": 0, "t": 65, "d": [13,164], "a": 1 }, + { "px": [224,176], "src": [16,64], "f": 0, "t": 65, "d": [13,190], "a": 1 }, + { "px": [144,64], "src": [64,16], "f": 0, "t": 20, "d": [11,73], "a": 1 }, + { "px": [160,80], "src": [64,16], "f": 0, "t": 20, "d": [11,90], "a": 1 }, + { "px": [64,64], "src": [16,0], "f": 0, "t": 1, "d": [10,68], "a": 1 }, + { "px": [192,224], "src": [16,0], "f": 0, "t": 1, "d": [10,236], "a": 1 } + ], + "seed": 2330161, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [{ "levelIid": "bfa96940-8560-11f0-9745-25b1c86c820c", "dir": "e" }] + }, + { + "identifier": "Level_1", + "iid": "bfa96940-8560-11f0-9745-25b1c86c820c", + "uid": 23, + "worldX": 256, + "worldY": 0, + "worldDepth": 0, + "pxWid": 256, + "pxHei": 256, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": true, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [], + "layerInstances": [ + { + "__identifier": "IntGrid", + "__type": "IntGrid", + "__cWid": 16, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "PS_Tileset_10_nes.png", + "iid": "bfa96941-8560-11f0-9745-5f3c9d9fbc20", + "levelId": 23, + "layerDefUid": 4, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0, + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1, + 1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1 + ], + "autoLayerTiles": [], + "seed": 7869914, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + }, + { + "__identifier": "AutoLayer", + "__type": "AutoLayer", + "__cWid": 16, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "PS_Tileset_10_nes.png", + "iid": "bfa96942-8560-11f0-9745-87616ec157e7", + "levelId": 23, + "layerDefUid": 3, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [ + { "px": [0,144], "src": [32,32], "f": 0, "t": 34, "d": [22,144], "a": 1 }, + { "px": [16,144], "src": [32,32], "f": 0, "t": 34, "d": [22,145], "a": 1 }, + { "px": [32,144], "src": [32,32], "f": 0, "t": 34, "d": [22,146], "a": 1 }, + { "px": [48,144], "src": [32,32], "f": 0, "t": 34, "d": [22,147], "a": 1 }, + { "px": [64,144], "src": [32,32], "f": 0, "t": 34, "d": [22,148], "a": 1 }, + { "px": [80,144], "src": [32,32], "f": 0, "t": 34, "d": [22,149], "a": 1 }, + { "px": [96,144], "src": [32,32], "f": 0, "t": 34, "d": [22,150], "a": 1 }, + { "px": [112,144], "src": [32,32], "f": 0, "t": 34, "d": [22,151], "a": 1 }, + { "px": [128,144], "src": [32,32], "f": 0, "t": 34, "d": [22,152], "a": 1 }, + { "px": [144,144], "src": [32,32], "f": 0, "t": 34, "d": [22,153], "a": 1 }, + { "px": [0,160], "src": [32,32], "f": 0, "t": 34, "d": [22,160], "a": 1 }, + { "px": [16,160], "src": [32,32], "f": 0, "t": 34, "d": [22,161], "a": 1 }, + { "px": [32,160], "src": [32,32], "f": 0, "t": 34, "d": [22,162], "a": 1 }, + { "px": [48,160], "src": [32,32], "f": 0, "t": 34, "d": [22,163], "a": 1 }, + { "px": [64,160], "src": [32,32], "f": 0, "t": 34, "d": [22,164], "a": 1 }, + { "px": [80,160], "src": [32,32], "f": 0, "t": 34, "d": [22,165], "a": 1 }, + { "px": [96,160], "src": [32,32], "f": 0, "t": 34, "d": [22,166], "a": 1 }, + { "px": [112,160], "src": [32,32], "f": 0, "t": 34, "d": [22,167], "a": 1 }, + { "px": [128,160], "src": [32,32], "f": 0, "t": 34, "d": [22,168], "a": 1 }, + { "px": [144,160], "src": [32,32], "f": 0, "t": 34, "d": [22,169], "a": 1 }, + { "px": [0,176], "src": [32,32], "f": 0, "t": 34, "d": [22,176], "a": 1 }, + { "px": [16,176], "src": [32,32], "f": 0, "t": 34, "d": [22,177], "a": 1 }, + { "px": [32,176], "src": [32,32], "f": 0, "t": 34, "d": [22,178], "a": 1 }, + { "px": [48,176], "src": [32,32], "f": 0, "t": 34, "d": [22,179], "a": 1 }, + { "px": [64,176], "src": [32,32], "f": 0, "t": 34, "d": [22,180], "a": 1 }, + { "px": [80,176], "src": [32,32], "f": 0, "t": 34, "d": [22,181], "a": 1 }, + { "px": [96,176], "src": [32,32], "f": 0, "t": 34, "d": [22,182], "a": 1 }, + { "px": [112,176], "src": [32,32], "f": 0, "t": 34, "d": [22,183], "a": 1 }, + { "px": [128,176], "src": [32,32], "f": 0, "t": 34, "d": [22,184], "a": 1 }, + { "px": [144,176], "src": [32,32], "f": 0, "t": 34, "d": [22,185], "a": 1 }, + { "px": [0,192], "src": [32,32], "f": 0, "t": 34, "d": [22,192], "a": 1 }, + { "px": [16,192], "src": [32,32], "f": 0, "t": 34, "d": [22,193], "a": 1 }, + { "px": [32,192], "src": [32,32], "f": 0, "t": 34, "d": [22,194], "a": 1 }, + { "px": [48,192], "src": [32,32], "f": 0, "t": 34, "d": [22,195], "a": 1 }, + { "px": [64,192], "src": [32,32], "f": 0, "t": 34, "d": [22,196], "a": 1 }, + { "px": [80,192], "src": [32,32], "f": 0, "t": 34, "d": [22,197], "a": 1 }, + { "px": [96,192], "src": [32,32], "f": 0, "t": 34, "d": [22,198], "a": 1 }, + { "px": [112,192], "src": [32,32], "f": 0, "t": 34, "d": [22,199], "a": 1 }, + { "px": [128,192], "src": [32,32], "f": 0, "t": 34, "d": [22,200], "a": 1 }, + { "px": [144,192], "src": [32,32], "f": 0, "t": 34, "d": [22,201], "a": 1 }, + { "px": [160,192], "src": [32,32], "f": 0, "t": 34, "d": [22,202], "a": 1 }, + { "px": [0,208], "src": [32,32], "f": 0, "t": 34, "d": [22,208], "a": 1 }, + { "px": [16,208], "src": [32,32], "f": 0, "t": 34, "d": [22,209], "a": 1 }, + { "px": [32,208], "src": [32,32], "f": 0, "t": 34, "d": [22,210], "a": 1 }, + { "px": [48,208], "src": [32,32], "f": 0, "t": 34, "d": [22,211], "a": 1 }, + { "px": [64,208], "src": [32,32], "f": 0, "t": 34, "d": [22,212], "a": 1 }, + { "px": [80,208], "src": [32,32], "f": 0, "t": 34, "d": [22,213], "a": 1 }, + { "px": [96,208], "src": [32,32], "f": 0, "t": 34, "d": [22,214], "a": 1 }, + { "px": [112,208], "src": [32,32], "f": 0, "t": 34, "d": [22,215], "a": 1 }, + { "px": [128,208], "src": [32,32], "f": 0, "t": 34, "d": [22,216], "a": 1 }, + { "px": [144,208], "src": [32,32], "f": 0, "t": 34, "d": [22,217], "a": 1 }, + { "px": [160,208], "src": [32,32], "f": 0, "t": 34, "d": [22,218], "a": 1 }, + { "px": [0,224], "src": [32,32], "f": 0, "t": 34, "d": [22,224], "a": 1 }, + { "px": [16,224], "src": [32,32], "f": 0, "t": 34, "d": [22,225], "a": 1 }, + { "px": [32,224], "src": [32,32], "f": 0, "t": 34, "d": [22,226], "a": 1 }, + { "px": [48,224], "src": [32,32], "f": 0, "t": 34, "d": [22,227], "a": 1 }, + { "px": [64,224], "src": [32,32], "f": 0, "t": 34, "d": [22,228], "a": 1 }, + { "px": [80,224], "src": [32,32], "f": 0, "t": 34, "d": [22,229], "a": 1 }, + { "px": [96,224], "src": [32,32], "f": 0, "t": 34, "d": [22,230], "a": 1 }, + { "px": [112,224], "src": [32,32], "f": 0, "t": 34, "d": [22,231], "a": 1 }, + { "px": [128,224], "src": [32,32], "f": 0, "t": 34, "d": [22,232], "a": 1 }, + { "px": [144,224], "src": [32,32], "f": 0, "t": 34, "d": [22,233], "a": 1 }, + { "px": [160,224], "src": [32,32], "f": 0, "t": 34, "d": [22,234], "a": 1 }, + { "px": [176,224], "src": [32,32], "f": 0, "t": 34, "d": [22,235], "a": 1 }, + { "px": [0,240], "src": [32,32], "f": 0, "t": 34, "d": [22,240], "a": 1 }, + { "px": [16,240], "src": [32,32], "f": 0, "t": 34, "d": [22,241], "a": 1 }, + { "px": [32,240], "src": [32,32], "f": 0, "t": 34, "d": [22,242], "a": 1 }, + { "px": [48,240], "src": [32,32], "f": 0, "t": 34, "d": [22,243], "a": 1 }, + { "px": [64,240], "src": [32,32], "f": 0, "t": 34, "d": [22,244], "a": 1 }, + { "px": [80,240], "src": [32,32], "f": 0, "t": 34, "d": [22,245], "a": 1 }, + { "px": [96,240], "src": [32,32], "f": 0, "t": 34, "d": [22,246], "a": 1 }, + { "px": [112,240], "src": [32,32], "f": 0, "t": 34, "d": [22,247], "a": 1 }, + { "px": [128,240], "src": [32,32], "f": 0, "t": 34, "d": [22,248], "a": 1 }, + { "px": [144,240], "src": [32,32], "f": 0, "t": 34, "d": [22,249], "a": 1 }, + { "px": [160,240], "src": [32,32], "f": 0, "t": 34, "d": [22,250], "a": 1 }, + { "px": [176,240], "src": [32,32], "f": 0, "t": 34, "d": [22,251], "a": 1 }, + { "px": [192,240], "src": [32,32], "f": 0, "t": 34, "d": [22,252], "a": 1 }, + { "px": [208,240], "src": [32,32], "f": 0, "t": 34, "d": [22,253], "a": 1 }, + { "px": [160,176], "src": [48,16], "f": 0, "t": 19, "d": [19,186], "a": 1 }, + { "px": [176,208], "src": [48,16], "f": 0, "t": 19, "d": [19,219], "a": 1 }, + { "px": [192,224], "src": [48,16], "f": 0, "t": 19, "d": [19,236], "a": 1 }, + { "px": [224,240], "src": [48,16], "f": 0, "t": 19, "d": [19,254], "a": 1 }, + { "px": [160,144], "src": [64,32], "f": 0, "t": 36, "d": [15,154], "a": 1 }, + { "px": [160,160], "src": [64,32], "f": 0, "t": 36, "d": [15,170], "a": 1 }, + { "px": [176,192], "src": [64,32], "f": 0, "t": 36, "d": [15,203], "a": 1 }, + { "px": [0,128], "src": [32,0], "f": 0, "t": 2, "d": [14,128], "a": 1 }, + { "px": [16,128], "src": [32,0], "f": 0, "t": 2, "d": [14,129], "a": 1 }, + { "px": [32,128], "src": [32,0], "f": 0, "t": 2, "d": [14,130], "a": 1 }, + { "px": [48,128], "src": [32,0], "f": 0, "t": 2, "d": [14,131], "a": 1 }, + { "px": [64,128], "src": [32,0], "f": 0, "t": 2, "d": [14,132], "a": 1 }, + { "px": [80,128], "src": [32,0], "f": 0, "t": 2, "d": [14,133], "a": 1 }, + { "px": [96,128], "src": [32,0], "f": 0, "t": 2, "d": [14,134], "a": 1 }, + { "px": [112,128], "src": [32,0], "f": 0, "t": 2, "d": [14,135], "a": 1 }, + { "px": [128,128], "src": [32,0], "f": 0, "t": 2, "d": [14,136], "a": 1 }, + { "px": [144,128], "src": [32,0], "f": 0, "t": 2, "d": [14,137], "a": 1 }, + { "px": [208,224], "src": [32,0], "f": 0, "t": 2, "d": [14,237], "a": 1 }, + { "px": [240,240], "src": [32,0], "f": 0, "t": 2, "d": [14,255], "a": 1 }, + { "px": [160,128], "src": [64,16], "f": 0, "t": 20, "d": [11,138], "a": 1 }, + { "px": [176,176], "src": [64,16], "f": 0, "t": 20, "d": [11,187], "a": 1 }, + { "px": [192,208], "src": [64,16], "f": 0, "t": 20, "d": [11,220], "a": 1 }, + { "px": [224,224], "src": [64,16], "f": 0, "t": 20, "d": [11,238], "a": 1 } + ], + "seed": 3846321, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [ { "levelIid": "2c2f5701-8560-11f0-9745-15402af9175c", "dir": "w" }, { "levelIid": "d0730c90-8560-11f0-9745-a380a1de4ce0", "dir": "e" } ] + }, + { + "identifier": "Level_2", + "iid": "d0730c90-8560-11f0-9745-a380a1de4ce0", + "uid": 24, + "worldX": 512, + "worldY": 0, + "worldDepth": 0, + "pxWid": 256, + "pxHei": 256, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": true, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [], + "layerInstances": [ + { + "__identifier": "IntGrid", + "__type": "IntGrid", + "__cWid": 16, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "PS_Tileset_10_nes.png", + "iid": "d07333a0-8560-11f0-9745-872562df3c83", + "levelId": 24, + "layerDefUid": 4, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0, + 0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1, + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1, + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1, + 1,1,1,0,0,0,0,0,0,1,1 + ], + "autoLayerTiles": [], + "seed": 2565245, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + }, + { + "__identifier": "AutoLayer", + "__type": "AutoLayer", + "__cWid": 16, + "__cHei": 16, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": 1, + "__tilesetRelPath": "PS_Tileset_10_nes.png", + "iid": "d07333a1-8560-11f0-9745-479d9a126378", + "levelId": 24, + "layerDefUid": 3, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [ + { "px": [128,0], "src": [32,32], "f": 0, "t": 34, "d": [22,8], "a": 1 }, + { "px": [144,0], "src": [32,32], "f": 0, "t": 34, "d": [22,9], "a": 1 }, + { "px": [160,0], "src": [32,32], "f": 0, "t": 34, "d": [22,10], "a": 1 }, + { "px": [176,0], "src": [32,32], "f": 0, "t": 34, "d": [22,11], "a": 1 }, + { "px": [208,112], "src": [32,32], "f": 0, "t": 34, "d": [22,125], "a": 1 }, + { "px": [224,112], "src": [32,32], "f": 0, "t": 34, "d": [22,126], "a": 1 }, + { "px": [240,112], "src": [32,32], "f": 0, "t": 34, "d": [22,127], "a": 1 }, + { "px": [192,128], "src": [32,32], "f": 0, "t": 34, "d": [22,140], "a": 1 }, + { "px": [208,128], "src": [32,32], "f": 0, "t": 34, "d": [22,141], "a": 1 }, + { "px": [224,128], "src": [32,32], "f": 0, "t": 34, "d": [22,142], "a": 1 }, + { "px": [240,128], "src": [32,32], "f": 0, "t": 34, "d": [22,143], "a": 1 }, + { "px": [0,208], "src": [32,32], "f": 0, "t": 34, "d": [22,208], "a": 1 }, + { "px": [16,208], "src": [32,32], "f": 0, "t": 34, "d": [22,209], "a": 1 }, + { "px": [32,208], "src": [32,32], "f": 0, "t": 34, "d": [22,210], "a": 1 }, + { "px": [48,208], "src": [32,32], "f": 0, "t": 34, "d": [22,211], "a": 1 }, + { "px": [64,208], "src": [32,32], "f": 0, "t": 34, "d": [22,212], "a": 1 }, + { "px": [80,208], "src": [32,32], "f": 0, "t": 34, "d": [22,213], "a": 1 }, + { "px": [96,208], "src": [32,32], "f": 0, "t": 34, "d": [22,214], "a": 1 }, + { "px": [0,224], "src": [32,32], "f": 0, "t": 34, "d": [22,224], "a": 1 }, + { "px": [16,224], "src": [32,32], "f": 0, "t": 34, "d": [22,225], "a": 1 }, + { "px": [32,224], "src": [32,32], "f": 0, "t": 34, "d": [22,226], "a": 1 }, + { "px": [48,224], "src": [32,32], "f": 0, "t": 34, "d": [22,227], "a": 1 }, + { "px": [64,224], "src": [32,32], "f": 0, "t": 34, "d": [22,228], "a": 1 }, + { "px": [80,224], "src": [32,32], "f": 0, "t": 34, "d": [22,229], "a": 1 }, + { "px": [96,224], "src": [32,32], "f": 0, "t": 34, "d": [22,230], "a": 1 }, + { "px": [240,224], "src": [32,32], "f": 0, "t": 34, "d": [22,239], "a": 1 }, + { "px": [0,240], "src": [32,32], "f": 0, "t": 34, "d": [22,240], "a": 1 }, + { "px": [16,240], "src": [32,32], "f": 0, "t": 34, "d": [22,241], "a": 1 }, + { "px": [32,240], "src": [32,32], "f": 0, "t": 34, "d": [22,242], "a": 1 }, + { "px": [48,240], "src": [32,32], "f": 0, "t": 34, "d": [22,243], "a": 1 }, + { "px": [64,240], "src": [32,32], "f": 0, "t": 34, "d": [22,244], "a": 1 }, + { "px": [80,240], "src": [32,32], "f": 0, "t": 34, "d": [22,245], "a": 1 }, + { "px": [96,240], "src": [32,32], "f": 0, "t": 34, "d": [22,246], "a": 1 }, + { "px": [240,240], "src": [32,32], "f": 0, "t": 34, "d": [22,255], "a": 1 }, + { "px": [112,0], "src": [16,48], "f": 0, "t": 49, "d": [21,7], "a": 1 }, + { "px": [240,0], "src": [16,48], "f": 0, "t": 49, "d": [21,15], "a": 1 }, + { "px": [0,0], "src": [48,48], "f": 0, "t": 51, "d": [20,0], "a": 1 }, + { "px": [192,0], "src": [48,48], "f": 0, "t": 51, "d": [20,12], "a": 1 }, + { "px": [240,96], "src": [16,16], "f": 0, "t": 17, "d": [18,111], "a": 1 }, + { "px": [192,112], "src": [16,16], "f": 0, "t": 17, "d": [18,124], "a": 1 }, + { "px": [240,16], "src": [0,32], "f": 0, "t": 32, "d": [17,31], "a": 1 }, + { "px": [240,32], "src": [0,32], "f": 0, "t": 32, "d": [17,47], "a": 1 }, + { "px": [240,48], "src": [0,32], "f": 0, "t": 32, "d": [17,63], "a": 1 }, + { "px": [240,64], "src": [0,32], "f": 0, "t": 32, "d": [17,79], "a": 1 }, + { "px": [240,80], "src": [0,32], "f": 0, "t": 32, "d": [17,95], "a": 1 }, + { "px": [176,128], "src": [0,32], "f": 0, "t": 32, "d": [17,139], "a": 1 }, + { "px": [224,224], "src": [0,32], "f": 0, "t": 32, "d": [17,238], "a": 1 }, + { "px": [224,240], "src": [0,32], "f": 0, "t": 32, "d": [17,254], "a": 1 }, + { "px": [16,0], "src": [32,64], "f": 0, "t": 66, "d": [16,1], "a": 1 }, + { "px": [32,0], "src": [32,64], "f": 0, "t": 66, "d": [16,2], "a": 1 }, + { "px": [48,0], "src": [32,64], "f": 0, "t": 66, "d": [16,3], "a": 1 }, + { "px": [64,0], "src": [32,64], "f": 0, "t": 66, "d": [16,4], "a": 1 }, + { "px": [80,0], "src": [32,64], "f": 0, "t": 66, "d": [16,5], "a": 1 }, + { "px": [96,0], "src": [32,64], "f": 0, "t": 66, "d": [16,6], "a": 1 }, + { "px": [208,0], "src": [32,64], "f": 0, "t": 66, "d": [16,13], "a": 1 }, + { "px": [224,0], "src": [32,64], "f": 0, "t": 66, "d": [16,14], "a": 1 }, + { "px": [128,16], "src": [32,64], "f": 0, "t": 66, "d": [16,24], "a": 1 }, + { "px": [144,16], "src": [32,64], "f": 0, "t": 66, "d": [16,25], "a": 1 }, + { "px": [160,16], "src": [32,64], "f": 0, "t": 66, "d": [16,26], "a": 1 }, + { "px": [176,16], "src": [32,64], "f": 0, "t": 66, "d": [16,27], "a": 1 }, + { "px": [64,96], "src": [32,64], "f": 0, "t": 66, "d": [16,100], "a": 1 }, + { "px": [80,96], "src": [32,64], "f": 0, "t": 66, "d": [16,101], "a": 1 }, + { "px": [192,144], "src": [32,64], "f": 0, "t": 66, "d": [16,156], "a": 1 }, + { "px": [208,144], "src": [32,64], "f": 0, "t": 66, "d": [16,157], "a": 1 }, + { "px": [224,144], "src": [32,64], "f": 0, "t": 66, "d": [16,158], "a": 1 }, + { "px": [240,144], "src": [32,64], "f": 0, "t": 66, "d": [16,159], "a": 1 }, + { "px": [0,16], "src": [64,32], "f": 0, "t": 36, "d": [15,16], "a": 1 }, + { "px": [0,32], "src": [64,32], "f": 0, "t": 36, "d": [15,32], "a": 1 }, + { "px": [0,48], "src": [64,32], "f": 0, "t": 36, "d": [15,48], "a": 1 }, + { "px": [0,64], "src": [64,32], "f": 0, "t": 36, "d": [15,64], "a": 1 }, + { "px": [0,80], "src": [64,32], "f": 0, "t": 36, "d": [15,80], "a": 1 }, + { "px": [112,208], "src": [64,32], "f": 0, "t": 36, "d": [15,215], "a": 1 }, + { "px": [112,224], "src": [64,32], "f": 0, "t": 36, "d": [15,231], "a": 1 }, + { "px": [112,240], "src": [64,32], "f": 0, "t": 36, "d": [15,247], "a": 1 }, + { "px": [64,80], "src": [32,0], "f": 0, "t": 2, "d": [14,84], "a": 1 }, + { "px": [80,80], "src": [32,0], "f": 0, "t": 2, "d": [14,85], "a": 1 }, + { "px": [208,96], "src": [32,0], "f": 0, "t": 2, "d": [14,109], "a": 1 }, + { "px": [224,96], "src": [32,0], "f": 0, "t": 2, "d": [14,110], "a": 1 }, + { "px": [0,192], "src": [32,0], "f": 0, "t": 2, "d": [14,192], "a": 1 }, + { "px": [16,192], "src": [32,0], "f": 0, "t": 2, "d": [14,193], "a": 1 }, + { "px": [32,192], "src": [32,0], "f": 0, "t": 2, "d": [14,194], "a": 1 }, + { "px": [48,192], "src": [32,0], "f": 0, "t": 2, "d": [14,195], "a": 1 }, + { "px": [64,192], "src": [32,0], "f": 0, "t": 2, "d": [14,196], "a": 1 }, + { "px": [80,192], "src": [32,0], "f": 0, "t": 2, "d": [14,197], "a": 1 }, + { "px": [96,192], "src": [32,0], "f": 0, "t": 2, "d": [14,198], "a": 1 }, + { "px": [240,208], "src": [32,0], "f": 0, "t": 2, "d": [14,223], "a": 1 }, + { "px": [112,16], "src": [16,64], "f": 0, "t": 65, "d": [13,23], "a": 1 }, + { "px": [48,96], "src": [16,64], "f": 0, "t": 65, "d": [13,99], "a": 1 }, + { "px": [176,144], "src": [16,64], "f": 0, "t": 65, "d": [13,155], "a": 1 }, + { "px": [192,16], "src": [64,48], "f": 0, "t": 52, "d": [12,28], "a": 1 }, + { "px": [0,96], "src": [64,48], "f": 0, "t": 52, "d": [12,96], "a": 1 }, + { "px": [96,96], "src": [64,48], "f": 0, "t": 52, "d": [12,102], "a": 1 }, + { "px": [96,80], "src": [64,16], "f": 0, "t": 20, "d": [11,86], "a": 1 }, + { "px": [112,192], "src": [64,16], "f": 0, "t": 20, "d": [11,199], "a": 1 }, + { "px": [48,80], "src": [16,0], "f": 0, "t": 1, "d": [10,83], "a": 1 }, + { "px": [192,96], "src": [16,0], "f": 0, "t": 1, "d": [10,108], "a": 1 }, + { "px": [176,112], "src": [16,0], "f": 0, "t": 1, "d": [10,123], "a": 1 }, + { "px": [224,208], "src": [16,0], "f": 0, "t": 1, "d": [10,222], "a": 1 } + ], + "seed": 2900560, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [{ "levelIid": "bfa96940-8560-11f0-9745-25b1c86c820c", "dir": "w" }] + } + ], + "worlds": [], + "dummyWorldIid": "2c2f5700-8560-11f0-9745-65c33cf8c8f1" +} \ No newline at end of file diff --git a/assets/test.ldtk.import b/assets/test.ldtk.import new file mode 100644 index 0000000..03dc0e8 --- /dev/null +++ b/assets/test.ldtk.import @@ -0,0 +1,16 @@ +[remap] + +importer="ldtk.importer" +type="PackedScene" +uid="uid://c4xhtpmir26ah" +path="res://.godot/imported/test.ldtk-5da58debf60b2ac4adee332e85c3c4bc.tscn" + +[deps] + +source_file="res://assets/test.ldtk" +dest_files=["res://.godot/imported/test.ldtk-5da58debf60b2ac4adee332e85c3c4bc.tscn"] + +[params] + +import_entities=true +import_tilemaps=true diff --git a/project.godot b/project.godot index 920d1ec..bfab3d4 100644 --- a/project.godot +++ b/project.godot @@ -11,13 +11,18 @@ config_version=5 [application] config/name="ldtk-importer" -config/features=PackedStringArray("4.5", "GL Compatibility") +run/main_scene="uid://c1hl3wapfm8dh" +config/features=PackedStringArray("4.5", "C#", "GL Compatibility") config/icon="res://icon.svg" [dotnet] project/assembly_name="ldtk-importer" +[editor_plugins] + +enabled=PackedStringArray("res://addons/csharp_ldtk_importer/plugin.cfg") + [rendering] renderer/rendering_method="gl_compatibility" diff --git a/scenes/world.tscn b/scenes/world.tscn new file mode 100644 index 0000000..5e27edd --- /dev/null +++ b/scenes/world.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://c1hl3wapfm8dh"] + +[node name="World" type="Node2D"]