diff --git a/.cargo/config.toml b/.cargo/config.toml index 7ee21f0..8b31bd6 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -8,5 +8,5 @@ rustflags = ["--cfg=web_sys_unstable_apis"] # https://github.com/mozilla/sccache # rustc-wrapper = "sccache.exe" -[profile.dev.target.x86_64-pc-windows-msvc] -rustflags = ["-C", "link-arg=-fuse-ld=lld"] +# [profile.dev.target.x86_64-pc-windows-msvc] +# rustflags = ["-C", "link-arg=-fuse-ld=lld"] diff --git a/assets/image/atlas.aseprite b/assets/image/atlas.aseprite index f12c63a..86c399d 100644 Binary files a/assets/image/atlas.aseprite and b/assets/image/atlas.aseprite differ diff --git a/assets/level.ldtk b/assets/level.ldtk new file mode 100644 index 0000000..787e2d5 --- /dev/null +++ b/assets/level.ldtk @@ -0,0 +1,6862 @@ +{ + "__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": "d6c10700-c210-11ef-bd33-1de7d482da37", + "jsonVersion": "1.5.3", + "appBuildId": 473703, + "nextUid": 23, + "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": "Entities", + "identifier": "Entities", + "type": "Entities", + "uid": 4, + "doc": null, + "uiColor": null, + "gridSize": 16, + "guideGridWid": 0, + "guideGridHei": 0, + "displayOpacity": 1, + "inactiveOpacity": 0.6, + "hideInList": false, + "hideFieldsWhenInactive": true, + "canSelectWhenInactive": true, + "renderInWorldView": true, + "pxOffsetX": 0, + "pxOffsetY": 0, + "parallaxFactorX": 0, + "parallaxFactorY": 0, + "parallaxScaling": true, + "requiredTags": [], + "excludedTags": [], + "autoTilesKilledByOtherLayerUid": null, + "uiFilterTags": [], + "useAsyncRender": false, + "intGridValues": [], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": null, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + }, + { + "__type": "IntGrid", + "identifier": "Tiles", + "type": "IntGrid", + "uid": 1, + "doc": null, + "uiColor": "#2231A6", + "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": 2, "identifier": "PermanentWall", "color": "#000000", "tile": null, "groupUid": 0 }, + { "value": 3, "identifier": "Wall", "color": "#70645F", "tile": null, "groupUid": 0 }, + { "value": 1, "identifier": "StoneTile", "color": "#C4C1D0", "tile": null, "groupUid": 0 }, + { "value": 5, "identifier": "Grassland", "color": "#3E8948", "tile": null, "groupUid": 0 }, + { "value": 6, "identifier": "Ice", "color": "#FFFFFF", "tile": null, "groupUid": 0 }, + { "value": 7, "identifier": "Soil", "color": "#733E39", "tile": null, "groupUid": 0 }, + { "value": 4, "identifier": "Water", "color": "#6662DB", "tile": null, "groupUid": 0 }, + { "value": 8, "identifier": "Lava", "color": "#FF8F2D", "tile": null, "groupUid": 0 }, + { "value": 9, "identifier": "Crack", "color": "#353535", "tile": null, "groupUid": 0 } + ], + "intGridValuesGroups": [], + "autoRuleGroups": [], + "autoSourceLayerDefUid": null, + "tilesetDefUid": null, + "tilePivotX": 0, + "tilePivotY": 0, + "biomeFieldUid": null + } + ], "entities": [ + { + "identifier": "BrokenMagicCircle", + "uid": 2, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#3D3FBD", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "MagicCircle", + "uid": 3, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#2FBEA3", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "RandomChest", + "uid": 6, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#573027", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "Spell", + "uid": 7, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#FF00F5", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [ + { + "identifier": "spell", + "doc": null, + "__type": "String", + "uid": 8, + "type": "F_String", + "isArray": false, + "canBeNull": true, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "ValueOnly", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + } + ] + }, + { + "identifier": "Lantern", + "uid": 10, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": "Actor(StoneLantern)", + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#FFF98D", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "Sandbag", + "uid": 12, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#D03511", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "Bookshelf", + "uid": 13, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 32, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#3E304D", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "Rabbit", + "uid": 14, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#FFFFFF", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [ + { + "identifier": "aseprite", + "doc": null, + "__type": "String", + "uid": 15, + "type": "F_String", + "isArray": false, + "canBeNull": true, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "Hidden", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + }, + { + "identifier": "senario", + "doc": null, + "__type": "String", + "uid": 16, + "type": "F_String", + "isArray": false, + "canBeNull": true, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "Hidden", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + } + ] + }, + { + "identifier": "ShopDoor", + "uid": 17, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 32, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#F6757A", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "ShopSpell", + "uid": 18, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#D77643", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [] + }, + { + "identifier": "Boss", + "uid": 21, + "tags": [], + "exportToToc": false, + "allowOutOfBounds": false, + "doc": null, + "width": 16, + "height": 16, + "resizableX": false, + "resizableY": false, + "minWidth": null, + "maxWidth": null, + "minHeight": null, + "maxHeight": null, + "keepAspectRatio": false, + "tileOpacity": 1, + "fillOpacity": 1, + "lineOpacity": 1, + "hollow": false, + "color": "#00FF1F", + "renderMode": "Rectangle", + "showName": true, + "tilesetId": null, + "tileRenderMode": "FitInside", + "tileRect": null, + "uiTileRect": null, + "nineSliceBorders": [], + "maxCount": 0, + "limitScope": "PerLevel", + "limitBehavior": "MoveLastOne", + "pivotX": 0, + "pivotY": 0, + "fieldDefs": [ + { + "identifier": "actor", + "doc": null, + "__type": "String", + "uid": 22, + "type": "F_String", + "isArray": false, + "canBeNull": true, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "Hidden", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + } + ] + } + ], "tilesets": [], "enums": [], "externalEnums": [], "levelFields": [ + { + "identifier": "bgm", + "doc": null, + "__type": "String", + "uid": 9, + "type": "F_String", + "isArray": false, + "canBeNull": true, + "arrayMinLength": null, + "arrayMaxLength": null, + "editorDisplayMode": "ValueOnly", + "editorDisplayScale": 1, + "editorDisplayPos": "Above", + "editorLinkStyle": "StraightArrow", + "editorDisplayColor": null, + "editorAlwaysShow": false, + "editorShowInWorld": true, + "editorCutLongValues": true, + "editorTextSuffix": null, + "editorTextPrefix": null, + "useForSmartColor": false, + "exportToToc": false, + "searchable": false, + "min": null, + "max": null, + "regex": null, + "acceptFileTypes": null, + "defaultOverride": null, + "textLanguageMode": null, + "symmetricalRef": false, + "autoChainRef": true, + "allowOutOfLevelRef": true, + "allowedRefs": "OnlySame", + "allowedRefsEntityUid": null, + "allowedRefTags": [], + "tilesetUid": null + } + ] }, + "levels": [ + { + "identifier": "Home", + "iid": "d6c12e10-c210-11ef-bd33-0313ded8950e", + "uid": 0, + "worldX": 0, + "worldY": 0, + "worldDepth": 0, + "pxWid": 1712, + "pxHei": 1312, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": false, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [{ "__identifier": "bgm", "__type": "String", "__value": "bgm/最果てのルージュ.ogg", "__tile": null, "defUid": 9, "realEditorValues": [{ + "id": "V_String", + "params": ["bgm/最果てのルージュ.ogg"] + }] }], + "layerInstances": [ + { + "__identifier": "Entities", + "__type": "Entities", + "__cWid": 107, + "__cHei": 82, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "55c2c2a0-c210-11ef-bd33-fd7f9253872d", + "levelId": 0, + "layerDefUid": 4, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 3229983, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [ + { + "__identifier": "BrokenMagicCircle", + "__grid": [22,47], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3D3FBD", + "iid": "588d0630-c210-11ef-bd33-a9d5a34ed81b", + "width": 16, + "height": 16, + "defUid": 2, + "px": [352,752], + "fieldInstances": [], + "__worldX": 352, + "__worldY": 752 + }, + { + "__identifier": "MagicCircle", + "__grid": [59,47], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#2FBEA3", + "iid": "ecfcfb70-c210-11ef-9daa-1d06c2790469", + "width": 16, + "height": 16, + "defUid": 3, + "px": [944,752], + "fieldInstances": [], + "__worldX": 944, + "__worldY": 752 + }, + { + "__identifier": "RandomChest", + "__grid": [23,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "67438280-c210-11ef-9daa-47a2179d21ac", + "width": 16, + "height": 16, + "defUid": 6, + "px": [368,688], + "fieldInstances": [], + "__worldX": 368, + "__worldY": 688 + }, + { + "__identifier": "RandomChest", + "__grid": [19,49], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "68cdf310-c210-11ef-9daa-ef35f4935dd9", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,784], + "fieldInstances": [], + "__worldX": 304, + "__worldY": 784 + }, + { + "__identifier": "RandomChest", + "__grid": [19,47], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "690fde10-c210-11ef-9daa-d91b88ebb8b0", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,752], + "fieldInstances": [], + "__worldX": 304, + "__worldY": 752 + }, + { + "__identifier": "RandomChest", + "__grid": [19,44], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "694d0e20-c210-11ef-9daa-ed4a7adb95c5", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,704], + "fieldInstances": [], + "__worldX": 304, + "__worldY": 704 + }, + { + "__identifier": "RandomChest", + "__grid": [19,50], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "6999ce90-c210-11ef-9daa-2769c14a1736", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,800], + "fieldInstances": [], + "__worldX": 304, + "__worldY": 800 + }, + { + "__identifier": "RandomChest", + "__grid": [21,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "69f004e0-c210-11ef-9daa-a5dffa82acf0", + "width": 16, + "height": 16, + "defUid": 6, + "px": [336,816], + "fieldInstances": [], + "__worldX": 336, + "__worldY": 816 + }, + { + "__identifier": "RandomChest", + "__grid": [26,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "6a3969f0-c210-11ef-9daa-4d975ffaa53c", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,816], + "fieldInstances": [], + "__worldX": 416, + "__worldY": 816 + }, + { + "__identifier": "RandomChest", + "__grid": [23,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "6ab66220-c210-11ef-9daa-715d060995c3", + "width": 16, + "height": 16, + "defUid": 6, + "px": [368,816], + "fieldInstances": [], + "__worldX": 368, + "__worldY": 816 + }, + { + "__identifier": "RandomChest", + "__grid": [38,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "71c68cc0-c210-11ef-9daa-6110de9827c6", + "width": 16, + "height": 16, + "defUid": 6, + "px": [608,816], + "fieldInstances": [], + "__worldX": 608, + "__worldY": 816 + }, + { + "__identifier": "RandomChest", + "__grid": [36,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "7217ba00-c210-11ef-9daa-13790be4ec03", + "width": 16, + "height": 16, + "defUid": 6, + "px": [576,816], + "fieldInstances": [], + "__worldX": 576, + "__worldY": 816 + }, + { + "__identifier": "Lantern", + "__grid": [19,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "c42332c0-c210-11ef-9daa-2b6c2edd096a", + "width": 16, + "height": 16, + "defUid": 10, + "px": [304,688], + "fieldInstances": [], + "__worldX": 304, + "__worldY": 688 + }, + { + "__identifier": "Lantern", + "__grid": [27,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "ff53ff40-c210-11ef-9daa-03d5cd0336e6", + "width": 16, + "height": 16, + "defUid": 10, + "px": [432,688], + "fieldInstances": [], + "__worldX": 432, + "__worldY": 688 + }, + { + "__identifier": "Lantern", + "__grid": [30,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "0021af80-c210-11ef-9daa-afd134ec4bd4", + "width": 16, + "height": 16, + "defUid": 10, + "px": [480,688], + "fieldInstances": [], + "__worldX": 480, + "__worldY": 688 + }, + { + "__identifier": "Lantern", + "__grid": [39,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "00b786e0-c210-11ef-9daa-472255b72d0e", + "width": 16, + "height": 16, + "defUid": 10, + "px": [624,688], + "fieldInstances": [], + "__worldX": 624, + "__worldY": 688 + }, + { + "__identifier": "Lantern", + "__grid": [30,29], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "01795040-c210-11ef-9daa-1deaf2ffa651", + "width": 16, + "height": 16, + "defUid": 10, + "px": [480,464], + "fieldInstances": [], + "__worldX": 480, + "__worldY": 464 + }, + { + "__identifier": "Lantern", + "__grid": [39,29], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "021baac0-c210-11ef-9daa-37af3198ba0f", + "width": 16, + "height": 16, + "defUid": 10, + "px": [624,464], + "fieldInstances": [], + "__worldX": 624, + "__worldY": 464 + }, + { + "__identifier": "Lantern", + "__grid": [30,37], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "02acc730-c210-11ef-9daa-a7058e380389", + "width": 16, + "height": 16, + "defUid": 10, + "px": [480,592], + "fieldInstances": [], + "__worldX": 480, + "__worldY": 592 + }, + { + "__identifier": "Lantern", + "__grid": [39,37], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "03bfbdd0-c210-11ef-9daa-41d7bbf34811", + "width": 16, + "height": 16, + "defUid": 10, + "px": [624,592], + "fieldInstances": [], + "__worldX": 624, + "__worldY": 592 + }, + { + "__identifier": "Lantern", + "__grid": [28,58], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "04a71090-c210-11ef-9daa-7999679a6919", + "width": 16, + "height": 16, + "defUid": 10, + "px": [448,928], + "fieldInstances": [], + "__worldX": 448, + "__worldY": 928 + }, + { + "__identifier": "Lantern", + "__grid": [39,58], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "0553f260-c210-11ef-9daa-55d6b4378c05", + "width": 16, + "height": 16, + "defUid": 10, + "px": [624,928], + "fieldInstances": [], + "__worldX": 624, + "__worldY": 928 + }, + { + "__identifier": "Lantern", + "__grid": [28,70], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "077bb460-c210-11ef-9daa-4b121273b9b8", + "width": 16, + "height": 16, + "defUid": 10, + "px": [448,1120], + "fieldInstances": [], + "__worldX": 448, + "__worldY": 1120 + }, + { + "__identifier": "Lantern", + "__grid": [45,52], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "082b5550-c210-11ef-9daa-dbb8527fa7f1", + "width": 16, + "height": 16, + "defUid": 10, + "px": [720,832], + "fieldInstances": [], + "__worldX": 720, + "__worldY": 832 + }, + { + "__identifier": "Lantern", + "__grid": [51,52], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "08b9d9b0-c210-11ef-9daa-c31bdb0b26c5", + "width": 16, + "height": 16, + "defUid": 10, + "px": [816,832], + "fieldInstances": [], + "__worldX": 816, + "__worldY": 832 + }, + { + "__identifier": "Lantern", + "__grid": [45,62], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "094af620-c210-11ef-9daa-c535680757b8", + "width": 16, + "height": 16, + "defUid": 10, + "px": [720,992], + "fieldInstances": [], + "__worldX": 720, + "__worldY": 992 + }, + { + "__identifier": "Lantern", + "__grid": [45,34], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "0a7b5fd0-c210-11ef-9daa-ed05c2878eb5", + "width": 16, + "height": 16, + "defUid": 10, + "px": [720,544], + "fieldInstances": [], + "__worldX": 720, + "__worldY": 544 + }, + { + "__identifier": "Lantern", + "__grid": [45,40], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "0b0f3b60-c210-11ef-9daa-a79505bd14c4", + "width": 16, + "height": 16, + "defUid": 10, + "px": [720,640], + "fieldInstances": [], + "__worldX": 720, + "__worldY": 640 + }, + { + "__identifier": "Lantern", + "__grid": [51,34], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "0b95d080-c210-11ef-9daa-9d1d972a05c1", + "width": 16, + "height": 16, + "defUid": 10, + "px": [816,544], + "fieldInstances": [], + "__worldX": 816, + "__worldY": 544 + }, + { + "__identifier": "Lantern", + "__grid": [51,40], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "0c38a030-c210-11ef-9daa-5936f3bd0a7c", + "width": 16, + "height": 16, + "defUid": 10, + "px": [816,640], + "fieldInstances": [], + "__worldX": 816, + "__worldY": 640 + }, + { + "__identifier": "Lantern", + "__grid": [55,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "17b1f150-c210-11ef-9daa-1deaa599bd5e", + "width": 16, + "height": 16, + "defUid": 10, + "px": [880,688], + "fieldInstances": [], + "__worldX": 880, + "__worldY": 688 + }, + { + "__identifier": "Lantern", + "__grid": [63,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "1861e060-c210-11ef-9daa-a76afa610a61", + "width": 16, + "height": 16, + "defUid": 10, + "px": [1008,688], + "fieldInstances": [], + "__worldX": 1008, + "__worldY": 688 + }, + { + "__identifier": "Lantern", + "__grid": [63,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "1904b010-c210-11ef-9daa-0b375d1677e1", + "width": 16, + "height": 16, + "defUid": 10, + "px": [1008,816], + "fieldInstances": [], + "__worldX": 1008, + "__worldY": 816 + }, + { + "__identifier": "Lantern", + "__grid": [55,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFF98D", + "iid": "19c08600-c210-11ef-9daa-7fbfe83cb425", + "width": 16, + "height": 16, + "defUid": 10, + "px": [880,816], + "fieldInstances": [], + "__worldX": 880, + "__worldY": 816 + }, + { + "__identifier": "Sandbag", + "__grid": [31,61], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D03511", + "iid": "4aa35310-c210-11ef-9daa-695f76c9a465", + "width": 16, + "height": 16, + "defUid": 12, + "px": [496,976], + "fieldInstances": [], + "__worldX": 496, + "__worldY": 976 + }, + { + "__identifier": "Sandbag", + "__grid": [37,61], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D03511", + "iid": "4b57fd10-c210-11ef-9daa-81aff1387f39", + "width": 16, + "height": 16, + "defUid": 12, + "px": [592,976], + "fieldInstances": [], + "__worldX": 592, + "__worldY": 976 + }, + { + "__identifier": "Sandbag", + "__grid": [37,68], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D03511", + "iid": "4c986c50-c210-11ef-9daa-4971c19f3689", + "width": 16, + "height": 16, + "defUid": 12, + "px": [592,1088], + "fieldInstances": [], + "__worldX": 592, + "__worldY": 1088 + }, + { + "__identifier": "Bookshelf", + "__grid": [45,54], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d36eb400-c210-11ef-9daa-638f1cc36b5c", + "width": 32, + "height": 16, + "defUid": 13, + "px": [720,864], + "fieldInstances": [], + "__worldX": 720, + "__worldY": 864 + }, + { + "__identifier": "Bookshelf", + "__grid": [50,54], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d4041630-c210-11ef-9daa-b794d7bad0c0", + "width": 32, + "height": 16, + "defUid": 13, + "px": [800,864], + "fieldInstances": [], + "__worldX": 800, + "__worldY": 864 + }, + { + "__identifier": "Bookshelf", + "__grid": [45,59], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d4f15c60-c210-11ef-9daa-f5576e0b5042", + "width": 32, + "height": 16, + "defUid": 13, + "px": [720,944], + "fieldInstances": [], + "__worldX": 720, + "__worldY": 944 + }, + { + "__identifier": "Bookshelf", + "__grid": [21,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d9070bb0-c210-11ef-9daa-e598d1410e57", + "width": 32, + "height": 16, + "defUid": 13, + "px": [336,688], + "fieldInstances": [], + "__worldX": 336, + "__worldY": 688 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "db5c6d60-c210-11ef-9daa-537ae7ca4e96", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,688], + "fieldInstances": [], + "__worldX": 400, + "__worldY": 688 + }, + { + "__identifier": "RandomChest", + "__grid": [25,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "e15cd5b0-c210-11ef-9daa-35f2f9560fda", + "width": 16, + "height": 16, + "defUid": 6, + "px": [400,816], + "fieldInstances": [], + "__worldX": 400, + "__worldY": 816 + }, + { + "__identifier": "RandomChest", + "__grid": [24,51], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "e1994270-c210-11ef-9daa-6be68922b641", + "width": 16, + "height": 16, + "defUid": 6, + "px": [384,816], + "fieldInstances": [], + "__worldX": 384, + "__worldY": 816 + }, + { + "__identifier": "RandomChest", + "__grid": [25,44], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "e2645aa0-c210-11ef-9daa-cb56afab0171", + "width": 16, + "height": 16, + "defUid": 6, + "px": [400,704], + "fieldInstances": [], + "__worldX": 400, + "__worldY": 704 + }, + { + "__identifier": "RandomChest", + "__grid": [27,44], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "e3079f80-c210-11ef-9daa-0f2f85a55918", + "width": 16, + "height": 16, + "defUid": 6, + "px": [432,704], + "fieldInstances": [], + "__worldX": 432, + "__worldY": 704 + }, + { + "__identifier": "RandomChest", + "__grid": [20,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "e46d7110-c210-11ef-9daa-9f74259fcd68", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,688], + "fieldInstances": [], + "__worldX": 320, + "__worldY": 688 + }, + { + "__identifier": "RandomChest", + "__grid": [21,44], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "e4ba3180-c210-11ef-9daa-e179a2decb58", + "width": 16, + "height": 16, + "defUid": 6, + "px": [336,704], + "fieldInstances": [], + "__worldX": 336, + "__worldY": 704 + }, + { + "__identifier": "RandomChest", + "__grid": [24,43], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "503a1230-c210-11ef-9daa-d55c2277a43e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [384,688], + "fieldInstances": [], + "__worldX": 384, + "__worldY": 688 + }, + { + "__identifier": "Rabbit", + "__grid": [32,45], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFFFFF", + "iid": "077bd310-c210-11ef-9daa-bd07834996d0", + "width": 16, + "height": 16, + "defUid": 14, + "px": [512,720], + "fieldInstances": [ + { "__identifier": "aseprite", "__type": "String", "__value": "rabbit/rabbit_blue.aseprite", "__tile": null, "defUid": 15, "realEditorValues": [{ + "id": "V_String", + "params": ["rabbit/rabbit_blue.aseprite"] + }] }, + { "__identifier": "senario", "__type": "String", "__value": "GuideRabbit", "__tile": null, "defUid": 16, "realEditorValues": [{ + "id": "V_String", + "params": ["GuideRabbit"] + }] } + ], + "__worldX": 512, + "__worldY": 720 + }, + { + "__identifier": "Rabbit", + "__grid": [37,35], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFFFFF", + "iid": "bcabcbf0-c210-11ef-9daa-e36144c81f33", + "width": 16, + "height": 16, + "defUid": 14, + "px": [592,560], + "fieldInstances": [ + { "__identifier": "aseprite", "__type": "String", "__value": "rabbit/rabbit_yellow.aseprite", "__tile": null, "defUid": 15, "realEditorValues": [{ + "id": "V_String", + "params": ["rabbit/rabbit_yellow.aseprite"] + }] }, + { "__identifier": "senario", "__type": "String", "__value": "ShopRabbit", "__tile": null, "defUid": 16, "realEditorValues": [{ + "id": "V_String", + "params": ["ShopRabbit"] + }] } + ], + "__worldX": 592, + "__worldY": 560 + }, + { + "__identifier": "Rabbit", + "__grid": [29,67], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFFFFF", + "iid": "acd21170-c210-11ef-9daa-4768cdd64682", + "width": 16, + "height": 16, + "defUid": 14, + "px": [464,1072], + "fieldInstances": [ + { "__identifier": "aseprite", "__type": "String", "__value": "rabbit/rabbit_red.aseprite", "__tile": null, "defUid": 15, "realEditorValues": [{ + "id": "V_String", + "params": ["rabbit/rabbit_red.aseprite"] + }] }, + { "__identifier": "senario", "__type": "String", "__value": "TrainingRabbit", "__tile": null, "defUid": 16, "realEditorValues": [{ + "id": "V_String", + "params": ["TrainingRabbit"] + }] } + ], + "__worldX": 464, + "__worldY": 1072 + }, + { + "__identifier": "Rabbit", + "__grid": [50,56], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFFFFF", + "iid": "b8626d00-c210-11ef-9daa-cba12b7d6c9b", + "width": 16, + "height": 16, + "defUid": 14, + "px": [800,896], + "fieldInstances": [ + { "__identifier": "aseprite", "__type": "String", "__value": "rabbit/rabbit_black.aseprite", "__tile": null, "defUid": 15, "realEditorValues": [{ + "id": "V_String", + "params": ["rabbit/rabbit_black.aseprite"] + }] }, + { "__identifier": "senario", "__type": "String", "__value": "SpellListRabbit", "__tile": null, "defUid": 16, "realEditorValues": [{ + "id": "V_String", + "params": ["SpellListRabbit"] + }] } + ], + "__worldX": 800, + "__worldY": 896 + }, + { + "__identifier": "Rabbit", + "__grid": [46,60], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFFFFF", + "iid": "c3db9710-c210-11ef-9daa-09fa59ce3335", + "width": 16, + "height": 16, + "defUid": 14, + "px": [736,960], + "fieldInstances": [ + { "__identifier": "aseprite", "__type": "String", "__value": "rabbit/rabbit_green.aseprite", "__tile": null, "defUid": 15, "realEditorValues": [{ + "id": "V_String", + "params": ["rabbit/rabbit_green.aseprite"] + }] }, + { "__identifier": "senario", "__type": "String", "__value": "ReadingRabbit", "__tile": null, "defUid": 16, "realEditorValues": [{ + "id": "V_String", + "params": ["ReadingRabbit"] + }] } + ], + "__worldX": 736, + "__worldY": 960 + }, + { + "__identifier": "Rabbit", + "__grid": [56,44], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FFFFFF", + "iid": "d208bd90-c210-11ef-9daa-0d559e56f427", + "width": 16, + "height": 16, + "defUid": 14, + "px": [896,704], + "fieldInstances": [ + { "__identifier": "aseprite", "__type": "String", "__value": "rabbit/rabbit_white.aseprite", "__tile": null, "defUid": 15, "realEditorValues": [{ + "id": "V_String", + "params": ["rabbit/rabbit_white.aseprite"] + }] }, + { "__identifier": "senario", "__type": "String", "__value": "SingleplayRabbit", "__tile": null, "defUid": 16, "realEditorValues": [{ + "id": "V_String", + "params": ["SingleplayRabbit"] + }] } + ], + "__worldX": 896, + "__worldY": 704 + }, + { + "__identifier": "ShopDoor", + "__grid": [34,41], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#F6757A", + "iid": "5bce8410-c210-11ef-9daa-131152cddd8f", + "width": 32, + "height": 16, + "defUid": 17, + "px": [544,656], + "fieldInstances": [], + "__worldX": 544, + "__worldY": 656 + }, + { + "__identifier": "ShopSpell", + "__grid": [32,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D77643", + "iid": "ab001b20-c210-11ef-9daa-b39309ec7fa7", + "width": 16, + "height": 16, + "defUid": 18, + "px": [512,480], + "fieldInstances": [], + "__worldX": 512, + "__worldY": 480 + }, + { + "__identifier": "ShopSpell", + "__grid": [34,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D77643", + "iid": "ab752410-c210-11ef-9daa-c36b879436a7", + "width": 16, + "height": 16, + "defUid": 18, + "px": [544,480], + "fieldInstances": [], + "__worldX": 544, + "__worldY": 480 + }, + { + "__identifier": "ShopSpell", + "__grid": [36,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D77643", + "iid": "ad3a0590-c210-11ef-9daa-237d8e24c514", + "width": 16, + "height": 16, + "defUid": 18, + "px": [576,480], + "fieldInstances": [], + "__worldX": 576, + "__worldY": 480 + }, + { + "__identifier": "ShopSpell", + "__grid": [38,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D77643", + "iid": "adb920a0-c210-11ef-9daa-0b6d6d2ca5ed", + "width": 16, + "height": 16, + "defUid": 18, + "px": [608,480], + "fieldInstances": [], + "__worldX": 608, + "__worldY": 480 + }, + { + "__identifier": "ShopSpell", + "__grid": [31,32], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D77643", + "iid": "ae660270-c210-11ef-9daa-b37c95003feb", + "width": 16, + "height": 16, + "defUid": 18, + "px": [496,512], + "fieldInstances": [], + "__worldX": 496, + "__worldY": 512 + }, + { + "__identifier": "ShopSpell", + "__grid": [31,34], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D77643", + "iid": "aef28b00-c210-11ef-9daa-07f8841469d3", + "width": 16, + "height": 16, + "defUid": 18, + "px": [496,544], + "fieldInstances": [], + "__worldX": 496, + "__worldY": 544 + }, + { + "__identifier": "ShopSpell", + "__grid": [31,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#D77643", + "iid": "af73c8f0-c210-11ef-9daa-8b3d7b846f24", + "width": 16, + "height": 16, + "defUid": 18, + "px": [496,576], + "fieldInstances": [], + "__worldX": 496, + "__worldY": 576 + } + ] + }, + { + "__identifier": "Tiles", + "__type": "IntGrid", + "__cWid": 107, + "__cHei": 82, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "ef6a8100-c210-11ef-bd33-15a610dd089d", + "levelId": 0, + "layerDefUid": 1, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3, + 3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3, + 3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,6,6,3,3,3,3,3,3,3,3,3,4, + 4,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,3,3,3,3,3,3,3,3, + 3,3,3,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,6,6,6,3,3,3, + 3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,6,6,6,6,3,3,3, + 3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,3,3, + 3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,6,6, + 3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4, + 4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4, + 4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,4,4, + 4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3, + 3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,6,6,6,6, + 6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3, + 3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,6,6, + 6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, + 3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,6, + 6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4, + 3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3, + 3,6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3, + 3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2, + 2,3,3,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3, + 3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2, + 2,2,2,3,3,3,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,3,3,3, + 3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2, + 2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,3, + 3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2, + 2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, + 2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1, + 1,1,1,3,3,3,4,4,1,1,1,1,1,1,1,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2, + 2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1, + 1,1,1,1,1,3,3,3,4,4,1,1,1,1,1,1,1,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4, + 4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1, + 1,1,1,1,1,1,1,3,3,3,4,4,1,1,1,1,1,1,1,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4, + 4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1, + 1,1,1,1,1,1,1,1,1,3,3,3,4,4,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,1,1,3,3,3,3,3,3,3,4,4,1,1,1,1,1,1,1,4,4,3,3,3,3,3,3,3,3,3,3, + 3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,4,4,1,1,1,1,1,1,1,4,4,3,3,3,3,3,3,3,3, + 3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,4,4,1,1,1,1,1,1,1,4,4,3,3,3,3,3,3, + 3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,4,4,4,4,1,1,1,4,4,4,4,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,3,3,3,4,4,4,4,1,1,1,4,4,4,4,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, + 1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1,1,1,3,3,3,3, + 3,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3, + 3,3,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1,1,1,3,3, + 3,3,3,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3, + 3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1,1,1, + 3,3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3, + 3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2, + 2,2,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2, + 2,2,2,2,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,3,3, + 3,3,3,3,3,1,1,1,3,3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, + 2,2,2,2,2,2,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1, + 3,3,3,3,3,3,3,1,1,1,3,3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2, + 2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,1, + 1,1,3,3,3,3,3,3,3,1,1,1,3,3,3,3,3,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, + 2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3, + 3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1, + 1,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,1,1,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0, + 0,0,0,1,1,0,0,0,0,0,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,8,3,8, + 3,3,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0, + 0,0,0,0,0,1,1,0,0,0,0,0,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,8,8, + 8,8,3,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,0,0,0,0,0,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3, + 8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4, + 4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3, + 3,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4, + 1,1,4,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3, + 3,3,3,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3, + 3,4,1,1,4,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3, + 3,3,3,8,8,8,8,8,8,1,1,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3, + 3,3,3,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,1,1,3, + 3,3,3,3,8,8,8,8,8,8,1,1,1,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3, + 3,3,3,3,3,4,1,1,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,1, + 1,3,3,3,3,8,8,8,8,8,8,1,1,1,1,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3, + 3,3,3,3,3,3,3,4,1,1,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,8,8,8,8,8,1,1,1,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,3,3,3,4,1,1,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,3,3,3,4,1,1,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3, + 3,3,3,3,3,3,3,3,3,3,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,3, + 3,3,3,3,3,3,3,3,3,3,3,3,8,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,1,1,4,1,1,4,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,3,3,3,3,3,3,3,3,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,1,1,4,1,1,4,1,1,1,1,1,1,1,1,1, + 1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,1,1,1,1,1,1,1, + 1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8,8,8,8,8,2,2,2,2,2,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,8,8,8,8,8,8,2,2,2,2,2,2,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + ], + "autoLayerTiles": [], + "seed": 3062995, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [{ "levelIid": "2eccafd0-c210-11ef-9daa-e9b0966b9ad8", "dir": "e" }] + }, + { + "identifier": "Warehouse", + "iid": "1355a770-c210-11ef-9daa-c3fe4e4b5f89", + "uid": 5, + "worldX": 464, + "worldY": -384, + "worldDepth": 0, + "pxWid": 448, + "pxHei": 192, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": false, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [{ "__identifier": "bgm", "__type": "String", "__value": "bgm/水のしたたる洞窟.ogg", "__tile": null, "defUid": 9, "realEditorValues": [{ + "id": "V_String", + "params": ["bgm/水のしたたる洞窟.ogg"] + }] }], + "layerInstances": [ + { + "__identifier": "Entities", + "__type": "Entities", + "__cWid": 28, + "__cHei": 12, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "1355ce80-c210-11ef-9daa-cdd659aa2a00", + "levelId": 5, + "layerDefUid": 4, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 8787582, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [ + { + "__identifier": "MagicCircle", + "__grid": [23,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#2FBEA3", + "iid": "148bb670-c210-11ef-9daa-d7c335cacda9", + "width": 16, + "height": 16, + "defUid": 3, + "px": [368,80], + "fieldInstances": [], + "__worldX": 832, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [1,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "50e6a6b0-c210-11ef-9daa-1f35821b8779", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,16], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [3,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "51266ed0-c210-11ef-9daa-87b1961d8804", + "width": 16, + "height": 16, + "defUid": 6, + "px": [48,16], + "fieldInstances": [], + "__worldX": 512, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [2,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "519bc5e0-c210-11ef-9daa-1db58ddc5fea", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,16], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [1,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "51e30810-c210-11ef-9daa-1b38537c945e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,32], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [3,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "521059a0-c210-11ef-9daa-cd8ab9eb832e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [48,32], + "fieldInstances": [], + "__worldX": 512, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [6,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5248a7b0-c210-11ef-9daa-7546ebf70885", + "width": 16, + "height": 16, + "defUid": 6, + "px": [96,32], + "fieldInstances": [], + "__worldX": 560, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [6,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "52a17610-c210-11ef-9daa-1f7e259db0cc", + "width": 16, + "height": 16, + "defUid": 6, + "px": [96,16], + "fieldInstances": [], + "__worldX": 560, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [9,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "52cfb200-c210-11ef-9daa-bf8da912f250", + "width": 16, + "height": 16, + "defUid": 6, + "px": [144,16], + "fieldInstances": [], + "__worldX": 608, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [10,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "53045690-c210-11ef-9daa-95b3d62c43d8", + "width": 16, + "height": 16, + "defUid": 6, + "px": [160,32], + "fieldInstances": [], + "__worldX": 624, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [9,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "53600b20-c210-11ef-9daa-517240711744", + "width": 16, + "height": 16, + "defUid": 6, + "px": [144,32], + "fieldInstances": [], + "__worldX": 608, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [7,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "53896510-c210-11ef-9daa-93df0255b960", + "width": 16, + "height": 16, + "defUid": 6, + "px": [112,32], + "fieldInstances": [], + "__worldX": 576, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [4,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "53d56230-c210-11ef-9daa-252987f76209", + "width": 16, + "height": 16, + "defUid": 6, + "px": [64,16], + "fieldInstances": [], + "__worldX": 528, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [5,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "542be6a0-c210-11ef-9daa-019d9a593fbd", + "width": 16, + "height": 16, + "defUid": 6, + "px": [80,16], + "fieldInstances": [], + "__worldX": 544, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [11,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "54734fe0-c210-11ef-9daa-7b9019366f74", + "width": 16, + "height": 16, + "defUid": 6, + "px": [176,16], + "fieldInstances": [], + "__worldX": 640, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [13,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "549be680-c210-11ef-9daa-fd2f68d83042", + "width": 16, + "height": 16, + "defUid": 6, + "px": [208,16], + "fieldInstances": [], + "__worldX": 672, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [13,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "54c6c710-c210-11ef-9daa-b75083106c73", + "width": 16, + "height": 16, + "defUid": 6, + "px": [208,32], + "fieldInstances": [], + "__worldX": 672, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [12,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "54ececb0-c210-11ef-9daa-f7684e5a4f56", + "width": 16, + "height": 16, + "defUid": 6, + "px": [192,32], + "fieldInstances": [], + "__worldX": 656, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [14,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "55371510-c210-11ef-9daa-859118985141", + "width": 16, + "height": 16, + "defUid": 6, + "px": [224,16], + "fieldInstances": [], + "__worldX": 688, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [14,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5569bdd0-c210-11ef-9daa-914b0dd50cc0", + "width": 16, + "height": 16, + "defUid": 6, + "px": [224,32], + "fieldInstances": [], + "__worldX": 688, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [1,3], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "55fa6510-c210-11ef-9daa-2f70688e3cd1", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,48], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -336 + }, + { + "__identifier": "RandomChest", + "__grid": [2,3], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "562397f0-c210-11ef-9daa-19bfee977097", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,48], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -336 + }, + { + "__identifier": "RandomChest", + "__grid": [2,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5653cfb0-c210-11ef-9daa-19c0a6fa5230", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,80], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [1,4], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "569ff3e0-c210-11ef-9daa-0b07349ff7ae", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,64], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -320 + }, + { + "__identifier": "RandomChest", + "__grid": [2,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "56f69f60-c210-11ef-9daa-a592306d2633", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,96], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -288 + }, + { + "__identifier": "RandomChest", + "__grid": [1,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5744e670-c210-11ef-9daa-4fe7f9385678", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,128], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -256 + }, + { + "__identifier": "RandomChest", + "__grid": [14,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "579c0720-c210-11ef-9daa-0166fabd17a9", + "width": 16, + "height": 16, + "defUid": 6, + "px": [224,160], + "fieldInstances": [], + "__worldX": 688, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [2,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "57f9b780-c210-11ef-9daa-e1ffadae7ef7", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,144], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [2,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "581a85f0-c210-11ef-9daa-33f1d146fef4", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,128], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -256 + }, + { + "__identifier": "RandomChest", + "__grid": [1,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5876d6c0-c210-11ef-9daa-2b079ad58c5b", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,96], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -288 + }, + { + "__identifier": "RandomChest", + "__grid": [2,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "58ccbef0-c210-11ef-9daa-995da98d8740", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,160], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [2,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "58fd1dc0-c210-11ef-9daa-71737308b4fc", + "width": 16, + "height": 16, + "defUid": 6, + "px": [32,144], + "fieldInstances": [], + "__worldX": 496, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [1,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "59474620-c210-11ef-9daa-2da2792e521c", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,160], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [3,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "599d7c70-c210-11ef-9daa-1dff256dcfe7", + "width": 16, + "height": 16, + "defUid": 6, + "px": [48,160], + "fieldInstances": [], + "__worldX": 512, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [5,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "59c13110-c210-11ef-9daa-3371afba580b", + "width": 16, + "height": 16, + "defUid": 6, + "px": [80,144], + "fieldInstances": [], + "__worldX": 544, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [7,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5a034320-c210-11ef-9daa-c5999325726d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [112,160], + "fieldInstances": [], + "__worldX": 576, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [9,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5a1f0880-c210-11ef-9daa-2dd090d1df42", + "width": 16, + "height": 16, + "defUid": 6, + "px": [144,160], + "fieldInstances": [], + "__worldX": 608, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [10,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5a3b6a20-c210-11ef-9daa-f9e35b8e490f", + "width": 16, + "height": 16, + "defUid": 6, + "px": [160,160], + "fieldInstances": [], + "__worldX": 624, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [12,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5a51b140-c210-11ef-9daa-9dad937f29b5", + "width": 16, + "height": 16, + "defUid": 6, + "px": [192,160], + "fieldInstances": [], + "__worldX": 656, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [11,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5ab52e00-c210-11ef-9daa-3f70a581c2a5", + "width": 16, + "height": 16, + "defUid": 6, + "px": [176,144], + "fieldInstances": [], + "__worldX": 640, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [4,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5b489460-c210-11ef-9daa-7762909ecdbd", + "width": 16, + "height": 16, + "defUid": 6, + "px": [64,160], + "fieldInstances": [], + "__worldX": 528, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [5,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5b768230-c210-11ef-9daa-9d93cbd9d47f", + "width": 16, + "height": 16, + "defUid": 6, + "px": [80,160], + "fieldInstances": [], + "__worldX": 544, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [8,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "5bedd510-c210-11ef-9daa-c1d1cfa9e16d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [128,144], + "fieldInstances": [], + "__worldX": 592, + "__worldY": -240 + }, + { + "__identifier": "BrokenMagicCircle", + "__grid": [5,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3D3FBD", + "iid": "87364ea0-c210-11ef-9daa-c18db1bd79f7", + "width": 16, + "height": 16, + "defUid": 2, + "px": [80,80], + "fieldInstances": [], + "__worldX": 544, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [1,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "941dd5c0-c210-11ef-9daa-7563f5f8211e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,128], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -256 + }, + { + "__identifier": "RandomChest", + "__grid": [13,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "a073f250-c210-11ef-9daa-b7b6d3ea789e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [208,160], + "fieldInstances": [], + "__worldX": 672, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [1,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "a1d11150-c210-11ef-9daa-4f18ba8f9685", + "width": 16, + "height": 16, + "defUid": 6, + "px": [16,144], + "fieldInstances": [], + "__worldX": 480, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [17,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "a5ab6550-c210-11ef-9daa-95356ca1de6d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [272,160], + "fieldInstances": [], + "__worldX": 736, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [18,4], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c57a66b0-c210-11ef-9daa-67a3c65c6997", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,64], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -320 + }, + { + "__identifier": "RandomChest", + "__grid": [19,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c5d8b350-c210-11ef-9daa-69581c15572e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,96], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -288 + }, + { + "__identifier": "RandomChest", + "__grid": [19,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c60b8320-c210-11ef-9daa-2921498060f7", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,80], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [18,7], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c633f2b0-c210-11ef-9daa-6d992afa5dc9", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,112], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -272 + }, + { + "__identifier": "RandomChest", + "__grid": [19,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c65efa50-c210-11ef-9daa-35c6cf0772a9", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,144], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [20,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c6948940-c210-11ef-9daa-176c7f981ba8", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,160], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [18,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c6d75ea0-c210-11ef-9daa-ddb42ab48a3a", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,160], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [19,7], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c72ad5d0-c210-11ef-9daa-3ff1daf5e2cd", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,112], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -272 + }, + { + "__identifier": "RandomChest", + "__grid": [18,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c77c0310-c210-11ef-9daa-63e340542767", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,96], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -288 + }, + { + "__identifier": "RandomChest", + "__grid": [18,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c7a29de0-c210-11ef-9daa-19c5ab3c3428", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,80], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [19,3], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c7ee25d0-c210-11ef-9daa-0d6d64c12135", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,48], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -336 + }, + { + "__identifier": "RandomChest", + "__grid": [19,4], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c844d150-c210-11ef-9daa-612a568ce862", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,64], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -320 + }, + { + "__identifier": "RandomChest", + "__grid": [18,3], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c908bd90-c210-11ef-9daa-4583cd1c2075", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,48], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -336 + }, + { + "__identifier": "RandomChest", + "__grid": [18,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c973b460-c210-11ef-9daa-a98dbd7dc91d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,128], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -256 + }, + { + "__identifier": "RandomChest", + "__grid": [18,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "c9c9eab0-c210-11ef-9daa-c7fda5580ced", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,144], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [20,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "ca4694c0-c210-11ef-9daa-9d9a48e1f044", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,128], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -256 + }, + { + "__identifier": "RandomChest", + "__grid": [19,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cae96470-c210-11ef-9daa-f74806ed8de2", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,128], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -256 + }, + { + "__identifier": "RandomChest", + "__grid": [19,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cb2f4710-c210-11ef-9daa-93ae07df0358", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,160], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [20,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cb637670-c210-11ef-9daa-654e2189c3e5", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,144], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [20,7], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cbc67e00-c210-11ef-9daa-1d04d999638a", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,112], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -272 + }, + { + "__identifier": "RandomChest", + "__grid": [20,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cbeca3a0-c210-11ef-9daa-71d40212ea99", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,96], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -288 + }, + { + "__identifier": "RandomChest", + "__grid": [20,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cc29fac0-c210-11ef-9daa-bd3f8a4c1020", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,80], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [20,4], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cc5f62a0-c210-11ef-9daa-75bd9966db81", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,64], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -320 + }, + { + "__identifier": "RandomChest", + "__grid": [20,3], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cc8d2960-c210-11ef-9daa-2bac2ae94627", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,48], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -336 + }, + { + "__identifier": "RandomChest", + "__grid": [20,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "ccb85810-c210-11ef-9daa-114642c3a700", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,32], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [19,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cd145ac0-c210-11ef-9daa-1d0be30753e6", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,16], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [18,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cd5ab290-c210-11ef-9daa-c11e04917a0d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,16], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [18,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cd867d80-c210-11ef-9daa-45402f2ee4b7", + "width": 16, + "height": 16, + "defUid": 6, + "px": [288,32], + "fieldInstances": [], + "__worldX": 752, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [19,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cdb3f620-c210-11ef-9daa-2b04a1072b9f", + "width": 16, + "height": 16, + "defUid": 6, + "px": [304,32], + "fieldInstances": [], + "__worldX": 768, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [20,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "ce3d2350-c210-11ef-9daa-fdb9b05922e7", + "width": 16, + "height": 16, + "defUid": 6, + "px": [320,16], + "fieldInstances": [], + "__worldX": 784, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [17,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "ce894780-c210-11ef-9daa-6900f6b12e62", + "width": 16, + "height": 16, + "defUid": 6, + "px": [272,16], + "fieldInstances": [], + "__worldX": 736, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [16,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "ceb7aa80-c210-11ef-9daa-f33102ed82f8", + "width": 16, + "height": 16, + "defUid": 6, + "px": [256,32], + "fieldInstances": [], + "__worldX": 720, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [17,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cf08b0b0-c210-11ef-9daa-fbde7aeeb68c", + "width": 16, + "height": 16, + "defUid": 6, + "px": [272,32], + "fieldInstances": [], + "__worldX": 736, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [15,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cf45b9b0-c210-11ef-9daa-c3ecf6b71e3c", + "width": 16, + "height": 16, + "defUid": 6, + "px": [240,16], + "fieldInstances": [], + "__worldX": 704, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [16,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "cf87cbc0-c210-11ef-9daa-3ff3bdeb5d93", + "width": 16, + "height": 16, + "defUid": 6, + "px": [256,16], + "fieldInstances": [], + "__worldX": 720, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [15,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d039ddb0-c210-11ef-9daa-cf8bc87c7e8b", + "width": 16, + "height": 16, + "defUid": 6, + "px": [240,160], + "fieldInstances": [], + "__worldX": 704, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [21,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d0c86210-c210-11ef-9daa-a3ca21d92a29", + "width": 16, + "height": 16, + "defUid": 6, + "px": [336,160], + "fieldInstances": [], + "__worldX": 800, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [23,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d0f3b7d0-c210-11ef-9daa-7d1309886df7", + "width": 16, + "height": 16, + "defUid": 6, + "px": [368,160], + "fieldInstances": [], + "__worldX": 832, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [25,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d1848620-c210-11ef-9daa-e901e07fe22d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [400,160], + "fieldInstances": [], + "__worldX": 864, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [24,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d1d5b360-c210-11ef-9daa-fb8335d8929d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [384,160], + "fieldInstances": [], + "__worldX": 848, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [22,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d1fe7110-c210-11ef-9daa-4957d940566f", + "width": 16, + "height": 16, + "defUid": 6, + "px": [352,160], + "fieldInstances": [], + "__worldX": 816, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [26,10], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d269b600-c210-11ef-9daa-7b95eb506dfb", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,160], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -224 + }, + { + "__identifier": "RandomChest", + "__grid": [26,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d28f6670-c210-11ef-9daa-975f86a13b8e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,144], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -240 + }, + { + "__identifier": "RandomChest", + "__grid": [26,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d2ab52e0-c210-11ef-9daa-719611f9ec18", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,128], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -256 + }, + { + "__identifier": "RandomChest", + "__grid": [26,7], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d2c9fe70-c210-11ef-9daa-1d3b8ee3f77b", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,112], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -272 + }, + { + "__identifier": "RandomChest", + "__grid": [26,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d2e8aa00-c210-11ef-9daa-4fb473989d9e", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,80], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [26,4], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d3070770-c210-11ef-9daa-4d5f74572387", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,64], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -320 + }, + { + "__identifier": "RandomChest", + "__grid": [26,3], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d339fe50-c210-11ef-9daa-b75d36fea6e7", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,48], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -336 + }, + { + "__identifier": "RandomChest", + "__grid": [26,2], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d35611d0-c210-11ef-9daa-2d3284a36277", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,32], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -352 + }, + { + "__identifier": "RandomChest", + "__grid": [26,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d3772e60-c210-11ef-9daa-0db4f92299bb", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,16], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [25,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d3a4ce10-c210-11ef-9daa-6d386cba775d", + "width": 16, + "height": 16, + "defUid": 6, + "px": [400,16], + "fieldInstances": [], + "__worldX": 864, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [24,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d3c638c0-c210-11ef-9daa-df725f856475", + "width": 16, + "height": 16, + "defUid": 6, + "px": [384,16], + "fieldInstances": [], + "__worldX": 848, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [23,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d3df3f00-c210-11ef-9daa-89abc6a1db6b", + "width": 16, + "height": 16, + "defUid": 6, + "px": [368,16], + "fieldInstances": [], + "__worldX": 832, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [21,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d42e2250-c210-11ef-9daa-6fba1ceaf4b9", + "width": 16, + "height": 16, + "defUid": 6, + "px": [336,16], + "fieldInstances": [], + "__worldX": 800, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [22,1], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d4dadd10-c210-11ef-9daa-f33c273f00cc", + "width": 16, + "height": 16, + "defUid": 6, + "px": [352,16], + "fieldInstances": [], + "__worldX": 816, + "__worldY": -368 + }, + { + "__identifier": "RandomChest", + "__grid": [26,6], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "d5b314a0-c210-11ef-9daa-d1d2df43bd60", + "width": 16, + "height": 16, + "defUid": 6, + "px": [416,96], + "fieldInstances": [], + "__worldX": 880, + "__worldY": -288 + }, + { + "__identifier": "Spell", + "__grid": [15,5], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FF00F5", + "iid": "29a1be90-c210-11ef-9daa-1b93a8b7426b", + "width": 16, + "height": 16, + "defUid": 7, + "px": [240,80], + "fieldInstances": [{ "__identifier": "spell", "__type": "String", "__value": "MagicBolt", "__tile": null, "defUid": 8, "realEditorValues": [{ + "id": "V_String", + "params": ["MagicBolt"] + }] }], + "__worldX": 704, + "__worldY": -304 + }, + { + "__identifier": "RandomChest", + "__grid": [7,4], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#573027", + "iid": "f173ee80-c210-11ef-9daa-9302c21627c1", + "width": 16, + "height": 16, + "defUid": 6, + "px": [112,64], + "fieldInstances": [], + "__worldX": 576, + "__worldY": -320 + } + ] + }, + { + "__identifier": "Tiles", + "__type": "IntGrid", + "__cWid": 28, + "__cHei": 12, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "1355f590-c210-11ef-9daa-e95378a39f81", + "levelId": 5, + "layerDefUid": 1, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, + 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2, + 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + ], + "autoLayerTiles": [], + "seed": 5873460, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [] + }, + { + "identifier": "Library", + "iid": "7ff0bd80-c210-11ef-9daa-2726d327a756", + "uid": 19, + "worldX": 2000, + "worldY": -736, + "worldDepth": 0, + "pxWid": 960, + "pxHei": 960, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": false, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [{ "__identifier": "bgm", "__type": "String", "__value": "bgm/森のいざない.ogg", "__tile": null, "defUid": 9, "realEditorValues": [{ + "id": "V_String", + "params": ["bgm/森のいざない.ogg"] + }] }], + "layerInstances": [ + { + "__identifier": "Entities", + "__type": "Entities", + "__cWid": 60, + "__cHei": 60, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "7ff0bd81-c210-11ef-9daa-279b1d44ba71", + "levelId": 19, + "layerDefUid": 4, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 6769504, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [ + { + "__identifier": "BrokenMagicCircle", + "__grid": [9,32], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3D3FBD", + "iid": "db5e3260-c210-11ef-9daa-4b275b7a31df", + "width": 16, + "height": 16, + "defUid": 2, + "px": [144,512], + "fieldInstances": [], + "__worldX": 2144, + "__worldY": -224 + }, + { + "__identifier": "MagicCircle", + "__grid": [47,13], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#2FBEA3", + "iid": "dcbfe540-c210-11ef-9daa-33c48447b7f9", + "width": 16, + "height": 16, + "defUid": 3, + "px": [752,208], + "fieldInstances": [], + "__worldX": 2752, + "__worldY": -528 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "df89dab0-c210-11ef-9daa-4dd4caef306b", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,432], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e0815a10-c210-11ef-9daa-ad7aa40f5c3f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,480], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e21f79b0-c210-11ef-9daa-6bac4d6078de", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,528], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e29c98f0-c210-11ef-9daa-3309a6999def", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,432], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e2fa2240-c210-11ef-9daa-6bd0b82ce7d7", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,480], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e355fde0-c210-11ef-9daa-8f4cc1b772a7", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,528], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e4244a60-c210-11ef-9daa-2bb58912f1c6", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,528], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e4b4f1a0-c210-11ef-9daa-b186682cb05e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,480], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e5485800-c210-11ef-9daa-1f581e74b126", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,432], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e5c52920-c210-11ef-9daa-aba0d8d5aa6d", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,432], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e61a9c20-c210-11ef-9daa-c32fee2d0aa2", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,480], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "e6aec5d0-c210-11ef-9daa-d1533b9daaba", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,528], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "dbaa2520-c210-11ef-8f07-7511abca8fcb", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,576], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "dc14cdd0-c210-11ef-8f07-d5b33e81a214", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,576], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "ddc75fd0-c210-11ef-8f07-6d5727b2ca56", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,576], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "de4e1c00-c210-11ef-8f07-8fbb7a69ce71", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,576], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc64b40-c210-11ef-8f07-25f6db6efba5", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,432], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc64b41-c210-11ef-8f07-47aae6d90787", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,480], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc64b42-c210-11ef-8f07-97e0b41598bd", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,528], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc67250-c210-11ef-8f07-4d2e5a3c6652", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,432], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc67251-c210-11ef-8f07-b3e80e36f84a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,480], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc69960-c210-11ef-8f07-f3d7979bec0d", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,528], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc6c070-c210-11ef-8f07-0d1060f65050", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,528], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc6c071-c210-11ef-8f07-31794006a282", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,480], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc6e780-c210-11ef-8f07-692c33dc1c37", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,432], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,27], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc6e781-c210-11ef-8f07-b306305cf61c", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,432], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -304 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,30], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc6e782-c210-11ef-8f07-a950f02fb6cb", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,480], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -256 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,33], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc70e90-c210-11ef-8f07-3bff3ffe82b9", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,528], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -208 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc70e91-c210-11ef-8f07-5bc746b68bae", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,576], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc70e92-c210-11ef-8f07-093ca0e8de7c", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,576], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc70e93-c210-11ef-8f07-1d73b0df4a5a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,576], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,36], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "0fc735a0-c210-11ef-8f07-c3e1165a3f23", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,576], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -160 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464dfdb1-c210-11ef-8f07-733ba734e488", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,176], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464dfdb2-c210-11ef-8f07-e1cc3b4ec70c", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,224], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464dfdb4-c210-11ef-8f07-9f8a8419a3af", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,176], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e24c0-c210-11ef-8f07-2b1dd14da745", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,224], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e24c1-c210-11ef-8f07-2d94cff5bf6b", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,224], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e24c2-c210-11ef-8f07-1fca7d569abf", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,176], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e24c5-c210-11ef-8f07-4755dd901a3d", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,176], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e24c6-c210-11ef-8f07-27dbfbcc5af5", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,224], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e4bd0-c210-11ef-8f07-53929a23d4aa", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,272], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e4bd1-c210-11ef-8f07-1d4448ef1920", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,272], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e4bd2-c210-11ef-8f07-df7b6d806386", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,272], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "464e4bd3-c210-11ef-8f07-4ddae244119d", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,272], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "8145f800-c210-11ef-8f07-bb3a8bd5acaa", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,128], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "8145f801-c210-11ef-8f07-eb8341f9779e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,176], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "8145f802-c210-11ef-8f07-3dbeee85906c", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,224], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "8145f803-c210-11ef-8f07-dd15d4ba9916", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,128], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "8145f804-c210-11ef-8f07-0dc0dee2c359", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,176], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81461f10-c210-11ef-8f07-4358f3b7143e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,224], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81461f11-c210-11ef-8f07-d7c141b7ba6a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,224], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81461f12-c210-11ef-8f07-17a5a5a1f01e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,176], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81461f13-c210-11ef-8f07-196f41dce3cf", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,128], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81461f14-c210-11ef-8f07-0d4c735cee9e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,128], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81461f15-c210-11ef-8f07-3d12f086224d", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,176], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81461f16-c210-11ef-8f07-e1b97cb433b7", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,224], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81464620-c210-11ef-8f07-af976105ab91", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,272], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81464621-c210-11ef-8f07-4d36a28fdb2a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,272], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81464622-c210-11ef-8f07-fb62977f47f7", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,272], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "81464623-c210-11ef-8f07-bf6f5ce3edbe", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,272], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87adfbc0-c210-11ef-8f07-b3841e82be63", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,176], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae22d0-c210-11ef-8f07-65ce25b93a29", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,224], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae22d1-c210-11ef-8f07-d7ae0479aeba", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,176], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae22d2-c210-11ef-8f07-29d981e86634", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,224], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae22d3-c210-11ef-8f07-0551ac13bee1", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,224], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae22d4-c210-11ef-8f07-eb1a5e656732", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,176], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae22d5-c210-11ef-8f07-85a8ee902912", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,176], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae49e0-c210-11ef-8f07-ed21fceecfaa", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,224], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae49e1-c210-11ef-8f07-21970d949327", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,272], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae49e2-c210-11ef-8f07-fbb7eed9a6c6", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,272], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae49e3-c210-11ef-8f07-85e7a276c5d1", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,272], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae49e4-c210-11ef-8f07-75439c6a471a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,272], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae49e5-c210-11ef-8f07-8955c011ba80", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,128], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae49e6-c210-11ef-8f07-75be4655691e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,176], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f0-c210-11ef-8f07-05005d757857", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,224], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f1-c210-11ef-8f07-aba124b0983f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,128], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f2-c210-11ef-8f07-bd1bedca24cf", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,176], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f3-c210-11ef-8f07-633ef0e2c085", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,224], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f4-c210-11ef-8f07-99e0bad99805", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,224], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f5-c210-11ef-8f07-d17c9d645c2a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,176], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f6-c210-11ef-8f07-458f24f2cf0e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,128], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae70f7-c210-11ef-8f07-a3c65099ef96", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,128], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae9800-c210-11ef-8f07-e528516b12e6", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,176], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae9801-c210-11ef-8f07-ffe08aae0081", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,224], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [4,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae9802-c210-11ef-8f07-91ed443244d1", + "width": 32, + "height": 16, + "defUid": 13, + "px": [64,272], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [6,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87ae9803-c210-11ef-8f07-49858f629436", + "width": 32, + "height": 16, + "defUid": 13, + "px": [96,272], + "fieldInstances": [], + "__worldX": 2096, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [11,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87aebf10-c210-11ef-8f07-8f9c11ff9dcd", + "width": 32, + "height": 16, + "defUid": 13, + "px": [176,272], + "fieldInstances": [], + "__worldX": 2176, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [13,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "87aebf11-c210-11ef-8f07-19c3733b268f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [208,272], + "fieldInstances": [], + "__worldX": 2208, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1aeda20-c210-11ef-8f07-e988bb2193df", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,176], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1aeda21-c210-11ef-8f07-9f6fd9fe82af", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,224], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1aeda22-c210-11ef-8f07-0fed916cd18f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,176], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0130-c210-11ef-8f07-736e746f4fb2", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,224], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0131-c210-11ef-8f07-733617de86a5", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,224], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0132-c210-11ef-8f07-7912f24c9610", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,176], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0133-c210-11ef-8f07-2b7120b6f5e3", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,176], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0134-c210-11ef-8f07-611daed5e240", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,224], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0135-c210-11ef-8f07-0d362fa29ef3", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,272], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0136-c210-11ef-8f07-87ffcaab6819", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,272], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0137-c210-11ef-8f07-1beb4bc8d202", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,272], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0138-c210-11ef-8f07-194a1f0707bf", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,272], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af0139-c210-11ef-8f07-eb39c36921db", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,128], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2840-c210-11ef-8f07-a547a172f4d0", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,176], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2841-c210-11ef-8f07-3bc61f8ead5f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,224], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2842-c210-11ef-8f07-fb2392061b25", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,128], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2843-c210-11ef-8f07-55452980650e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,176], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2844-c210-11ef-8f07-c7cf2e79f93f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,224], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2845-c210-11ef-8f07-4df23c9fa105", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,224], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2846-c210-11ef-8f07-0ff958600ba1", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,176], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af2847-c210-11ef-8f07-29164bd9ec42", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,128], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af4f50-c210-11ef-8f07-130481f0a74a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,128], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af4f51-c210-11ef-8f07-5f9d2c76d69e", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,176], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af4f52-c210-11ef-8f07-2d40713768dd", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,224], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af4f53-c210-11ef-8f07-ab60c23ade24", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,272], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af4f54-c210-11ef-8f07-4df2252f0e0b", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,272], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af4f55-c210-11ef-8f07-afdbdc1ccf00", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,272], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "b1af4f56-c210-11ef-8f07-a177cf97bb0f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,272], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf2ab0-c210-11ef-8f07-7bb961217c39", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,176], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf51c0-c210-11ef-8f07-8f1221963c87", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,224], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf51c1-c210-11ef-8f07-751e9777456d", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,176], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf51c2-c210-11ef-8f07-195cc6f471df", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,224], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf51c3-c210-11ef-8f07-1fd9160b7009", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,224], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d0-c210-11ef-8f07-3971a89cce8f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,176], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d1-c210-11ef-8f07-bf914d1fccfd", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,176], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d2-c210-11ef-8f07-d964c6455126", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,224], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d3-c210-11ef-8f07-87adaf6814b0", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,272], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d4-c210-11ef-8f07-13d70e44a6ae", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,272], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d5-c210-11ef-8f07-e37cd2a8a483", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,272], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d6-c210-11ef-8f07-47d8fb0757b7", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,272], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf78d7-c210-11ef-8f07-31078a565102", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,128], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf9fe0-c210-11ef-8f07-05f4bbc944f0", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,176], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf9fe1-c210-11ef-8f07-e3d6680ec198", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,224], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf9fe2-c210-11ef-8f07-c517f962894b", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,128], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf9fe3-c210-11ef-8f07-87ae36b34717", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,176], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf9fe4-c210-11ef-8f07-2bd789897a5b", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,224], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf9fe5-c210-11ef-8f07-733790d2d931", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,224], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcaf9fe6-c210-11ef-8f07-7b01829d713f", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,176], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f0-c210-11ef-8f07-1997f482a123", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,128], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,8], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f1-c210-11ef-8f07-5d88285e7ad8", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,128], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -608 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,11], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f2-c210-11ef-8f07-4b4b99738695", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,176], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -560 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,14], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f3-c210-11ef-8f07-3fb471919156", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,224], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -512 + }, + { + "__identifier": "Bookshelf", + "__grid": [42,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f4-c210-11ef-8f07-57f81e0d221a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [672,272], + "fieldInstances": [], + "__worldX": 2672, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [44,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f5-c210-11ef-8f07-47d8c2c2a014", + "width": 32, + "height": 16, + "defUid": 13, + "px": [704,272], + "fieldInstances": [], + "__worldX": 2704, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [49,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f6-c210-11ef-8f07-45fb2c49243a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [784,272], + "fieldInstances": [], + "__worldX": 2784, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [51,17], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "bcafc6f7-c210-11ef-8f07-d3290b18852b", + "width": 32, + "height": 16, + "defUid": 13, + "px": [816,272], + "fieldInstances": [], + "__worldX": 2816, + "__worldY": -464 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,46], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72bde10-c210-11ef-8f07-ebf65c993fe4", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,736], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": 0 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,49], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72bde11-c210-11ef-8f07-ffe537101fab", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,784], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": 48 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,52], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72bde12-c210-11ef-8f07-d9f7e3c7c6d2", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,832], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": 96 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,46], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72bde13-c210-11ef-8f07-bfaa95f170e3", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,736], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": 0 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,49], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72bde14-c210-11ef-8f07-5d706498abac", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,784], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": 48 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,52], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0520-c210-11ef-8f07-4594a23e7d14", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,832], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": 96 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,52], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0521-c210-11ef-8f07-4f0acf397f6c", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,832], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": 96 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,49], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0522-c210-11ef-8f07-3776af49b585", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,784], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": 48 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,46], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0523-c210-11ef-8f07-a7a80153a6b7", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,736], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": 0 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,46], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0524-c210-11ef-8f07-1dc9037e4f17", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,736], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": 0 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,49], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0525-c210-11ef-8f07-1d5c6a093f75", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,784], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": 48 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,52], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0526-c210-11ef-8f07-f15f3bbda9ce", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,832], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": 96 + }, + { + "__identifier": "Bookshelf", + "__grid": [23,55], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c0527-c210-11ef-8f07-d72f98386b6a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [368,880], + "fieldInstances": [], + "__worldX": 2368, + "__worldY": 144 + }, + { + "__identifier": "Bookshelf", + "__grid": [25,55], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c2c30-c210-11ef-8f07-0db6d3d52a1a", + "width": 32, + "height": 16, + "defUid": 13, + "px": [400,880], + "fieldInstances": [], + "__worldX": 2400, + "__worldY": 144 + }, + { + "__identifier": "Bookshelf", + "__grid": [30,55], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c2c31-c210-11ef-8f07-198b65c7f6e7", + "width": 32, + "height": 16, + "defUid": 13, + "px": [480,880], + "fieldInstances": [], + "__worldX": 2480, + "__worldY": 144 + }, + { + "__identifier": "Bookshelf", + "__grid": [32,55], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3E304D", + "iid": "d72c2c32-c210-11ef-8f07-77d689e533ee", + "width": 32, + "height": 16, + "defUid": 13, + "px": [512,880], + "fieldInstances": [], + "__worldX": 2512, + "__worldY": 144 + }, + { + "__identifier": "Spell", + "__grid": [28,32], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#FF00F5", + "iid": "784cd730-c210-11ef-8f07-e7064d6f460c", + "width": 16, + "height": 16, + "defUid": 7, + "px": [448,512], + "fieldInstances": [{ "__identifier": "spell", "__type": "String", "__value": "Mine", "__tile": null, "defUid": 8, "realEditorValues": [{ + "id": "V_String", + "params": ["Mine"] + }] }], + "__worldX": 2448, + "__worldY": -224 + } + ] + }, + { + "__identifier": "Tiles", + "__type": "IntGrid", + "__cWid": 60, + "__cHei": 60, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "7ff0bd82-c210-11ef-9daa-eb5450d56f87", + "levelId": 19, + "layerDefUid": 1, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2, + 2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2, + 2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2, + 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + ], + "autoLayerTiles": [], + "seed": 5663017, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [] + }, + { + "identifier": "Cave", + "iid": "2eccafd0-c210-11ef-9daa-e9b0966b9ad8", + "uid": 20, + "worldX": 1712, + "worldY": 608, + "worldDepth": 0, + "pxWid": 736, + "pxHei": 704, + "__bgColor": "#696A79", + "bgColor": null, + "useAutoIdentifier": false, + "bgRelPath": null, + "bgPos": null, + "bgPivotX": 0.5, + "bgPivotY": 0.5, + "__smartColor": "#ADADB5", + "__bgPos": null, + "externalRelPath": null, + "fieldInstances": [{ "__identifier": "bgm", "__type": "String", "__value": null, "__tile": null, "defUid": 9, "realEditorValues": [] }], + "layerInstances": [ + { + "__identifier": "Entities", + "__type": "Entities", + "__cWid": 46, + "__cHei": 44, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "2eccafd1-c210-11ef-9daa-ddddb8ebeb1a", + "levelId": 20, + "layerDefUid": 4, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [], + "autoLayerTiles": [], + "seed": 7379236, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [ + { + "__identifier": "BrokenMagicCircle", + "__grid": [23,34], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#3D3FBD", + "iid": "608da7e0-c210-11ef-9daa-5923888024e7", + "width": 16, + "height": 16, + "defUid": 2, + "px": [368,544], + "fieldInstances": [], + "__worldX": 2080, + "__worldY": 1152 + }, + { + "__identifier": "MagicCircle", + "__grid": [22,9], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#2FBEA3", + "iid": "62bf7c00-c210-11ef-9daa-732c1e64c42a", + "width": 16, + "height": 16, + "defUid": 3, + "px": [352,144], + "fieldInstances": [], + "__worldX": 2064, + "__worldY": 752 + }, + { + "__identifier": "Boss", + "__grid": [22,21], + "__pivot": [0,0], + "__tags": [], + "__tile": null, + "__smartColor": "#00FF1F", + "iid": "881e70a0-c210-11ef-9daa-97d92d6a8ef9", + "width": 16, + "height": 16, + "defUid": 21, + "px": [352,336], + "fieldInstances": [{ "__identifier": "actor", "__type": "String", "__value": "HugeSlime", "__tile": null, "defUid": 22, "realEditorValues": [{ + "id": "V_String", + "params": ["HugeSlime"] + }] }], + "__worldX": 2064, + "__worldY": 944 + } + ] + }, + { + "__identifier": "Tiles", + "__type": "IntGrid", + "__cWid": 46, + "__cHei": 44, + "__gridSize": 16, + "__opacity": 1, + "__pxTotalOffsetX": 0, + "__pxTotalOffsetY": 0, + "__tilesetDefUid": null, + "__tilesetRelPath": null, + "iid": "2eccafd2-c210-11ef-9daa-c7ebadcafe29", + "levelId": 20, + "layerDefUid": 1, + "pxOffsetX": 0, + "pxOffsetY": 0, + "visible": true, + "optionalRules": [], + "intGridCsv": [ + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3, + 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3, + 3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3, + 2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2, + 2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2, + 2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2, + 3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3, + 3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3, + 3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3, + 3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2, + 2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2, + 2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2,2,3,3,3,3,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,2,2,2,2,2, + 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 + ], + "autoLayerTiles": [], + "seed": 9093495, + "overrideTilesetUid": null, + "gridTiles": [], + "entityInstances": [] + } + ], + "__neighbours": [{ "levelIid": "d6c12e10-c210-11ef-bd33-0313ded8950e", "dir": "w" }] + } + ], + "worlds": [], + "dummyWorldIid": "d6c10701-c210-11ef-bd33-87a586ae4c6a" +} \ No newline at end of file diff --git a/assets/registry.actor.ron b/assets/registry.actor.ron index 1b31700..835cbf5 100644 --- a/assets/registry.actor.ron +++ b/assets/registry.actor.ron @@ -496,7 +496,7 @@ ActorRegistry( ], strategies: {} ), - "BookShelf": ( + "Bookshelf": ( collider: Cuboid(16.0, 8.0), move_force: 0.0, jump: 0.0, @@ -607,12 +607,6 @@ ActorRegistry( [None, None, None, None, None, None, None, None], ], strategies: {} - ), - "ExplosiveMashroom": ( - life: 10, - actor_group: Enemy, - aseprite: "entity/explosive_mashroom.aseprite", - mine: true ) } ) \ No newline at end of file diff --git a/assets/registry.game.ron b/assets/registry.game.ron index 545fe02..2447ad9 100644 --- a/assets/registry.game.ron +++ b/assets/registry.game.ron @@ -3,7 +3,7 @@ #![enable(implicit_some)] GameRegistry( debug_wands: [ - ["SummonEnemySlime"], + ["Mine"], ["QuickCast", "QuickCast", "TripleCast", "Slash", "Slash", "MagicBolt"], ["DualCast", "Levitation", "MagicBolt"], ["DualCast", "Dash", "Jump", "Lantern"] @@ -51,6 +51,7 @@ GameRegistry( "Dispel", "Clone", "InfinityClone", + "Mine" ], diff --git a/assets/registry.spell.ron b/assets/registry.spell.ron index ce90e25..3517fe9 100644 --- a/assets/registry.spell.ron +++ b/assets/registry.spell.ron @@ -302,6 +302,37 @@ SpellRegistry( cast_delay: 0, cast: NoCast ), + "Mine": ( + rank: 2, + name: Dict ( + ja: "爆発キノコ", + en: "Explosion Mushroom", + zh_cn: "爆炸蘑菇", + zh_tw: "爆炸蘑菇", + es: "Hongo Explosivo", + fr: "Champignon Explosif", + pt: "Cogumelo Explosivo", + de: "Explosionspilz", + ko: "폭발 버섯", + ru: "Взрывной гриб" + ), + description: Dict ( + ja: "近づくと爆発するキノコを足元に発生させる。狭い通路に仕掛けて敵を誘い込もう。", + en: "Creates a mushroom that explodes when approached. Place it in narrow passages to lure enemies.", + zh_cn: "在脚下生成一个蘑菇,当靠近时会爆炸。将其放置在狭窄的通道中以引诱敌人。", + zh_tw: "在腳下生成一個蘑菇,當靠近時會爆炸。將其放置在狹窄的通道中以引誘敵人。", + es: "Crea un hongo que explota cuando se acerca. Colócalo en pasajes estrechos para atraer a los enemigos.", + fr: "Crée un champignon qui explose lorsqu'on s'en approche. Placez-le dans des passages étroits pour attirer les ennemis.", + pt: "Cria um cogumelo que explode quando se aproxima. Coloque-o em passagens estreitas para atrair inimigos.", + de: "Erzeugt einen Pilz, der explodiert, wenn man sich nähert. Platziere ihn in engen Durchgängen, um Feinde anzulocken.", + ko: "접근하면 폭발하는 버섯을 생성합니다. 좁은 통로에 배치하여 적을 유인하세요.", + ru: "Создает гриб, который взрывается при приближении. Разместите его в узких проходах, чтобы заманить врагов." + ), + icon: "mine_icon", + price: 300, + cast_delay: 60, + cast: Mine + ), // waterside で入手 "Jump": ( rank: 2, @@ -778,7 +809,7 @@ SpellRegistry( cast_delay: 120, icon: "spawn_bookshelf_icon", price: 500, - cast: Spawn (Actor ("BookShelf")), + cast: Spawn (Actor ("Bookshelf")), ), "Fireball": ( rank: 3, diff --git a/assets/registry.tile.ron b/assets/registry.tile.ron index 60a10ae..c0dacc9 100644 --- a/assets/registry.tile.ron +++ b/assets/registry.tile.ron @@ -101,149 +101,131 @@ TileRegistry( ), }, - // level.aseprite の tiles レイヤーに以下の色のピクセルを配置すると、その位置にタイルが生成されます - color_to_tile_mapping: { - // 壁 - (0, 0, 0, 255): "PermanentWall", - (82, 75, 36, 255): "Wall", - - // 床 - (203, 219, 252, 255): "StoneTile", - (153, 229, 80, 255): "Grassland", - (222, 233, 255, 255): "Ice", - (255, 220, 204, 255): "Soil", - - // 水面など - (55, 79, 225, 255): "Water", - (205, 121, 54, 255): "Lava", - (43, 43, 43, 255): "Crack", - }, - // level.aseprite の entities レイヤーに以下の色のピクセルを配置すると、その位置にエンティティが生成されます - color_to_entity_mapping: { - // 魔法陣 ///////////////////////////////////////////////////////////////////////////////////////////////////////// - (48, 96, 130, 255): ( - entity: MagicCircle, - ), - (47, 96, 130, 255): ( - entity: MultiPlayArenaMagicCircle, - ), - (56, 111, 161, 255): ( - entity: MagicCircleHome, - ), - (46, 96, 130, 255): ( - entity: MagicCircleDemoEnding, - ), - (255, 0, 0, 255): ( - entity: BrokenMagicCircle, // エントリポイント - ), + // color_to_entity_mapping: { + // // 魔法陣 ///////////////////////////////////////////////////////////////////////////////////////////////////////// + // "MagicCircle": ( + // entity: MagicCircle, + // ), + // "MultiPlayArenaMagicCircle": ( + // entity: MultiPlayArenaMagicCircle, + // ), + // "MagicCircleHome": ( + // entity: MagicCircleHome, + // ), + // "MagicCircleDemoEnding": ( + // entity: MagicCircleDemoEnding, + // ), + // "BrokenMagicCircle": ( + // entity: BrokenMagicCircle, // エントリポイント + // ), - // 施設など ///////////////////////////////////////////////////////////////////////////////////////////////////// - (197, 255, 142, 255): ( - entity: ShopDoor, - ), - (0, 222, 255, 255): ( - entity: ShopSpell, - ), - // (68, 0, 94, 255): ( - // entity: BGM ( bgm: "bgm/最果てのルージュ.ogg" ), - // entry_point: false, - // spawn_offset_x: 0.0, - // ), - (251, 242, 54, 255): ( - entity: RandomChest, - ), - (255, 155, 87, 255): ( - entity: RandomChest, - ), - (102, 57, 49, 255): ( - entity: RandomChest, - ), - (255, 0, 255, 255): ( - entity: Usage, - ), - (184, 0, 255, 255): ( - entity: Boss ( - actor_type: "HugeSlime", - name: Dict ( - ja: "スライムの王 エミルス", - en: "Slime King Emils", - zh_cn: "史莱姆之王 艾米尔斯", - zh_tw: "史萊姆之王 艾米爾斯", - es: "Rey Slime Emils", - fr: "Roi Slime Emils", - pt: "Rei Slime Emils", - de: "Schleimkönig Emils", - ko: "슬라임 왕 에밀스", - ru: "Король слизней Эмильс", - ), - on_despawn: "HugeSlime" - ), - ), + // // 施設など ///////////////////////////////////////////////////////////////////////////////////////////////////// + // "ShopDoor": ( + // entity: ShopDoor, + // ), + // "ShopSpell": ( + // entity: ShopSpell, + // ), + // // (68, 0, 94, 255): ( + // // entity: BGM ( bgm: "bgm/最果てのルージュ.ogg" ), + // // entry_point: false, + // // spawn_offset_x: 0.0, + // // ), + // "RandomChest": ( + // entity: RandomChest, + // ), + // "RandomChest": ( + // entity: RandomChest, + // ), + // "RandomChest": ( + // entity: RandomChest, + // ), + // "Usage": ( + // entity: Usage, + // ), + // "Boss": ( + // entity: Boss ( + // actor_type: "HugeSlime", + // name: Dict ( + // ja: "スライムの王 エミルス", + // en: "Slime King Emils", + // zh_cn: "史莱姆之王 艾米尔斯", + // zh_tw: "史萊姆之王 艾米爾斯", + // es: "Rey Slime Emils", + // fr: "Roi Slime Emils", + // pt: "Rei Slime Emils", + // de: "Schleimkönig Emils", + // ko: "슬라임 왕 에밀스", + // ru: "Король слизней Эмильс", + // ), + // on_despawn: "HugeSlime" + // ), + // ), - // ラビット //////////////////////////////////////////////////////////////////////////////////////////////// - (255, 243, 0, 255): ( - entity: Rabbit ( - aseprite: "rabbit/rabbit_yellow.aseprite", - senario: "ShopRabbit" - ), - ), - (255, 244, 0, 255): ( - entity: Rabbit ( - aseprite: "rabbit/rabbit_red.aseprite", - senario: "TrainingRabbit" - ), - ), - (255, 245, 0, 255): ( - entity: Rabbit ( - aseprite: "rabbit/rabbit_blue.aseprite", - senario: "GuideRabbit" - ), - ), - (255, 246, 0, 255): ( - entity: Rabbit ( - aseprite: "rabbit/rabbit_black.aseprite", - senario: "MultiPlayRabbit" - ), - ), - (255, 247, 0, 255): ( - entity: Rabbit ( - aseprite: "rabbit/rabbit_white.aseprite", - senario: "SingleplayRabbit" - ), - ), - (255, 248, 0, 255): ( - entity: Rabbit ( - aseprite: "rabbit/rabbit_green.aseprite", - senario: "ReadingRabbit" - ), - ), - (255, 249, 0, 255): ( - entity: Rabbit ( - aseprite: "rabbit/rabbit_blue.aseprite", - senario: "SpellListRabbit" - ), - ), + // // ラビット //////////////////////////////////////////////////////////////////////////////////////////////// + // "ShopRabbit": ( + // entity: Rabbit ( + // aseprite: "rabbit/rabbit_yellow.aseprite", + // senario: "ShopRabbit" + // ), + // ), + // "TrainingRabbit": ( + // entity: Rabbit ( + // aseprite: "rabbit/rabbit_red.aseprite", + // senario: "TrainingRabbit" + // ), + // ), + // "GuideRabbit": ( + // entity: Rabbit ( + // aseprite: "rabbit/rabbit_blue.aseprite", + // senario: "GuideRabbit" + // ), + // ), + // "MultiPlayRabbit": ( + // entity: Rabbit ( + // aseprite: "rabbit/rabbit_black.aseprite", + // senario: "MultiPlayRabbit" + // ), + // ), + // "SingleplayRabbit": ( + // entity: Rabbit ( + // aseprite: "rabbit/rabbit_white.aseprite", + // senario: "SingleplayRabbit" + // ), + // ), + // "ReadingRabbit": ( + // entity: Rabbit ( + // aseprite: "rabbit/rabbit_green.aseprite", + // senario: "ReadingRabbit" + // ), + // ), + // "SpellListRabbit": ( + // entity: Rabbit ( + // aseprite: "rabbit/rabbit_blue.aseprite", + // senario: "SpellListRabbit" + // ), + // ), - // 通常のアクター ///////////////////////////////////////////////////////////////////////////////////// - (223, 113, 38, 255): ( - entity: Actor("Lantern"), - ), - (118, 66, 138, 255): ( - entity: Actor("BookShelf"), - spawn_offset_x: 8.0 - ), - (182, 0, 255, 255): ( - entity: Actor("Sandbag"), - ), - }, + // // 通常のアクター ///////////////////////////////////////////////////////////////////////////////////// + // "Lantern": ( + // entity: Actor("Lantern"), + // ), + // "BookShelf": ( + // entity: Actor("BookShelf"), + // spawn_offset_x: 8.0 + // ), + // "Sandbag": ( + // entity: Actor("Sandbag"), + // ), + // }, levels: { // チュートリアルを兼ねて最初にマジックボルトを入手 // 呪文をひとつも発見していないときはこのレベルに来る - "warehouse": ( + "Warehouse": ( name: Dict ( ja: "倉庫", en: "Warehouse", @@ -264,14 +246,14 @@ TileRegistry( items: { (158, 224): "MagicBolt" }, - next: ["home"], + next: ["Home"], ), // レベル内にエンティティを生成するには、以下の三種類があります // 1. level.aseprite の entities レイヤーで指定する。色のマッピングも指定する必要があるが、地形と連動させて編集しやすい // 2. registry.tile.ron の items で指定する。これは記述が簡便ですが、呪文専用です // 3. registry.tile.ron の spawn で指定する。こちらは呪文以外のエンティティも生成できます - "home": ( + "Home": ( name: Dict ( ja: "ウサギ族のキャンプ", en: "Rabbit's Camp", @@ -303,18 +285,16 @@ TileRegistry( // itemsで指定する以外のエンティティの生成はspawnで指定します spawn: { // (55, 52): Actor("Slime"), - // (50, 52): Actor ("ExplosiveMashroom") }, - next: ["library"], + next: ["Library"], ), // レベル1 //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // 望遠鏡を入手 - // レベルとのシナジーがない…… - // スナイパー系のモンスターを出す? - "library": ( - next: ["valley"], + // 爆発キノコを入手 + // 狭い通路なので、遠距離からの攻撃は拡散で壁に当たってしまう + // 爆発キノコなら敵を誘い込むことでダメージを与えられる + "Library": ( name: Dict ( ja: "図書館跡", en: "Library Ruins", @@ -334,7 +314,8 @@ TileRegistry( brightness: 0.4, items: { (175, 17): "Telescope" - } + }, + next: ["Cave"] ), // 光の玉の魔法を入手 @@ -495,8 +476,8 @@ TileRegistry( bgm: "bgm/忘れられた神殿.ogg", brightness: 0.4 ), - "boss": ( - next: ["home"], + "Cave": ( + next: ["Home"], name: Dict ( ja: "大空洞", en: "Great Cavern", @@ -581,7 +562,7 @@ TileRegistry( ), "arena": ( - next: ["home"], + next: ["Home"], name: Dict ( ja: "対決の洞窟", en: "Cave of Confrontation", diff --git a/build.rs b/build.rs index 0be312f..9b97e87 100644 --- a/build.rs +++ b/build.rs @@ -13,8 +13,9 @@ fn main() { let datetime = now.format("%Y-%m-%d").to_string(); println!("cargo:rustc-env=BUILD_DATETIME={}", datetime); + let profile = std::env::var("PROFILE").unwrap(); let target = std::env::var("TARGET").unwrap(); - if target.contains("windows") { + if profile == "release" && target.contains("windows") { embed_resource::compile("build/windows/icon.rc", embed_resource::NONE); embed_resource::compile("build/windows/manifest.rc", embed_resource::NONE); } diff --git a/src/actor.rs b/src/actor.rs index 5ae5890..7643cc7 100644 --- a/src/actor.rs +++ b/src/actor.rs @@ -23,7 +23,6 @@ use crate::component::entity_depth::ChildEntityDepth; use crate::component::metamorphosis::cast_metamorphosis; use crate::component::metamorphosis::metamorphosis_effect; use crate::component::metamorphosis::Metamorphosed; -use crate::component::mine::spawn_mine_child; use crate::constant::BLOOD_LAYER_Z; use crate::constant::MAX_WANDS; use crate::constant::TILE_SIZE; @@ -98,7 +97,6 @@ use std::collections::HashSet; use std::f32::consts::PI; use uuid::Uuid; use vleue_navigator::prelude::PrimitiveObstacle; -use vleue_navigator::Path; use witch::WitchWandSprite; /// アクターの種類を表します @@ -1447,12 +1445,6 @@ pub fn spawn_actor( )); } - if props.mine { - builder.with_children(|mut builder| { - spawn_mine_child(&mut builder); - }); - } - // if let Some(owner) = master { // builder.insert(Servant { master: owner }); // } @@ -1470,7 +1462,7 @@ pub fn spawn_actor( "Chest" => { builder.insert((Chest::random(), Burnable { life: 30 })); } - "BookShelf" => { + "Bookshelf" => { builder.insert(Burnable { life: 30 }); } "Bomb" => { diff --git a/src/aseprite_raw_loader.rs b/src/aseprite_raw_loader.rs index 5b0e332..2c164e2 100644 --- a/src/aseprite_raw_loader.rs +++ b/src/aseprite_raw_loader.rs @@ -1,3 +1,5 @@ +// 使われていません + use aseprite_loader::loader::AsepriteFile; use bevy::{ asset::{io::Reader, AssetLoader, RenderAssetUsages}, @@ -21,10 +23,12 @@ impl Plugin for RawAsepriteLoaderPlugin { //to ship or bundle aseprite binaries into your release. #[derive(Asset, TypePath, Debug)] pub struct RawAseprite { + #[allow(dead_code)] pub aseprite: Arc>, } impl RawAseprite { + #[allow(dead_code)] pub fn get_layer_by_name(&self, name: &str, frame_index: usize) -> Option { let Some(first_frame) = self.aseprite.frames.get(frame_index) else { return None; diff --git a/src/asset.rs b/src/asset.rs index f8931bd..8328821 100644 --- a/src/asset.rs +++ b/src/asset.rs @@ -1,4 +1,4 @@ -use crate::aseprite_raw_loader::RawAseprite; +use crate::ldtk::loader::LDTK; use crate::registry::ActorRegistry; use crate::registry::GameRegistry; use crate::registry::SenarioRegistry; @@ -47,11 +47,8 @@ pub struct GameAssets { #[asset(path = "image/next_page.aseprite")] pub next_page: Handle, - #[asset(path = "image/level.aseprite")] - pub level: Handle, - - #[asset(path = "image/level.aseprite")] - pub raw_level: Handle, + #[asset(path = "level.ldtk")] + pub ldtk_level: Handle, #[asset(path = "image/title.aseprite")] pub title: Handle, diff --git a/src/cast.rs b/src/cast.rs index 1a7666f..bdbf976 100644 --- a/src/cast.rs +++ b/src/cast.rs @@ -12,6 +12,7 @@ use crate::component::metamorphosis::cast_metamorphosis; use crate::component::metamorphosis::metamorphosis_effect; use crate::component::metamorphosis::random_actor_type; use crate::component::metamorphosis::Metamorphosed; +use crate::component::mine::spawn_mine; use crate::constant::MAX_SPELLS_IN_WAND; use crate::constant::TILE_SIZE; use crate::controller::player::Player; @@ -33,6 +34,7 @@ use crate::registry::Registry; use crate::registry::TileType; use crate::se::SEEvent; use crate::se::HEAL; +use crate::se::SEN; use crate::se::SHURIKEN; use crate::se::STATUS2; use bevy::prelude::*; @@ -131,6 +133,7 @@ pub enum SpellCast { Dispel, Clone, InfinityClone, + Mine, } /// 現在のインデックスをもとに呪文を唱えます @@ -500,6 +503,17 @@ pub fn cast_spell( std::u32::MAX, ); } + SpellCast::Mine => { + let max_range = 32.0; + let position = actor_position + + if max_range < actor.pointer.length() { + actor.pointer.normalize_or_zero() * max_range + } else { + actor.pointer + }; + spawn_mine(&mut commands, &asset_server, actor.actor_group, position); + se.send(SEEvent::pos(SEN, position)); + } } } else { // 空欄の場合は残り詠唱回数は減りません diff --git a/src/component/entity_depth.rs b/src/component/entity_depth.rs index 8faca63..d1c9254 100644 --- a/src/component/entity_depth.rs +++ b/src/component/entity_depth.rs @@ -4,7 +4,7 @@ use crate::states::GameState; use bevy::prelude::*; /// y座標の値に応じて自動的にz座標を設定し、スプライトの重なりを調整するコンポーネントです -#[derive(Component)] +#[derive(Component, Default)] pub struct EntityDepth { offset: f32, } diff --git a/src/component/metamorphosis.rs b/src/component/metamorphosis.rs index 499e0e3..e427ffb 100644 --- a/src/component/metamorphosis.rs +++ b/src/component/metamorphosis.rs @@ -37,7 +37,7 @@ pub fn random_actor_type(mut rng: &mut ThreadRng, except: &ActorType) -> ActorTy ActorType::new("Sandbag"), ActorType::new("Lantern"), ActorType::new("Chest"), - ActorType::new("BookShelf"), + ActorType::new("Bookshelf"), ] .iter() .filter(|a| **a != *except) diff --git a/src/component/mine.rs b/src/component/mine.rs index 884d7c2..1e8744e 100644 --- a/src/component/mine.rs +++ b/src/component/mine.rs @@ -6,15 +6,31 @@ use crate::{ set::FixedUpdateGameActiveSet, }; use bevy::prelude::*; +use bevy_aseprite_ultra::prelude::AseSpriteAnimation; use bevy_rapier2d::prelude::{ActiveEvents, Collider, CollisionEvent, Sensor}; +use super::entity_depth::EntityDepth; + /// 触れると爆発する性質です #[derive(Component, Clone)] -pub struct Mine; +pub struct Mine { + actor_group: ActorGroup, +} -pub fn spawn_mine_child(builder: &mut ChildBuilder) { - builder.spawn(( - Mine, +pub fn spawn_mine( + commands: &mut Commands, + asset_server: &Res, + actor_group: ActorGroup, + position: Vec2, +) { + commands.spawn(( + Mine { actor_group }, + AseSpriteAnimation { + aseprite: asset_server.load("entity/explosive_mashroom.aseprite"), + ..default() + }, + EntityDepth::default(), + Transform::from_translation(position.extend(0.0)), Sensor, Collider::ball(16.0), ActiveEvents::COLLISION_EVENTS, @@ -25,22 +41,20 @@ pub fn spawn_mine_child(builder: &mut ChildBuilder) { fn sensor( mut commands: Commands, mut collision_events: EventReader, - mine_query: Query<(&Parent, &Mine)>, + mine_query: Query<(&Mine, &GlobalTransform)>, actor_query: Query<(Entity, &Actor, &Transform)>, mut spawn: EventWriter, ) { for collision_event in collision_events.read() { match identify(collision_event, &mine_query, &actor_query) { IdentifiedCollisionEvent::Started(mine_entity, actor_entity) => { - let (parent, _mine) = mine_query.get(mine_entity).unwrap(); - let (mine_entity, mine_actor, mine_transform) = - actor_query.get(parent.get()).unwrap(); + let (mine, mine_transform) = mine_query.get(mine_entity).unwrap(); let (_, target_actor, _) = actor_query.get(actor_entity).unwrap(); if target_actor.actor_group != ActorGroup::Entity - && mine_actor.actor_group != target_actor.actor_group + && mine.actor_group != target_actor.actor_group { commands.entity(mine_entity).despawn_recursive(); - let position = mine_transform.translation.truncate(); + let position = mine_transform.translation().truncate(); spawn.send(SpawnExplosion { position, radius: 32.0, diff --git a/src/constant.rs b/src/constant.rs index 70848e4..2199744 100644 --- a/src/constant.rs +++ b/src/constant.rs @@ -25,7 +25,7 @@ pub const TILE_SIZE: f32 = 16.0; pub const TILE_HALF: f32 = TILE_SIZE / 2.0; -pub const HOME_LEVEL: &'static str = "home"; +pub const HOME_LEVEL: &'static str = "Home"; pub const ARENA: &'static str = "arena"; diff --git a/src/controller/player.rs b/src/controller/player.rs index dbf6357..611c894 100644 --- a/src/controller/player.rs +++ b/src/controller/player.rs @@ -24,7 +24,6 @@ use crate::se::PICK_UP; use crate::se::SEN; use crate::se::SWITCH; use crate::set::FixedUpdateGameActiveSet; -use crate::set::FixedUpdateInGameSet; use crate::set::FixedUpdatePlayerActiveSet; use crate::spell::Spell; use crate::states::GameMenuState; diff --git a/src/debug_command.rs b/src/debug_command.rs index 5a3b1d4..3b6cc7b 100644 --- a/src/debug_command.rs +++ b/src/debug_command.rs @@ -1,7 +1,7 @@ use crate::actor::Actor; -use crate::asset::GameAssets; use crate::controller::player::Player; use crate::hud::overlay::OverlayEvent; +use crate::ldtk::loader::LDTK; use crate::page::in_game::GameLevel; use crate::page::in_game::LevelSetup; use crate::player_state::PlayerState; @@ -13,20 +13,20 @@ use bevy::input::keyboard::Key; use bevy::input::keyboard::KeyboardInput; use bevy::input::ButtonState; use bevy::prelude::*; -use bevy_aseprite_ultra::prelude::Aseprite; use rand::seq::SliceRandom; fn process_debug_command( registry: Registry, mut evr_kbd: EventReader, mut local: Local, - assets: Res, - aseprites: Res>, + ldtk_assets: Res>, mut level: ResMut, mut writer: EventWriter, mut player_query: Query<(&Player, &mut Actor)>, mut in_game_time: ResMut>, ) { + let ldtk = ldtk_assets.get(registry.assets.ldtk_level.id()).unwrap(); + for ev in evr_kbd.read() { if ev.state == ButtonState::Released { continue; @@ -39,10 +39,7 @@ fn process_debug_command( } } - let Some(level_map) = aseprites.get(&assets.level) else { - return; - }; - let atmark_level_names = level_map.slices.iter().map(|(s, _)| format!("@{}", s)); + let atmark_level_names = ldtk.get_levels().map(|s| format!("@{}", s.identifier)); for atmark_level_name in atmark_level_names { if local.ends_with(&atmark_level_name) { level.next_level = GameLevel::new(atmark_level_name.strip_prefix("@").unwrap()); diff --git a/src/game.rs b/src/game.rs index 5fd8856..d530567 100644 --- a/src/game.rs +++ b/src/game.rs @@ -5,7 +5,6 @@ use crate::actor::chicken::ChikenControlPlugin; use crate::actor::stone_lantern::StoneLanternPlugin; use crate::actor::witch::WitchPlugin; use crate::actor::ActorPlugin; -use crate::aseprite_raw_loader::RawAsepriteLoaderPlugin; use crate::asset::GameAssets; use crate::audio::GameAudioPlugin; use crate::camera::*; @@ -57,6 +56,7 @@ use crate::hud::*; use crate::input::GameInputPlugin; use crate::interpreter::InterpreterPlugin; use crate::language::LanguagePlugin; +use crate::ldtk::loader::RawLDTKLoaderPlugin; use crate::page::ending::EndingPlugin; use crate::page::in_game::WorldPlugin; use crate::page::main_menu::MainMenuPlugin; @@ -265,6 +265,7 @@ pub fn run_game() { .add_plugins(PointerPlugin) .add_plugins(PopUpPlugin) .add_plugins(RemotePlayerPlugin) + .add_plugins(RawLDTKLoaderPlugin) .add_plugins(SetupPlugin) .add_plugins(ServantPlugin) .add_plugins(ShopPlugin) @@ -290,8 +291,6 @@ pub fn run_game() { .add_plugins(WitchPlugin) .add_plugins(WorldPlugin) // - .add_plugins(RawAsepriteLoaderPlugin) - // // メインメニューやゲームプレイ画面などのシーンを定義するstate // .init_state::() diff --git a/src/hud/pointer.rs b/src/hud/pointer.rs index a9d8c24..7d152b5 100644 --- a/src/hud/pointer.rs +++ b/src/hud/pointer.rs @@ -43,6 +43,8 @@ pub struct PointerPlugin; impl Plugin for PointerPlugin { fn build(&self, app: &mut App) { + // todo + // magiaforge::hud::pointer::setup_pointer could not access system parameter Res app.add_systems(OnExit(GameState::Setup), setup_pointer); app.add_systems( diff --git a/src/hud/tutorial.rs b/src/hud/tutorial.rs index e4bd901..18657e5 100644 --- a/src/hud/tutorial.rs +++ b/src/hud/tutorial.rs @@ -39,7 +39,7 @@ pub fn update( if let Ok((actor, player)) = actor_query.get_single() { for mut text in query.iter_mut() { if let Some(level) = &level.level { - if *level != GameLevel::new("warehouse") { + if *level != GameLevel::new("Warehouse") { text.0 = Dict::empty(); } else if 3 <= player.broken_chests { text.0 = props.tutorial_magic_circle.clone(); diff --git a/src/ldtk.rs b/src/ldtk.rs new file mode 100644 index 0000000..a6dbfd9 --- /dev/null +++ b/src/ldtk.rs @@ -0,0 +1,2 @@ +pub mod generated; +pub mod loader; diff --git a/src/ldtk/generated.rs b/src/ldtk/generated.rs new file mode 100644 index 0000000..6055f44 --- /dev/null +++ b/src/ldtk/generated.rs @@ -0,0 +1,1304 @@ +// Example code that deserializes and serializes the model. +// extern crate serde; +// #[macro_use] +// extern crate serde_derive; +// extern crate serde_json; +// +// use generated_module::Coordinate; +// +// fn main() { +// let json = r#"{"answer": 42}"#; +// let model: Coordinate = serde_json::from_str(&json).unwrap(); +// } + +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +/// This file is a JSON schema of files created by LDtk level editor (https://ldtk.io). +/// +/// This is the root of any Project JSON file. It contains: - the project settings, - an +/// array of levels, - a group of definitions (that can probably be safely ignored for most +/// users). +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Coordinate { + /// This object is not actually used by LDtk. It ONLY exists to force explicit references to + /// all types, to make sure QuickType finds them and integrate all of them. Otherwise, + /// Quicktype will drop types that are not explicitely used. + #[serde(rename = "__FORCED_REFS")] + pub forced_refs: Option, + /// LDtk application build identifier.
This is only used to identify the LDtk version + /// that generated this particular project file, which can be useful for specific bug fixing. + /// Note that the build identifier is just the date of the release, so it's not unique to + /// each user (one single global ID per LDtk public release), and as a result, completely + /// anonymous. + pub app_build_id: f64, + /// Number of backup files to keep, if the `backupOnSave` is TRUE + pub backup_limit: i64, + /// If TRUE, an extra copy of the project will be created in a sub folder, when saving. + pub backup_on_save: bool, + /// Target relative path to store backup files + pub backup_rel_path: Option, + /// Project background color + pub bg_color: String, + /// An array of command lines that can be ran manually by the user + pub custom_commands: Vec, + /// Default height for new entities + pub default_entity_height: i64, + /// Default width for new entities + pub default_entity_width: i64, + /// Default grid size for new layers + pub default_grid_size: i64, + /// Default background color of levels + pub default_level_bg_color: String, + /// **WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + /// It will then be `null`. You can enable the Multi-worlds advanced project option to enable + /// the change immediately.

Default new level height + pub default_level_height: Option, + /// **WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + /// It will then be `null`. You can enable the Multi-worlds advanced project option to enable + /// the change immediately.

Default new level width + pub default_level_width: Option, + /// Default X pivot (0 to 1) for new entities + pub default_pivot_x: f64, + /// Default Y pivot (0 to 1) for new entities + pub default_pivot_y: f64, + /// A structure containing all the definitions of this project + pub defs: Definitions, + /// If the project isn't in MultiWorlds mode, this is the IID of the internal "dummy" World. + pub dummy_world_iid: String, + /// If TRUE, the exported PNGs will include the level background (color or image). + pub export_level_bg: bool, + /// **WARNING**: this deprecated value is no longer exported since version 0.9.3 Replaced + /// by: `imageExportMode` + pub export_png: Option, + /// If TRUE, a Tiled compatible file will also be generated along with the LDtk JSON file + /// (default is FALSE) + pub export_tiled: bool, + /// If TRUE, one file will be saved for the project (incl. all its definitions) and one file + /// in a sub-folder for each level. + pub external_levels: bool, + /// An array containing various advanced flags (ie. options or other states). Possible + /// values: `DiscardPreCsvIntGrid`, `ExportOldTableOfContentData`, + /// `ExportPreCsvIntGridFormat`, `IgnoreBackupSuggest`, `PrependIndexToLevelFileNames`, + /// `MultiWorlds`, `UseMultilinesType` + pub flags: Vec, + /// Naming convention for Identifiers (first-letter uppercase, full uppercase etc.) Possible + /// values: `Capitalize`, `Uppercase`, `Lowercase`, `Free` + pub identifier_style: IdentifierStyle, + /// Unique project identifier + pub iid: String, + /// "Image export" option when saving project. Possible values: `None`, `OneImagePerLayer`, + /// `OneImagePerLevel`, `LayersAndLevels` + pub image_export_mode: ImageExportMode, + /// File format version + pub json_version: String, + /// The default naming convention for level identifiers. + pub level_name_pattern: String, + /// All levels. The order of this array is only relevant in `LinearHorizontal` and + /// `linearVertical` world layouts (see `worldLayout` value).
Otherwise, you should + /// refer to the `worldX`,`worldY` coordinates of each Level. + pub levels: Vec, + /// If TRUE, the Json is partially minified (no indentation, nor line breaks, default is + /// FALSE) + pub minify_json: bool, + /// Next Unique integer ID available + pub next_uid: i64, + /// File naming pattern for exported PNGs + pub png_file_pattern: Option, + /// If TRUE, a very simplified will be generated on saving, for quicker & easier engine + /// integration. + pub simplified_export: bool, + /// All instances of entities that have their `exportToToc` flag enabled are listed in this + /// array. + pub toc: Vec, + /// This optional description is used by LDtk Samples to show up some informations and + /// instructions. + pub tutorial_desc: Option, + /// **WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + /// It will then be `null`. You can enable the Multi-worlds advanced project option to enable + /// the change immediately.

Height of the world grid in pixels. + pub world_grid_height: Option, + /// **WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + /// It will then be `null`. You can enable the Multi-worlds advanced project option to enable + /// the change immediately.

Width of the world grid in pixels. + pub world_grid_width: Option, + /// **WARNING**: this field will move to the `worlds` array after the "multi-worlds" update. + /// It will then be `null`. You can enable the Multi-worlds advanced project option to enable + /// the change immediately.

An enum that describes how levels are organized in + /// this project (ie. linearly or in a 2D space). Possible values: <`null`>, `Free`, + /// `GridVania`, `LinearHorizontal`, `LinearVertical` + pub world_layout: Option, + /// This array will be empty, unless you enable the Multi-Worlds in the project advanced + /// settings.

- in current version, a LDtk project file can only contain a single + /// world with multiple levels in it. In this case, levels and world layout related settings + /// are stored in the root of the JSON.
- with "Multi-worlds" enabled, there will be a + /// `worlds` array in root, each world containing levels and layout settings. Basically, it's + /// pretty much only about moving the `levels` array to the `worlds` array, along with world + /// layout related values (eg. `worldGridWidth` etc).

If you want to start + /// supporting this future update easily, please refer to this documentation: + /// https://github.com/deepnight/ldtk/issues/231 + pub worlds: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct LdtkCustomCommand { + pub command: String, + /// Possible values: `Manual`, `AfterLoad`, `BeforeSave`, `AfterSave` + pub when: When, +} + +/// Possible values: `Manual`, `AfterLoad`, `BeforeSave`, `AfterSave` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum When { + #[serde(rename = "AfterLoad")] + AfterLoad, + #[serde(rename = "AfterSave")] + AfterSave, + #[serde(rename = "BeforeSave")] + BeforeSave, + Manual, +} + +/// If you're writing your own LDtk importer, you should probably just ignore *most* stuff in +/// the `defs` section, as it contains data that are mostly important to the editor. To keep +/// you away from the `defs` section and avoid some unnecessary JSON parsing, important data +/// from definitions is often duplicated in fields prefixed with a double underscore (eg. +/// `__identifier` or `__type`). The 2 only definition types you might need here are +/// **Tilesets** and **Enums**. +/// +/// A structure containing all the definitions of this project +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Definitions { + /// All entities definitions, including their custom fields + pub entities: Vec, + /// All internal enums + pub enums: Vec, + /// Note: external enums are exactly the same as `enums`, except they have a `relPath` to + /// point to an external source file. + pub external_enums: Vec, + /// All layer definitions + pub layers: Vec, + /// All custom fields available to all levels. + pub level_fields: Vec, + /// All tilesets + pub tilesets: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EntityDefinition { + /// If enabled, this entity is allowed to stay outside of the current level bounds + pub allow_out_of_bounds: bool, + /// Base entity color + pub color: String, + /// User defined documentation for this element to provide help/tips to level designers. + pub doc: Option, + /// If enabled, all instances of this entity will be listed in the project "Table of content" + /// object. + pub export_to_toc: bool, + /// Array of field definitions + pub field_defs: Vec, + pub fill_opacity: f64, + /// Pixel height + pub height: i64, + pub hollow: bool, + /// User defined unique identifier + pub identifier: String, + /// Only applies to entities resizable on both X/Y. If TRUE, the entity instance width/height + /// will keep the same aspect ratio as the definition. + pub keep_aspect_ratio: bool, + /// Possible values: `DiscardOldOnes`, `PreventAdding`, `MoveLastOne` + pub limit_behavior: LimitBehavior, + /// If TRUE, the maxCount is a "per world" limit, if FALSE, it's a "per level". Possible + /// values: `PerLayer`, `PerLevel`, `PerWorld` + pub limit_scope: LimitScope, + pub line_opacity: f64, + /// Max instances count + pub max_count: i64, + /// Max pixel height (only applies if the entity is resizable on Y) + pub max_height: Option, + /// Max pixel width (only applies if the entity is resizable on X) + pub max_width: Option, + /// Min pixel height (only applies if the entity is resizable on Y) + pub min_height: Option, + /// Min pixel width (only applies if the entity is resizable on X) + pub min_width: Option, + /// An array of 4 dimensions for the up/right/down/left borders (in this order) when using + /// 9-slice mode for `tileRenderMode`.
If the tileRenderMode is not NineSlice, then + /// this array is empty.
See: https://en.wikipedia.org/wiki/9-slice_scaling + pub nine_slice_borders: Vec, + /// Pivot X coordinate (from 0 to 1.0) + pub pivot_x: f64, + /// Pivot Y coordinate (from 0 to 1.0) + pub pivot_y: f64, + /// Possible values: `Rectangle`, `Ellipse`, `Tile`, `Cross` + pub render_mode: RenderMode, + /// If TRUE, the entity instances will be resizable horizontally + pub resizable_x: bool, + /// If TRUE, the entity instances will be resizable vertically + pub resizable_y: bool, + /// Display entity name in editor + pub show_name: bool, + /// An array of strings that classifies this entity + pub tags: Vec, + /// **WARNING**: this deprecated value is no longer exported since version 1.2.0 Replaced + /// by: `tileRect` + pub tile_id: Option, + pub tile_opacity: f64, + /// An object representing a rectangle from an existing Tileset + pub tile_rect: Option, + /// An enum describing how the the Entity tile is rendered inside the Entity bounds. Possible + /// values: `Cover`, `FitInside`, `Repeat`, `Stretch`, `FullSizeCropped`, + /// `FullSizeUncropped`, `NineSlice` + pub tile_render_mode: TileRenderMode, + /// Tileset ID used for optional tile display + pub tileset_id: Option, + /// Unique Int identifier + pub uid: i64, + /// This tile overrides the one defined in `tileRect` in the UI + pub ui_tile_rect: Option, + /// Pixel width + pub width: i64, +} + +/// This section is mostly only intended for the LDtk editor app itself. You can safely +/// ignore it. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct FieldDefinition { + /// Human readable value type. Possible values: `Int, Float, String, Bool, Color, + /// ExternEnum.XXX, LocalEnum.XXX, Point, FilePath`.
If the field is an array, this + /// field will look like `Array<...>` (eg. `Array`, `Array` etc.)
NOTE: if + /// you enable the advanced option **Use Multilines type**, you will have "*Multilines*" + /// instead of "*String*" when relevant. + #[serde(rename = "__type")] + pub field_definition_type: String, + /// Optional list of accepted file extensions for FilePath value type. Includes the dot: + /// `.ext` + pub accept_file_types: Option>, + /// Possible values: `Any`, `OnlySame`, `OnlyTags`, `OnlySpecificEntity` + pub allowed_refs: AllowedRefs, + pub allowed_refs_entity_uid: Option, + pub allowed_ref_tags: Vec, + pub allow_out_of_level_ref: bool, + /// Array max length + pub array_max_length: Option, + /// Array min length + pub array_min_length: Option, + pub auto_chain_ref: bool, + /// TRUE if the value can be null. For arrays, TRUE means it can contain null values + /// (exception: array of Points can't have null values). + pub can_be_null: bool, + /// Default value if selected value is null or invalid. + pub default_override: Option, + /// User defined documentation for this field to provide help/tips to level designers about + /// accepted values. + pub doc: Option, + pub editor_always_show: bool, + pub editor_cut_long_values: bool, + pub editor_display_color: Option, + /// Possible values: `Hidden`, `ValueOnly`, `NameAndValue`, `EntityTile`, `LevelTile`, + /// `Points`, `PointStar`, `PointPath`, `PointPathLoop`, `RadiusPx`, `RadiusGrid`, + /// `ArrayCountWithLabel`, `ArrayCountNoLabel`, `RefLinkBetweenPivots`, + /// `RefLinkBetweenCenters` + pub editor_display_mode: EditorDisplayMode, + /// Possible values: `Above`, `Center`, `Beneath` + pub editor_display_pos: EditorDisplayPos, + pub editor_display_scale: f64, + /// Possible values: `ZigZag`, `StraightArrow`, `CurvedArrow`, `ArrowsLine`, `DashedLine` + pub editor_link_style: EditorLinkStyle, + pub editor_show_in_world: bool, + pub editor_text_prefix: Option, + pub editor_text_suffix: Option, + /// If TRUE, the field value will be exported to the `toc` project JSON field. Only applies + /// to Entity fields. + pub export_to_toc: bool, + /// User defined unique identifier + pub identifier: String, + /// TRUE if the value is an array of multiple values + pub is_array: bool, + /// Max limit for value, if applicable + pub max: Option, + /// Min limit for value, if applicable + pub min: Option, + /// Optional regular expression that needs to be matched to accept values. Expected format: + /// `/some_reg_ex/g`, with optional "i" flag. + pub regex: Option, + /// If enabled, this field will be searchable through LDtk command palette + pub searchable: bool, + pub symmetrical_ref: bool, + /// Possible values: <`null`>, `LangPython`, `LangRuby`, `LangJS`, `LangLua`, `LangC`, + /// `LangHaxe`, `LangMarkdown`, `LangJson`, `LangXml`, `LangLog` + pub text_language_mode: Option, + /// UID of the tileset used for a Tile + pub tileset_uid: Option, + /// Internal enum representing the possible field types. Possible values: F_Int, F_Float, + /// F_String, F_Text, F_Bool, F_Color, F_Enum(...), F_Point, F_Path, F_EntityRef, F_Tile + #[serde(rename = "type")] + pub purple_type: String, + /// Unique Int identifier + pub uid: i64, + /// If TRUE, the color associated with this field will override the Entity or Level default + /// color in the editor UI. For Enum fields, this would be the color associated to their + /// values. + pub use_for_smart_color: bool, +} + +/// Possible values: `Any`, `OnlySame`, `OnlyTags`, `OnlySpecificEntity` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum AllowedRefs { + Any, + #[serde(rename = "OnlySame")] + OnlySame, + #[serde(rename = "OnlySpecificEntity")] + OnlySpecificEntity, + #[serde(rename = "OnlyTags")] + OnlyTags, +} + +/// Possible values: `Hidden`, `ValueOnly`, `NameAndValue`, `EntityTile`, `LevelTile`, +/// `Points`, `PointStar`, `PointPath`, `PointPathLoop`, `RadiusPx`, `RadiusGrid`, +/// `ArrayCountWithLabel`, `ArrayCountNoLabel`, `RefLinkBetweenPivots`, +/// `RefLinkBetweenCenters` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum EditorDisplayMode { + #[serde(rename = "ArrayCountNoLabel")] + ArrayCountNoLabel, + #[serde(rename = "ArrayCountWithLabel")] + ArrayCountWithLabel, + #[serde(rename = "EntityTile")] + EntityTile, + Hidden, + #[serde(rename = "LevelTile")] + LevelTile, + #[serde(rename = "NameAndValue")] + NameAndValue, + #[serde(rename = "PointPath")] + PointPath, + #[serde(rename = "PointPathLoop")] + PointPathLoop, + #[serde(rename = "PointStar")] + PointStar, + Points, + #[serde(rename = "RadiusGrid")] + RadiusGrid, + #[serde(rename = "RadiusPx")] + RadiusPx, + #[serde(rename = "RefLinkBetweenCenters")] + RefLinkBetweenCenters, + #[serde(rename = "RefLinkBetweenPivots")] + RefLinkBetweenPivots, + #[serde(rename = "ValueOnly")] + ValueOnly, +} + +/// Possible values: `Above`, `Center`, `Beneath` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum EditorDisplayPos { + Above, + Beneath, + Center, +} + +/// Possible values: `ZigZag`, `StraightArrow`, `CurvedArrow`, `ArrowsLine`, `DashedLine` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum EditorLinkStyle { + #[serde(rename = "ArrowsLine")] + ArrowsLine, + #[serde(rename = "CurvedArrow")] + CurvedArrow, + #[serde(rename = "DashedLine")] + DashedLine, + #[serde(rename = "StraightArrow")] + StraightArrow, + #[serde(rename = "ZigZag")] + ZigZag, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum TextLanguageMode { + #[serde(rename = "LangC")] + LangC, + #[serde(rename = "LangHaxe")] + LangHaxe, + #[serde(rename = "LangJS")] + LangJs, + #[serde(rename = "LangJson")] + LangJson, + #[serde(rename = "LangLog")] + LangLog, + #[serde(rename = "LangLua")] + LangLua, + #[serde(rename = "LangMarkdown")] + LangMarkdown, + #[serde(rename = "LangPython")] + LangPython, + #[serde(rename = "LangRuby")] + LangRuby, + #[serde(rename = "LangXml")] + LangXml, +} + +/// Possible values: `DiscardOldOnes`, `PreventAdding`, `MoveLastOne` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum LimitBehavior { + #[serde(rename = "DiscardOldOnes")] + DiscardOldOnes, + #[serde(rename = "MoveLastOne")] + MoveLastOne, + #[serde(rename = "PreventAdding")] + PreventAdding, +} + +/// If TRUE, the maxCount is a "per world" limit, if FALSE, it's a "per level". Possible +/// values: `PerLayer`, `PerLevel`, `PerWorld` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum LimitScope { + #[serde(rename = "PerLayer")] + PerLayer, + #[serde(rename = "PerLevel")] + PerLevel, + #[serde(rename = "PerWorld")] + PerWorld, +} + +/// Possible values: `Rectangle`, `Ellipse`, `Tile`, `Cross` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum RenderMode { + Cross, + Ellipse, + Rectangle, + Tile, +} + +/// This object represents a custom sub rectangle in a Tileset image. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TilesetRectangle { + /// Height in pixels + pub h: i64, + /// UID of the tileset + pub tileset_uid: i64, + /// Width in pixels + pub w: i64, + /// X pixels coordinate of the top-left corner in the Tileset image + pub x: i64, + /// Y pixels coordinate of the top-left corner in the Tileset image + pub y: i64, +} + +/// An enum describing how the the Entity tile is rendered inside the Entity bounds. Possible +/// values: `Cover`, `FitInside`, `Repeat`, `Stretch`, `FullSizeCropped`, +/// `FullSizeUncropped`, `NineSlice` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum TileRenderMode { + Cover, + #[serde(rename = "FitInside")] + FitInside, + #[serde(rename = "FullSizeCropped")] + FullSizeCropped, + #[serde(rename = "FullSizeUncropped")] + FullSizeUncropped, + #[serde(rename = "NineSlice")] + NineSlice, + Repeat, + Stretch, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EnumDefinition { + pub external_file_checksum: Option, + /// Relative path to the external file providing this Enum + pub external_rel_path: Option, + /// Tileset UID if provided + pub icon_tileset_uid: Option, + /// User defined unique identifier + pub identifier: String, + /// An array of user-defined tags to organize the Enums + pub tags: Vec, + /// Unique Int identifier + pub uid: i64, + /// All possible enum values, with their optional Tile infos. + pub values: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EnumValueDefinition { + /// **WARNING**: this deprecated value is no longer exported since version 1.4.0 Replaced + /// by: `tileRect` + #[serde(rename = "__tileSrcRect")] + pub tile_src_rect: Option>, + /// Optional color + pub color: i64, + /// Enum value + pub id: String, + /// **WARNING**: this deprecated value is no longer exported since version 1.4.0 Replaced + /// by: `tileRect` + pub tile_id: Option, + /// Optional tileset rectangle to represents this value + pub tile_rect: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LayerDefinition { + /// Type of the layer (*IntGrid, Entities, Tiles or AutoLayer*) + #[serde(rename = "__type")] + pub layer_definition_type: String, + /// Contains all the auto-layer rule definitions. + pub auto_rule_groups: Vec, + pub auto_source_layer_def_uid: Option, + /// **WARNING**: this deprecated value is no longer exported since version 1.2.0 Replaced + /// by: `tilesetDefUid` + pub auto_tileset_def_uid: Option, + pub auto_tiles_killed_by_other_layer_uid: Option, + pub biome_field_uid: Option, + /// Allow editor selections when the layer is not currently active. + pub can_select_when_inactive: bool, + /// Opacity of the layer (0 to 1.0) + pub display_opacity: f64, + /// User defined documentation for this element to provide help/tips to level designers. + pub doc: Option, + /// An array of tags to forbid some Entities in this layer + pub excluded_tags: Vec, + /// Width and height of the grid in pixels + pub grid_size: i64, + /// Height of the optional "guide" grid in pixels + pub guide_grid_hei: i64, + /// Width of the optional "guide" grid in pixels + pub guide_grid_wid: i64, + pub hide_fields_when_inactive: bool, + /// Hide the layer from the list on the side of the editor view. + pub hide_in_list: bool, + /// User defined unique identifier + pub identifier: String, + /// Alpha of this layer when it is not the active one. + pub inactive_opacity: f64, + /// An array that defines extra optional info for each IntGrid value.
WARNING: the + /// array order is not related to actual IntGrid values! As user can re-order IntGrid values + /// freely, you may value "2" before value "1" in this array. + pub int_grid_values: Vec, + /// Group informations for IntGrid values + pub int_grid_values_groups: Vec, + /// Parallax horizontal factor (from -1 to 1, defaults to 0) which affects the scrolling + /// speed of this layer, creating a fake 3D (parallax) effect. + pub parallax_factor_x: f64, + /// Parallax vertical factor (from -1 to 1, defaults to 0) which affects the scrolling speed + /// of this layer, creating a fake 3D (parallax) effect. + pub parallax_factor_y: f64, + /// If true (default), a layer with a parallax factor will also be scaled up/down accordingly. + pub parallax_scaling: bool, + /// X offset of the layer, in pixels (IMPORTANT: this should be added to the `LayerInstance` + /// optional offset) + pub px_offset_x: i64, + /// Y offset of the layer, in pixels (IMPORTANT: this should be added to the `LayerInstance` + /// optional offset) + pub px_offset_y: i64, + /// If TRUE, the content of this layer will be used when rendering levels in a simplified way + /// for the world view + pub render_in_world_view: bool, + /// An array of tags to filter Entities that can be added to this layer + pub required_tags: Vec, + /// If the tiles are smaller or larger than the layer grid, the pivot value will be used to + /// position the tile relatively its grid cell. + pub tile_pivot_x: f64, + /// If the tiles are smaller or larger than the layer grid, the pivot value will be used to + /// position the tile relatively its grid cell. + pub tile_pivot_y: f64, + /// Reference to the default Tileset UID being used by this layer definition.
+ /// **WARNING**: some layer *instances* might use a different tileset. So most of the time, + /// you should probably use the `__tilesetDefUid` value found in layer instances.
Note: + /// since version 1.0.0, the old `autoTilesetDefUid` was removed and merged into this value. + pub tileset_def_uid: Option, + /// Type of the layer as Haxe Enum Possible values: `IntGrid`, `Entities`, `Tiles`, + /// `AutoLayer` + #[serde(rename = "type")] + pub purple_type: Type, + /// User defined color for the UI + pub ui_color: Option, + /// Unique Int identifier + pub uid: i64, + /// Display tags + pub ui_filter_tags: Vec, + /// Asynchronous rendering option for large/complex layers + pub use_async_render: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AutoLayerRuleGroup { + pub active: bool, + pub biome_requirement_mode: i64, + /// *This field was removed in 1.0.0 and should no longer be used.* + pub collapsed: Option, + pub color: Option, + pub icon: Option, + pub is_optional: bool, + pub name: String, + pub required_biome_values: Vec, + pub rules: Vec, + pub uid: i64, + pub uses_wizard: bool, +} + +/// This complex section isn't meant to be used by game devs at all, as these rules are +/// completely resolved internally by the editor before any saving. You should just ignore +/// this part. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AutoLayerRuleDefinition { + /// If FALSE, the rule effect isn't applied, and no tiles are generated. + pub active: bool, + pub alpha: f64, + /// When TRUE, the rule will prevent other rules to be applied in the same cell if it matches + /// (TRUE by default). + pub break_on_match: bool, + /// Chances for this rule to be applied (0 to 1) + pub chance: f64, + /// Checker mode Possible values: `None`, `Horizontal`, `Vertical` + pub checker: Checker, + /// If TRUE, allow rule to be matched by flipping its pattern horizontally + pub flip_x: bool, + /// If TRUE, allow rule to be matched by flipping its pattern vertically + pub flip_y: bool, + /// If TRUE, then the rule should be re-evaluated by the editor at one point + pub invalidated: bool, + /// Default IntGrid value when checking cells outside of level bounds + pub out_of_bounds_value: Option, + /// Rule pattern (size x size) + pub pattern: Vec, + /// If TRUE, enable Perlin filtering to only apply rule on specific random area + pub perlin_active: bool, + pub perlin_octaves: f64, + pub perlin_scale: f64, + pub perlin_seed: f64, + /// X pivot of a tile stamp (0-1) + pub pivot_x: f64, + /// Y pivot of a tile stamp (0-1) + pub pivot_y: f64, + /// Pattern width & height. Should only be 1,3,5 or 7. + pub size: i64, + /// **WARNING**: this deprecated value is no longer exported since version 1.5.0 Replaced + /// by: `tileRectsIds` + pub tile_ids: Option>, + /// Defines how tileIds array is used Possible values: `Single`, `Stamp` + pub tile_mode: TileMode, + /// Max random offset for X tile pos + pub tile_random_x_max: i64, + /// Min random offset for X tile pos + pub tile_random_x_min: i64, + /// Max random offset for Y tile pos + pub tile_random_y_max: i64, + /// Min random offset for Y tile pos + pub tile_random_y_min: i64, + /// Array containing all the possible tile IDs rectangles (picked randomly). + pub tile_rects_ids: Vec>, + /// Tile X offset + pub tile_x_offset: i64, + /// Tile Y offset + pub tile_y_offset: i64, + /// Unique Int identifier + pub uid: i64, + /// X cell coord modulo + pub x_modulo: i64, + /// X cell start offset + pub x_offset: i64, + /// Y cell coord modulo + pub y_modulo: i64, + /// Y cell start offset + pub y_offset: i64, +} + +/// Checker mode Possible values: `None`, `Horizontal`, `Vertical` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum Checker { + Horizontal, + None, + Vertical, +} + +/// Defines how tileIds array is used Possible values: `Single`, `Stamp` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum TileMode { + Single, + Stamp, +} + +/// IntGrid value definition +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct IntGridValueDefinition { + pub color: String, + /// Parent group identifier (0 if none) + pub group_uid: i64, + /// User defined unique identifier + pub identifier: Option, + pub tile: Option, + /// The IntGrid value itself + pub value: i64, +} + +/// IntGrid value group definition +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct IntGridValueGroupDefinition { + /// User defined color + pub color: Option, + /// User defined string identifier + pub identifier: Option, + /// Group unique ID + pub uid: i64, +} + +/// Type of the layer as Haxe Enum Possible values: `IntGrid`, `Entities`, `Tiles`, +/// `AutoLayer` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum Type { + #[serde(rename = "AutoLayer")] + AutoLayer, + Entities, + #[serde(rename = "IntGrid")] + IntGrid, + Tiles, +} + +/// The `Tileset` definition is the most important part among project definitions. It +/// contains some extra informations about each integrated tileset. If you only had to parse +/// one definition section, that would be the one. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TilesetDefinition { + /// Grid-based height + #[serde(rename = "__cHei")] + pub c_hei: i64, + /// Grid-based width + #[serde(rename = "__cWid")] + pub c_wid: i64, + /// The following data is used internally for various optimizations. It's always synced with + /// source image changes. + pub cached_pixel_data: Option>>, + /// An array of custom tile metadata + pub custom_data: Vec, + /// If this value is set, then it means that this atlas uses an internal LDtk atlas image + /// instead of a loaded one. Possible values: <`null`>, `LdtkIcons` + pub embed_atlas: Option, + /// Tileset tags using Enum values specified by `tagsSourceEnumId`. This array contains 1 + /// element per Enum value, which contains an array of all Tile IDs that are tagged with it. + pub enum_tags: Vec, + /// User defined unique identifier + pub identifier: String, + /// Distance in pixels from image borders + pub padding: i64, + /// Image height in pixels + pub px_hei: i64, + /// Image width in pixels + pub px_wid: i64, + /// Path to the source file, relative to the current project JSON file
It can be null + /// if no image was provided, or when using an embed atlas. + pub rel_path: Option, + /// Array of group of tiles selections, only meant to be used in the editor + pub saved_selections: Vec>>, + /// Space in pixels between all tiles + pub spacing: i64, + /// An array of user-defined tags to organize the Tilesets + pub tags: Vec, + /// Optional Enum definition UID used for this tileset meta-data + pub tags_source_enum_uid: Option, + pub tile_grid_size: i64, + /// Unique Intidentifier + pub uid: i64, +} + +/// In a tileset definition, user defined meta-data of a tile. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TileCustomMetadata { + pub data: String, + pub tile_id: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum EmbedAtlas { + #[serde(rename = "LdtkIcons")] + LdtkIcons, +} + +/// In a tileset definition, enum based tag infos +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EnumTagValue { + pub enum_value_id: String, + pub tile_ids: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum Flag { + #[serde(rename = "DiscardPreCsvIntGrid")] + DiscardPreCsvIntGrid, + #[serde(rename = "ExportOldTableOfContentData")] + ExportOldTableOfContentData, + #[serde(rename = "ExportPreCsvIntGridFormat")] + ExportPreCsvIntGridFormat, + #[serde(rename = "IgnoreBackupSuggest")] + IgnoreBackupSuggest, + #[serde(rename = "MultiWorlds")] + MultiWorlds, + #[serde(rename = "PrependIndexToLevelFileNames")] + PrependIndexToLevelFileNames, + #[serde(rename = "UseMultilinesType")] + UseMultilinesType, +} + +/// This object is not actually used by LDtk. It ONLY exists to force explicit references to +/// all types, to make sure QuickType finds them and integrate all of them. Otherwise, +/// Quicktype will drop types that are not explicitely used. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct ForcedRefs { + pub auto_layer_rule_group: Option, + pub auto_rule_def: Option, + pub custom_command: Option, + pub definitions: Option, + pub entity_def: Option, + pub entity_instance: Option, + pub entity_reference_infos: Option, + pub enum_def: Option, + pub enum_def_values: Option, + pub enum_tag_value: Option, + pub field_def: Option, + pub field_instance: Option, + pub grid_point: Option, + pub int_grid_value_def: Option, + pub int_grid_value_group_def: Option, + pub int_grid_value_instance: Option, + pub layer_def: Option, + pub layer_instance: Option, + pub level: Option, + pub level_bg_pos_infos: Option, + pub neighbour_level: Option, + pub table_of_content_entry: Option, + pub tile: Option, + pub tile_custom_metadata: Option, + pub tileset_def: Option, + pub tileset_rect: Option, + pub toc_instance_data: Option, + pub world: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct EntityInstance { + /// Grid-based coordinates (`[x,y]` format) + #[serde(rename = "__grid")] + pub grid: Vec, + /// Entity definition identifier + #[serde(rename = "__identifier")] + pub identifier: String, + /// Pivot coordinates (`[x,y]` format, values are from 0 to 1) of the Entity + #[serde(rename = "__pivot")] + pub pivot: Vec, + /// The entity "smart" color, guessed from either Entity definition, or one its field + /// instances. + #[serde(rename = "__smartColor")] + pub smart_color: String, + /// Array of tags defined in this Entity definition + #[serde(rename = "__tags")] + pub tags: Vec, + /// Optional TilesetRect used to display this entity (it could either be the default Entity + /// tile, or some tile provided by a field value, like an Enum). + #[serde(rename = "__tile")] + pub tile: Option, + /// X world coordinate in pixels. Only available in GridVania or Free world layouts. + #[serde(rename = "__worldX")] + pub world_x: Option, + /// Y world coordinate in pixels Only available in GridVania or Free world layouts. + #[serde(rename = "__worldY")] + pub world_y: Option, + /// Reference of the **Entity definition** UID + pub def_uid: i64, + /// An array of all custom fields and their values. + pub field_instances: Vec, + /// Entity height in pixels. For non-resizable entities, it will be the same as Entity + /// definition. + pub height: i64, + /// Unique instance identifier + pub iid: String, + /// Pixel coordinates (`[x,y]` format) in current level coordinate space. Don't forget + /// optional layer offsets, if they exist! + pub px: Vec, + /// Entity width in pixels. For non-resizable entities, it will be the same as Entity + /// definition. + pub width: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct FieldInstance { + /// Field definition identifier + #[serde(rename = "__identifier")] + pub identifier: String, + /// Optional TilesetRect used to display this field (this can be the field own Tile, or some + /// other Tile guessed from the value, like an Enum). + #[serde(rename = "__tile")] + pub tile: Option, + /// Type of the field, such as `Int`, `Float`, `String`, `Enum(my_enum_name)`, `Bool`, + /// etc.
NOTE: if you enable the advanced option **Use Multilines type**, you will have + /// "*Multilines*" instead of "*String*" when relevant. + #[serde(rename = "__type")] + pub field_instance_type: String, + /// Actual value of the field instance. The value type varies, depending on `__type`:
+ /// - For **classic types** (ie. Integer, Float, Boolean, String, Text and FilePath), you + /// just get the actual value with the expected type.
- For **Color**, the value is an + /// hexadecimal string using "#rrggbb" format.
- For **Enum**, the value is a String + /// representing the selected enum value.
- For **Point**, the value is a + /// [GridPoint](#ldtk-GridPoint) object.
- For **Tile**, the value is a + /// [TilesetRect](#ldtk-TilesetRect) object.
- For **EntityRef**, the value is an + /// [EntityReferenceInfos](#ldtk-EntityReferenceInfos) object.

If the field is an + /// array, then this `__value` will also be a JSON array. + #[serde(rename = "__value")] + pub value: Option, + /// Reference of the **Field definition** UID + pub def_uid: i64, + /// Editor internal raw values + pub real_editor_values: Vec>, +} + +/// This object describes the "location" of an Entity instance in the project worlds. +/// +/// IID information of this instance +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReferenceToAnEntityInstance { + /// IID of the refered EntityInstance + pub entity_iid: String, + /// IID of the LayerInstance containing the refered EntityInstance + pub layer_iid: String, + /// IID of the Level containing the refered EntityInstance + pub level_iid: String, + /// IID of the World containing the refered EntityInstance + pub world_iid: String, +} + +/// This object is just a grid-based coordinate used in Field values. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct GridPoint { + /// X grid-based coordinate + pub cx: i64, + /// Y grid-based coordinate + pub cy: i64, +} + +/// IntGrid value instance +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct IntGridValueInstance { + /// Coordinate ID in the layer grid + pub coord_id: i64, + /// IntGrid value + pub v: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LayerInstance { + /// Grid-based height + #[serde(rename = "__cHei")] + pub c_hei: i64, + /// Grid-based width + #[serde(rename = "__cWid")] + pub c_wid: i64, + /// Grid size + #[serde(rename = "__gridSize")] + pub grid_size: i64, + /// Layer definition identifier + #[serde(rename = "__identifier")] + pub identifier: String, + /// Layer opacity as Float [0-1] + #[serde(rename = "__opacity")] + pub opacity: f64, + /// Total layer X pixel offset, including both instance and definition offsets. + #[serde(rename = "__pxTotalOffsetX")] + pub px_total_offset_x: i64, + /// Total layer Y pixel offset, including both instance and definition offsets. + #[serde(rename = "__pxTotalOffsetY")] + pub px_total_offset_y: i64, + /// The definition UID of corresponding Tileset, if any. + #[serde(rename = "__tilesetDefUid")] + pub tileset_def_uid: Option, + /// The relative path to corresponding Tileset, if any. + #[serde(rename = "__tilesetRelPath")] + pub tileset_rel_path: Option, + /// Layer type (possible values: IntGrid, Entities, Tiles or AutoLayer) + #[serde(rename = "__type")] + pub layer_instance_type: String, + /// An array containing all tiles generated by Auto-layer rules. The array is already sorted + /// in display order (ie. 1st tile is beneath 2nd, which is beneath 3rd etc.).

+ /// Note: if multiple tiles are stacked in the same cell as the result of different rules, + /// all tiles behind opaque ones will be discarded. + pub auto_layer_tiles: Vec, + pub entity_instances: Vec, + pub grid_tiles: Vec, + /// Unique layer instance identifier + pub iid: String, + /// **WARNING**: this deprecated value is no longer exported since version 1.0.0 Replaced + /// by: `intGridCsv` + pub int_grid: Option>, + /// A list of all values in the IntGrid layer, stored in CSV format (Comma Separated + /// Values).
Order is from left to right, and top to bottom (ie. first row from left to + /// right, followed by second row, etc).
`0` means "empty cell" and IntGrid values + /// start at 1.
The array size is `__cWid` x `__cHei` cells. + pub int_grid_csv: Vec, + /// Reference the Layer definition UID + pub layer_def_uid: i64, + /// Reference to the UID of the level containing this layer instance + pub level_id: i64, + /// An Array containing the UIDs of optional rules that were enabled in this specific layer + /// instance. + pub optional_rules: Vec, + /// This layer can use another tileset by overriding the tileset UID here. + pub override_tileset_uid: Option, + /// X offset in pixels to render this layer, usually 0 (IMPORTANT: this should be added to + /// the `LayerDef` optional offset, so you should probably prefer using `__pxTotalOffsetX` + /// which contains the total offset value) + pub px_offset_x: i64, + /// Y offset in pixels to render this layer, usually 0 (IMPORTANT: this should be added to + /// the `LayerDef` optional offset, so you should probably prefer using `__pxTotalOffsetX` + /// which contains the total offset value) + pub px_offset_y: i64, + /// Random seed used for Auto-Layers rendering + pub seed: i64, + /// Layer instance visibility + pub visible: bool, +} + +/// This structure represents a single tile from a given Tileset. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TileInstance { + /// Alpha/opacity of the tile (0-1, defaults to 1) + pub a: f64, + /// Internal data used by the editor.
For auto-layer tiles: `[ruleId, coordId]`.
+ /// For tile-layer tiles: `[coordId]`. + pub d: Vec, + /// "Flip bits", a 2-bits integer to represent the mirror transformations of the tile.
+ /// - Bit 0 = X flip
- Bit 1 = Y flip
Examples: f=0 (no flip), f=1 (X flip + /// only), f=2 (Y flip only), f=3 (both flips) + pub f: i64, + /// Pixel coordinates of the tile in the **layer** (`[x,y]` format). Don't forget optional + /// layer offsets, if they exist! + pub px: Vec, + /// Pixel coordinates of the tile in the **tileset** (`[x,y]` format) + pub src: Vec, + /// The *Tile ID* in the corresponding tileset. + pub t: i64, +} + +/// This section contains all the level data. It can be found in 2 distinct forms, depending +/// on Project current settings: - If "*Separate level files*" is **disabled** (default): +/// full level data is *embedded* inside the main Project JSON file, - If "*Separate level +/// files*" is **enabled**: level data is stored in *separate* standalone `.ldtkl` files (one +/// per level). In this case, the main Project JSON file will still contain most level data, +/// except heavy sections, like the `layerInstances` array (which will be null). The +/// `externalRelPath` string points to the `ldtkl` file. A `ldtkl` file is just a JSON file +/// containing exactly what is described below. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct Level { + /// Background color of the level (same as `bgColor`, except the default value is + /// automatically used here if its value is `null`) + #[serde(rename = "__bgColor")] + pub bg_color: String, + /// Position informations of the background image, if there is one. + #[serde(rename = "__bgPos")] + pub bg_pos: Option, + /// An array listing all other levels touching this one on the world map. Since 1.4.0, this + /// includes levels that overlap in the same world layer, or in nearby world layers.
+ /// Only relevant for world layouts where level spatial positioning is manual (ie. GridVania, + /// Free). For Horizontal and Vertical layouts, this array is always empty. + #[serde(rename = "__neighbours")] + pub neighbours: Vec, + /// The "guessed" color for this level in the editor, decided using either the background + /// color or an existing custom field. + #[serde(rename = "__smartColor")] + pub smart_color: String, + /// Background color of the level. If `null`, the project `defaultLevelBgColor` should be + /// used. + #[serde(rename = "bgColor")] + pub level_bg_color: Option, + /// Background image X pivot (0-1) + pub bg_pivot_x: f64, + /// Background image Y pivot (0-1) + pub bg_pivot_y: f64, + /// An enum defining the way the background image (if any) is positioned on the level. See + /// `__bgPos` for resulting position info. Possible values: <`null`>, `Unscaled`, + /// `Contain`, `Cover`, `CoverDirty`, `Repeat` + #[serde(rename = "bgPos")] + pub level_bg_pos: Option, + /// The *optional* relative path to the level background image. + pub bg_rel_path: Option, + /// This value is not null if the project option "*Save levels separately*" is enabled. In + /// this case, this **relative** path points to the level Json file. + pub external_rel_path: Option, + /// An array containing this level custom field values. + pub field_instances: Vec, + /// User defined unique identifier + pub identifier: String, + /// Unique instance identifier + pub iid: String, + /// An array containing all Layer instances. **IMPORTANT**: if the project option "*Save + /// levels separately*" is enabled, this field will be `null`.
This array is **sorted + /// in display order**: the 1st layer is the top-most and the last is behind. + pub layer_instances: Option>, + /// Height of the level in pixels + pub px_hei: i64, + /// Width of the level in pixels + pub px_wid: i64, + /// Unique Int identifier + pub uid: i64, + /// If TRUE, the level identifier will always automatically use the naming pattern as defined + /// in `Project.levelNamePattern`. Becomes FALSE if the identifier is manually modified by + /// user. + pub use_auto_identifier: bool, + /// Index that represents the "depth" of the level in the world. Default is 0, greater means + /// "above", lower means "below".
This value is mostly used for display only and is + /// intended to make stacking of levels easier to manage. + pub world_depth: i64, + /// World X coordinate in pixels.
Only relevant for world layouts where level spatial + /// positioning is manual (ie. GridVania, Free). For Horizontal and Vertical layouts, the + /// value is always -1 here. + pub world_x: i64, + /// World Y coordinate in pixels.
Only relevant for world layouts where level spatial + /// positioning is manual (ie. GridVania, Free). For Horizontal and Vertical layouts, the + /// value is always -1 here. + pub world_y: i64, +} + +/// Level background image position info +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LevelBackgroundPosition { + /// An array of 4 float values describing the cropped sub-rectangle of the displayed + /// background image. This cropping happens when original is larger than the level bounds. + /// Array format: `[ cropX, cropY, cropWidth, cropHeight ]` + pub crop_rect: Vec, + /// An array containing the `[scaleX,scaleY]` values of the **cropped** background image, + /// depending on `bgPos` option. + pub scale: Vec, + /// An array containing the `[x,y]` pixel coordinates of the top-left corner of the + /// **cropped** background image, depending on `bgPos` option. + pub top_left_px: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum BgPos { + Contain, + Cover, + #[serde(rename = "CoverDirty")] + CoverDirty, + Repeat, + Unscaled, +} + +/// Nearby level info +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct NeighbourLevel { + /// A lowercase string tipping on the level location (`n`orth, `s`outh, `w`est, + /// `e`ast).
Since 1.4.0, this value can also be `<` (neighbour depth is lower), `>` + /// (neighbour depth is greater) or `o` (levels overlap and share the same world + /// depth).
Since 1.5.3, this value can also be `nw`,`ne`,`sw` or `se` for levels only + /// touching corners. + pub dir: String, + /// Neighbour Instance Identifier + pub level_iid: String, + /// **WARNING**: this deprecated value is no longer exported since version 1.2.0 Replaced + /// by: `levelIid` + pub level_uid: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LdtkTableOfContentEntry { + pub identifier: String, + /// **WARNING**: this deprecated value will be *removed* completely on version 1.7.0+ + /// Replaced by: `instancesData` + pub instances: Option>, + pub instances_data: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LdtkTocInstanceData { + /// An object containing the values of all entity fields with the `exportToToc` option + /// enabled. This object typing depends on actual field value types. + pub fields: Option, + pub hei_px: i64, + /// IID information of this instance + pub iids: ReferenceToAnEntityInstance, + pub wid_px: i64, + pub world_x: i64, + pub world_y: i64, +} + +/// **IMPORTANT**: this type is available as a preview. You can rely on it to update your +/// importers, for when it will be officially available. A World contains multiple levels, +/// and it has its own layout settings. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct World { + /// Default new level height + pub default_level_height: i64, + /// Default new level width + pub default_level_width: i64, + /// User defined unique identifier + pub identifier: String, + /// Unique instance identifer + pub iid: String, + /// All levels from this world. The order of this array is only relevant in + /// `LinearHorizontal` and `linearVertical` world layouts (see `worldLayout` value). + /// Otherwise, you should refer to the `worldX`,`worldY` coordinates of each Level. + pub levels: Vec, + /// Height of the world grid in pixels. + pub world_grid_height: i64, + /// Width of the world grid in pixels. + pub world_grid_width: i64, + /// An enum that describes how levels are organized in this project (ie. linearly or in a 2D + /// space). Possible values: `Free`, `GridVania`, `LinearHorizontal`, `LinearVertical`, `null` + pub world_layout: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum WorldLayout { + Free, + #[serde(rename = "GridVania")] + GridVania, + #[serde(rename = "LinearHorizontal")] + LinearHorizontal, + #[serde(rename = "LinearVertical")] + LinearVertical, +} + +/// Naming convention for Identifiers (first-letter uppercase, full uppercase etc.) Possible +/// values: `Capitalize`, `Uppercase`, `Lowercase`, `Free` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum IdentifierStyle { + Capitalize, + Free, + Lowercase, + Uppercase, +} + +/// "Image export" option when saving project. Possible values: `None`, `OneImagePerLayer`, +/// `OneImagePerLevel`, `LayersAndLevels` +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum ImageExportMode { + #[serde(rename = "LayersAndLevels")] + LayersAndLevels, + None, + #[serde(rename = "OneImagePerLayer")] + OneImagePerLayer, + #[serde(rename = "OneImagePerLevel")] + OneImagePerLevel, +} diff --git a/src/ldtk/loader.rs b/src/ldtk/loader.rs new file mode 100644 index 0000000..19edf52 --- /dev/null +++ b/src/ldtk/loader.rs @@ -0,0 +1,114 @@ +use super::generated::{EntityInstance, LayerDefinition, LayerInstance, Level}; +use crate::page::in_game::GameLevel; +use bevy::{ + asset::{io::Reader, AssetLoader, AsyncReadExt}, + prelude::*, +}; +use std::{collections::HashMap, sync::Arc}; +use thiserror::Error; + +pub struct RawLDTKLoaderPlugin; + +impl Plugin for RawLDTKLoaderPlugin { + fn build(&self, app: &mut App) { + app.init_asset::(); + app.register_asset_loader(RawLDTKLoader); + } +} + +#[derive(Asset, TypePath, Debug)] +pub struct LDTK { + pub coordinate: Arc, +} + +impl LDTK { + pub fn get_level(&self, level: &GameLevel) -> Option<&Level> { + self.coordinate + .levels + .iter() + .find(|l| l.identifier == level.0) + } + + pub fn get_levels(&self) -> core::slice::Iter { + self.coordinate.levels.iter() + } + + pub fn get_layer_definition(&self, layer_name: &str) -> Option<&LayerDefinition> { + self.coordinate + .defs + .layers + .iter() + .find(|l| l.identifier == layer_name) + .clone() + } + + pub fn get_tile_mapping(&self, layer_name: &str) -> HashMap { + let definition = self.get_layer_definition(layer_name).unwrap(); + definition + .int_grid_values + .iter() + .map(|v| (v.value, v.identifier.as_ref().unwrap().as_str())) + .collect() + } +} + +impl Level { + pub fn get_layer(&self, layer_name: &str) -> Option<&LayerInstance> { + self.layer_instances + .as_ref() + .unwrap() + .iter() + .find(|l| l.identifier == layer_name) + } +} + +impl EntityInstance { + pub fn get_value_as_str(&self, identifier: &str) -> String { + self.field_instances + .iter() + .find(|f| f.identifier == identifier) + .as_ref() + .expect(format!("{:?} not found", identifier).as_str()) + .value + .as_ref() + .unwrap() + .as_str() + .unwrap() + .to_string() + } +} + +#[derive(Default)] +pub struct RawLDTKLoader; + +#[derive(Debug, Error)] +pub enum ReadError { + #[error("Could not load asset")] + #[allow(dead_code)] + ReadError, +} + +impl AssetLoader for RawLDTKLoader { + type Asset = LDTK; + type Settings = (); + type Error = ReadError; + async fn load( + &self, + reader: &mut dyn Reader, + _settings: &Self::Settings, + _load_context: &mut bevy::asset::LoadContext<'_>, + ) -> Result { + let _ = _load_context; + + let mut buf = String::new(); + let output = reader.read_to_string(&mut buf).await; + if output.is_err() { + return Err(ReadError::ReadError); + } + let coordinate = Arc::new(serde_json::from_str(&buf).unwrap()); + Ok(LDTK { coordinate }) + } + fn extensions(&self) -> &[&str] { + &["ldtk"] + } +} diff --git a/src/level/entities.rs b/src/level/entities.rs index 20e74d8..03f1fce 100644 --- a/src/level/entities.rs +++ b/src/level/entities.rs @@ -31,6 +31,7 @@ use crate::entity::servant_seed::spawn_servant_seed; use crate::entity::shop::spawn_shop_door; use crate::entity::slash::spawn_slash; use crate::entity::web::spawn_web; +use crate::inventory::InventoryItem; use crate::language::Dict; use crate::page::in_game::new_shop_item_queue; use crate::page::in_game::LevelSetup; @@ -54,6 +55,11 @@ pub enum Spawn { /// 種別を指定してアクターを生成します Actor(ActorType), + ActorWithGroup { + actor_type: ActorType, + actor_group: ActorGroup, + }, + /// Actorを復帰します /// 変化からの復帰や分裂のときなどに使います Respawn { @@ -106,6 +112,7 @@ pub enum Spawn { ShopSpell, ShopDoor, RandomChest, + Spell(Spell), SpellInChest { spell: Spell, }, @@ -301,6 +308,14 @@ pub fn spawn_entity( false, ); } + Spawn::Spell(spell) => { + spawn_dropped_item( + &mut commands, + ®istry, + *position, + &InventoryItem::new(spell.clone()), + ); + } Spawn::SpellInChest { spell } => { let actor = chest_actor(0, Some(spell.clone())); let entity = spawn_actor(&mut commands, &asset_server, ®istry, *position, actor); @@ -312,6 +327,14 @@ pub fn spawn_entity( let actor = get_default_actor(®istry, actor_type); spawn_actor(&mut commands, &asset_server, ®istry, *position, actor); } + Spawn::ActorWithGroup { + actor_type, + actor_group, + } => { + let mut actor = get_default_actor(®istry, actor_type); + actor.actor_group = *actor_group; + spawn_actor(&mut commands, &asset_server, ®istry, *position, actor); + } Spawn::Boss { actor_type, name, diff --git a/src/level/map.rs b/src/level/map.rs index 654d96a..da231cf 100644 --- a/src/level/map.rs +++ b/src/level/map.rs @@ -1,13 +1,17 @@ -use crate::aseprite_raw_loader::RawAseprite; +use crate::actor::ActorType; use crate::constant::TILE_HALF; use crate::constant::TILE_SIZE; +use crate::language::Dict; +use crate::ldtk::loader::LDTK; use crate::level::entities::Spawn; use crate::level::tile::Tile; use crate::page::in_game::GameLevel; use crate::registry::Registry; use crate::registry::SpawnEntityProps; use crate::registry::TileType; +use crate::spell::Spell; use bevy::prelude::*; +use bevy::scene::ron; use std::collections::HashMap; use std::sync::LazyLock; @@ -24,35 +28,144 @@ pub struct LevelChunk { } impl LevelChunk { + /// LDTKで定義されたレベルを読み取ります + /// + /// LDTKでは Entities という名前のレイヤーに、以下の3種類の命名規則でエンティティを配置できます + /// 1. この関数内でハードコーディングされたもの。Ldtkのカスタムフィールドを読み取る必要がある場合はこれ。"Spell" など + /// 2. Spawn としてハードコーディングされたもの。registry.actor.ronで拡張できる。"RandomChest"や"MagicCircle"など + /// 3. registry.actor.ronで定義されたActorType。"StoneLantern"など + /// このいずれにも当てはまらなかったエンティティは警告とともに無視されます。 /// レベルの番号を指定して、画像データからレベル情報を取得します /// このとき、該当するレベルの複数のスライスからランダムにひとつが選択されます、 - pub fn new( - registry: &Registry, - raw_aseprites: &Res>, - level: &GameLevel, - ) -> Self { - let raw_aseprite = raw_aseprites.get(registry.assets.raw_level.id()).unwrap(); - - let slice = raw_aseprite - .aseprite - .slices() - .iter() - .find(|s| s.name == level.0) - .unwrap(); - let slice_keys = slice.slice_keys[0]; - let tile_map = raw_aseprite.get_layer_by_name("tiles", 0).unwrap(); - let entities_map = raw_aseprite.get_layer_by_name("entities", 0).unwrap(); - let chunk = image_to_tilemap( - ®istry, - &tile_map, - &entities_map, - slice_keys.x as i32, - slice_keys.x + slice_keys.width as i32, - slice_keys.y as i32, - slice_keys.y + slice_keys.height as i32, - level.clone(), - ); - return chunk; + pub fn new(registry: &Registry, ldtk: &LDTK, level: &GameLevel) -> Self { + // タイル読み込み + + let ldtk_level = ldtk.get_level(&level).unwrap(); + let int_grid_layer = ldtk_level.get_layer("Tiles").unwrap(); + let map: HashMap = ldtk.get_tile_mapping("Tiles"); + let mut tiles: Vec = Vec::new(); + for tile_value in int_grid_layer.int_grid_csv.iter() { + tiles.push(if *tile_value == 0 { + Tile::default() + } else { + match map.get(&tile_value) { + Some(tile) => Tile::new(tile), + None => { + warn!("Unknown tile: {:?}", tile_value); + Tile::default() + } + } + }); + } + + // エンティティ読み込み + + let entity_layer = ldtk_level.get_layer("Entities").unwrap(); + + let mut entities: HashMap<(i32, i32), SpawnEntityProps> = HashMap::new(); + + for entity in entity_layer.entity_instances.iter() { + let key = (entity.grid[0] as i32, entity.grid[1] as i32); + + match entity.identifier.as_str() { + "Spell" => { + let spell_name = entity.get_value_as_str("spell"); + entities.insert( + key, + SpawnEntityProps { + entity: Spawn::Spell(Spell::new(spell_name.clone())), + spawn_offset_x: 0.0, + }, + ); + } + "Rabbit" => { + entities.insert( + key, + SpawnEntityProps { + entity: Spawn::Rabbit { + aseprite: entity.get_value_as_str("aseprite"), + senario: entity.get_value_as_str("senario"), + }, + spawn_offset_x: 0.0, + }, + ); + } + "Boss" => { + let actor_name = entity.get_value_as_str("actor"); + entities.insert( + key, + SpawnEntityProps { + entity: Spawn::Boss { + actor_type: ActorType::new(actor_name.as_str()), + // todo 名前やシナリオは外部ファイルで指定できるようにする + name: Dict { + ja: "スライムの王 エミルス", + en: "Slime King Emils", + zh_cn: "史莱姆之王 艾米尔斯", + zh_tw: "史萊姆之王 艾米爾斯", + es: "Rey Slime Emils", + fr: "Roi Slime Emils", + pt: "Rei Slime Emils", + de: "Schleimkönig Emils", + ko: "슬라임 왕 에밀스", + ru: "Король слизней Эмильс", + } + .to_string(), + on_despawn: "HugeSlime".to_string(), + }, + spawn_offset_x: 0.0, + }, + ); + } + _ => match ron::de::from_str::(&entity.identifier) { + Ok(spawn) => { + entities.insert( + key, + SpawnEntityProps { + entity: spawn, + spawn_offset_x: 0.0, + }, + ); + } + Err(_) => { + match registry.actor().actors.get(&entity.identifier) { + Some(_) => { + entities.insert( + key, + SpawnEntityProps { + entity: Spawn::Actor(ActorType::new(&entity.identifier)), + spawn_offset_x: if entity.identifier == "Bookshelf" { + 8.0 + } else { + 0.0 + }, + }, + ); + } + None => { + warn!("Unknown entity: {:?}", entity.identifier); + } + }; + } + }, + } + } + + let min_x = int_grid_layer.px_offset_x as i32; + let max_x = (int_grid_layer.px_offset_x + int_grid_layer.c_wid) as i32; + let min_y = int_grid_layer.px_offset_y as i32; + let max_y = (int_grid_layer.px_offset_y + int_grid_layer.c_hei) as i32; + + return Self { + level: level.clone(), + tiles, + entities, + min_x, + max_x, + min_y, + max_y, + dirty: Some((min_x, min_y, max_x, max_y)), + }; } pub fn get_level_tile(&self, x: i32, y: i32) -> &Tile { @@ -181,73 +294,3 @@ pub fn position_to_index(position: Vec2) -> (i32, i32) { (position.y / -TILE_SIZE).floor() as i32, ) } - -fn image_to_tilemap( - registry: &Registry, - level_image: &Image, - entities_image: &Image, - min_x: i32, - max_x: i32, - min_y: i32, - max_y: i32, - level: GameLevel, -) -> LevelChunk { - let texture_width = level_image.width(); - let map = ®istry.tile().color_to_tile_mapping; - let mut tiles: Vec = Vec::new(); - for y in min_y..max_y { - for x in min_x..max_x { - let i = 4 * (y * texture_width as i32 + x) as usize; - let r = level_image.data[i + 0]; - let g = level_image.data[i + 1]; - let b = level_image.data[i + 2]; - let a = level_image.data[i + 3]; - let tile = match map.get(&(r, g, b, a)) { - Some(tile) => tile, - None => { - warn!("Unknown tile: {:?} {:?} {:?} {:?}", r, g, b, a); - &Tile::default() - } - }; - tiles.push(tile.clone()); - } - } - - let entity_map = ®istry.tile().color_to_entity_mapping; - let mut entities: HashMap<(i32, i32), SpawnEntityProps> = HashMap::new(); - - for y in min_y..max_y { - for x in min_x..max_x { - let i = 4 * (y * texture_width as i32 + x) as usize; - let r = entities_image.data[i + 0]; - let g = entities_image.data[i + 1]; - let b = entities_image.data[i + 2]; - let a = entities_image.data[i + 3]; - match entity_map.get(&(r, g, b, a)) { - Some(tile) => { - entities.insert((x, y), tile.clone()); - } - None => { - if (r == 0 && g == 0 && b == 0) || a == 0 { - } else { - warn!( - "Unknown entity: {:?} {:?} {:?} {:?} at ({},{})", - r, g, b, a, x, y - ); - }; - } - }; - } - } - - return LevelChunk { - level, - tiles, - entities, - min_x, - max_x, - min_y, - max_y, - dirty: Some((min_x, min_y, max_x, max_y)), - }; -} diff --git a/src/main.rs b/src/main.rs index 99b24f8..11fd372 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,6 +25,7 @@ mod input; mod interpreter; mod inventory; mod language; +mod ldtk; mod level; mod message; mod page; diff --git a/src/page/in_game.rs b/src/page/in_game.rs index cb4a34c..65ed8d8 100644 --- a/src/page/in_game.rs +++ b/src/page/in_game.rs @@ -3,7 +3,6 @@ use crate::actor::witch::Witch; use crate::actor::Actor; use crate::actor::ActorGroup; use crate::actor::ActorType; -use crate::aseprite_raw_loader::RawAseprite; use crate::audio::NextBGM; use crate::camera::setup_camera; use crate::config::GameConfig; @@ -14,6 +13,7 @@ use crate::entity::dropped_item::spawn_dropped_item; use crate::hud::overlay::OverlayEvent; use crate::inventory::Inventory; use crate::inventory::InventoryItem; +use crate::ldtk::loader::LDTK; use crate::level::appearance::spawn_world_tile; use crate::level::appearance::spawn_world_tilemap; use crate::level::appearance::TileSprite; @@ -113,13 +113,15 @@ pub fn setup_level( mut commands: Commands, asset_server: Res, registry: Registry, - raw_aseprites: Res>, + ldtk_assets: Res>, mut current: ResMut, config: Res, mut next_bgm: ResMut, mut spawn: EventWriter, mut overlay: EventWriter, ) { + let ldtk = ldtk_assets.get(registry.assets.ldtk_level.id()).unwrap(); + // 各種変数の初期化 let game_registry = registry.game(); @@ -146,7 +148,7 @@ pub fn setup_level( // 次のレベルの選定 ///////////////////////////////////////////////////////////////////// let level = if player_state.discovered_spells.is_empty() { - GameLevel::new("warehouse") + GameLevel::new("Warehouse") } else { current.next_level.clone() }; @@ -168,10 +170,10 @@ pub fn setup_level( // 拠点のみ最初にアニメーションが入るので PlayerInActive に設定します let getting_up_animation = - level == GameLevel::new("warehouse") && cfg!(not(feature = "ingame")); + level == GameLevel::new("Warehouse") && cfg!(not(feature = "ingame")); // 画像データからレベルの情報を選択して読み取ります - let chunk = LevelChunk::new(®istry, &raw_aseprites, &level); + let chunk = LevelChunk::new(®istry, &ldtk, &level); // ナビゲーションメッシュを作成します // Spawn a new navmesh that will be automatically updated. @@ -210,6 +212,8 @@ pub fn setup_level( let entry_points = chunk.entry_points(); let entry_point = entry_points.choose(&mut rng).expect("No entrypoint found"); + info!("entry_points {:?}", entry_points); + let player_x = TILE_SIZE * entry_point.0 as f32 + TILE_HALF; let player_y = -TILE_SIZE * entry_point.1 as f32 - TILE_HALF; @@ -405,8 +409,6 @@ fn update_tile_sprites( if let Some(ref mut chunk) = current.chunk { // 範囲内を更新 if let Some((left, top, right, bottom)) = chunk.dirty { - info!("updating chunk {:?}", chunk.dirty); - let props = registry.get_level(&chunk.level); // 縦2タイルのみ孤立して残っているものがあれば削除 diff --git a/src/registry.rs b/src/registry.rs index 6daf466..cd5af89 100644 --- a/src/registry.rs +++ b/src/registry.rs @@ -38,10 +38,9 @@ pub struct GameRegistry { #[derive(serde::Deserialize, bevy::asset::Asset, bevy::reflect::TypePath)] pub struct TileRegistry { pub tile_types: HashMap, - pub color_to_tile_mapping: HashMap<(u8, u8, u8, u8), Tile>, /// 各レベル共通で使われるエンティティは、色が割り当てられてentityレイヤーをもとに生成します - pub color_to_entity_mapping: HashMap<(u8, u8, u8, u8), SpawnEntityProps>, + // pub color_to_entity_mapping: HashMap, /// 各レベル固有の呪文生成などは、LevelPropsのitemsに記述します pub levels: HashMap, @@ -256,9 +255,6 @@ pub struct ActorPropsByType { #[serde(default)] pub point_light_falloff: f32, - - #[serde(default)] - pub mine: bool, } #[derive(serde::Deserialize, Debug)] @@ -335,6 +331,7 @@ impl<'w> Registry<'w> { self.game.get(&self.assets.game_registry).unwrap() } + #[allow(dead_code)] pub fn tile(&self) -> &TileRegistry { self.tile.get(&self.assets.tile_registry).unwrap() } diff --git a/src/strategy.rs b/src/strategy.rs index bf31988..88844c9 100644 --- a/src/strategy.rs +++ b/src/strategy.rs @@ -1,14 +1,12 @@ use crate::actor::Actor; use crate::actor::ActorFireState; use crate::actor::ActorGroup; -use crate::actor::ActorType; use crate::collision::SENSOR_GROUPS; use crate::registry::ActorPropsByType; use crate::registry::Registry; use crate::states::GameState; use crate::states::TimeState; use bevy::prelude::*; -use bevy::utils::warn; use bevy_rapier2d::plugin::DefaultRapierContext; use bevy_rapier2d::plugin::RapierContext; use bevy_rapier2d::prelude::Collider; @@ -91,6 +89,8 @@ pub struct Commander { pub struct FindResult { pub position: Vec2, pub radius: f32, + + #[allow(dead_code)] pub actor: Actor, } @@ -168,34 +168,18 @@ fn update( actor.commander.count += 1; // 各アクションのタイムアウトを超えている場合は次のアクションへ移行 - match action { - Action::Sleep => {} - Action::Wait { count, .. } => { - if *count < actor.commander.count { - actor.commander.count = 0; - actor.commander.next_action += 1; - } - } - Action::Approach { count, .. } => { - if *count < actor.commander.count { - actor.commander.count = 0; - actor.commander.next_action += 1; - } - } - Action::Fire { count, .. } => { - if *count < actor.commander.count { - actor.commander.count = 0; - actor.commander.next_action += 1; - } - } - Action::GoTo { count, .. } => { - if *count < actor.commander.count { - actor.commander.count = 0; - actor.commander.next_action += 1; - } - } - Action::Loop => {} - Action::End => {} + let limit = match action { + Action::Sleep => u32::MAX, + Action::Wait { count, .. } => *count, + Action::Approach { count, .. } => *count, + Action::Fire { count, .. } => *count, + Action::GoTo { count, .. } => *count, + Action::Loop => u32::MAX, + Action::End => u32::MAX, + }; + if limit < actor.commander.count { + actor.commander.count = 0; + actor.commander.next_action += 1; } } } @@ -358,7 +342,7 @@ fn execute( actor.fire_state_secondary = ActorFireState::Idle; actor.navigation_path.clear(); } - Action::GoTo { destination, count } => { + Action::GoTo { destination, .. } => { actor.fire_state = ActorFireState::Idle; actor.fire_state_secondary = ActorFireState::Idle; actor.navigation_path.clear();