renamed particle* to animation*, added asesprite animation loading

This commit is contained in:
2024-04-02 20:05:23 +02:00
parent 20fa2639c6
commit 001b67f97a
14 changed files with 673 additions and 162 deletions

View File

@@ -11,7 +11,7 @@
"iid": "267e9380-d7b0-11ee-a97e-35bec9c19d52",
"jsonVersion": "1.5.3",
"appBuildId": 473703,
"nextUid": 76,
"nextUid": 78,
"identifierStyle": "Capitalize",
"toc": [],
"worldLayout": "Free",
@@ -215,7 +215,88 @@
"limitBehavior": "MoveLastOne",
"pivotX": 0,
"pivotY": 0,
"fieldDefs": []
"fieldDefs": [
{
"identifier": "AnimateOnDestruct",
"doc": null,
"__type": "Bool",
"uid": 76,
"type": "F_Bool",
"isArray": false,
"canBeNull": false,
"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": {
"id": "V_Bool",
"params": [ true ]
},
"textLanguageMode": null,
"symmetricalRef": false,
"autoChainRef": true,
"allowOutOfLevelRef": true,
"allowedRefs": "OnlySame",
"allowedRefsEntityUid": null,
"allowedRefTags": [],
"tilesetUid": null
},
{
"identifier": "AnimateSpriteSheet",
"doc": null,
"__type": "String",
"uid": 77,
"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": {
"id": "V_String",
"params": ["collectible-detonating"]
},
"textLanguageMode": null,
"symmetricalRef": false,
"autoChainRef": true,
"allowOutOfLevelRef": true,
"allowedRefs": "OnlySame",
"allowedRefsEntityUid": null,
"allowedRefTags": [],
"tilesetUid": null
}
]
},
{
"identifier": "ObstacleWest",
@@ -1429,7 +1510,10 @@
"height": 32,
"defUid": 4,
"px": [352,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 128,
"__worldY": 224
},
@@ -1445,7 +1529,10 @@
"height": 32,
"defUid": 4,
"px": [288,160],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 64,
"__worldY": 160
},
@@ -1461,7 +1548,10 @@
"height": 32,
"defUid": 4,
"px": [384,160],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 160,
"__worldY": 160
}
@@ -1613,7 +1703,10 @@
"height": 32,
"defUid": 4,
"px": [128,288],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 608,
"__worldY": 288
},
@@ -1629,7 +1722,10 @@
"height": 32,
"defUid": 4,
"px": [480,192],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 960,
"__worldY": 192
}
@@ -1786,7 +1882,10 @@
"height": 32,
"defUid": 4,
"px": [96,160],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1280,
"__worldY": 160
}
@@ -1906,7 +2005,10 @@
"height": 32,
"defUid": 4,
"px": [448,128],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2336,
"__worldY": 128
},
@@ -1922,7 +2024,10 @@
"height": 32,
"defUid": 4,
"px": [128,384],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2016,
"__worldY": 384
}
@@ -2095,7 +2200,10 @@
"height": 32,
"defUid": 4,
"px": [288,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 64,
"__worldY": 768
},
@@ -2159,7 +2267,10 @@
"height": 32,
"defUid": 4,
"px": [352,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 128,
"__worldY": 768
},
@@ -2349,7 +2460,10 @@
"height": 32,
"defUid": 4,
"px": [288,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 768,
"__worldY": 768
},
@@ -2571,7 +2685,10 @@
"height": 32,
"defUid": 4,
"px": [96,160],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1280,
"__worldY": 704
},
@@ -2619,7 +2736,10 @@
"height": 32,
"defUid": 4,
"px": [320,352],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1504,
"__worldY": 896
},
@@ -2651,7 +2771,10 @@
"height": 32,
"defUid": 4,
"px": [128,128],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1312,
"__worldY": 672
},
@@ -2831,7 +2954,10 @@
"height": 32,
"defUid": 4,
"px": [224,160],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2112,
"__worldY": 704
},
@@ -2863,7 +2989,10 @@
"height": 32,
"defUid": 4,
"px": [416,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2304,
"__worldY": 768
},
@@ -2911,7 +3040,10 @@
"height": 32,
"defUid": 4,
"px": [288,288],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2176,
"__worldY": 832
},
@@ -3089,7 +3221,10 @@
"height": 32,
"defUid": 4,
"px": [160,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": -64,
"__worldY": 1312
},
@@ -3105,7 +3240,10 @@
"height": 32,
"defUid": 4,
"px": [192,288],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": -32,
"__worldY": 1376
},
@@ -3309,7 +3447,10 @@
"height": 32,
"defUid": 4,
"px": [352,288],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 832,
"__worldY": 1376
},
@@ -3561,7 +3702,10 @@
"height": 32,
"defUid": 4,
"px": [416,288],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1600,
"__worldY": 1376
},
@@ -3609,7 +3753,10 @@
"height": 32,
"defUid": 4,
"px": [416,160],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1600,
"__worldY": 1248
},
@@ -3917,7 +4064,10 @@
"height": 32,
"defUid": 4,
"px": [192,256],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2080,
"__worldY": 1344
},
@@ -4113,7 +4263,10 @@
"height": 32,
"defUid": 4,
"px": [320,192],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 96,
"__worldY": 1824
},
@@ -4129,7 +4282,10 @@
"height": 32,
"defUid": 4,
"px": [288,256],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 64,
"__worldY": 1888
},
@@ -4145,7 +4301,10 @@
"height": 32,
"defUid": 4,
"px": [352,256],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 128,
"__worldY": 1888
},
@@ -4369,7 +4528,10 @@
"height": 32,
"defUid": 4,
"px": [160,320],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 640,
"__worldY": 1952
},
@@ -4385,7 +4547,10 @@
"height": 32,
"defUid": 4,
"px": [192,320],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 672,
"__worldY": 1952
},
@@ -4417,7 +4582,10 @@
"height": 32,
"defUid": 4,
"px": [416,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 896,
"__worldY": 1856
},
@@ -4623,7 +4791,10 @@
"height": 32,
"defUid": 4,
"px": [480,320],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1664,
"__worldY": 1952
},
@@ -4655,7 +4826,10 @@
"height": 32,
"defUid": 4,
"px": [288,192],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1472,
"__worldY": 1824
},
@@ -4687,7 +4861,10 @@
"height": 32,
"defUid": 4,
"px": [352,128],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1536,
"__worldY": 1760
},
@@ -4703,7 +4880,10 @@
"height": 32,
"defUid": 4,
"px": [192,288],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1376,
"__worldY": 1920
},
@@ -5106,7 +5286,10 @@
"height": 32,
"defUid": 4,
"px": [224,192],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2112,
"__worldY": 1824
}
@@ -5269,7 +5452,10 @@
"height": 32,
"defUid": 4,
"px": [256,224],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 32,
"__worldY": 2432
},
@@ -5525,7 +5711,10 @@
"height": 32,
"defUid": 4,
"px": [384,256],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 896,
"__worldY": 2464
},
@@ -5605,7 +5794,10 @@
"height": 32,
"defUid": 4,
"px": [352,192],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 864,
"__worldY": 2400
}
@@ -5767,7 +5959,10 @@
"height": 32,
"defUid": 4,
"px": [320,256],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1536,
"__worldY": 2464
},
@@ -5783,7 +5978,10 @@
"height": 32,
"defUid": 4,
"px": [224,128],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1440,
"__worldY": 2336
},
@@ -5799,7 +5997,10 @@
"height": 32,
"defUid": 4,
"px": [384,320],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 1600,
"__worldY": 2528
}
@@ -5997,7 +6198,10 @@
"height": 32,
"defUid": 4,
"px": [416,352],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2304,
"__worldY": 2560
},
@@ -6013,7 +6217,10 @@
"height": 32,
"defUid": 4,
"px": [160,128],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": 2048,
"__worldY": 2336
},
@@ -6255,7 +6462,10 @@
"height": 32,
"defUid": 4,
"px": [160,160],
"fieldInstances": [],
"fieldInstances": [
{ "__identifier": "AnimateOnDestruct", "__type": "Bool", "__value": true, "__tile": null, "defUid": 76, "realEditorValues": [] },
{ "__identifier": "AnimateSpriteSheet", "__type": "String", "__value": "collectible-detonating", "__tile": null, "defUid": 77, "realEditorValues": [] }
],
"__worldX": -64,
"__worldY": 2912
}

