Files
MiniDungeonMultiplayerDev/MiniDungeonMultiplayerDev.json
T
2026-08-02 09:08:43 -04:00

18236 lines
639 KiB
JSON

{
"firstLayout": "",
"gdVersion": {
"build": 274,
"major": 5,
"minor": 6,
"revision": 0
},
"initialGDVersion": "5.6.274",
"properties": {
"adaptGameResolutionAtRuntime": true,
"antialiasingMode": "MSAA",
"antialisingEnabledOnMobile": false,
"folderProject": false,
"orientation": "landscape",
"packageName": "com.example.gamename",
"pixelsRounding": true,
"projectUuid": "9386a7f4-fb47-4bec-8bd2-99c1fb11403b",
"scaleMode": "nearest",
"sizeOnStartupMode": "",
"templateSlug": "",
"version": "1.0.0",
"name": "MiniDungeonMultiplayerDev",
"description": "",
"author": "",
"windowWidth": 640,
"windowHeight": 480,
"latestCompilationDirectory": "",
"maxFPS": 60,
"minFPS": 20,
"verticalSync": false,
"platformSpecificAssets": {
"android-icon-144": "",
"android-icon-192": "",
"android-icon-36": "",
"android-icon-48": "",
"android-icon-72": "",
"android-icon-96": "",
"android-windowSplashScreenAnimatedIcon": "",
"desktop-icon-512": "",
"ios-icon-100": "",
"ios-icon-1024": "",
"ios-icon-114": "",
"ios-icon-120": "",
"ios-icon-144": "",
"ios-icon-152": "",
"ios-icon-167": "",
"ios-icon-180": "",
"ios-icon-20": "",
"ios-icon-29": "",
"ios-icon-40": "",
"ios-icon-50": "",
"ios-icon-57": "",
"ios-icon-58": "",
"ios-icon-60": "",
"ios-icon-72": "",
"ios-icon-76": "",
"ios-icon-80": "",
"ios-icon-87": ""
},
"loadingScreen": {
"backgroundColor": 0,
"backgroundFadeInDuration": 0.2,
"backgroundImageResourceName": "",
"gdevelopLogoStyle": "light",
"logoAndProgressFadeInDuration": 0.2,
"logoAndProgressLogoFadeInDelay": 0,
"minDuration": 1.5,
"progressBarColor": 16777215,
"progressBarHeight": 20,
"progressBarMaxWidth": 200,
"progressBarMinWidth": 40,
"progressBarWidthPercent": 30,
"showGDevelopSplash": true,
"showProgressBar": true
},
"watermark": {
"placement": "bottom-left",
"showWatermark": true
},
"authorIds": [],
"authorUsernames": [],
"categories": [],
"playableDevices": [],
"extensionProperties": [],
"platforms": [
{
"name": "GDevelop JS platform"
}
],
"currentPlatform": "GDevelop JS platform"
},
"resources": {
"resources": [
{
"file": "assets/03Idle25.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle25",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle26.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle26",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle27.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle27",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle28.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle28",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle29.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle29",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle30.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle30",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle31.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle31",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle32.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle32",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle33.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle33",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle34.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle34",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle35.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle35",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Idle36.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Idle36",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk2.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk2",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk3.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk3",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk4.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk4",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk5.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk5",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk6.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk6",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk7.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk7",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk8.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk8",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk9.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk9",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/03Walk10.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "03Walk10",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite4.png",
"kind": "image",
"metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/NewSprite4.png\"}",
"name": "NewSprite4",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite5.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite5",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite6.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite6",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite7.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite7",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/TestRoom4Way.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "TestRoom4Way",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/TestRoomLR.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "TestRoomLR",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/TestRoomDeadU.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "TestRoomDeadU",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/TestRoomDeadD.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "TestRoomDeadD",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/TestRoomUD.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "TestRoomUD",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/TestRoomDeadL.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "TestRoomDeadL",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/TestRoomDeadR.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "TestRoomDeadR",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite8.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite8.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite2",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite8.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite3",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite8.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite8",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite9.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite9",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite10.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite10",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite11.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite11",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite12.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite12",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite13.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite13",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite14.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite14",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite15.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite15",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite16.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite16",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite17.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite17",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite18.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite18",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite19.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite19",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite20.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite20",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite21.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite21",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite22.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite22",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite23.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite23",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite24.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite24",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite25.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite25",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite26.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite26",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite27.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite27",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite28.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite28",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite29.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite29",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite30.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite30",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite31.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite31",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite32.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite32",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite33.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite33",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite34.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite34",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite35.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite35",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite36.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite36",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite37.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite37",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite38.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite38",
"smoothed": false,
"userAdded": false
},
{
"file": "assets/NewSprite39.png",
"kind": "image",
"metadata": "{\"extension\":\".png\"}",
"name": "NewSprite39",
"smoothed": false,
"userAdded": false
}
]
},
"objects": [],
"objectsFolderStructure": {
"folderName": "__ROOT"
},
"objectsGroups": [],
"variables": [],
"layouts": [
{
"b": 255,
"disableInputWhenNotFocused": true,
"mangledName": "Game",
"name": "Game",
"r": 247,
"standardSortMethod": true,
"stopSoundsOnStartup": true,
"title": "",
"v": 249,
"uiSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 1.134371579716097,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
},
"objectsGroups": [
{
"name": "Rooms",
"objects": [
{
"name": "spr_4Way"
},
{
"name": "spr_LR"
},
{
"name": "spr_UD"
},
{
"name": "spr_DeadL"
},
{
"name": "spr_DeadR"
},
{
"name": "spr_DeadUp"
},
{
"name": "spr_DeadDown"
}
]
},
{
"name": "Checker",
"objects": [
{
"name": "spr_right"
},
{
"name": "spr_left"
},
{
"name": "spr_up"
},
{
"name": "spr_down"
}
]
}
],
"variables": [
{
"name": "var_roomCount",
"persistentUuid": "c143876b-6251-4aec-a302-41a096a13d9d",
"type": "number",
"value": 1
}
],
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_player",
"persistentUuid": "168f7870-38ea-449a-b480-8a38e037e176",
"width": 0,
"x": 288,
"y": 256,
"zOrder": 30,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_4Way",
"persistentUuid": "346c6f81-2757-45a8-a096-c776d3ab76bc",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_right",
"persistentUuid": "e34ef6cd-0335-48e6-8d19-d84d325b8591",
"width": 0,
"x": 640,
"y": 0,
"zOrder": 31,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_left",
"persistentUuid": "a02511d0-68fd-4f90-afe7-4326ed28fd87",
"width": 0,
"x": -640,
"y": 0,
"zOrder": 32,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_up",
"persistentUuid": "bfc88395-d3c8-47c3-bb4e-c2a8d1950bb8",
"width": 0,
"x": 0,
"y": -480,
"zOrder": 33,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_down",
"persistentUuid": "03b1aa00-32fd-48b7-aaea-14d1e7e1196b",
"width": 0,
"x": 0,
"y": 480,
"zOrder": 34,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "b49413c4-39f9-41f9-9c64-b4ae76cd2ad9",
"width": 0,
"x": 352,
"y": 0,
"zOrder": 35,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "baf49daf-10df-4608-b6e4-359b0f395cac",
"width": 0,
"x": 256,
"y": 0,
"zOrder": 36,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "95fcb59f-88a5-4137-ade0-1788226b3252",
"width": 0,
"x": 352,
"y": 448,
"zOrder": 37,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "2a116ece-9265-456a-b2aa-6399354e0b4b",
"width": 0,
"x": 256,
"y": 448,
"zOrder": 38,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "3a816cd3-f87f-47d4-98e0-2943a9dcaaa4",
"width": 256,
"x": 352,
"y": 32,
"zOrder": 39,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "390c640e-d2ae-494e-b3ba-eaa7a737d262",
"width": 256,
"x": 32,
"y": 32,
"zOrder": 39,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "94ab7ace-3ea6-4466-a8bb-ab408aaf2656",
"width": 256,
"x": 32,
"y": 416,
"zOrder": 39,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "1b5b4a92-a874-4ce0-99d5-fb066071eb17",
"width": 256,
"x": 352,
"y": 416,
"zOrder": 39,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "915cea7d-00dc-48e6-b658-1a679dabb35a",
"width": 32,
"x": 608,
"y": 64,
"zOrder": 40,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "7e61f02d-9158-4a01-a137-a7a4a12678da",
"width": 32,
"x": 608,
"y": 288,
"zOrder": 40,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "c333414c-b787-464f-b406-46358a49f085",
"width": 32,
"x": 0,
"y": 288,
"zOrder": 40,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "c5ae41a4-8993-4917-ab04-e7db150e2d14",
"width": 32,
"x": 0,
"y": 64,
"zOrder": 40,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"objects": [
{
"adaptCollisionMaskAutomatically": false,
"assetStoreId": "",
"name": "spr_player",
"persistentUuid": "15baac05-8645-4485-b856-649122e1892c",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [
{
"name": "TopDownMovement",
"type": "TopDownMovementBehavior::TopDownMovementBehavior",
"acceleration": 9999,
"allowDiagonals": true,
"angleOffset": 0,
"angularMaxSpeed": 180,
"customIsometryAngle": 30,
"deceleration": 9999,
"ignoreDefaultControls": false,
"maxSpeed": 200,
"movementAngleOffset": 0,
"rotateObject": false,
"useLegacyTurnBack": false,
"viewpoint": "TopDown"
}
],
"animations": [
{
"name": "03Idle",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "03Idle25",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle26",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle27",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle28",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle29",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle30",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle31",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle32",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle33",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle34",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle35",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Idle36",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
}
]
}
]
},
{
"name": "03Walk",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "03Walk",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk2",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk3",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk4",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk5",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk6",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk7",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk8",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk9",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "03Walk10",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 28
},
{
"x": 32,
"y": 28
},
{
"x": 32,
"y": 40
},
{
"x": 0,
"y": 40
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_4Way",
"persistentUuid": "0e24c193-6010-4988-84e4-84247e4111a6",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "TestRoom4Way",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "TestRoom4Way",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 640,
"y": 0
},
{
"x": 640,
"y": 480
},
{
"x": 0,
"y": 480
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_right",
"persistentUuid": "1e631ce1-545f-451f-9f16-36ae35076ff7",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [
{
"name": "var_Random",
"persistentUuid": "22df5395-a194-44b8-bc37-bb550d070d01",
"type": "number",
"value": 0
}
],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "NewSprite",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite4",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 32,
"y": 0
},
{
"x": 32,
"y": 32
},
{
"x": 0,
"y": 32
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_LR",
"persistentUuid": "216f1ec8-083e-4ddc-8ecc-19dfe2b3e31d",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "TestRoomLR",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "TestRoomLR",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 640,
"y": 0
},
{
"x": 640,
"y": 480
},
{
"x": 0,
"y": 480
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_UD",
"persistentUuid": "63a7090f-a6d8-4eb9-93ee-9e076596ce88",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "TestRoomUD",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "TestRoomUD",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 640,
"y": 0
},
{
"x": 640,
"y": 480
},
{
"x": 0,
"y": 480
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_DeadL",
"persistentUuid": "cc600b8e-3783-4703-abe3-426832db2a92",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "TestRoomDeadL",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "TestRoomDeadL",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 640,
"y": 0
},
{
"x": 640,
"y": 480
},
{
"x": 0,
"y": 480
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_DeadR",
"persistentUuid": "49f00013-44d6-443c-9ffe-0330d4559935",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "TestRoomDeadR",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "TestRoomDeadR",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 640,
"y": 0
},
{
"x": 640,
"y": 480
},
{
"x": 0,
"y": 480
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_DeadUp",
"persistentUuid": "76f7a08f-18f4-4bf4-a4d2-9db38bad7409",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "TestRoomDeadU",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "TestRoomDeadU",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 640,
"y": 0
},
{
"x": 640,
"y": 480
},
{
"x": 0,
"y": 480
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_DeadDown",
"persistentUuid": "24006229-fc36-4f86-8b51-c78029706d67",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "TestRoomDeadD",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "TestRoomDeadD",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 640,
"y": 0
},
{
"x": 640,
"y": 480
},
{
"x": 0,
"y": 480
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_left",
"persistentUuid": "975b00e7-0480-4497-baaf-2030a83377fb",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [
{
"name": "var_Random",
"persistentUuid": "ce81a637-0f6f-41db-a57b-8decaed70174",
"type": "number",
"value": 0
}
],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "NewSprite",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite5",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 32,
"y": 0
},
{
"x": 32,
"y": 32
},
{
"x": 0,
"y": 32
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_up",
"persistentUuid": "64de8436-160b-4de7-af7c-2e25f8e83b8b",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [
{
"name": "var_Random",
"persistentUuid": "297f1f68-b1b2-42fd-90e3-ed8b0e5f8335",
"type": "number",
"value": 0
}
],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "NewSprite",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite6",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 32,
"y": 0
},
{
"x": 32,
"y": 32
},
{
"x": 0,
"y": 32
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_down",
"persistentUuid": "11b66a89-0299-4709-97bb-fbfd0e05d9ab",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [
{
"name": "var_Random",
"persistentUuid": "01025634-8159-420e-b49c-09c609ea3e6a",
"type": "number",
"value": 0
}
],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "NewSprite",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite7",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 32,
"y": 0
},
{
"x": 32,
"y": 32
},
{
"x": 0,
"y": 32
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_skelly01",
"persistentUuid": "a50eed58-da79-4406-ad04-ae846f10346a",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "skel_idle",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite2",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite3",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite8",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite9",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite10",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite11",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite12",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite13",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite14",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite15",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite16",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
}
]
}
]
},
{
"name": "skel_die",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite17",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite18",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite19",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite20",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite21",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite22",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite23",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite24",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite25",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite26",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite27",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite28",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite29",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite30",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
}
]
}
]
},
{
"name": "skel_attack",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite31",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite32",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite33",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite34",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite35",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite36",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite37",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "NewSprite38",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 4,
"y": 4
},
{
"x": 36,
"y": 4
},
{
"x": 36,
"y": 34
},
{
"x": 4,
"y": 34
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "spr_wall",
"persistentUuid": "b3e8803e-3284-4865-a2d2-f0cf1d2c2de8",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [
{
"effectType": "Adjustment",
"name": "Effect",
"doubleParameters": {
"alpha": 0,
"blue": 1,
"brightness": 1,
"contrast": 1,
"gamma": 1,
"green": 1,
"red": 1,
"saturation": 1
},
"stringParameters": {},
"booleanParameters": {}
}
],
"behaviors": [],
"animations": [
{
"name": "NewSprite",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"metadata": "{\"pskl\":{}}",
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "NewSprite39",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 32,
"y": 0
},
{
"x": 32,
"y": 32
},
{
"x": 0,
"y": 32
}
]
]
}
]
}
]
}
]
}
],
"objectsFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"folderName": "Enemies",
"children": [
{
"objectName": "spr_skelly01"
}
]
},
{
"folderName": "Players",
"children": [
{
"objectName": "spr_player"
}
]
},
{
"folderName": "Rooms",
"children": [
{
"folderName": "DeadUp",
"children": [
{
"objectName": "spr_DeadUp"
}
]
},
{
"folderName": "4Way",
"children": [
{
"objectName": "spr_4Way"
}
]
},
{
"objectName": "spr_DeadR"
},
{
"objectName": "spr_DeadL"
},
{
"objectName": "spr_UD"
},
{
"objectName": "spr_DeadDown"
},
{
"objectName": "spr_LR"
}
]
},
{
"folderName": "Checkers",
"children": [
{
"objectName": "spr_down"
},
{
"objectName": "spr_up"
},
{
"objectName": "spr_left"
},
{
"objectName": "spr_right"
},
{
"objectName": "spr_wall"
}
]
}
]
},
"events": [
{
"type": "BuiltinCommonInstructions::Link",
"include": {
"includeConfig": 0
},
"target": "Functions"
}
],
"layers": [
{
"ambientLightColorB": 200,
"ambientLightColorG": 200,
"ambientLightColorR": 200,
"camera2DPlaneMaxDrawingDistance": 5000,
"camera3DFarPlaneDistance": 10000,
"camera3DFieldOfView": 45,
"camera3DNearPlaneDistance": 3,
"cameraType": "",
"followBaseLayerCamera": false,
"isLightingLayer": false,
"isLocked": false,
"name": "",
"renderingType": "",
"visibility": true,
"cameras": [
{
"defaultSize": true,
"defaultViewport": true,
"height": 0,
"viewportBottom": 1,
"viewportLeft": 0,
"viewportRight": 1,
"viewportTop": 0,
"width": 0
}
],
"effects": [
{
"effectType": "Scene3D::HemisphereLight",
"name": "3D Ambient Hemisphere Light",
"doubleParameters": {
"elevation": 40,
"intensity": 0.33,
"rotation": 300
},
"stringParameters": {
"groundColor": "127;127;127",
"skyColor": "255;255;255",
"top": "Z+"
},
"booleanParameters": {}
},
{
"effectType": "Scene3D::DirectionalLight",
"name": "3D Sun Light",
"doubleParameters": {
"distanceFromCamera": 1500,
"elevation": 40,
"frustumSize": 4000,
"intensity": 0.75,
"minimumShadowBias": 0,
"rotation": 300
},
"stringParameters": {
"color": "255;255;255",
"shadowQuality": "medium",
"top": "Z+"
},
"booleanParameters": {
"isCastingShadow": true
}
}
]
},
{
"ambientLightColorB": 200,
"ambientLightColorG": 200,
"ambientLightColorR": 200,
"camera2DPlaneMaxDrawingDistance": 5000,
"camera3DFarPlaneDistance": 10000,
"camera3DFieldOfView": 45,
"camera3DNearPlaneDistance": 3,
"cameraType": "",
"followBaseLayerCamera": false,
"isLightingLayer": false,
"isLocked": false,
"name": "UI",
"renderingType": "",
"visibility": true,
"cameras": [],
"effects": [
{
"effectType": "Scene3D::HemisphereLight",
"name": "3D Ambient Hemisphere Light",
"doubleParameters": {
"elevation": 40,
"intensity": 0.33,
"rotation": 300
},
"stringParameters": {
"groundColor": "127;127;127",
"skyColor": "255;255;255",
"top": "Z+"
},
"booleanParameters": {}
},
{
"effectType": "Scene3D::DirectionalLight",
"name": "3D Sun Light",
"doubleParameters": {
"distanceFromCamera": 1500,
"elevation": 40,
"frustumSize": 4000,
"intensity": 0.75,
"minimumShadowBias": 0,
"rotation": 300
},
"stringParameters": {
"color": "255;255;255",
"shadowQuality": "medium",
"top": "Z+"
},
"booleanParameters": {
"isCastingShadow": true
}
}
]
}
],
"behaviorsSharedData": [
{
"name": "Animation",
"type": "AnimatableCapability::AnimatableBehavior"
},
{
"name": "Effect",
"type": "EffectCapability::EffectBehavior"
},
{
"name": "Flippable",
"type": "FlippableCapability::FlippableBehavior"
},
{
"name": "Opacity",
"type": "OpacityCapability::OpacityBehavior"
},
{
"name": "Resizable",
"type": "ResizableCapability::ResizableBehavior"
},
{
"name": "Scale",
"type": "ScalableCapability::ScalableBehavior"
},
{
"name": "TopDownMovement",
"type": "TopDownMovementBehavior::TopDownMovementBehavior"
}
]
}
],
"externalEvents": [
{
"associatedLayout": "Game",
"name": "Functions",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Scene Start",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SceneJustBegins"
},
"parameters": [
""
]
}
],
"actions": [
{
"type": {
"value": "ZoomCamera"
},
"parameters": [
"",
"0",
"",
""
]
},
{
"type": {
"value": "Hide"
},
"parameters": [
"spr_wall"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Generate Rooms",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Right"
},
{
"folded": true,
"type": "BuiltinCommonInstructions::ForEach",
"object": "spr_right",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickRandomInstance"
},
"parameters": [
"",
"spr_right"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberObjectVariable"
},
"parameters": [
"spr_right",
"var_Random",
"=",
"RandomInRange(1,6)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
"<=",
"8"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_right",
"var_Random",
">=",
"1"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_right",
"var_Random",
"<=",
"3"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"LR\"",
"spr_right.X()",
"spr_right.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_right",
"var_Random",
">=",
"4"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_right",
"var_Random",
"<=",
"5"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadR\"",
"spr_right.X()",
"spr_right.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_right",
"var_Random",
"=",
"6"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"4Way\"",
"spr_right.X()",
"spr_right.Y()",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
">",
"8"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadR\"",
"spr_right.X()",
"spr_right.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickNearest"
},
"parameters": [
"spr_left",
"spr_right.X()",
"spr_right.Y()",
""
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_left",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_right",
""
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"var_roomCount",
"+",
"1"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Left"
},
{
"folded": true,
"type": "BuiltinCommonInstructions::ForEach",
"object": "spr_left",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickRandomInstance"
},
"parameters": [
"",
"spr_left"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberObjectVariable"
},
"parameters": [
"spr_left",
"var_Random",
"=",
"RandomInRange(1,6)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
"<=",
"8"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_left",
"var_Random",
">=",
"1"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_left",
"var_Random",
"<=",
"3"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"LR\"",
"spr_left.X()",
"spr_left.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_left",
"var_Random",
">=",
"4"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_left",
"var_Random",
"<=",
"5"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadL\"",
"spr_left.X()",
"spr_left.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_left",
"var_Random",
"=",
"6"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"4Way\"",
"spr_left.X()",
"spr_left.Y()",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
">",
"8"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadL\"",
"spr_left.X()",
"spr_left.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickNearest"
},
"parameters": [
"spr_right",
"spr_left.X()",
"spr_left.Y()",
""
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_right",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_left",
""
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"var_roomCount",
"+",
"1"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Up"
},
{
"folded": true,
"type": "BuiltinCommonInstructions::ForEach",
"object": "spr_up",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickRandomInstance"
},
"parameters": [
"",
"spr_up"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberObjectVariable"
},
"parameters": [
"spr_up",
"var_Random",
"=",
"RandomInRange(1,6)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
"<=",
"8"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_up",
"var_Random",
">=",
"1"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_up",
"var_Random",
"<=",
"3"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"UD\"",
"spr_up.X()",
"spr_up.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_up",
"var_Random",
">=",
"4"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_up",
"var_Random",
"<=",
"5"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadUp\"",
"spr_up.X()",
"spr_up.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_up",
"var_Random",
"=",
"6"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"4Way\"",
"spr_up.X()",
"spr_up.Y()",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
">",
"8"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadUp\"",
"spr_up.X()",
"spr_up.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickNearest"
},
"parameters": [
"spr_down",
"spr_up.X()",
"spr_up.Y()",
""
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_down",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_up",
""
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"var_roomCount",
"+",
"1"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Down"
},
{
"folded": true,
"type": "BuiltinCommonInstructions::ForEach",
"object": "spr_down",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickRandomInstance"
},
"parameters": [
"",
"spr_down"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberObjectVariable"
},
"parameters": [
"spr_down",
"var_Random",
"=",
"RandomInRange(1,6)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
"<=",
"8"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_down",
"var_Random",
">=",
"1"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_down",
"var_Random",
"<=",
"3"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"UD\"",
"spr_down.X()",
"spr_down.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_down",
"var_Random",
">=",
"4"
]
},
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_down",
"var_Random",
"<=",
"5"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadDown\"",
"spr_down.X()",
"spr_down.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberObjectVariable"
},
"parameters": [
"spr_down",
"var_Random",
"=",
"6"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"4Way\"",
"spr_down.X()",
"spr_down.Y()",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"var_roomCount",
">",
"8"
]
}
],
"actions": [
{
"type": {
"value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout"
},
"parameters": [
"",
"\"DeadDown\"",
"spr_down.X()",
"spr_down.Y()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickNearest"
},
"parameters": [
"spr_up",
"spr_down.X()",
"spr_down.Y()",
""
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_up",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"spr_down",
""
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"var_roomCount",
"+",
"1"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"Rooms",
"Rooms",
"",
"",
"yes"
]
}
],
"actions": [
{
"type": {
"value": "Scene"
},
"parameters": [
"",
"\"Game\"",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Movement/Sprite Control",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "TopDownMovementBehavior::TopDownMovementBehavior::IsUsingControl"
},
"parameters": [
"spr_player",
"TopDownMovement",
"\"Right\""
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "TopDownMovementBehavior::TopDownMovementBehavior::IsMovementAngleAround"
},
"parameters": [
"spr_player",
"TopDownMovement",
"0",
"45"
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Once"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "FlippableCapability::FlippableBehavior::FlipX"
},
"parameters": [
"spr_player",
"Flippable",
"no"
]
},
{
"type": {
"value": "AnimatableCapability::AnimatableBehavior::SetName"
},
"parameters": [
"spr_player",
"Animation",
"=",
"\"03Walk\""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "TopDownMovementBehavior::TopDownMovementBehavior::IsMovementAngleAround"
},
"parameters": [
"spr_player",
"TopDownMovement",
"180",
"45"
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Once"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "FlippableCapability::FlippableBehavior::FlipX"
},
"parameters": [
"spr_player",
"Flippable",
"yes"
]
},
{
"type": {
"value": "AnimatableCapability::AnimatableBehavior::SetName"
},
"parameters": [
"spr_player",
"Animation",
"=",
"\"03Walk\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "TopDownMovementBehavior::IsMoving"
},
"parameters": [
"spr_player",
"TopDownMovement"
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Once"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "AnimatableCapability::AnimatableBehavior::SetName"
},
"parameters": [
"spr_player",
"Animation",
"=",
"\"03Idle\""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Camera Control",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"spr_player",
"Rooms",
"",
"",
""
]
}
],
"actions": [
{
"type": {
"value": "RoomBasedCameraMovement::MoveCameraToActiveRoom"
},
"parameters": [
"",
"Rooms",
"spr_player",
"",
"",
"0",
"",
"",
"0",
""
]
}
]
}
],
"parameters": []
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "KeyFromTextReleased"
},
"parameters": [
"",
"\"Space\""
]
}
],
"actions": [
{
"type": {
"value": "Scene"
},
"parameters": [
"",
"\"Game\"",
""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Collision",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"spr_player",
"spr_wall",
"",
"",
""
]
}
],
"actions": [
{
"type": {
"value": "SeparateFromObjects"
},
"parameters": [
"spr_player",
"spr_wall",
""
]
}
]
}
],
"parameters": []
}
]
}
],
"eventsFunctionsExtensions": [
{
"author": "",
"category": "Camera",
"dimension": "2D",
"extensionNamespace": "",
"fullName": "Smooth Camera",
"gdevelopVersion": ">=5.5.222",
"helpPath": "/tutorials/follow-player-with-camera/",
"iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCjwvc3R5bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQsMTNoLTZjLTEuMSwwLTItMC45LTItMlY1YzAtMS4xLDAuOS0yLDItMmg2YzEuMSwwLDIsMC45LDIsMnY2QzI2LDEyLjEsMjUuMSwxMywyNCwxM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNiw4djEwYzAsMS4xLTAuOSwyLTIsMkg4Yy0xLjEsMC0yLTAuOS0yLTJWOGMwLTEuMSwwLjktMiwyLTJoOCIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjEiIGN5PSI4IiByPSIyIi8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSIxMSIgY3k9IjE2IiByPSIxIi8+DQo8cmVjdCB4PSI5IiB5PSI5IiBjbGFzcz0ic3QwIiB3aWR0aD0iNCIgaGVpZ2h0PSIzIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIyMSwyOSAyMSwyOSAxMSwyOSAxMSwyOSAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjE4LDIwIDE4LDI5IDE0LDI5IDE0LDIwICIvPg0KPHJlY3QgeD0iNyIgeT0iMyIgY2xhc3M9InN0MCIgd2lkdGg9IjQiIGhlaWdodD0iMyIvPg0KPC9zdmc+DQo=",
"name": "SmoothCamera",
"previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Computers and Hardware/Computers and Hardware_camcoder_gopro_go_pro_camera.svg",
"shortDescription": "Smoothly scroll to follow an object.",
"version": "0.4.5",
"description": [
"The camera follows an object according to:",
"- a frame rate independent catch-up speed to make the scrolling from smooth to strong",
"- a maximum speed to do linear following ([open the project online](https://editor.gdevelop.io/?project=example://platformer-with-tilemap)) or slow down the camera when teleporting the object",
"- a follow-free zone to avoid scrolling on small movements",
"- an offset to see further in one direction",
"- an extra delay and catch-up speed to give an impression of speed (useful for dash)",
"- position forecasting and delay to simulate a cameraman response time",
"",
"A platformer dedicated behavior allows to switch of settings when the character is in air or on the floor. This can be used to stabilize the camera when jumping."
],
"origin": {
"identifier": "SmoothCamera",
"name": "gdevelop-extension-store"
},
"tags": [
"camera",
"scrolling",
"follow",
"smooth",
"platformer",
"platform"
],
"authorIds": [
"IWykYNRvhCZBN3vEgKEbBPOR3Oc2"
],
"dependencies": [],
"globalVariables": [],
"sceneVariables": [],
"eventsFunctions": [],
"eventsFunctionsFolderStructure": {
"folderName": "__ROOT"
},
"eventsBasedBehaviors": [
{
"description": "Smoothly scroll to follow an object.",
"fullName": "Smooth Camera",
"helpPath": "",
"iconUrl": "",
"name": "SmoothCamera",
"objectType": "",
"previewIconUrl": "",
"quickCustomizationVisibility": "hidden",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Update private properties through setters to check their values and initialize state."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetLeftwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"LeftwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetRightwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"RightwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"UpwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"DownwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetLeftwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"LeftwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetRightwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"RightwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"UpwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"DownwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaLeft"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaLeft",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaRight"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaRight",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaTop",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaBottom",
"log(1 - )"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraDelay",
"=",
"CameraDelay"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "BooleanVariable"
},
"parameters": [
"IsCalledManually",
"True",
""
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Move the camera closer to the object. This action must be called after the object has moved for the frame.",
"fullName": "Move the camera closer",
"functionType": "Action",
"name": "MoveCameraCloser",
"sentence": "Move the camera closer to _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "The camera following is called with an action, the call from doStepPreEvents must be disabled to avoid to do it twice."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetBooleanVariable"
},
"parameters": [
"IsCalledManually",
"True",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Move the camera closer to the object.",
"fullName": "Do move the camera closer",
"functionType": "Action",
"name": "DoMoveCameraCloser",
"private": true,
"sentence": "Do move the camera closer _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Delaying and forecasting can be used at the same time.\nForecasting only use the positions that are older than the one used for delaying.\nThe behavior uses a position history that is split in 2 arrays:\n- one for delaying the position (from TimeFromStart to TimeFromStart - CamearDelay)\n- one for forecasting the position (from TimeFromStart - CamearDelay to TimeFromStart - CamearDelay - ForecastHistoryDuration"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::UpdateDelayedPosition"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::UpdateForecastedPosition"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "At each frame, the camera must catchup the target by a given ratio (speed)\ncameraX(t) - targetX = (cameraX(t - 1) - targetX) * speed\n\nThe frame rate must not impact on the catch-up speed, we don't want a speed in ratio per frame but a speed ratio per second, like this:\ncameraX(t) - targetX = (cameraX(t - 1s) - targetX) * speed\n\nOk, but we still need to process each frame, we can use a exponent for this:\ncameraX(t) - targetX = (cameraX(t - timeDelta) - targetX) * speed^timeDelta\ncameraX(t) = targetX + (cameraX(t - timeDelta) - targetX) * exp(timeDelta * ln(speed))\n\npow is probably more efficient than precalculated log if the speed is changed continuously but this might be rare enough."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"FollowOnX",
"True",
""
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"OldX",
"=",
"CameraX(Object.Layer(), 0)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterX"
},
"parameters": [
"",
">",
"Object.Behavior::FreeAreaRight()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterX"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaRight()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaRight())\n* exp(TimeDelta() * LogLeftwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterX"
},
"parameters": [
"",
"<",
"OldX - LeftwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterX"
},
"parameters": [
"",
"=",
"OldX - LeftwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterX"
},
"parameters": [
"",
"<",
"Object.Behavior::FreeAreaLeft()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterX"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaLeft()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaLeft())\n* exp(TimeDelta() * LogRightwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterX"
},
"parameters": [
"",
">",
"OldX + RightwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterX"
},
"parameters": [
"",
"=",
"OldX + RightwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"FollowOnY",
"True",
""
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"OldY",
"=",
"CameraY(Object.Layer(), 0)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterY"
},
"parameters": [
"",
">",
"Object.Behavior::FreeAreaBottom()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterY"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaBottom()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaBottom())\n* exp(TimeDelta() * LogUpwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterY"
},
"parameters": [
"",
"<",
"OldY - UpwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterY"
},
"parameters": [
"",
"=",
"OldY - UpwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterY"
},
"parameters": [
"",
"<",
"Object.Behavior::FreeAreaTop()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterY"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaTop()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaTop())\n* exp(TimeDelta() * LogDownwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraCenterY"
},
"parameters": [
"",
">",
"OldY + DownwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterY"
},
"parameters": [
"",
"=",
"OldY + DownwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Delay the camera according to a maximum speed and catch up the delay.",
"fullName": "Wait and catch up",
"functionType": "Action",
"name": "WaitAndCatchUp",
"sentence": "Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Maybe the catch-up show be done in constant pixel speed instead of constant time speed."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"WaitingEnd",
"=",
"TimeFromStart() + NewWaitingDuration"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"WaitingSpeedXMax",
"=",
"NewWaitingSpeedXMax"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"WaitingSpeedYMax",
"=",
"NewWaitingSpeedYMax"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraDelayCatchUpDuration",
"=",
"NewCatchUpDuration"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Wait and catch up\"",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Waiting duration (in seconds)",
"name": "NewWaitingDuration",
"type": "expression"
},
{
"description": "Waiting maximum camera target speed X",
"name": "NewWaitingSpeedXMax",
"type": "expression"
},
{
"description": "Waiting maximum camera target speed Y",
"name": "NewWaitingSpeedYMax",
"type": "expression"
},
{
"description": "Catch up duration (in seconds)",
"name": "NewCatchUpDuration",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Draw the targeted and actual camera position.",
"fullName": "Draw debug",
"functionType": "Action",
"name": "DrawDebug",
"sentence": "Draw targeted and actual camera position for _PARAM0_ on _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::FillOpacity"
},
"parameters": [
"ShapePainter",
"=",
"0"
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Path used by the forecasting",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"=",
"0"
]
},
{
"type": {
"value": "PrimitiveDrawing::OutlineColor"
},
"parameters": [
"ShapePainter",
"\"245;166;35\""
]
},
{
"type": {
"value": "PrimitiveDrawing::BeginFillPath"
},
"parameters": [
"ShapePainter",
"Object.Variable(__SmoothCamera.ForecastHistoryX[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[0])"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::PathLineTo"
},
"parameters": [
"ShapePainter",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Index])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Index])"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::EndFillPath"
},
"parameters": [
"ShapePainter"
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Follow-free area.",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"FollowFreeAreaLeft",
"!=",
"0"
]
},
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"FollowFreeAreaRight",
"!=",
"0"
]
},
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"FollowFreeAreaTop",
"!=",
"0"
]
},
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"FollowFreeAreaBottom",
"!=",
"0"
]
}
]
}
],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::OutlineColor"
},
"parameters": [
"ShapePainter",
"\"126;211;33\""
]
},
{
"type": {
"value": "PrimitiveDrawing::Rectangle"
},
"parameters": [
"ShapePainter",
"Object.Behavior::FreeAreaLeft() - 1",
"Object.Behavior::FreeAreaTop() - 1",
"Object.Behavior::FreeAreaRight() + 1",
"Object.Behavior::FreeAreaBottom() + 1"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Linear regression vector used by the forecasting.",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::OutlineColor"
},
"parameters": [
"ShapePainter",
"\"208;2;27\""
]
},
{
"type": {
"value": "PrimitiveDrawing::LineV2"
},
"parameters": [
"ShapePainter",
"ProjectedOldestX",
"ProjectedOldestY",
"ProjectedNewestX",
"ProjectedNewestY",
"1"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Targeted and actual camera position",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::Circle"
},
"parameters": [
"ShapePainter",
"ForecastedX",
"ForecastedY",
"3"
]
},
{
"type": {
"value": "PrimitiveDrawing::LineV2"
},
"parameters": [
"ShapePainter",
"CameraX(Object.Layer(), 0)",
"CameraY(Object.Layer(), 0) - 4",
"CameraX(Object.Layer(), 0)",
"CameraY(Object.Layer(), 0) + 4",
"1"
]
},
{
"type": {
"value": "PrimitiveDrawing::LineV2"
},
"parameters": [
"ShapePainter",
"CameraX(Object.Layer(), 0) - 4",
"CameraY(Object.Layer(), 0)",
"CameraX(Object.Layer(), 0) + 4",
"CameraY(Object.Layer(), 0)",
"1"
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Shape painter",
"name": "ShapePainter",
"supplementaryInformation": "PrimitiveDrawing::Drawer",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "Enable or disable the following on X axis.",
"fullName": "Follow on X",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowOnX",
"sentence": "The camera follows _PARAM0_ on X axis: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetBooleanVariable"
},
"parameters": [
"FollowOnX",
"False",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"Value",
"True",
""
]
}
],
"actions": [
{
"type": {
"value": "SetBooleanVariable"
},
"parameters": [
"FollowOnX",
"True",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow on X axis",
"name": "Value",
"type": "yesorno"
}
],
"objectGroups": []
},
{
"description": "Enable or disable the following on Y axis.",
"fullName": "Follow on Y",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowOnY",
"sentence": "The camera follows _PARAM0_ on Y axis: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetBooleanVariable"
},
"parameters": [
"FollowOnY",
"False",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"Value",
"True",
""
]
}
],
"actions": [
{
"type": {
"value": "SetBooleanVariable"
},
"parameters": [
"FollowOnY",
"True",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow on Y axis",
"name": "Value",
"type": "yesorno"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area right border.",
"fullName": "Follow free area right border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaRight",
"sentence": "Change the camera follow free area right border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"FollowFreeAreaRight",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area right border",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area left border.",
"fullName": "Follow free area left border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaLeft",
"sentence": "Change the camera follow free area left border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"FollowFreeAreaLeft",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area left border",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area top border.",
"fullName": "Follow free area top border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaTop",
"sentence": "Change the camera follow free area top border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"FollowFreeAreaTop",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area top border",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area bottom border.",
"fullName": "Follow free area bottom border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaBottom",
"sentence": "Change the camera follow free area bottom border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"FollowFreeAreaBottom",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area bottom border",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera leftward maximum speed (in pixels per second).",
"fullName": "Leftward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetLeftwardSpeedMax",
"sentence": "Change the camera leftward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"LeftwardSpeedMax",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Leftward maximum speed (in pixels per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera rightward maximum speed (in pixels per second).",
"fullName": "Rightward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetRightwardSpeedMax",
"sentence": "Change the camera rightward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"RightwardSpeedMax",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Rightward maximum speed (in pixels per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera upward maximum speed (in pixels per second).",
"fullName": "Upward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetUpwardSpeedMax",
"sentence": "Change the camera upward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"UpwardSpeedMax",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Upward maximum speed (in pixels per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera downward maximum speed (in pixels per second).",
"fullName": "Downward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetDownwardSpeedMax",
"sentence": "Change the camera downward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DownwardSpeedMax",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Downward maximum speed (in pixels per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera leftward catch-up speed (in ratio per second).",
"fullName": "Leftward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetLeftwardSpeed",
"sentence": "Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"LeftwardSpeed",
"=",
"clamp(0, 1, Value)"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"LogLeftwardSpeed",
"=",
"log(1 - Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Leftward catch-up speed (in ratio per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera rightward catch-up speed (in ratio per second).",
"fullName": "Rightward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetRightwardSpeed",
"sentence": "Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"RightwardSpeed",
"=",
"clamp(0, 1, Value)"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"LogRightwardSpeed",
"=",
"log(1 - Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Rightward catch-up speed (in ratio per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera downward catch-up speed (in ratio per second).",
"fullName": "Downward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetDownwardSpeed",
"sentence": "Change the camera downward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DownwardSpeed",
"=",
"clamp(0, 1, Value)"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"LogDownwardSpeed",
"=",
"log(1 - Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Downward catch-up speed (in ratio per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera upward catch-up speed (in ratio per second).",
"fullName": "Upward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetUpwardSpeed",
"sentence": "Change the camera upward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"UpwardSpeed",
"=",
"clamp(0, 1, Value)"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"LogUpwardSpeed",
"=",
"log(1 - Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Upward catch-up speed (in ratio per second)",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "the camera offset on X axis of the object. This is not the current difference between the object and the camera position.",
"fullName": "Camera offset X",
"functionType": "ExpressionAndCondition",
"group": "Camera configuration",
"name": "OffsetX",
"sentence": "the camera offset on X axis",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"CameraOffsetX"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "OffsetX",
"group": "Camera configuration",
"name": "SetOffsetXOp",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraOffsetX",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Change the camera offset on X axis of an object.",
"fullName": "Camera Offset X",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetOffsetX",
"private": true,
"sentence": "Change the camera offset on X axis of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Deprecated use SetOffsetXOp instead."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetOffsetXOp"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Camera offset X",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.",
"fullName": "Camera offset Y",
"functionType": "ExpressionAndCondition",
"group": "Camera configuration",
"name": "OffsetY",
"sentence": "the camera offset on Y axis",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"CameraOffsetY"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "OffsetY",
"group": "Camera configuration",
"name": "SetOffsetYOp",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraOffsetY",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Change the camera offset on Y axis of an object.",
"fullName": "Camera Offset Y",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetOffsetY",
"private": true,
"sentence": "Change the camera offset on Y axis of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Deprecated use SetOffsetYOp instead."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetOffsetYOp"
},
"parameters": [
"Object",
"Behavior",
"=",
"CameraOffsetY",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Camera offset Y",
"name": "CameraOffsetY",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera forecast time (in seconds).",
"fullName": "Forecast time",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetForecastTime",
"sentence": "Change the camera forecast time of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastTime",
"=",
"min(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Forecast time",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera delay (in seconds).",
"fullName": "Camera delay",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetCameraDelay",
"sentence": "Change the camera delay of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraDelay",
"=",
"max(0, Value)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Camera delay",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return follow free area left border X.",
"fullName": "Free area left",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaLeft",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedX + CameraOffsetX - FollowFreeAreaLeft"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return follow free area right border X.",
"fullName": "Free area right",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaRight",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedX + CameraOffsetX + FollowFreeAreaRight"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return follow free area bottom border Y.",
"fullName": "Free area bottom",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaBottom",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedY + CameraOffsetY + FollowFreeAreaBottom"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return follow free area top border Y.",
"fullName": "Free area top",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaTop",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedY + CameraOffsetY - FollowFreeAreaTop"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Update delayed position and delayed history. This is called in doStepPreEvents.",
"fullName": "Update delayed position",
"functionType": "Action",
"group": "Private",
"name": "UpdateDelayedPosition",
"private": true,
"sentence": "Update delayed position and delayed history of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Add the previous position to have enough (2) positions to evaluate the extra delay for waiting mode."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ObjectTime)",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime",
"TimeFromStart()"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX",
"DelayedCenterX"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY",
"DelayedCenterY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Use the object center when no delay is asked."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DelayedCenterX",
"=",
"Object.CenterX()"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DelayedCenterY",
"=",
"Object.CenterY()"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsDelayed"
},
"parameters": [
"Object",
"Behavior",
""
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition"
},
"parameters": [
"Object",
"Behavior",
"TimeFromStart()",
"Object.CenterX()",
"Object.CenterY()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsDelayed"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime",
"TimeFromStart()"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX",
"Object.CenterX()"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY",
"Object.CenterY()"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Remove history entries that are too old to be useful for delaying and pass it to the history for forecasting."
},
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ObjectTime)",
">=",
"2"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime[1]",
"<",
"TimeFromStart() - Object.Behavior::CurrentDelay()"
]
}
],
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition"
},
"parameters": [
"Object",
"Behavior",
"Object.Variable(__SmoothCamera.ObjectTime[0])",
"Object.Variable(__SmoothCamera.ObjectX[0])",
"Object.Variable(__SmoothCamera.ObjectY[0])",
""
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Don't move the camera if there is not enough history."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DelayedCenterX",
"=",
"Object.Variable(__SmoothCamera.ObjectX[0])"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DelayedCenterY",
"=",
"Object.Variable(__SmoothCamera.ObjectY[0])"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ObjectTime)",
">=",
"2"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime[0]",
"<",
"TimeFromStart() - Object.Behavior::CurrentDelay()"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Add the extra delay that could be needed to respect the speed limit in waiting mode.\n\nspeedRatio = min(speedMaxX / historySpeedX, speedMaxY / historySpeedY)\ndelay += min(0, timeDelta * (1 - speedRatio))"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraExtraDelay",
"+",
"max(0, TimeDelta() * (1 - min(WaitingSpeedXMax * abs(Object.Variable(__SmoothCamera.ObjectX[1]) - Object.Variable(__SmoothCamera.ObjectX[0])), WaitingSpeedYMax * abs(Object.Variable(__SmoothCamera.ObjectY[1]) - Object.Variable(__SmoothCamera.ObjectY[0]))) / (Object.Variable(__SmoothCamera.ObjectTime[1]) - Object.Variable(__SmoothCamera.ObjectTime[0]))))"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Extra delay: \" + ToString(CameraExtraDelay)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "The time with delay is now between the first 2 indexes"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DelayedCenterX",
"=",
"lerp(Object.Variable(__SmoothCamera.ObjectX[1]), Object.Variable(__SmoothCamera.ObjectX[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"DelayedCenterY",
"=",
"lerp(Object.Variable(__SmoothCamera.ObjectY[1]), Object.Variable(__SmoothCamera.ObjectY[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsDelayed"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariableClearChildren"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime"
]
},
{
"type": {
"value": "ObjectVariableClearChildren"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX"
]
},
{
"type": {
"value": "ObjectVariableClearChildren"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Once"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraDelayCatchUpSpeed",
"=",
"CameraExtraDelay / CameraDelayCatchUpDuration"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Start to catch up\"",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"CameraExtraDelay",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"CameraExtraDelay",
"=",
"max(0, CameraExtraDelay -CameraDelayCatchUpSpeed * TimeDelta())"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Catching up delay: \" + ToString(CameraExtraDelay)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the camera following target is delayed from the object.",
"fullName": "Camera is delayed",
"functionType": "Condition",
"name": "IsDelayed",
"private": true,
"sentence": "The camera of _PARAM0_ is delayed",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"Object.Behavior::CurrentDelay()",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return the current camera delay.",
"fullName": "Current delay",
"functionType": "Expression",
"name": "CurrentDelay",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"CameraDelay + CameraExtraDelay"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the camera following is waiting at a reduced speed.",
"fullName": "Camera is waiting",
"functionType": "Condition",
"name": "IsWaiting",
"private": true,
"sentence": "The camera of _PARAM0_ is waiting",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"WaitingEnd",
">",
"TimeFromStart()"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.",
"fullName": "Add forecast history position",
"functionType": "Action",
"group": "Private",
"name": "AddForecastHistoryPosition",
"private": true,
"sentence": "Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"ForecastHistoryDuration",
">",
"0"
]
},
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"ForecastTime",
">",
"0"
]
}
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryTime",
"Time"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryX",
"ObjectX"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryY",
"ObjectY"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Remove history entries that are too old to be useful.\nKeep at least 2 positions because no forecast can be done with less positions."
},
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
">=",
"3"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryTime[0]",
"<",
"TimeFromStart() - CameraDelay - CameraExtraDelay - ForecastHistoryDuration"
]
}
],
"conditions": [],
"actions": [
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryTime",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryX",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryY",
"0"
]
}
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Time",
"name": "Time",
"type": "expression"
},
{
"description": "Object X",
"name": "ObjectX",
"type": "expression"
},
{
"description": "Object Y",
"name": "ObjectY",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Update forecasted position. This is called in doStepPreEvents.",
"fullName": "Update forecasted position",
"functionType": "Action",
"group": "Private",
"name": "UpdateForecastedPosition",
"private": true,
"sentence": "Update forecasted position of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastedX",
"=",
"DelayedCenterX"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastedY",
"=",
"DelayedCenterY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Simple linear regression\ny = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX\n\nNote than we could use only one position every N positions to reduce the process time,\nbut if we really need efficient process JavaScript and circular queues are a must."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
">=",
"2"
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"ForecastHistoryDuration",
">",
"0"
]
},
{
"type": {
"value": "NumberVariable"
},
"parameters": [
"ForecastTime",
">",
"0"
]
}
]
}
],
"actions": [],
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Mean X",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryMeanX",
"=",
"0"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryMeanX",
"+",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Index])"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryMeanX",
"/",
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Mean Y",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryMeanY",
"=",
"0"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryMeanY",
"+",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Index])"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryMeanY",
"/",
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Mean: \" + ToString(ForecastHistoryMeanX) + \" \" + ToString(ForecastHistoryMeanY)",
"",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Variance and Covariance",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "VarianceX = sum((X[i] - MeanX)²)\nVarianceY = sum((Y[i] - MeanY)²)\nCovariance = sum((X[i] - MeanX) * (Y[i] - MeanY))"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryVarianceX",
"=",
"0"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryVarianceY",
"=",
"0"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryCovariance",
"=",
"0"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryVarianceX",
"+",
"pow(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX, 2)"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryVarianceY",
"+",
"pow(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY, 2)"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryCovariance",
"+",
"(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX)\n*\n(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY)"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"+",
"1"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Variances: \" + ToString(ForecastHistoryVarianceX) + \" \" + ToString(ForecastHistoryVarianceY) + \" \" + ToString(ForecastHistoryCovariance)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
"<",
"1"
]
},
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"abs(ForecastHistoryVarianceY)",
"<",
"1"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastedX",
"=",
"DelayedCenterX"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastedY",
"=",
"DelayedCenterY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
">=",
"1"
]
},
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"abs(ForecastHistoryVarianceY)",
">=",
"1"
]
}
]
}
],
"actions": [],
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Linear function parameters",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "y = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
">=",
"abs(ForecastHistoryVarianceY)"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryLinearA",
"=",
"ForecastHistoryCovariance / ForecastHistoryVarianceX"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryLinearB",
"=",
"ForecastHistoryMeanY - ForecastHistoryLinearA * ForecastHistoryMeanX"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Linear: \" + ToString(ForecastHistoryLinearA) + \" \" + ToString(ForecastHistoryLinearB)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Projection",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds"
},
"parameters": [
"Object",
"Behavior",
"Object.Variable(__SmoothCamera.ForecastHistoryX[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])",
""
]
}
]
}
],
"parameters": []
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Axis permutation to avoid a ratio between 2 numbers near 0."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
"<",
"abs(ForecastHistoryVarianceY)"
]
}
],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryLinearA",
"=",
"ForecastHistoryCovariance / ForecastHistoryVarianceY"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastHistoryLinearB",
"=",
"ForecastHistoryMeanX - ForecastHistoryLinearA * ForecastHistoryMeanY"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Linear: \" + ToString(ForecastHistoryLinearA) + \" \" + ToString(ForecastHistoryLinearB)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Projection",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds"
},
"parameters": [
"Object",
"Behavior",
"Object.Variable(__SmoothCamera.ForecastHistoryY[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryX[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Permute back axis"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"=",
"ProjectedOldestX"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedOldestX",
"=",
"ProjectedOldestY"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedOldestY",
"=",
"Index"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Index",
"=",
"ProjectedNewestX"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedNewestX",
"=",
"ProjectedNewestY"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedNewestY",
"=",
"Index"
]
}
]
}
],
"parameters": []
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Oldest: \" + ToString(ProjectedOldestX) + \" \" + ToString(ProjectedOldestY)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Newest: \" + ToString(ProjectedNewestX) + \" \" + ToString(ProjectedNewestY)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Forecasted position",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastedX",
"=",
"ProjectedNewestX + ( ProjectedNewestX - ProjectedOldestX) * Object.Behavior::ForecastTimeRatio()"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ForecastedY",
"=",
"ProjectedNewestY + ( ProjectedNewestY - ProjectedOldestY) * Object.Behavior::ForecastTimeRatio()"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Forecasted: \" + ToString(ForecastedX) + \" \" + ToString(ForecastedY)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
],
"parameters": []
}
],
"parameters": []
}
]
}
],
"parameters": []
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.",
"fullName": "Project history ends",
"functionType": "Action",
"group": "Private",
"name": "ProjectHistoryEnds",
"private": true,
"sentence": "Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Perpendicular line:\npA = -1/a; \npB = -pA * x + y\n\nIntersection:\n/ ProjectedY = a * ProjectedX + b\n\\ ProjectedY = pA * ProjectedX + b\n\nSolution that is cleaned out from indeterminism (like 0 / 0 or infinity / infinity):\nProjectedX= (x + (y - b) * a) / (a² + 1)\nProjectedY = y + (x * a - y + b) / (a² + 1)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedNewestX",
"=",
"(NewestX + (NewestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedNewestY",
"=",
"NewestY + (NewestX * ForecastHistoryLinearA - NewestY \n+ ForecastHistoryLinearB) / (1 + pow(ForecastHistoryLinearA, 2))"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedOldestX",
"=",
"(OldestX + (OldestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))"
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"ProjectedOldestY",
"=",
"OldestY + (OldestX * ForecastHistoryLinearA - OldestY \n+ ForecastHistoryLinearB) / (1 + pow(ForecastHistoryLinearA, 2))"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "OldestX",
"name": "OldestX",
"type": "expression"
},
{
"description": "OldestY",
"name": "OldestY",
"type": "expression"
},
{
"description": "Newest X",
"name": "NewestX",
"type": "expression"
},
{
"description": "Newest Y",
"name": "NewestY",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.",
"fullName": "Forecast time ratio",
"functionType": "Expression",
"group": "Private",
"name": "ForecastTimeRatio",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"- ForecastTime / (Object.Variable(__SmoothCamera.ForecastHistoryTime[0]) - Object.Variable(__SmoothCamera.ForecastHistoryTime[Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime) - 1]))"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
}
],
"eventsFunctionsFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"functionName": "onCreated"
},
{
"functionName": "doStepPreEvents"
},
{
"functionName": "MoveCameraCloser"
},
{
"functionName": "DoMoveCameraCloser"
},
{
"functionName": "WaitAndCatchUp"
},
{
"functionName": "DrawDebug"
},
{
"folderName": "Camera configuration",
"children": [
{
"functionName": "SetFollowOnX"
},
{
"functionName": "SetFollowOnY"
},
{
"functionName": "SetFollowFreeAreaRight"
},
{
"functionName": "SetFollowFreeAreaLeft"
},
{
"functionName": "SetFollowFreeAreaTop"
},
{
"functionName": "SetFollowFreeAreaBottom"
},
{
"functionName": "SetLeftwardSpeedMax"
},
{
"functionName": "SetRightwardSpeedMax"
},
{
"functionName": "SetUpwardSpeedMax"
},
{
"functionName": "SetDownwardSpeedMax"
},
{
"functionName": "SetLeftwardSpeed"
},
{
"functionName": "SetRightwardSpeed"
},
{
"functionName": "SetDownwardSpeed"
},
{
"functionName": "SetUpwardSpeed"
},
{
"functionName": "OffsetX"
},
{
"functionName": "SetOffsetXOp"
},
{
"functionName": "SetOffsetX"
},
{
"functionName": "OffsetY"
},
{
"functionName": "SetOffsetYOp"
},
{
"functionName": "SetOffsetY"
},
{
"functionName": "SetForecastTime"
},
{
"functionName": "SetCameraDelay"
}
]
},
{
"folderName": "Private",
"children": [
{
"functionName": "FreeAreaLeft"
},
{
"functionName": "FreeAreaRight"
},
{
"functionName": "FreeAreaBottom"
},
{
"functionName": "FreeAreaTop"
},
{
"functionName": "UpdateDelayedPosition"
},
{
"functionName": "AddForecastHistoryPosition"
},
{
"functionName": "UpdateForecastedPosition"
},
{
"functionName": "ProjectHistoryEnds"
},
{
"functionName": "ForecastTimeRatio"
}
]
},
{
"functionName": "IsDelayed"
},
{
"functionName": "CurrentDelay"
},
{
"functionName": "IsWaiting"
}
]
},
"propertyDescriptors": [
{
"value": "0.9",
"type": "Number",
"label": "Leftward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "LeftwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Rightward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "RightwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Upward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "UpwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Downward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "DownwardSpeed"
},
{
"value": "true",
"type": "Boolean",
"label": "Follow on X axis",
"name": "FollowOnX"
},
{
"value": "true",
"type": "Boolean",
"label": "Follow on Y axis",
"name": "FollowOnY"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area left border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaLeft"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area right border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaRight"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area top border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaTop"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area bottom border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaBottom"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Camera offset X",
"group": "Position",
"advanced": true,
"name": "CameraOffsetX"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Camera offset Y",
"group": "Position",
"advanced": true,
"name": "CameraOffsetY"
},
{
"value": "0",
"type": "Number",
"unit": "Second",
"label": "Camera delay",
"group": "Timing",
"deprecated": true,
"name": "CameraDelay"
},
{
"value": "0",
"type": "Number",
"unit": "Second",
"label": "Forecast time",
"group": "Timing",
"deprecated": true,
"name": "ForecastTime"
},
{
"value": "0",
"type": "Number",
"unit": "Second",
"label": "Forecast history duration",
"group": "Timing",
"deprecated": true,
"name": "ForecastHistoryDuration"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogLeftwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogRightwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogDownwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogUpwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "DelayedCenterX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "DelayedCenterY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryMeanX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryMeanY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryVarianceX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryCovariance"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryLinearA"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryLinearB"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastedX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastedY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedNewestX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedNewestY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedOldestX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedOldestY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryVarianceY"
},
{
"value": "",
"type": "Number",
"label": "Index (local variable)",
"hidden": true,
"name": "Index"
},
{
"value": "0",
"type": "Number",
"label": "",
"hidden": true,
"name": "CameraDelayCatchUpSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "CameraExtraDelay"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "WaitingSpeedXMax"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "WaitingSpeedYMax"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "WaitingEnd"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "CameraDelayCatchUpDuration"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Leftward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "LeftwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Rightward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "RightwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Upward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "UpwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Downward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "DownwardSpeedMax"
},
{
"value": "",
"type": "Number",
"label": "OldX (local variable)",
"hidden": true,
"name": "OldX"
},
{
"value": "",
"type": "Number",
"label": "OldY (local variable)",
"hidden": true,
"name": "OldY"
},
{
"value": "",
"type": "Boolean",
"label": "",
"hidden": true,
"name": "IsCalledManually"
}
],
"propertiesFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"folderName": "Catch-up speed",
"children": [
{
"propertyName": "LeftwardSpeed"
},
{
"propertyName": "RightwardSpeed"
},
{
"propertyName": "UpwardSpeed"
},
{
"propertyName": "DownwardSpeed"
}
]
},
{
"propertyName": "FollowOnX"
},
{
"propertyName": "FollowOnY"
},
{
"folderName": "Position",
"children": [
{
"propertyName": "FollowFreeAreaLeft"
},
{
"propertyName": "FollowFreeAreaRight"
},
{
"propertyName": "FollowFreeAreaTop"
},
{
"propertyName": "FollowFreeAreaBottom"
},
{
"propertyName": "CameraOffsetX"
},
{
"propertyName": "CameraOffsetY"
}
]
},
{
"folderName": "Timing",
"children": [
{
"propertyName": "CameraDelay"
},
{
"propertyName": "ForecastTime"
},
{
"propertyName": "ForecastHistoryDuration"
}
]
},
{
"propertyName": "LogLeftwardSpeed"
},
{
"propertyName": "LogRightwardSpeed"
},
{
"propertyName": "LogDownwardSpeed"
},
{
"propertyName": "LogUpwardSpeed"
},
{
"propertyName": "DelayedCenterX"
},
{
"propertyName": "DelayedCenterY"
},
{
"propertyName": "ForecastHistoryMeanX"
},
{
"propertyName": "ForecastHistoryMeanY"
},
{
"propertyName": "ForecastHistoryVarianceX"
},
{
"propertyName": "ForecastHistoryCovariance"
},
{
"propertyName": "ForecastHistoryLinearA"
},
{
"propertyName": "ForecastHistoryLinearB"
},
{
"propertyName": "ForecastedX"
},
{
"propertyName": "ForecastedY"
},
{
"propertyName": "ProjectedNewestX"
},
{
"propertyName": "ProjectedNewestY"
},
{
"propertyName": "ProjectedOldestX"
},
{
"propertyName": "ProjectedOldestY"
},
{
"propertyName": "ForecastHistoryVarianceY"
},
{
"propertyName": "Index"
},
{
"propertyName": "CameraDelayCatchUpSpeed"
},
{
"propertyName": "CameraExtraDelay"
},
{
"propertyName": "WaitingSpeedXMax"
},
{
"propertyName": "WaitingSpeedYMax"
},
{
"propertyName": "WaitingEnd"
},
{
"propertyName": "CameraDelayCatchUpDuration"
},
{
"folderName": "Maximum speed",
"children": [
{
"propertyName": "LeftwardSpeedMax"
},
{
"propertyName": "RightwardSpeedMax"
},
{
"propertyName": "UpwardSpeedMax"
},
{
"propertyName": "DownwardSpeedMax"
}
]
},
{
"propertyName": "OldX"
},
{
"propertyName": "OldY"
},
{
"propertyName": "IsCalledManually"
}
]
}
},
{
"description": "Smoothly scroll to follow a character and stabilize the camera when jumping.",
"fullName": "Smooth platformer camera",
"helpPath": "",
"iconUrl": "",
"name": "SmoothPlatformerCamera",
"objectType": "",
"previewIconUrl": "",
"quickCustomizationVisibility": "hidden",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "PlatformBehavior::IsJumping"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
},
{
"type": {
"inverted": true,
"value": "PlatformBehavior::IsFalling"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorFollowFreeAreaTop",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorFollowFreeAreaBottom",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorUpwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorDownwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorUpwardSpeedMax",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorDownwardSpeedMax",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "PlatformBehavior::IsJumping"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
},
{
"type": {
"value": "PlatformBehavior::IsFalling"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
}
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom"
},
"parameters": [
"Object",
"SmoothCamera",
"AirFollowFreeAreaTop",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop"
},
"parameters": [
"Object",
"SmoothCamera",
"AirFollowFreeAreaBottom",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"AirUpwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"AirDownwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"AirUpwardSpeedMax",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"AirDownwardSpeedMax",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothPlatformerCamera",
"type": "behavior"
}
],
"objectGroups": []
}
],
"eventsFunctionsFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"functionName": "doStepPreEvents"
}
]
},
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Platformer character behavior",
"extraInformation": [
"PlatformBehavior::PlatformerObjectBehavior"
],
"choices": [],
"name": "PlatformerCharacter"
},
{
"value": "",
"type": "Behavior",
"label": "Smooth camera behavior",
"extraInformation": [
"SmoothCamera::SmoothCamera"
],
"choices": [],
"name": "SmoothCamera"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "JumpOriginY"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area top in the air",
"group": "Position",
"name": "AirFollowFreeAreaTop"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area bottom in the air",
"group": "Position",
"name": "AirFollowFreeAreaBottom"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area top on the floor",
"group": "Position",
"name": "FloorFollowFreeAreaTop"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area bottom on the floor",
"group": "Position",
"name": "FloorFollowFreeAreaBottom"
},
{
"value": "0.95",
"type": "Number",
"label": "Upward speed in the air (in ratio per second)",
"group": "Catch-up speed",
"name": "AirUpwardSpeed"
},
{
"value": "0.95",
"type": "Number",
"label": "Downward speed in the air (in ratio per second)",
"group": "Catch-up speed",
"name": "AirDownwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Upward speed on the floor (in ratio per second)",
"group": "Catch-up speed",
"name": "FloorUpwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Downward speed on the floor (in ratio per second)",
"group": "Catch-up speed",
"name": "FloorDownwardSpeed"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Upward maximum speed in the air",
"group": "Maximum speed",
"name": "AirUpwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Downward maximum speed in the air",
"group": "Maximum speed",
"name": "AirDownwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Upward maximum speed on the floor",
"group": "Maximum speed",
"name": "FloorUpwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Downward maximum speed on the floor",
"group": "Maximum speed",
"name": "FloorDownwardSpeedMax"
}
],
"propertiesFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"propertyName": "PlatformerCharacter"
},
{
"propertyName": "SmoothCamera"
},
{
"propertyName": "JumpOriginY"
},
{
"folderName": "Position",
"children": [
{
"propertyName": "AirFollowFreeAreaTop"
},
{
"propertyName": "AirFollowFreeAreaBottom"
},
{
"propertyName": "FloorFollowFreeAreaTop"
},
{
"propertyName": "FloorFollowFreeAreaBottom"
}
]
},
{
"folderName": "Catch-up speed",
"children": [
{
"propertyName": "AirUpwardSpeed"
},
{
"propertyName": "AirDownwardSpeed"
},
{
"propertyName": "FloorUpwardSpeed"
},
{
"propertyName": "FloorDownwardSpeed"
}
]
},
{
"folderName": "Maximum speed",
"children": [
{
"propertyName": "AirUpwardSpeedMax"
},
{
"propertyName": "AirDownwardSpeedMax"
},
{
"propertyName": "FloorUpwardSpeedMax"
},
{
"propertyName": "FloorDownwardSpeedMax"
}
]
}
]
}
}
],
"eventsBasedObjects": []
},
{
"author": "",
"category": "Camera",
"dimension": "2D",
"extensionNamespace": "",
"fullName": "Room-based camera movement",
"gdevelopVersion": ">=5.5.222",
"helpPath": "https://victrisgames.itch.io/room-based-camera-movement",
"iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggZD0iTTE0LDNINEMzLjQsMywzLDMuNCwzLDR2MTBjMCwwLjYsMC40LDEsMSwxaDEwYzAuNiwwLDEtMC40LDEtMVY0QzE1LDMuNCwxNC42LDMsMTQsM3oiLz4NCgk8cGF0aCBkPSJNMTQsMTdINGMtMC42LDAtMSwwLjQtMSwxdjEwYzAsMC42LDAuNCwxLDEsMWgxMGMwLjYsMCwxLTAuNCwxLTFWMThDMTUsMTcuNCwxNC42LDE3LDE0LDE3eiIvPg0KCTxwYXRoIGQ9Ik0yOCwzSDE4Yy0wLjYsMC0xLDAuNC0xLDF2MTBjMCwwLjYsMC40LDEsMSwxaDEwYzAuNiwwLDEtMC40LDEtMVY0QzI5LDMuNCwyOC42LDMsMjgsM3oiLz4NCgk8cGF0aCBkPSJNMjgsMTdIMThjLTAuNiwwLTEsMC40LTEsMXYxMGMwLDAuNiwwLjQsMSwxLDFoMTBjMC42LDAsMS0wLjQsMS0xVjE4QzI5LDE3LjQsMjguNiwxNywyOCwxN3oiLz4NCjwvZz4NCjwvc3ZnPg0K",
"name": "RoomBasedCameraMovement",
"previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Applications and Programming/Applications and Programming_app_apps_applications_tiles.svg",
"shortDescription": "Move/zoom camera to frame the room object containing the player.",
"version": "1.0.5",
"description": [
"Move camera to the room that contains the trigger object (usually the player). If desired, change zoom to show the entire room or keep zoom static.",
"",
"How to use:",
"- Place room objects on scene",
"- Select camera zoom limits, how fast the camera should move, and the visible buffer around each room",
"- Run the \"Move and zoom camera\" action on every frame",
"- Move the trigger object (player) between rooms and the camera will center on the room that contains the trigger object.",
"",
"Tips:",
"- Use these conditions for custom logic when changing rooms : \"Camera moving\", \"Camera zooming\", and \"Room changed\"",
"- Set \"Lerp Speed\" to \"1\" to change the camera instantly"
],
"origin": {
"identifier": "RoomBasedCameraMovement",
"name": "gdevelop-extension-store"
},
"tags": [
"camera",
"follow",
"room",
"trigger",
"zoom",
"move",
"smooth"
],
"authorIds": [
"gqDaZjCfevOOxBYkK6zlhtZnXCg1",
"8Ih1aa8f5gWUp4UB2BdhQ2iXWxJ3",
"dt0tRnf2kHWJnjkrpnzTzNj9Yc63"
],
"dependencies": [],
"globalVariables": [],
"sceneVariables": [],
"eventsFunctions": [
{
"description": "Move and zoom camera to the room object that contains the trigger object (usually the player).",
"fullName": "Move and zoom camera to the room object that contains the trigger object (player)",
"functionType": "Action",
"group": "Layers and cameras",
"name": "MoveCameraToActiveRoom",
"sentence": "Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Initialize",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Save input values"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.MaxZoom",
"=",
"MaxZoom"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.LerpSpeed",
"=",
"LerpSpeed"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Set default values if none provided"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.MaxZoom",
"<=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.MaxZoom",
"=",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.LerpSpeed",
"<=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.LerpSpeed",
"=",
"0.1"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Main",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Identify the current room",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Detect which room is the current one"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionPoint"
},
"parameters": [
"RoomObject",
"TriggerObject.CenterX()",
"TriggerObject.CenterY()"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Room has NOT changed"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarObjet"
},
"parameters": [
"TriggerObject",
"__RoomBasedCameraMovement.CurrentRoomID",
"=",
"RoomObject.Variable(__RoomBasedCameraMovement.RoomID)"
]
}
],
"actions": [
{
"type": {
"value": "SetObjectVariableAsBoolean"
},
"parameters": [
"TriggerObject",
"__RoomBasedCameraMovement.RoomChanged",
"False"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Room has changed"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarObjet"
},
"parameters": [
"TriggerObject",
"__RoomBasedCameraMovement.CurrentRoomID",
"!=",
"RoomObject.Variable(__RoomBasedCameraMovement.RoomID)"
]
}
],
"actions": [
{
"type": {
"value": "SetObjectVariableAsBoolean"
},
"parameters": [
"TriggerObject",
"__RoomBasedCameraMovement.RoomChanged",
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Update CurrentRoomID variable"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"TriggerObject",
"__RoomBasedCameraMovement.CurrentRoomID",
"=",
"RoomObject.Variable(__RoomBasedCameraMovement.RoomID)"
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Move camera",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::ForEach",
"object": "RoomObject",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Assign each room a unique ID if they don't have one yet"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarObjet"
},
"parameters": [
"RoomObject",
"__RoomBasedCameraMovement.RoomID",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.MaxRoomID",
"+",
"1"
]
},
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"RoomObject",
"__RoomBasedCameraMovement.RoomID",
"=",
"Variable(__RoomBasedCameraMovement.MaxRoomID)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Check if this room is the current room"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarObjet"
},
"parameters": [
"RoomObject",
"__RoomBasedCameraMovement.RoomID",
"=",
"TriggerObject.Variable(__RoomBasedCameraMovement.CurrentRoomID)"
]
}
],
"actions": [],
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Change zoom",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Calculate the camera dimensions"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraWidth",
"=",
"RoomObject.Width()+2*OutsideBuffer"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraHeight",
"=",
"RoomObject.Height()+2*OutsideBuffer"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraZoom",
"=",
"min(SceneWindowHeight() / Variable(__RoomBasedCameraMovement.CameraHeight), SceneWindowWidth() / Variable(__RoomBasedCameraMovement.CameraWidth))"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Adjust zoom to stay within min/max values"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraZoom",
"=",
"clamp(Variable(__RoomBasedCameraMovement.CameraZoom),MinZoom,Variable(__RoomBasedCameraMovement.MaxZoom))"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Change camera zoom"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ZoomCamera"
},
"parameters": [
"",
"ceil(lerp(CameraZoom(Layer,Camera),Variable(__RoomBasedCameraMovement.CameraZoom),Variable(__RoomBasedCameraMovement.LerpSpeed))*1000)/1000",
"Layer",
"Camera"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Move camera position",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "For rooms smaller than the viewable screen, center the camera on the center of the room"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraWidth",
"<=",
"SceneWindowWidth()"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterX"
},
"parameters": [
"",
"=",
"ceil(lerp(CameraX(Layer,Camera), RoomObject.CenterX(), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100",
"Layer",
"Camera"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraHeight",
"<=",
"SceneWindowHeight()"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterY"
},
"parameters": [
"",
"=",
"ceil(lerp(CameraY(Layer,Camera), RoomObject.CenterY(), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100",
"Layer",
"Camera"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "For rooms larger than the viewable screen, center the camera on the TriggerObject and clamp camera so it only shows the room + buffer"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraWidth",
">",
"SceneWindowWidth()"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterX"
},
"parameters": [
"",
"=",
"ceil(lerp(CameraX(Layer,Camera), clamp(TriggerObject.CenterX(), \nRoomObject.CenterX() - RoomObject.Width()/2 + SceneWindowWidth()/2 - OutsideBuffer, RoomObject.CenterX() + RoomObject.Width()/2 - SceneWindowWidth()/2 + OutsideBuffer), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100",
"Layer",
"Camera"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.CameraHeight",
">",
"SceneWindowHeight()"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraCenterY"
},
"parameters": [
"",
"=",
"ceil(lerp(CameraY(Layer,Camera), clamp(TriggerObject.CenterY(), \nRoomObject.CenterY() - RoomObject.Height()/2 + SceneWindowHeight()/2 - OutsideBuffer, RoomObject.CenterY() + RoomObject.Height()/2 - SceneWindowHeight()/2 + OutsideBuffer), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100",
"Layer",
"Camera"
]
}
]
}
],
"parameters": []
}
]
}
]
}
],
"parameters": []
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Calculate \"IsCameraMoving\" condition",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Initialize",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraX",
"=",
"0"
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraY",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraX",
"=",
"CameraX(Layer, Camera)"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraY",
"=",
"CameraY(Layer, Camera)"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Check if camera position changed",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Camera has NOT moved"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraX",
"=",
"CameraX(Layer,Camera)"
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraY",
"=",
"CameraY(Layer,Camera)"
]
}
],
"actions": [
{
"type": {
"value": "SetSceneVariableAsBoolean"
},
"parameters": [
"__RoomBasedCameraMovement.CameraMoving",
"False"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Camera has moved"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraX",
"!=",
"CameraX(Layer,Camera)"
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraY",
"!=",
"CameraY(Layer,Camera)"
]
}
]
}
],
"actions": [
{
"type": {
"value": "SetSceneVariableAsBoolean"
},
"parameters": [
"__RoomBasedCameraMovement.CameraMoving",
"True"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Update with current camera position"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraX",
"=",
"CameraX(Layer, Camera)"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PrevCameraY",
"=",
"CameraY(Layer, Camera)"
]
}
]
}
]
}
],
"parameters": []
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Calculate \"IsCameraZooming\" condition",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Initialize",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PreviousZoom",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PreviousZoom",
"=",
"CameraZoom(Layer, Camera)"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Check if camera zoom changed",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Camera zoom has NOT changed"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PreviousZoom",
"=",
"CameraZoom(Layer,Camera)"
]
}
],
"actions": [
{
"type": {
"value": "SetSceneVariableAsBoolean"
},
"parameters": [
"__RoomBasedCameraMovement.CameraZooming",
"False"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Camera zoom has changed"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PreviousZoom",
"!=",
"CameraZoom(Layer,Camera)"
]
}
],
"actions": [
{
"type": {
"value": "SetSceneVariableAsBoolean"
},
"parameters": [
"__RoomBasedCameraMovement.CameraZooming",
"True"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Update with current camera zoom"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__RoomBasedCameraMovement.PreviousZoom",
"=",
"CameraZoom(Layer, Camera)"
]
}
]
}
]
}
],
"parameters": []
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Room object",
"longDescription": "Room objects are used to mark areas that should be seen by the camera.",
"name": "RoomObject",
"type": "objectList"
},
{
"description": "Trigger object (player)",
"longDescription": "When the Trigger Object touches a new Room Object, the camera will move to the new room",
"name": "TriggerObject",
"type": "objectList"
},
{
"description": "Layer",
"name": "Layer",
"type": "layer"
},
{
"description": "Lerp speed",
"longDescription": "Range: 0 to 1",
"name": "LerpSpeed",
"type": "expression"
},
{
"description": "Maximum zoom",
"name": "MaxZoom",
"type": "expression"
},
{
"description": "Minimum zoom",
"name": "MinZoom",
"type": "expression"
},
{
"description": "Outside buffer (pixels)",
"longDescription": "Minimum extra space displayed around each side the room",
"name": "OutsideBuffer",
"type": "expression"
},
{
"description": "Camera",
"name": "Camera",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Check if trigger object (usually the player) has entered a new room on this frame.",
"fullName": "Check if trigger object (player) has entered a new room",
"functionType": "Condition",
"name": "ActiveRoomChanged",
"sentence": "_PARAM1_ has just entered a new room",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ObjectVariableAsBoolean"
},
"parameters": [
"TriggerObject",
"__RoomBasedCameraMovement.RoomChanged",
"True"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Trigger object (player)",
"name": "TriggerObject",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).",
"fullName": "Check if camera is zooming",
"functionType": "Condition",
"name": "IsCameraZooming",
"sentence": "Camera is zooming",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SceneVariableAsBoolean"
},
"parameters": [
"__RoomBasedCameraMovement.CameraZooming",
"True"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [],
"objectGroups": []
},
{
"description": "Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).",
"fullName": "Check if camera is moving",
"functionType": "Condition",
"name": "IsCameraMoving",
"sentence": "Camera is moving",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SceneVariableAsBoolean"
},
"parameters": [
"__RoomBasedCameraMovement.CameraMoving",
"True"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [],
"objectGroups": []
}
],
"eventsFunctionsFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"folderName": "Layers and cameras",
"children": [
{
"functionName": "MoveCameraToActiveRoom"
}
]
},
{
"functionName": "ActiveRoomChanged"
},
{
"functionName": "IsCameraZooming"
},
{
"functionName": "IsCameraMoving"
}
]
},
"eventsBasedBehaviors": [],
"eventsBasedObjects": []
},
{
"author": "@oscuridad6661, Tristan Rhodes (@VictrisGames)",
"category": "Game mechanic",
"dimension": "",
"extensionNamespace": "",
"fullName": "Dungeon generator",
"gdevelopVersion": ">=5.5.222",
"helpPath": "https://victrisgames.itch.io/extension-dungeon-generator",
"iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXNpdGVtYXAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNOSwyVjhIMTFWMTFINUMzLjg5LDExIDMsMTEuODkgMywxM1YxNkgxVjIySDdWMTZINVYxM0gxMVYxNkg5VjIySDE1VjE2SDEzVjEzSDE5VjE2SDE3VjIySDIzVjE2SDIxVjEzQzIxLDExLjg5IDIwLjExLDExIDE5LDExSDEzVjhIMTVWMkg5WiIgLz48L3N2Zz4=",
"name": "DungeonGenerator",
"previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/sitemap.svg",
"shortDescription": "Create a procedurally generated dungeon. Includes two layouts: \"rooms and hallways\" and \"dungeon cave\".",
"version": "1.2.1",
"description": [
"How to use:",
"- Run the \"Generate Dungeon Cave\" or \"Generate Dungeon with Rooms\" action at the beginning of a scene.",
"",
"Tips:",
"- Keep the amount of space used by room objects to less than ~25% of the total map. If you add too many rooms, they will not be placed correctly and might collide with other rooms.",
"- Try using top-down controls combined with physics behavior (with no gravity) on the player and wall objects",
"- Use external layouts to place pre-designed rooms on randomly created room objects",
"- Use \"Delete Unused Terrain\" option to reduce resources used",
"- Use \"RoomID(object)\" expression to determine the starting and ending room",
"- Use \"NeighborCount(object)\" expression to find good places to place treasure. A high amount of neighbors means that the tile is a nook or cranny.",
"- Use \"IsRoomEntrance\" condition to identify hallway objects that are adjacent to a room",
"",
"An example shows how to procedurally generate dungeons or caves ([open the project online](https://editor.gdevelop.io/?project=example://dungeon-generator))."
],
"origin": {
"identifier": "DungeonGenerator",
"name": "gdevelop-extension-store"
},
"tags": [
"dungeon",
"generator",
"procedural",
"generation",
"automatic",
"build",
"create",
"rogue",
"roguelike",
"hallway",
"entrance",
"floor",
"room",
"cave"
],
"authorIds": [
"gqDaZjCfevOOxBYkK6zlhtZnXCg1",
"5iOtaj8yEsam4mIj7TEUDk4LSAe2"
],
"dependencies": [],
"globalVariables": [],
"sceneVariables": [],
"eventsFunctions": [
{
"description": "Set the size of hallway objects to be placed on the path created by the pathfinding object.",
"fullName": "Set size of hallway objects",
"functionType": "Action",
"name": "AdjustHallwaySizes",
"private": true,
"sentence": "Set the size of hallway objects _PARAM1_ to be placed on the path created by _PARAM2_ (Tile size: _PARAM4_ pixels, Hallway width: _PARAM5_ tiles)",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Adjust size of hallway objects",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Set the default size of hallway object to the tilesize"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"HallwayObject",
"=",
"TileSize "
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"HallwayObject",
"=",
"TileSize "
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Skip the first step in the path (so this function doesn't try to evaluate step 0)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.PathCounter",
">",
"1"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Vertical move (previous frame)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))",
"=",
"PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter)-1)"
]
}
],
"actions": [
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"HallwayObject",
"=",
"TileSize * max(1,HallwayWidth)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Change in direction (this frame)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))",
"=",
"PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter)+1)"
]
}
],
"actions": [
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"HallwayObject",
"=",
"TileSize * max(1,HallwayWidth)"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Horizontal move (previous frame)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))",
"=",
"PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter)-1)"
]
}
],
"actions": [
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"HallwayObject",
"=",
"TileSize * max(1,HallwayWidth)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Change in direction (this frame)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))",
"=",
"PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter)+1)"
]
}
],
"actions": [
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"HallwayObject",
"=",
"TileSize * max(1,HallwayWidth)"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.PathCounter",
"+",
"1"
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Hallway object",
"name": "HallwayObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Pathfinder object",
"name": "PathfinderObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Pathfinding behavior",
"name": "PathfindingBehavior",
"supplementaryInformation": "PathfindingBehavior::PathfindingBehavior",
"type": "behavior"
},
{
"description": "Tile size (pixels)",
"name": "TileSize",
"type": "expression"
},
{
"description": "Hallway width (tiles)",
"name": "HallwayWidth",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Fill world with terrain",
"fullName": "Fill world with terrain",
"functionType": "Action",
"name": "FillWorld",
"private": true,
"sentence": "Fill world with terrain (Tile size: _PARAM1_ pixels, Columns: _PARAM2_ tiles, Rows: _PARAM3_ tiles, Fill object: _PARAM4_)",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Populate map with terrain objects everywhere",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterX",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterY",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "MapHeight",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "MapWidth",
"conditions": [],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"TerrainObject",
"Variable(__DungeonGenerator.CounterX) * TileSize",
"Variable(__DungeonGenerator.CounterY) * TileSize",
"Layer"
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"TerrainObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"TerrainObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterX",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterX",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterY",
"+",
"1"
]
}
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Tile size (pixels)",
"name": "TileSize",
"type": "expression"
},
{
"description": "Map width (number of colums)",
"name": "MapWidth",
"type": "expression"
},
{
"description": "Map height (number of rows)",
"name": "MapHeight",
"type": "expression"
},
{
"description": "Terrain object",
"name": "TerrainObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "Generate a dungeon cave using a random walk algorithm. When the walker touches an edge of the map, it is moved back to the center of map.",
"fullName": "Generate a dungeon cave",
"functionType": "Action",
"name": "GenerateDungeonCave",
"sentence": "Generate a dungeon cave that has _PARAM8_ percent floor objects (Tile size: _PARAM1_ pixels, Map width: _PARAM2_ tiles, Map height: _PARAM3_ tiles, Terrain object: _PARAM4_, Floor object: _PARAM5_, Wall object: _PARAM12_, Walker object: _PARAM7_, Walker width/height: _PARAM9_ tiles, Minimum border: _PARAM10_ tiles, Create objects on layer: _PARAM6_, Delete unused terrain: _PARAM11_, Calculate neighbors: _PARAM13_)",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Random walk",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Calculate the number of floor objects to be created. Don't include border in calculation. Multiply border by 2 because it needs to exist on both sides (top+bottom, left+right)."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.FloorGoal",
"=",
"round((MapWidth - 2 * MinBorder) * (MapHeight - 2 * MinBorder) * FloorPercentage)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Initialize counters"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.StepsTaken",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.FloorCreated",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerRestarts",
"=",
"0"
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Walk until complete (using a 2D array)",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Start with an empty map (array)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "VariableRemoveChild"
},
"parameters": [
"__DungeonGenerator",
"\"WalkerMap\""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Create walkers",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Initialize walker offsets (these are used to make the walker take up more than one tile)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerOffsetX",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerOffsetY",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create (WalkerSize^2) quantity of objects (1x1=1, 2x2=4, 3x3=9, etc0"
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "max(1,WalkerSize)",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "max(1,WalkerSize)",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create virtual walker objects. Walker objects are ONLY used to store variables and to perform ForEach() loops. Position, size, and appearance DO NOT matter. \nTODO: These could be replaced by structure variables."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"WalkerObject",
"0",
"0",
"Layer"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Calculate the starting position (in the 2D array) and save it so it can be used for restarts"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Xpos",
"=",
"round(MapWidth/2 + Variable(__DungeonGenerator.WalkerOffsetX))"
]
},
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Ypos",
"=",
"round(MapHeight/2 + Variable(__DungeonGenerator.WalkerOffsetY))"
]
},
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.StartXpos",
"=",
"WalkerObject.Variable(__DungeonGenerator.Xpos)"
]
},
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.StartYpos",
"=",
"WalkerObject.Variable(__DungeonGenerator.Ypos)"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerOffsetX",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerOffsetX",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerOffsetY",
"+",
"1"
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Process walker movements",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.FloorCreated",
"<",
"Variable(__DungeonGenerator.FloorGoal)"
]
}
],
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Reset variables"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetSceneVariableAsBoolean"
},
"parameters": [
"__DungeonGenerator.InitiateRestart",
"False"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Calculate chance to go in each direction based on the ratio of width to height"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ChanceToGoRight",
"=",
"0.5 * (MapWidth / (MapWidth + MapHeight))"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ChanceToGoLeft",
"=",
"Variable(__DungeonGenerator.ChanceToGoRight)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ChanceToGoUp",
"=",
"0.5 * (MapHeight / (MapWidth + MapHeight))"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ChanceToGoDown",
"=",
"Variable(__DungeonGenerator.ChanceToGoUp)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Generate a random number between 0 and 1"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
"=",
"RandomFloatInRange(0,1)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move LEFT"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
">=",
"0"
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
"<",
"Variable(__DungeonGenerator.ChanceToGoLeft)"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Xpos",
"-",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move RIGHT"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
">=",
"Variable(__DungeonGenerator.ChanceToGoLeft)"
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
"<",
"Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight)"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Xpos",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move UP"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
">=",
"Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight)"
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
"<",
"Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight) + Variable(__DungeonGenerator.ChanceToGoUp)"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Ypos",
"-",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move DOWN"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
">=",
"Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight) + Variable(__DungeonGenerator.ChanceToGoUp)"
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.RandomNumber",
"<=",
"1"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Ypos",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "If ANY Walker is outside map boundries, reset ALL of them to their starting positions"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "VarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Xpos",
"<",
"MinBorder"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Xpos",
">=",
"MapWidth - MinBorder"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Ypos",
"<",
"MinBorder"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Ypos",
">=",
"MapHeight - MinBorder"
]
}
]
}
],
"actions": [
{
"type": {
"value": "SetSceneVariableAsBoolean"
},
"parameters": [
"__DungeonGenerator.InitiateRestart",
"True"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerRestarts",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Check all Walkers if they are on top of terrain"
},
{
"type": "BuiltinCommonInstructions::ForEach",
"object": "WalkerObject",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SceneVariableAsBoolean"
},
"parameters": [
"__DungeonGenerator.InitiateRestart",
"True"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move back to starting position"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Xpos",
"=",
"WalkerObject.Variable(__DungeonGenerator.StartXpos)"
]
},
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"WalkerObject",
"__DungeonGenerator.Ypos",
"=",
"WalkerObject.Variable(__DungeonGenerator.StartYpos)"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "If Walker is on Terrain, delete it"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.WalkerMap[WalkerObject.Variable(__DungeonGenerator.Xpos)][WalkerObject.Variable(__DungeonGenerator.Ypos)]",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.WalkerMap[WalkerObject.Variable(__DungeonGenerator.Xpos)][WalkerObject.Variable(__DungeonGenerator.Ypos)]",
"=",
"1"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.FloorCreated",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Track how many steps were taken"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.StepsTaken",
"+",
"1"
]
}
]
}
]
}
],
"parameters": []
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Draw map based on 2D array",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterX",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterY",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Loop through every tile in the map"
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "MapHeight",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "MapWidth",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create terrain objects when array value is 0"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.WalkerMap[Variable(__DungeonGenerator.CounterX)][Variable(__DungeonGenerator.CounterY)]",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"TerrainObject",
"Variable(__DungeonGenerator.CounterX) * TileSize",
"Variable(__DungeonGenerator.CounterY) * TileSize",
"Layer"
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"TerrainObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"TerrainObject",
"=",
"TileSize"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create floor objects when array value is 1"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.WalkerMap[Variable(__DungeonGenerator.CounterX)][Variable(__DungeonGenerator.CounterY)]",
"=",
"1"
]
}
],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"FloorObject",
"Variable(__DungeonGenerator.CounterX) * TileSize",
"Variable(__DungeonGenerator.CounterY) * TileSize",
"Layer"
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"FloorObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"FloorObject",
"=",
"TileSize"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterX",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterX",
"=",
"0"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CounterY",
"+",
"1"
]
}
]
}
]
}
],
"parameters": []
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Add walls",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Add walls"
},
{
"type": "BuiltinCommonInstructions::ForEach",
"object": "TerrainObject",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create walls where terrain touches floor"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"FloorObject",
"",
"",
"no"
]
}
],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"WallObject",
"TerrainObject.X()",
"TerrainObject.Y()",
"Layer"
]
},
{
"type": {
"value": "Delete"
},
"parameters": [
"TerrainObject",
""
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"WallObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"WallObject",
"=",
"TileSize"
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Calculate neighbors",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"CalculateNeighbors",
"True",
""
]
}
],
"actions": [
{
"type": {
"value": "DungeonGenerator::CalculateGridNeighbors"
},
"parameters": [
"",
"FloorObject",
"WallObject",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Cleanup",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Delete walkers"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"WalkerObject",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Delete unused terrain (if desired)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"DeleteUnused",
"True",
""
]
},
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"FloorObject",
"",
"",
"no"
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"TerrainObject",
""
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Tile size (pixels)",
"longDescription": "All objects are based on this size",
"name": "TileSize",
"type": "expression"
},
{
"description": "Map width (tiles)",
"name": "MapWidth",
"type": "expression"
},
{
"description": "Map height (tiles)",
"name": "MapHeight",
"type": "expression"
},
{
"description": "Terrain object",
"longDescription": "Terrain object is used to fill the map that is not covered by floors, hallways, or walls.",
"name": "TerrainObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Floor object",
"longDescription": "Floor objects are created on every tile that a walker has travelled to.",
"name": "FloorObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Layer",
"name": "Layer",
"type": "layer"
},
{
"description": "Walker object",
"longDescription": "Use a random walk algorithm to turn terrain objects into floor objects",
"name": "WalkerObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Floor percentage (Range: 0-1)",
"longDescription": "Percentage of map that will be convered by floor objects",
"name": "FloorPercentage",
"type": "expression"
},
{
"description": "Size of walker sides (tiles)",
"longDescription": "The number of tiles for each side of the square walker object. For example, 2=2x2, 3=3x3, 4=4x4.",
"name": "WalkerSize",
"type": "expression"
},
{
"description": "Minimum border",
"longDescription": "Can be used to provide a border of terrain around the map",
"name": "MinBorder",
"type": "expression"
},
{
"description": "Delete unused terrain objects",
"name": "DeleteUnused",
"type": "trueorfalse"
},
{
"description": "Wall object",
"longDescription": "Wall objects are placed between floor and terrain objects.",
"name": "WallObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Calculate neighbors",
"longDescription": "May take a few seconds to calculate neighbors on a large map, so disable this if you are not using it.",
"name": "CalculateNeighbors",
"type": "yesorno"
}
],
"objectGroups": []
},
{
"description": "Generate a dungeon by placing rooms in random locations and moving them if they collide with each other. Rooms are connected with hallways.",
"fullName": "Generate a dungeon with room and hallways",
"functionType": "Action",
"name": "GenerateDungeonRooms",
"sentence": "Generate a dungeon with rooms (Room Qty: _PARAM7_, Tile size: _PARAM1_ pixels, Map width: _PARAM2_ tiles, Map height: _PARAM3_ tiles, Terrain object: _PARAM4_, Room object: _PARAM5_, Wall object: _PARAM20_, Hallway object: _PARAM6_, Pathfinding object: _PARAM13_, Min room width: _PARAM9_ tiles, Max room width: _PARAM10_ tiles, Min room height: _PARAM11_ tiles, Max room height: _PARAM12_ tiles, Hallway width: _PARAM17_ tiles, Create objects on layer: _PARAM8_, Max separation attempts: _PARAM15_, Connect rooms in a loop: _PARAM16_, Additional paths: _PARAM18_, Delete unused terrain: _PARAM19_)",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Populate map with terrain objects everywhere",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DungeonGenerator::FillWorld"
},
"parameters": [
"",
"TileSize",
"MapWidth",
"MapHeight",
"TerrainObject",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Create rooms at random locations",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "NbObjet"
},
"parameters": [
"RoomObject",
"<",
"RoomQty"
]
}
],
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create a new room in a random location on map"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"RoomObject",
"RandomInRange(HallwayWidth, MapWidth - MaxRoomWidth - HallwayWidth) * TileSize",
"RandomInRange(HallwayWidth, MapHeight - MaxRoomHeight - HallwayWidth) * TileSize",
"Layer"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Change the room to a random size"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.RoomWidth",
"=",
"RandomInRange(MinRoomWidth, MaxRoomWidth) * TileSize"
]
},
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.RoomHeight",
"=",
"RandomInRange(MinRoomHeight, MaxRoomHeight) * TileSize"
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"RoomObject",
"=",
"RoomObject.Variable(__DungeonGenerator.RoomWidth)"
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"RoomObject",
"=",
"RoomObject.Variable(__DungeonGenerator.RoomHeight)"
]
}
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Separate rooms",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Estimate starting distance between rooms"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.MinSeparationDistance",
"=",
"ceil((sqrt(pow(MaxRoomWidth,2) + pow(MaxRoomHeight,2)))) * TileSize"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.SeparationCounter",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Set a default value for separation attempts"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"MaxSeparationAttempts",
"!=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.MaxSeparationAttempts",
"=",
"MaxSeparationAttempts"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareNumbers"
},
"parameters": [
"MaxSeparationAttempts",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.MaxSeparationAttempts",
"=",
"10000"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "If rooms are close to each other, move them to a new random location"
},
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "Distance"
},
"parameters": [
"RoomObject",
"RoomObject",
"Variable(__DungeonGenerator.MinSeparationDistance)",
""
]
},
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.SeparationCounter",
"<",
"Variable(__DungeonGenerator.MaxSeparationAttempts)"
]
}
],
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.SeparationCounter",
"+",
"1"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move in a random direction the distance of a room"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetXY"
},
"parameters": [
"RoomObject",
"+",
"RandomWithStep(-MaxRoomWidth/2,MaxRoomWidth/2,MaxRoomWidth) * TileSize",
"+",
"RandomWithStep(-MaxRoomHeight/2,MaxRoomHeight/2,MaxRoomHeight) * TileSize"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move object back into the usable part of map"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PosY"
},
"parameters": [
"RoomObject",
">",
"(MapHeight - MaxRoomWidth - HallwayWidth)*TileSize"
]
}
],
"actions": [
{
"type": {
"value": "SetY"
},
"parameters": [
"RoomObject",
"=",
"(MapHeight - MaxRoomWidth - HallwayWidth)*TileSize"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PosX"
},
"parameters": [
"RoomObject",
">",
"(MapWidth - MaxRoomWidth - HallwayWidth)*TileSize"
]
}
],
"actions": [
{
"type": {
"value": "SetX"
},
"parameters": [
"RoomObject",
"=",
"(MapWidth - MaxRoomWidth - HallwayWidth)*TileSize"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PosX"
},
"parameters": [
"RoomObject",
"<",
"HallwayWidth*TileSize"
]
}
],
"actions": [
{
"type": {
"value": "SetX"
},
"parameters": [
"RoomObject",
"=",
"HallwayWidth*TileSize"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PosY"
},
"parameters": [
"RoomObject",
"<",
"HallwayWidth*TileSize"
]
}
],
"actions": [
{
"type": {
"value": "SetY"
},
"parameters": [
"RoomObject",
"=",
"HallwayWidth*TileSize"
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Draw paths between rooms",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create pathfinder object if one doesn't exist"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "NbObjet"
},
"parameters": [
"PathfinderObject",
"<",
"1"
]
}
],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"PathfinderObject",
"0",
"0",
"Layer"
]
},
{
"type": {
"value": "PathfindingBehavior::AllowDiagonals"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"no"
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"PathfinderObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"PathfinderObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "SetZOrder"
},
"parameters": [
"PathfinderObject",
"=",
"100"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Make sure pathfinding cell size matches tile size"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PathfindingBehavior::CellWidth"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"!=",
"TileSize "
]
}
],
"actions": [
{
"type": {
"value": "PathfindingBehavior::CellWidth"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"=",
"TileSize "
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PathfindingBehavior::CellHeight"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"!=",
"TileSize "
]
}
],
"actions": [
{
"type": {
"value": "PathfindingBehavior::CellHeight"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"=",
"TileSize "
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move the pathfinder object to a random starting room"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickRandomInstance"
},
"parameters": [
"",
"RoomObject"
]
}
],
"actions": [
{
"type": {
"value": "SetXY"
},
"parameters": [
"PathfinderObject",
"=",
"RoomObject.CenterX()",
"=",
"RoomObject.CenterY()"
]
},
{
"type": {
"value": "SetObjectVariableAsBoolean"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.Visited",
"True"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Reset counter (used to assign RoomID to rooms)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CurrentRoomID",
"=",
"1"
]
},
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.RoomID",
"=",
"Variable(__DungeonGenerator.CurrentRoomID)"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CurrentRoomID",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Cycle through all rooms, always going to the nearest unvisited room"
},
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "ObjectVariableAsBoolean"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.Visited",
"False"
]
}
],
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickNearest"
},
"parameters": [
"RoomObject",
"PathfinderObject.X()",
"PathfinderObject.Y()",
""
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Assign path order if one does not exist"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarObjet"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.RoomID",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.RoomID",
"=",
"Variable(__DungeonGenerator.CurrentRoomID)"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.CurrentRoomID",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Set the destination of the pathfinder to the next room"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PathfindingBehavior::SetDestination"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"",
"RoomObject.CenterX()",
"RoomObject.CenterY()"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.PathCounter",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create a hallway object at every cell along the path to the destination"
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "PathfinderObject.PathfindingBehavior::NodeCount()",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"HallwayObject",
"PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))",
"PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))",
"Layer"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Adjust size of hallway objects"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DungeonGenerator::AdjustHallwaySizes"
},
"parameters": [
"",
"HallwayObject",
"PathfinderObject",
"PathfindingBehavior",
"TileSize",
"HallwayWidth",
""
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move the pathfinder object to the room that was just connected with a hallway"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetXY"
},
"parameters": [
"PathfinderObject",
"=",
"RoomObject.CenterX()",
"=",
"RoomObject.CenterY()"
]
},
{
"type": {
"value": "SetObjectVariableAsBoolean"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.Visited",
"True"
]
}
]
}
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Close loop",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "If desired, connect a hallway from the last room to the first room"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"CloseLoop",
"True",
""
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Set the destination of the pathfinder to the starting room"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "VarObjet"
},
"parameters": [
"RoomObject",
"__DungeonGenerator.RoomID",
"=",
"1"
]
}
],
"actions": [
{
"type": {
"value": "PathfindingBehavior::SetDestination"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"",
"RoomObject.CenterX()",
"RoomObject.CenterY()"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.PathCounter",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create a hallway object at every cell along the path to the destination"
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "PathfinderObject.PathfindingBehavior::NodeCount()",
"conditions": [],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"HallwayObject",
"PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))",
"PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))",
"Layer"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Adjust size of hallway objects"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DungeonGenerator::AdjustHallwaySizes"
},
"parameters": [
"",
"HallwayObject",
"PathfinderObject",
"PathfindingBehavior",
"TileSize",
"HallwayWidth",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move the pathfinder object to the room that was just connected with a hallway"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetXY"
},
"parameters": [
"PathfinderObject",
"=",
"RoomObject.CenterX()",
"=",
"RoomObject.CenterY()"
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Add additional paths between rooms",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "If desired, make additional random connections between rooms"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.AdditionalPathCounter",
"=",
"0"
]
}
]
},
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "VarScene"
},
"parameters": [
"__DungeonGenerator.AdditionalPathCounter",
"<",
"AdditionalPaths"
]
}
],
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Set the destination of the pathfinder to the next room (don't select the room that already has the pathfinder)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "PickRandomInstance"
},
"parameters": [
"RoomObject",
"RoomObject"
]
},
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"PathfinderObject",
"RoomObject",
"",
"",
""
]
}
],
"actions": [
{
"type": {
"value": "PathfindingBehavior::SetDestination"
},
"parameters": [
"PathfinderObject",
"PathfindingBehavior",
"",
"RoomObject.CenterX()",
"RoomObject.CenterY()"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.PathCounter",
"=",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create a hallway object at every cell along the path to the destination"
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "PathfinderObject.PathfindingBehavior::NodeCount()",
"conditions": [],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"HallwayObject",
"PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))",
"PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))",
"Layer"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Adjust size of hallway objects"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DungeonGenerator::AdjustHallwaySizes"
},
"parameters": [
"",
"HallwayObject",
"PathfinderObject",
"PathfindingBehavior",
"TileSize",
"HallwayWidth",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move the pathfinder object to the room that was just connected with a hallway"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetXY"
},
"parameters": [
"PathfinderObject",
"=",
"RoomObject.CenterX()",
"=",
"RoomObject.CenterY()"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.AdditionalPathCounter",
"+",
"1"
]
}
]
}
]
}
]
}
],
"parameters": []
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Cleanup",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Remove terrain from rooms and hallways.",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Remove terrain from inside rooms and hallways."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"RoomObject",
"",
"",
"yes"
]
},
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"HallwayObject",
"",
"",
"yes"
]
}
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"TerrainObject",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Place walls",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::ForEach",
"object": "TerrainObject",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create walls where terrain touches hallways but not rooms"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ObjectVariableAsBoolean"
},
"parameters": [
"HallwayObject",
"Deleted",
"False"
]
},
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"HallwayObject",
"",
"",
"yes"
]
},
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"HallwayObject",
"",
"",
"no"
]
},
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"RoomObject",
"",
"",
"yes"
]
}
],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"WallObject",
"TerrainObject.X()",
"TerrainObject.Y()",
"Layer"
]
},
{
"type": {
"value": "Delete"
},
"parameters": [
"TerrainObject",
""
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"WallObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"WallObject",
"=",
"TileSize"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Create walls where terrain touches rooms but not hallways"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"RoomObject",
"",
"",
"yes"
]
},
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"RoomObject",
"",
"",
"no"
]
},
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"HallwayObject",
"",
"",
"yes"
]
}
],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"WallObject",
"TerrainObject.X()",
"TerrainObject.Y()",
"Layer"
]
},
{
"type": {
"value": "Delete"
},
"parameters": [
"TerrainObject",
""
]
},
{
"type": {
"value": "ChangeWidth"
},
"parameters": [
"WallObject",
"=",
"TileSize"
]
},
{
"type": {
"value": "ChangeHeight"
},
"parameters": [
"WallObject",
"=",
"TileSize"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Delete hallways that are at least partially inside of rooms "
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"HallwayObject",
"RoomObject",
"",
"",
"yes"
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"HallwayObject",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Set boolean flag for hallways that are doorways (adjacent to room but not touching)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"HallwayObject",
"RoomObject",
"",
"",
"no"
]
}
],
"actions": [
{
"type": {
"value": "SetObjectVariableAsBoolean"
},
"parameters": [
"HallwayObject",
"__DungeonGenerator.IsRoomEntrance",
"True"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Cleanup",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Remove extra terrain, if needed"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BooleanVariable"
},
"parameters": [
"DeleteUnused",
"True",
""
]
},
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"RoomObject",
"",
"",
"no"
]
},
{
"type": {
"inverted": true,
"value": "CollisionNP"
},
"parameters": [
"TerrainObject",
"HallwayObject",
"",
"",
"no"
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"TerrainObject",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Cleanup pathfinder object"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"PathfinderObject",
""
]
}
]
}
],
"parameters": []
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Tile size (pixels)",
"longDescription": "All objects are based on this size",
"name": "TileSize",
"type": "expression"
},
{
"description": "Map width (number of colums)",
"name": "MapWidth",
"type": "expression"
},
{
"description": "Map height (number of rows)",
"name": "MapHeight",
"type": "expression"
},
{
"description": "Terrain object",
"longDescription": "Used to fill the map that is not covered by floors, hallways, or walls.",
"name": "TerrainObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Room object",
"longDescription": "Rooms are placed in random locations and will try to not overlap with other rooms. ",
"name": "RoomObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Hallway object",
"longDescription": "Used to connect room objects. They follow the path made by the pathfinder object.",
"name": "HallwayObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Number of rooms",
"longDescription": "Rooms should take less than ~25% of map to ensure non-overlapping rooms. If there are too many rooms, they may end up overlapping each other.",
"name": "RoomQty",
"type": "expression"
},
{
"description": "Layer",
"name": "Layer",
"type": "layer"
},
{
"description": "Min room width (tiles)",
"name": "MinRoomWidth",
"type": "expression"
},
{
"description": "Max room width (tiles)",
"name": "MaxRoomWidth",
"type": "expression"
},
{
"description": "Min room height (tiles)",
"name": "MinRoomHeight",
"type": "expression"
},
{
"description": "Max room height (tiles)",
"name": "MaxRoomHeight",
"type": "expression"
},
{
"description": "Pathfinder object",
"longDescription": "Used to identify where hallways are placed between rooms",
"name": "PathfinderObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
},
{
"description": "Pathfinding behavior (required)",
"name": "PathfindingBehavior",
"supplementaryInformation": "PathfindingBehavior::PathfindingBehavior",
"type": "behavior"
},
{
"description": "Max separation attempts",
"longDescription": "Number of attempts to separate overalapping rooms. When this number is reached, rooms are left in current position. (Default: 10,000)",
"name": "MaxSeparationAttempts",
"type": "expression"
},
{
"description": "Connect rooms in a loop",
"name": "CloseLoop",
"type": "yesorno"
},
{
"description": "Hallway width (tiles)",
"name": "HallwayWidth",
"type": "expression"
},
{
"description": "Additional paths between connect rooms",
"name": "AdditionalPaths",
"type": "expression"
},
{
"description": "Delete unused terrain",
"name": "DeleteUnused",
"type": "trueorfalse"
},
{
"description": "Wall object",
"name": "WallObject",
"supplementaryInformation": "Sprite",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "Calculate the number of grid neighbors around an object. Use \"NeighborCount(Object)\" expression to retrieve this value.",
"fullName": "Calculate the number of grid neighbors around an object",
"functionType": "Action",
"name": "CalculateGridNeighbors",
"sentence": "Calculate the number of grid neighbors (_PARAM2_) around _PARAM1_",
"events": [
{
"type": "BuiltinCommonInstructions::ForEach",
"object": "Object",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Save center point and size as scene variables (since we can't compare instances of the same object)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ThisCenterX",
"=",
"Object.CenterX()"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ThisCenterY",
"=",
"Object.CenterY()"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ThisObjectWidth",
"=",
"Object.Width()"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ThisNeighborCount",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Initiate offset to start looking for the top-left neighbor"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.NeighborOffsetX",
"=",
"-1"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.NeighborOffsetY",
"=",
"-1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Search for neighbors (but don't consider the center object)"
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "3",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "3",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionPoint"
},
"parameters": [
"Neighbor",
"Variable(__DungeonGenerator.ThisCenterX) + (Variable(__DungeonGenerator.NeighborOffsetX) * Variable(__DungeonGenerator.ThisObjectWidth))",
"Variable(__DungeonGenerator.ThisCenterY) + (Variable(__DungeonGenerator.NeighborOffsetY) * Variable(__DungeonGenerator.ThisObjectWidth))"
]
}
],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.ThisNeighborCount",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.NeighborOffsetX",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.NeighborOffsetX",
"=",
"-1"
]
},
{
"type": {
"value": "ModVarScene"
},
"parameters": [
"__DungeonGenerator.NeighborOffsetY",
"+",
"1"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Save neighbor count in real object"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ModVarObjet"
},
"parameters": [
"Object",
"__DungeonGenerator.Neighbors",
"=",
"Variable(__DungeonGenerator.ThisNeighborCount)"
]
}
]
}
]
}
],
"parameters": [
{
"description": "Primary object (or object group)",
"name": "Object",
"type": "objectList"
},
{
"description": "Neighbor object (or object group)",
"name": "Neighbor",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "The numerical order this room was created. (Range: 1 to total number of rooms).",
"fullName": "Creation order of room",
"functionType": "Expression",
"name": "RoomID",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"RoomObject.Variable(__DungeonGenerator.RoomID)"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Room object",
"name": "RoomObject",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "Number of grid neighbors of an object. Requires running the \"CalculateGridNeighbors\" action before using this expression.",
"fullName": "Number of grid neighbors of an object",
"functionType": "Expression",
"name": "NeighborCount",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Object.Variable(__DungeonGenerator.Neighbors)"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "Check if hallway is a room entrance.",
"fullName": "Hallway is a room entrance",
"functionType": "Condition",
"name": "IsRoomEntrance",
"sentence": "_PARAM1_ is a room entrance",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ObjectVariableAsBoolean"
},
"parameters": [
"Object",
"__DungeonGenerator.IsRoomEntrance",
"True"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Hallway object",
"name": "Object",
"type": "objectList"
}
],
"objectGroups": []
}
],
"eventsFunctionsFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"functionName": "AdjustHallwaySizes"
},
{
"functionName": "FillWorld"
},
{
"functionName": "GenerateDungeonCave"
},
{
"functionName": "GenerateDungeonRooms"
},
{
"functionName": "CalculateGridNeighbors"
},
{
"functionName": "RoomID"
},
{
"functionName": "NeighborCount"
},
{
"functionName": "IsRoomEntrance"
}
]
},
"eventsBasedBehaviors": [],
"eventsBasedObjects": []
}
],
"externalLayouts": [
{
"associatedLayout": "Game",
"name": "4Way",
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_4Way",
"persistentUuid": "f7878de8-d621-4629-afc8-5fcbb25d688d",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_right",
"persistentUuid": "c6ec3658-b64e-4cab-8a8b-98903a65fd27",
"width": 0,
"x": 640,
"y": 0,
"zOrder": 2,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_left",
"persistentUuid": "5a72b7c8-fd61-40c0-884e-b69731807160",
"width": 0,
"x": -640,
"y": 0,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_up",
"persistentUuid": "60748f83-5456-40c3-b8d2-4c527981e015",
"width": 0,
"x": 0,
"y": -480,
"zOrder": 4,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_down",
"persistentUuid": "e779ea46-1b9a-4892-8196-1c9d194e2c41",
"width": 0,
"x": 0,
"y": 480,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "93ca46b9-87ee-4e70-850c-38e9617605a3",
"width": 0,
"x": 352,
"y": 0,
"zOrder": 6,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "bea3a627-abec-44dc-89d3-5df9fbeab374",
"width": 0,
"x": 256,
"y": 0,
"zOrder": 7,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "d8c9f7bf-925d-4217-a90b-1d9ebe41031d",
"width": 0,
"x": 352,
"y": 448,
"zOrder": 8,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "1994f7b8-51f5-4ee0-b488-0209937688f9",
"width": 0,
"x": 256,
"y": 448,
"zOrder": 9,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "b4d80a60-fece-437d-b347-dc1fbc953eff",
"width": 32,
"x": 608,
"y": 288,
"zOrder": 10,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "1366481c-9a22-4235-8166-8b8e93a5ed57",
"width": 32,
"x": 608,
"y": 64,
"zOrder": 10,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "f6c9c4e5-1083-4ef9-a17d-f3cba6d22d4d",
"width": 32,
"x": 0,
"y": 64,
"zOrder": 10,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "27fae954-5c19-4172-9b74-c529557aaa45",
"width": 32,
"x": 0,
"y": 288,
"zOrder": 10,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "1c9a1e75-a0c5-4ab1-9d7c-c1da725434f9",
"width": 256,
"x": 352,
"y": 32,
"zOrder": 11,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "ea088ace-7e31-460c-9f3c-93de2deca165",
"width": 256,
"x": 32,
"y": 32,
"zOrder": 11,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "50fbe774-75cd-48e4-bff7-970e897cd1ac",
"width": 256,
"x": 32,
"y": 416,
"zOrder": 11,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "98289955-8a5a-41b3-b107-7279e92d3174",
"width": 256,
"x": 352,
"y": 416,
"zOrder": 11,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"editionSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 1.168756882148187,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
}
},
{
"associatedLayout": "Game",
"name": "LR",
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_LR",
"persistentUuid": "f69d2e29-2b65-4e41-93b2-56269c88fba4",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_right",
"persistentUuid": "e1e1e2da-9a5f-4db8-a33a-e6478e381d46",
"width": 0,
"x": 640,
"y": 0,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_left",
"persistentUuid": "114e4509-29d9-4811-b71f-45fa7072dbef",
"width": 0,
"x": -640,
"y": 0,
"zOrder": 4,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "9464a17e-8582-4fa0-96cb-21fe7416dbcf",
"width": 32,
"x": 608,
"y": 64,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "534a854e-870e-405a-aafe-90e4ea34ac6d",
"width": 32,
"x": 608,
"y": 288,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "1c1ed84d-fabc-4b62-aa04-aa2404bf37e5",
"width": 32,
"x": 0,
"y": 288,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "365e571f-966b-4c50-b2dc-41a460ea4f81",
"width": 32,
"x": 0,
"y": 64,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "8a32e300-81a4-4b6e-974a-f543901f3266",
"width": 576,
"x": 32,
"y": 32,
"zOrder": 6,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "2ac92215-360c-4c46-a49c-13b82240fd2a",
"width": 576,
"x": 32,
"y": 416,
"zOrder": 6,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"editionSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 0.9578683769070498,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
}
},
{
"associatedLayout": "Game",
"name": "UD",
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_UD",
"persistentUuid": "5e458a16-7f67-4530-87d5-c46cf1c70a3a",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_up",
"persistentUuid": "3b375ba4-cfd5-4918-9c40-366331322c8f",
"width": 0,
"x": 0,
"y": -480,
"zOrder": 2,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_down",
"persistentUuid": "a2d2d1ca-ef1a-402a-92ab-4658aaf19d79",
"width": 0,
"x": 0,
"y": 480,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 352,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "92301df8-aa43-4b2f-bb7c-3d6cfc821c47",
"width": 32,
"x": 608,
"y": 64,
"zOrder": 4,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 352,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "f7c82eb1-5746-41fe-a9cc-3bac809230d3",
"width": 32,
"x": 0,
"y": 64,
"zOrder": 4,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "6ba432e4-a0cd-47f5-965a-612871f65f40",
"width": 256,
"x": 352,
"y": 416,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "c1e0e2e3-b4d4-4ca7-969b-0ba68078cd0a",
"width": 256,
"x": 32,
"y": 416,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "c0a51d16-e7fa-482a-a6da-6540113cf26a",
"width": 256,
"x": 32,
"y": 32,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "82302b03-5c21-401c-b809-15fc60d1ca98",
"width": 256,
"x": 352,
"y": 32,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "f77e09f4-055b-4a15-ad4b-c6b165b86153",
"width": 0,
"x": 352,
"y": 0,
"zOrder": 6,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "95d8477e-82f7-431f-925b-2083fc7e501b",
"width": 0,
"x": 256,
"y": 0,
"zOrder": 7,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "9bf2e926-e0a5-43a3-9d5f-39f90ba7dca8",
"width": 0,
"x": 352,
"y": 448,
"zOrder": 8,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "06ceaa29-1c7a-49b4-9142-48b979d23440",
"width": 0,
"x": 256,
"y": 448,
"zOrder": 9,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"editionSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 0.926622364902796,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
}
},
{
"associatedLayout": "Game",
"name": "DeadL",
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_DeadL",
"persistentUuid": "37237183-4a66-4f3a-a60d-0c54a8ca4d90",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_right",
"persistentUuid": "7030b988-29fe-410d-989a-7d0c936f4c11",
"width": 0,
"x": 640,
"y": 0,
"zOrder": 2,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "e1b91469-3e8b-4eef-99e3-0434499e2e54",
"width": 32,
"x": 608,
"y": 64,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "8476a995-bde7-4d1c-ac6e-57160597b043",
"width": 32,
"x": 608,
"y": 288,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "5cd7cfb8-cb14-423e-818d-2276aab60696",
"width": 576,
"x": 32,
"y": 416,
"zOrder": 4,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "a60a2c5d-3577-4aee-a1de-114c71f2abef",
"width": 576,
"x": 32,
"y": 32,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 352,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "73cc79a0-9706-4cba-bcec-c8f3221c849f",
"width": 32,
"x": 0,
"y": 64,
"zOrder": 6,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"editionSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 0.9578683769070498,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
}
},
{
"associatedLayout": "Game",
"name": "DeadR",
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_DeadR",
"persistentUuid": "d251265b-16fb-4e8b-8721-1a08ff078396",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_left",
"persistentUuid": "bd898bf7-4f86-492c-ba74-098d55f1d43e",
"width": 0,
"x": -640,
"y": 0,
"zOrder": 2,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_skelly01",
"persistentUuid": "12a0189a-4e93-4750-a313-4598eb2edfa9",
"width": 0,
"x": 445,
"y": 158,
"zOrder": 20,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 352,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "6aba8a3b-2776-464b-bc9a-3e012acb894b",
"width": 32,
"x": 608,
"y": 64,
"zOrder": 21,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "adb9f59f-d690-4bba-846a-1dec7956fa73",
"width": 32,
"x": 0,
"y": 64,
"zOrder": 21,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 128,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "1549b163-c089-44e8-aa7a-a84c7e810524",
"width": 32,
"x": 0,
"y": 288,
"zOrder": 21,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "4ec087d5-64e4-4f69-b032-60113e3be4f5",
"width": 576,
"x": 32,
"y": 32,
"zOrder": 22,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "1d2ee646-a75d-4d0f-83a6-4e34cfcfb84e",
"width": 576,
"x": 32,
"y": 416,
"zOrder": 22,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"editionSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 1.058071480431368,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
}
},
{
"associatedLayout": "Game",
"name": "DeadUp",
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_DeadUp",
"persistentUuid": "d1a66cb2-ae2e-4f1d-8766-d9992d6d18ad",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_down",
"persistentUuid": "eddf7615-92c4-4b04-940b-6515e299e940",
"width": 0,
"x": 0,
"y": 480,
"zOrder": 2,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 352,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "11cc0725-6ebc-44e5-a90a-0259be053c45",
"width": 32,
"x": 608,
"y": 64,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 352,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "3c206b90-e596-4938-93c9-4f65f7fbe377",
"width": 32,
"x": 0,
"y": 64,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "ce6f4701-3ae8-4050-9e7c-9172fb9e5800",
"width": 576,
"x": 32,
"y": 32,
"zOrder": 4,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "b83cb5df-bc17-49f1-ac0b-3518becffbba",
"width": 256,
"x": 352,
"y": 416,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "fce2158f-0f90-46a7-8dca-4bbc529a6cad",
"width": 256,
"x": 32,
"y": 416,
"zOrder": 6,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "b7f850a5-0c39-4367-b7ed-80cd697d9f78",
"width": 0,
"x": 352,
"y": 448,
"zOrder": 7,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "f0fb7690-c7aa-45aa-aeef-c7dc178fb6f4",
"width": 0,
"x": 256,
"y": 448,
"zOrder": 8,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"editionSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 0.9578683769070498,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
}
},
{
"associatedLayout": "Game",
"name": "DeadDown",
"instances": [
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_DeadDown",
"persistentUuid": "552c6a78-2267-41c0-9d12-e4d0e1da2ef8",
"width": 0,
"x": 0,
"y": 0,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_up",
"persistentUuid": "1635740f-8b55-4918-afdf-bfd9de2db35d",
"width": 0,
"x": 0,
"y": -480,
"zOrder": 2,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 384,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "3794d543-64de-4d10-933d-8fca25ef70ff",
"width": 32,
"x": 608,
"y": 32,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 384,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "84b9b04c-8e2f-4a8f-9295-2ea3fcc98da0",
"width": 32,
"x": 0,
"y": 32,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "d70088b3-6953-4e77-b220-6862298fc7f8",
"width": 576,
"x": 32,
"y": 416,
"zOrder": 4,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "4c47fd50-16f6-4865-a12c-f9a3ca90ffa5",
"width": 256,
"x": 352,
"y": 32,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 32,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "675e179d-f323-489c-b7df-d6986db1c80f",
"width": 256,
"x": 32,
"y": 32,
"zOrder": 6,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "3c942658-08bb-455d-a15a-4e1961a4dc92",
"width": 0,
"x": 352,
"y": 0,
"zOrder": 7,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "spr_wall",
"persistentUuid": "5f2795e3-6b64-49cd-956e-5d3da83e41e7",
"width": 0,
"x": 256,
"y": 0,
"zOrder": 8,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"editionSettings": {
"grid": true,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridDepth": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridOffsetZ": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": true,
"zoomFactor": 0.9901680147497778,
"windowMask": false,
"selectedLayer": "",
"gameEditorMode": "instances-editor"
}
}
]
}