View File

@@ -17,53 +17,57 @@ var Tiles = InitTiles()
// Tile: contains image, identifier (as used in level data) and
// additional properties
type Tile struct {
Id, Ref string
Sprite *ebiten.Image
ToggleSprite *ebiten.Image
Solid bool // wall brick
Player bool // player sphere
IsPrimary bool // primary player sphere
Renderable bool // visible, has sprite
Velocity bool // movable
Collectible bool // collectible, vanishes once collected
Transient bool // turns into brick wall when traversed
Destroyable bool // turns into empty floor when bumped into twice
Particle int // -1=unused, 0-3 = show image of slice
Tiles []*ebiten.Image // has N sprites
TileNames []string // same thing, only the names
Obstacle bool // is an obstacle/enemy
Direction int // obstacle business end shows into this direction
Shader *ebiten.Shader
Alpha *ebiten.Image
Bond bool // denotes an entity which can have a relation to another
Door bool // a door, can be manipulated by a switch
Switch bool // opens|closes a door
Id, Ref string
Sprite *ebiten.Image
ToggleSprite *ebiten.Image
Solid bool // wall brick
Player bool // player sphere
IsPrimary bool // primary player sphere
Renderable bool // visible, has sprite
Velocity bool // movable
Collectible bool // collectible, vanishes once collected
Transient bool // turns into brick wall when traversed
Destroyable bool // turns into empty floor when bumped into twice
Animation int // -1=unused, 0-3 = show image of slice
Tiles []*ebiten.Image // has N sprites
TileNames []string // same thing, only the names
Obstacle bool // is an obstacle/enemy
Direction int // obstacle business end shows into this direction
Shader *ebiten.Shader
Alpha *ebiten.Image
Bond bool // denotes an entity which can have a relation to another
Door bool // a door, can be manipulated by a switch
Switch bool // opens|closes a door
AnimateOnDestruct bool // wether to animate destruction
AnimationSpriteSheet AnimationSet // which sprites to use (refers to an entry in assets.Animations[name])
}
func (tile *Tile) Clone() *Tile {
newtile := &Tile{
Id: tile.Id,
Ref: tile.Ref,
Sprite: tile.Sprite,
ToggleSprite: tile.ToggleSprite,
Solid: tile.Solid,
Player: tile.Player,
IsPrimary: tile.IsPrimary,
Renderable: tile.Renderable,
Velocity: tile.Velocity,
Collectible: tile.Collectible,
Transient: tile.Transient,
Destroyable: tile.Destroyable,
Particle: tile.Particle,
Tiles: tile.Tiles,
TileNames: tile.TileNames,
Obstacle: tile.Obstacle,
Direction: tile.Direction,
Alpha: tile.Alpha,
Shader: tile.Shader,
Bond: tile.Bond,
Door: tile.Door,
Switch: tile.Switch,
Id: tile.Id,
Ref: tile.Ref,
Sprite: tile.Sprite,
ToggleSprite: tile.ToggleSprite,
Solid: tile.Solid,
Player: tile.Player,
IsPrimary: tile.IsPrimary,
Renderable: tile.Renderable,
Velocity: tile.Velocity,
Collectible: tile.Collectible,
Transient: tile.Transient,
Destroyable: tile.Destroyable,
Animation: tile.Animation,
Tiles: tile.Tiles,
TileNames: tile.TileNames,
Obstacle: tile.Obstacle,
Direction: tile.Direction,
Alpha: tile.Alpha,
Shader: tile.Shader,
Bond: tile.Bond,
Door: tile.Door,
Switch: tile.Switch,
AnimateOnDestruct: tile.AnimateOnDestruct,
AnimationSpriteSheet: tile.AnimationSpriteSheet,
}
return newtile
@@ -129,13 +133,13 @@ func NewTileObstacle(direction int) *Tile {
}
}
func NewTileParticle(class []string) *Tile {
func NewTileAnimation(class []string) *Tile {
sprites := GetSprites(class)
return &Tile{
Solid: false,
Renderable: false,
Particle: 0,
Animation: 0,
Tiles: sprites,
}
}
@@ -192,7 +196,7 @@ func InitTiles() TileRegistry {
"ObstacleSouth": NewTileObstacle(config.South),
"ObstacleWest": NewTileObstacle(config.West),
"ObstacleEast": NewTileObstacle(config.East),
"Particle": NewTileParticle([]string{
"Animation": NewTileAnimation([]string{
"collectible-detonating1",
"collectible-detonating2",
"collectible-detonating3",

View File

@@ -1,7 +1,9 @@
package assets
import (
"bytes"
"embed"
"encoding/json"
"image"
_ "image/png"
"log"
@@ -9,19 +11,55 @@ import (
"path"
"strings"
"github.com/alecthomas/repr"
"github.com/hajimehoshi/ebiten/v2"
)
// Maps image name to image data
type AssetRegistry map[string]*ebiten.Image
//go:embed sprites/*.png fonts/*.ttf levels/*.ldtk shaders/*.kg
type AnimationGeo struct {
X int `json:"x"`
Y int `json:"y"`
Width int `json:"w"`
Height int `json:"h"`
}
type AnimationFrame struct {
Position AnimationGeo `json:"frame"`
// FIXME: maybe also add delay etc? might be cool to tweak these things from LDTK
}
type AnimationMeta struct {
Name string `json:"image"`
Geo AnimationGeo `json:"size"`
}
// Needed to thaw sprite set written by asesprite
type AnimationJSON struct {
Meta AnimationMeta `json:"Meta"`
Frames []AnimationFrame `json:"frames"`
}
// Animation data
type AnimationSet struct {
Width, Height int
Sprites []*ebiten.Image
File string
}
type AnimationRegistry map[string]AnimationSet
//go:embed sprites/*.png fonts/*.ttf levels/*.ldtk shaders/*.kg sprites/*.json
var assetfs embed.FS
var Assets = LoadImages("sprites")
var Assets, Animations = LoadImages()
func LoadImages(dir string) AssetRegistry {
func LoadImages() (AssetRegistry, AnimationRegistry) {
dir := "sprites"
images := AssetRegistry{}
rawanimations := []AnimationJSON{}
animations := AnimationRegistry{}
// we use embed.FS to iterate over all files in ./assets/
entries, err := assetfs.ReadDir(dir)
@@ -31,23 +69,69 @@ func LoadImages(dir string) AssetRegistry {
for _, imagefile := range entries {
path := path.Join(dir, imagefile.Name())
fd, err := assetfs.Open(path)
if err != nil {
log.Fatalf("failed to open image file %s: %s", imagefile.Name(), err)
switch {
case strings.HasSuffix(path, ".png"):
fd, err := assetfs.Open(path)
if err != nil {
log.Fatalf("failed to open image file %s: %s", imagefile.Name(), err)
}
defer fd.Close()
name := strings.TrimSuffix(imagefile.Name(), ".png")
img, _, err := image.Decode(fd)
if err != nil {
log.Fatalf("failed to decode image %s: %s", imagefile.Name(), err)
}
images[name] = ebiten.NewImageFromImage(img)
slog.Debug("loaded asset", "path", path)
case strings.HasSuffix(path, ".json"):
fd, err := assetfs.Open(path)
if err != nil {
log.Fatalf("failed to open json file %s: %s", imagefile.Name(), err)
}
defer fd.Close()
buf := new(bytes.Buffer)
buf.ReadFrom(fd)
animationjson := AnimationJSON{}
err = json.Unmarshal(buf.Bytes(), &animationjson)
if err != nil {
log.Fatalf("failed to parse JSON: %s", err)
}
rawanimations = append(rawanimations, animationjson)
}
defer fd.Close()
name := strings.TrimSuffix(imagefile.Name(), ".png")
img, _, err := image.Decode(fd)
if err != nil {
log.Fatalf("failed to decode image %s: %s", imagefile.Name(), err)
}
images[name] = ebiten.NewImageFromImage(img)
slog.Debug("loaded asset", "path", path)
}
return images
// preprocess animation sprites
for _, animation := range rawanimations {
animationset := AnimationSet{}
animationset.File = strings.TrimSuffix(animation.Meta.Name, ".png")
animationset.Width = animation.Meta.Geo.Width
animationset.Height = animation.Meta.Geo.Height
for _, frame := range animation.Frames {
sprite := images[animationset.File].SubImage(
image.Rect(
frame.Position.X,
frame.Position.Y,
frame.Position.Width,
frame.Position.Height,
)).(*ebiten.Image)
animationset.Sprites = append(animationset.Sprites, sprite)
}
animations[animationset.File] = animationset
}
repr.Println(animations)
return images, animations
}

View File

@@ -0,0 +1,164 @@
{ "frames": [
{
"filename": "collectible-detonating 0.ase",
"frame": { "x": 0, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 1.ase",
"frame": { "x": 64, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 2.ase",
"frame": { "x": 128, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 3.ase",
"frame": { "x": 192, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 4.ase",
"frame": { "x": 256, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 5.ase",
"frame": { "x": 320, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 6.ase",
"frame": { "x": 384, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 7.ase",
"frame": { "x": 448, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 8.ase",
"frame": { "x": 512, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 9.ase",
"frame": { "x": 576, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 10.ase",
"frame": { "x": 640, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 11.ase",
"frame": { "x": 704, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 12.ase",
"frame": { "x": 768, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 13.ase",
"frame": { "x": 832, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
},
{
"filename": "collectible-detonating 14.ase",
"frame": { "x": 896, "y": 0, "w": 64, "h": 64 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 },
"sourceSize": { "w": 64, "h": 64 },
"duration": 100
}
],
"meta": {
"app": "http://www.aseprite.org/",
"version": "1.x-dev",
"image": "collectible-detonating.png",
"format": "RGBA8888",
"size": { "w": 960, "h": 64 },
"scale": "1",
"frameTags": [
],
"layers": [
{ "name": "Yellow Sphere", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 8", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 7", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 6", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 5", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 4", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 3", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 2", "opacity": 255, "blendMode": "normal" },
{ "name": "Layer 1", "opacity": 255, "blendMode": "normal" },
{ "name": "Blitz Outer", "opacity": 70, "blendMode": "normal" },
{ "name": "Blitz Middle", "opacity": 84, "blendMode": "normal" },
{ "name": "Blitz Inner", "opacity": 97, "blendMode": "normal" }
],
"slices": [
]
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB