{
  "firstLayout": "",
  "gdVersion": {
    "build": 252,
    "major": 5,
    "minor": 6,
    "revision": 0
  },
  "properties": {
    "adaptGameResolutionAtRuntime": true,
    "antialiasingMode": "MSAA",
    "antialisingEnabledOnMobile": false,
    "folderProject": false,
    "orientation": "landscape",
    "packageName": "com.example.gamename",
    "pixelsRounding": false,
    "projectUuid": "033cc2ab-57ed-4e9a-b7c7-3034f343b42d",
    "scaleMode": "nearest",
    "sizeOnStartupMode": "",
    "templateSlug": "starting-platformer-pixel",
    "version": "1.0.0",
    "name": "Spotless Quarter - Copy - Copy - Copy - Copy - Copy - Copy",
    "description": "",
    "author": "",
    "windowWidth": 1280,
    "windowHeight": 720,
    "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": [
      "mobile",
      "mobile"
    ],
    "extensionProperties": [],
    "platforms": [
      {
        "name": "GDevelop JS platform"
      }
    ],
    "currentPlatform": "GDevelop JS platform"
  },
  "resources": {
    "resources": [
      {
        "file": "assets/Top arrow button.png",
        "kind": "image",
        "metadata": "",
        "name": "Top arrow button.png",
        "smoothed": true,
        "userAdded": false,
        "origin": {
          "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Flat Dark/e3943e1b23ceb90f00fc5e7c0481c5147b983fdc5397fb3690e102e53ce72d4f_Top arrow button.png",
          "name": "Top arrow button.png"
        }
      },
      {
        "file": "assets/Flat dark joystick border.png",
        "kind": "image",
        "metadata": "",
        "name": "Flat dark joystick border.png",
        "smoothed": true,
        "userAdded": false,
        "origin": {
          "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/1db606cabd7372d1494ba5934bc25bcdd72f5a213c4a27509be57c3f4d5aecca_Flat dark joystick border.png",
          "name": "Flat dark joystick border.png"
        }
      },
      {
        "file": "assets/Flat dark joystick thumb.png",
        "kind": "image",
        "metadata": "",
        "name": "Flat dark joystick thumb.png",
        "smoothed": true,
        "userAdded": false,
        "origin": {
          "identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/10167ade22c4a6b48324e6c1d1bd6dc74179d7bed0775890903f418b4a05c8a1_Flat dark joystick thumb.png",
          "name": "Flat dark joystick thumb.png"
        }
      },
      {
        "file": "assets/PickupCoin.wav",
        "kind": "audio",
        "metadata": "{\"extension\":\".wav\",\"jfxr\":{\"data\":\"{\\\"_version\\\":1,\\\"_name\\\":\\\"Jump 1\\\",\\\"_locked\\\":[],\\\"sampleRate\\\":44100,\\\"attack\\\":0,\\\"sustain\\\":0.05,\\\"sustainPunch\\\":20,\\\"decay\\\":0.3,\\\"tremoloDepth\\\":0,\\\"tremoloFrequency\\\":10,\\\"frequency\\\":400,\\\"frequencySweep\\\":0,\\\"frequencyDeltaSweep\\\":0,\\\"repeatFrequency\\\":0,\\\"frequencyJump1Onset\\\":15,\\\"frequencyJump1Amount\\\":25,\\\"frequencyJump2Onset\\\":66,\\\"frequencyJump2Amount\\\":0,\\\"harmonics\\\":0,\\\"harmonicsFalloff\\\":0.5,\\\"waveform\\\":\\\"whistle\\\",\\\"interpolateNoise\\\":true,\\\"vibratoDepth\\\":0,\\\"vibratoFrequency\\\":10,\\\"squareDuty\\\":85,\\\"squareDutySweep\\\":35,\\\"flangerOffset\\\":0,\\\"flangerOffsetSweep\\\":0,\\\"bitCrush\\\":16,\\\"bitCrushSweep\\\":0,\\\"lowPassCutoff\\\":22050,\\\"lowPassCutoffSweep\\\":0,\\\"highPassCutoff\\\":0,\\\"highPassCutoffSweep\\\":0,\\\"compression\\\":1,\\\"normalization\\\":true,\\\"amplification\\\":100}\",\"name\":\"PickupCoin\"},\"localFilePath\":\"assets/PickupCoin.wav\"}",
        "name": "PickupCoin",
        "preloadAsMusic": false,
        "preloadAsSound": true,
        "preloadInCache": false,
        "userAdded": false
      },
      {
        "file": "assets/StartingPixelPlayer.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\StartingPixelPlayer.png",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/PixelBackground.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\PixelBackground.png",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/StartingPixelGround.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\StartingPixelGround.png",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/StartingPixelCoin.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\StartingPixelCoin.png",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer2.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer2.png\"}",
        "name": "assets\\StartingPixelPlayer2",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer3.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer3.png\"}",
        "name": "assets\\StartingPixelPlayer3",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer4.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer4.png\"}",
        "name": "assets\\StartingPixelPlayer4",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer5.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer5.png\"}",
        "name": "assets\\StartingPixelPlayer5",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer6.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer6.png\"}",
        "name": "assets\\StartingPixelPlayer6",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer7.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer7.png\"}",
        "name": "assets\\StartingPixelPlayer7",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer8.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer8.png\"}",
        "name": "assets\\StartingPixelPlayer8",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer9.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer9.png\"}",
        "name": "assets\\StartingPixelPlayer9",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer10.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer10.png\"}",
        "name": "assets\\StartingPixelPlayer10",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer11.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer11.png\"}",
        "name": "assets\\StartingPixelPlayer11",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer12.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer12.png\"}",
        "name": "assets\\StartingPixelPlayer12",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer13.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer13.png\"}",
        "name": "assets\\StartingPixelPlayer13",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer14.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer14.png\"}",
        "name": "assets\\StartingPixelPlayer14",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer15.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer15",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer16.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer16",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer17.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer17",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer18.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer18",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer19.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer19",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer20.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer20",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer21.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer21",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer22.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer22",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer23.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer23",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer24.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer24",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer25.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer25",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer26.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer26",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer27.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer27",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer28.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer28",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer29.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer29",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer30.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer30",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer31.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer31",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer32.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer32",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewSprite.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "NewSprite",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewSprite2.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/NewSprite2.png\"}",
        "name": "NewSprite2",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewSprite3.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/NewSprite3.png\"}",
        "name": "NewSprite3",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewSprite4.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "NewSprite4",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewTiledSprite.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{},\"localFilePath\":\"assets/NewTiledSprite.png\"}",
        "name": "NewTiledSprite",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewTiledSprite2.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "NewTiledSprite2",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewTiledSprite3.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "NewTiledSprite3",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer33.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer33",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer34.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer34.png\"}",
        "name": "assets\\StartingPixelPlayer34",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer35.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer35.png\"}",
        "name": "assets\\StartingPixelPlayer35",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer36.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer36.png\"}",
        "name": "assets\\StartingPixelPlayer36",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer37.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer37.png\"}",
        "name": "assets\\StartingPixelPlayer37",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer38.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/assets_StartingPixelPlayer38.png\"}",
        "name": "assets\\StartingPixelPlayer38",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer39.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer39",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelPlayer40.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "assets\\StartingPixelPlayer40",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/лазанье по стенам.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "лазанье по стенам",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/лазанье по стенам2.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "лазанье по стенам2",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/лазанье по стенам3.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\"}",
        "name": "лазанье по стенам3",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/assets_StartingPixelGround.png2.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{},\"localFilePath\":\"assets/assets_StartingPixelGround.png2.png\"}",
        "name": "assets\\StartingPixelGround.png2",
        "smoothed": false,
        "userAdded": false
      },
      {
        "file": "assets/NewTiledSprite4.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "NewTiledSprite4",
        "smoothed": false,
        "userAdded": false
      }
    ]
  },
  "objects": [],
  "objectsFolderStructure": {
    "folderName": "__ROOT"
  },
  "objectsGroups": [],
  "variables": [],
  "layouts": [
    {
      "b": 255,
      "disableInputWhenNotFocused": true,
      "mangledName": "Game_32Scene",
      "name": "Game Scene",
      "r": 255,
      "standardSortMethod": true,
      "stopSoundsOnStartup": true,
      "title": "",
      "v": 255,
      "uiSettings": {
        "grid": false,
        "gridType": "rectangular",
        "gridWidth": 32,
        "gridHeight": 32,
        "gridDepth": 32,
        "gridOffsetX": 0,
        "gridOffsetY": 0,
        "gridOffsetZ": 0,
        "gridColor": 10401023,
        "gridAlpha": 0.8,
        "snap": false,
        "zoomFactor": 0.5843784410741014,
        "windowMask": false,
        "selectedLayer": ""
      },
      "objectsGroups": [],
      "variables": [],
      "instances": [
        {
          "angle": 0,
          "customSize": false,
          "height": 78.99999999999999,
          "keepRatio": true,
          "layer": "",
          "name": "Player",
          "persistentUuid": "4ded1d81-e820-41d3-868a-3f314e5850bd",
          "width": 79,
          "x": 384,
          "y": 304,
          "zOrder": 1,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "MobileControls",
          "name": "MoveJoystick",
          "persistentUuid": "855d809a-f954-4072-86d5-1d6f0b24a066",
          "width": 0,
          "x": 176,
          "y": 576,
          "zOrder": 2,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 0,
          "height": 120,
          "keepRatio": true,
          "layer": "MobileControls",
          "name": "JumpButton",
          "persistentUuid": "b1d437ce-f3b4-4799-875e-bb51f731cef0",
          "width": 120,
          "x": 1104,
          "y": 576,
          "zOrder": 3,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "4c79f19c-996c-40e5-a8fb-fcaa13753abd",
          "width": 0,
          "x": 884,
          "y": 364,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "ad149014-b1f1-44bd-8a58-27b4aa2a7d41",
          "width": 0,
          "x": 836,
          "y": 364,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "4d3402ec-1550-4679-a363-6c1361c0fe53",
          "width": 0,
          "x": 860,
          "y": 364,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "e6622e84-477f-4c15-95ff-82ba580b8e3d",
          "width": 0,
          "x": 908,
          "y": 364,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "d178725f-6851-40f2-949d-e15a89529086",
          "width": 0,
          "x": 812,
          "y": 364,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 83,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "048aca19-5e8f-4254-b42c-eefee4cd6450",
          "width": 1509,
          "x": -100,
          "y": 738,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 973,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "934abe14-07b5-4970-a710-37bcc38fa6b2",
          "width": 64,
          "x": 1467,
          "y": -76,
          "zOrder": 8,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 64,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "c80f2a20-f8b2-4954-8a3f-8cee9f8ccf56",
          "width": 1495,
          "x": -19,
          "y": -77,
          "zOrder": 9,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 770,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "4a0a4826-ccfb-411c-91ef-95ebd994b956",
          "width": 64,
          "x": -79,
          "y": -21,
          "zOrder": 10,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 143,
          "keepRatio": true,
          "layer": "",
          "name": "Platform_Ground",
          "persistentUuid": "7c2b82b9-6d28-414d-af92-ceeb707596dc",
          "width": 32,
          "x": 973,
          "y": 224,
          "zOrder": 13,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 46,
          "keepRatio": true,
          "layer": "",
          "name": "NewText",
          "persistentUuid": "74f22bd4-268d-4cd8-addd-1a2bb3733038",
          "width": 420,
          "x": 364,
          "y": 184,
          "zOrder": 14,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 64,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "038d599f-545d-4a93-a625-8182df75154e",
          "width": 103,
          "x": 1376,
          "y": 755,
          "zOrder": 15,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "Platform_Ground",
          "persistentUuid": "516f71e8-f9b4-4823-8a25-d19f644c006b",
          "width": 232,
          "x": 1215,
          "y": 582,
          "zOrder": 16,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 17,
          "keepRatio": true,
          "layer": "",
          "name": "NewText2",
          "persistentUuid": "bf7887f9-18ad-43a4-9bc0-cf397347fb07",
          "width": 94,
          "x": 1353,
          "y": 505,
          "zOrder": 17,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "дверь",
          "persistentUuid": "e00dd3de-72d7-4522-ab51-b8b3451c7695",
          "width": 0,
          "x": 1271,
          "y": 507,
          "zOrder": 18,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "12a1a1be-cd1c-4f89-9d1a-4218c7190c94",
          "width": 272,
          "x": 278,
          "y": 344,
          "zOrder": 21,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "3a1e440c-fb3b-4254-81b8-d0d928c37bfa",
          "width": 314,
          "x": 432,
          "y": 473,
          "zOrder": 22,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "1681e047-72ab-45b4-86ed-a20265c1ebc3",
          "width": 147,
          "x": 790,
          "y": 387,
          "zOrder": 23,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "956fe201-9340-4677-96b7-32961c1d0754",
          "width": 304,
          "x": 1050,
          "y": 201,
          "zOrder": 24,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        }
      ],
      "objects": [
        {
          "adaptCollisionMaskAutomatically": false,
          "assetStoreId": "",
          "name": "Player",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "isFolded": true,
              "name": "PlatformerMultitouchMapper",
              "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper",
              "Property": "PlatformerObject",
              "ControllerIdentifier": 1,
              "JoystickIdentifier": "Primary",
              "JumpButton": "A"
            },
            {
              "name": "PlatformerObject",
              "type": "PlatformBehavior::PlatformerObjectBehavior",
              "acceleration": 500,
              "deceleration": 750,
              "gravity": 525,
              "jumpSpeed": 360,
              "jumpSustainTime": 0.3,
              "maxFallingSpeed": 400,
              "maxSpeed": 200,
              "canGoDownFromJumpthru": true,
              "canGrabPlatforms": false,
              "canGrabWithoutMoving": false,
              "ignoreDefaultControls": false,
              "ladderClimbingSpeed": 200,
              "slopeMaxAngle": 60,
              "useLegacyTrajectory": false,
              "xGrabTolerance": 10,
              "yGrabOffset": 0
            },
            {
              "name": "SmoothCamera",
              "type": "SmoothCamera::SmoothCamera",
              "LeftwardSpeed": 0.99,
              "RightwardSpeed": 0.99,
              "UpwardSpeed": 0.99,
              "DownwardSpeed": 0.99,
              "FollowOnX": true,
              "FollowOnY": true,
              "FollowFreeAreaLeft": 0,
              "FollowFreeAreaRight": 0,
              "FollowFreeAreaTop": 0,
              "FollowFreeAreaBottom": 0,
              "CameraOffsetX": 0,
              "CameraOffsetY": 0,
              "CameraDelay": 0,
              "ForecastTime": 0,
              "ForecastHistoryDuration": 0,
              "LogLeftwardSpeed": 2.0247e-320,
              "LogRightwardSpeed": 2.0247e-320,
              "LogDownwardSpeed": 2.0247e-320,
              "LogUpwardSpeed": 2.0247e-320,
              "DelayedCenterX": 2.0247e-320,
              "DelayedCenterY": 2.0247e-320,
              "ForecastHistoryMeanX": 2.0247e-320,
              "ForecastHistoryMeanY": 2.0247e-320,
              "ForecastHistoryVarianceX": 2.0247e-320,
              "ForecastHistoryCovariance": 2.0247e-320,
              "ForecastHistoryLinearA": 2.0247e-320,
              "ForecastHistoryLinearB": 2.0247e-320,
              "ForecastedX": 2.0247e-320,
              "ForecastedY": 2.0247e-320,
              "ProjectedNewestX": 2.0247e-320,
              "ProjectedNewestY": 2.0247e-320,
              "ProjectedOldestX": 2.0247e-320,
              "ProjectedOldestY": 2.0247e-320,
              "ForecastHistoryVarianceY": 2.0247e-320,
              "Index": 2.0247e-320,
              "CameraDelayCatchUpSpeed": 0,
              "CameraExtraDelay": 2.0247e-320,
              "WaitingSpeedXMax": 2.0247e-320,
              "WaitingSpeedYMax": 2.0247e-320,
              "WaitingEnd": 2.0247e-320,
              "CameraDelayCatchUpDuration": 2.0247e-320,
              "LeftwardSpeedMax": 9000,
              "RightwardSpeedMax": 9000,
              "UpwardSpeedMax": 9000,
              "DownwardSpeedMax": 9000,
              "OldX": 9000.000000007454,
              "OldY": 9000.000000007454,
              "IsCalledManually": false
            }
          ],
          "animations": [
            {
              "name": "стоит",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.15,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer15",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer4",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer5",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer6",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer7",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer8",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer9",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer10",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer11",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer12",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer13",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer14",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer16",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer17",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer18",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer19",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer20",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer21",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer22",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer23",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer24",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer25",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer3",
                      "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
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "бежит",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer26",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer27",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer28",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer29",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer30",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer31",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer32",
                      "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
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "лазанье по стенам",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "лазанье по стенам",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "лазанье по стенам2",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "лазанье по стенам3",
                      "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
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "прыжок",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": false,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.25,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer34",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer35",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer36",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer37",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer38",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer39",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer40",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer2",
                      "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": false,
          "assetStoreId": "",
          "name": "Coins",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "animations": [
            {
              "name": "",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": false,
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": false,
                      "image": "assets\\StartingPixelCoin.png",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 0,
                        "y": 0
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": []
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "adaptCollisionMaskAutomatically": true,
          "assetStoreId": "9c727020616afdd6ba786b8af206a90481f07db0ca175ed6a4cc5b7e01c66d06",
          "name": "JumpButton",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "ButtonFSM",
              "type": "ButtonStates::ButtonFSM",
              "ShouldCheckHovering": true,
              "State": "Idle",
              "TouchId": 0,
              "TouchIsInside": false,
              "MouseIsInside": false,
              "Index": 2.0247e-320
            },
            {
              "name": "ButtonScaleTween",
              "type": "ButtonStates::ButtonScaleTween",
              "Scale": "Scale",
              "ButtonFSM": "ButtonFSM",
              "Tween": "Tween",
              "IdleScale": 1.5,
              "FocusedScale": 1.45,
              "FadeInDuration": 0.05,
              "FadeOutDuration": 0.1,
              "PressedScale": 1.45,
              "FadeInEasing": "easeInOutQuad",
              "FadeOutEasing": "easeInOutQuad",
              "PreviousState": "Idle"
            },
            {
              "name": "MultitouchButton",
              "type": "SpriteMultitouchJoystick::MultitouchButton",
              "ControllerIdentifier": 1,
              "ButtonIdentifier": "A",
              "TouchId": 0,
              "TouchIndex": 2.0247e-320,
              "IsReleased": false
            },
            {
              "name": "Tween",
              "type": "Tween::TweenBehavior"
            }
          ],
          "animations": [
            {
              "name": "",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "timeBetweenFrames": 0.025,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "Top arrow button.png",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 40,
                        "y": 40
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": [
                        [
                          {
                            "x": 0,
                            "y": 0
                          },
                          {
                            "x": 80,
                            "y": 0
                          },
                          {
                            "x": 80,
                            "y": 80
                          },
                          {
                            "x": 0,
                            "y": 80
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d",
          "name": "MoveJoystick",
          "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
          "variant": "",
          "variables": [],
          "effects": [],
          "behaviors": [],
          "content": {},
          "childrenContent": {
            "Border": {
              "adaptCollisionMaskAutomatically": false,
              "updateIfNotVisible": false,
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": [
                        {
                          "hasCustomCollisionMask": false,
                          "image": "Flat dark joystick border.png",
                          "points": [],
                          "originPoint": {
                            "name": "origine",
                            "x": 0,
                            "y": 0
                          },
                          "centerPoint": {
                            "automatic": true,
                            "name": "centre",
                            "x": 0,
                            "y": 0
                          },
                          "customCollisionMask": []
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "Thumb": {
              "adaptCollisionMaskAutomatically": false,
              "updateIfNotVisible": false,
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": [
                        {
                          "hasCustomCollisionMask": false,
                          "image": "Flat dark joystick thumb.png",
                          "points": [],
                          "originPoint": {
                            "name": "origine",
                            "x": 0,
                            "y": 0
                          },
                          "centerPoint": {
                            "automatic": true,
                            "name": "centre",
                            "x": 0,
                            "y": 0
                          },
                          "customCollisionMask": []
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          }
        },
        {
          "assetStoreId": "",
          "height": 32,
          "name": "Platform_Ground",
          "texture": "assets\\StartingPixelGround.png2",
          "type": "TiledSpriteObject::TiledSprite",
          "width": 32,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Platform",
              "type": "PlatformBehavior::PlatformBehavior",
              "canBeGrabbed": false,
              "platformType": "NormalPlatform",
              "yGrabOffset": 0
            }
          ]
        },
        {
          "adaptCollisionMaskAutomatically": true,
          "assetStoreId": "",
          "name": "килбокс",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "animations": [
            {
              "name": "NewSprite",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": false,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "NewSprite2",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 0,
                        "y": 0
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": [
                        [
                          {
                            "x": 0,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 64
                          },
                          {
                            "x": 0,
                            "y": 64
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "NewSprite3",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 0,
                        "y": 0
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": [
                        [
                          {
                            "x": 0,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 64
                          },
                          {
                            "x": 0,
                            "y": 64
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "adaptCollisionMaskAutomatically": true,
          "assetStoreId": "",
          "name": "дверь",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Platform",
              "type": "PlatformBehavior::PlatformBehavior",
              "canBeGrabbed": true,
              "platformType": "NormalPlatform",
              "yGrabOffset": 0
            }
          ],
          "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": 20,
                            "y": 5
                          },
                          {
                            "x": 55,
                            "y": 5
                          },
                          {
                            "x": 55,
                            "y": 64
                          },
                          {
                            "x": 20,
                            "y": 64
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "assetStoreId": "",
          "bold": false,
          "italic": false,
          "name": "NewText",
          "smoothed": true,
          "type": "TextObject::Text",
          "underlined": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "string": "если зажмешь клавишу up и сталкиваешься со стеной,то ты можешь сделать двойной прыжок\n",
          "font": "",
          "textAlignment": "left",
          "characterSize": 20,
          "color": {
            "b": 0,
            "g": 0,
            "r": 0
          },
          "content": {
            "bold": false,
            "isOutlineEnabled": false,
            "isShadowEnabled": false,
            "italic": false,
            "outlineColor": "255;255;255",
            "outlineThickness": 2,
            "shadowAngle": 90,
            "shadowBlurRadius": 2,
            "shadowColor": "0;0;0",
            "shadowDistance": 4,
            "shadowOpacity": 127,
            "smoothed": true,
            "underlined": false,
            "text": "если зажмешь клавишу up и сталкиваешься со стеной,то ты можешь сделать двойной прыжок\n",
            "font": "",
            "textAlignment": "left",
            "verticalTextAlignment": "top",
            "characterSize": 20,
            "lineHeight": 0,
            "color": "0;0;0"
          }
        },
        {
          "assetStoreId": "",
          "bold": false,
          "italic": false,
          "name": "NewText2",
          "smoothed": true,
          "type": "TextObject::Text",
          "underlined": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "string": "это секретка,молодец\n",
          "font": "",
          "textAlignment": "left",
          "characterSize": 20,
          "color": {
            "b": 0,
            "g": 0,
            "r": 0
          },
          "content": {
            "bold": false,
            "isOutlineEnabled": false,
            "isShadowEnabled": false,
            "italic": false,
            "outlineColor": "255;255;255",
            "outlineThickness": 2,
            "shadowAngle": 90,
            "shadowBlurRadius": 2,
            "shadowColor": "0;0;0",
            "shadowDistance": 4,
            "shadowOpacity": 127,
            "smoothed": true,
            "underlined": false,
            "text": "это секретка,молодец\n",
            "font": "",
            "textAlignment": "left",
            "verticalTextAlignment": "top",
            "characterSize": 20,
            "lineHeight": 0,
            "color": "0;0;0"
          }
        },
        {
          "assetStoreId": "",
          "height": 32,
          "name": "NewTiledSprite",
          "texture": "NewTiledSprite4",
          "type": "TiledSpriteObject::TiledSprite",
          "width": 32,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "canBeGrabbed": true,
              "name": "Platform",
              "platformType": "NormalPlatform",
              "type": "PlatformBehavior::PlatformBehavior",
              "yGrabOffset": 0
            }
          ]
        }
      ],
      "objectsFolderStructure": {
        "folderName": "__ROOT",
        "children": [
          {
            "objectName": "Player"
          },
          {
            "objectName": "килбокс"
          },
          {
            "objectName": "дверь"
          },
          {
            "objectName": "Platform_Ground"
          },
          {
            "objectName": "NewText2"
          },
          {
            "objectName": "Coins"
          },
          {
            "folderName": "Mobile Controls",
            "children": [
              {
                "objectName": "MoveJoystick"
              },
              {
                "objectName": "JumpButton"
              }
            ]
          },
          {
            "objectName": "NewText"
          },
          {
            "objectName": "NewTiledSprite"
          }
        ]
      },
      "events": [
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "Coins",
                "",
                "",
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "Delete"
              },
              "parameters": [
                "Coins",
                ""
              ]
            },
            {
              "type": {
                "value": "PlaySound"
              },
              "parameters": [
                "",
                "PickupCoin",
                "",
                "50",
                "RandomFloatInRange(1,1.1)"
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "килбокс",
                "",
                "",
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "PushScene"
              },
              "parameters": [
                "",
                "\"Game Scene\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "DepartScene"
              },
              "parameters": [
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "ZoomCamera"
              },
              "parameters": [
                "",
                "2",
                "",
                ""
              ]
            },
            {
              "type": {
                "value": "ZoomCamera"
              },
              "parameters": [
                "",
                "2",
                "\"Background\"",
                ""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "SceneInstancesCount"
              },
              "parameters": [
                "Coins",
                "Coins",
                "=",
                "0"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "Create"
              },
              "parameters": [
                "",
                "дверь",
                "1102",
                "125",
                ""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "дверь",
                "",
                "",
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "PushScene"
              },
              "parameters": [
                "",
                "\"Game Scene2\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "Platform_Ground",
                "",
                "",
                ""
              ]
            },
            {
              "type": {
                "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl"
              },
              "parameters": [
                "Player",
                "PlatformerObject",
                "\"Up\""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "PlatformBehavior::SetCanJump"
              },
              "parameters": [
                "Player",
                "PlatformerObject"
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle"
              },
              "parameters": [
                "Player",
                "PlatformerObject"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "AnimatableCapability::AnimatableBehavior::SetName"
              },
              "parameters": [
                "Player",
                "Animation",
                "=",
                "\"бежит\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "HasNoForces"
              },
              "parameters": [
                "Player"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "AnimatableCapability::AnimatableBehavior::SetName"
              },
              "parameters": [
                "Player",
                "Animation",
                "=",
                "\"стоит\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "PlatformBehavior::IsJumping"
              },
              "parameters": [
                "Player",
                "PlatformerObject"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "AnimatableCapability::AnimatableBehavior::SetName"
              },
              "parameters": [
                "Player",
                "Animation",
                "=",
                "\"прыжок\""
              ]
            }
          ]
        }
      ],
      "layers": [
        {
          "ambientLightColorB": 200,
          "ambientLightColorG": 200,
          "ambientLightColorR": 200,
          "camera2DPlaneMaxDrawingDistance": 5000,
          "camera3DFarPlaneDistance": 10000,
          "camera3DFieldOfView": 45,
          "camera3DNearPlaneDistance": 3,
          "cameraType": "",
          "followBaseLayerCamera": false,
          "isLightingLayer": false,
          "isLocked": false,
          "name": "Background",
          "renderingType": "",
          "visibility": true,
          "cameras": [],
          "effects": []
        },
        {
          "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": []
        },
        {
          "ambientLightColorB": 200,
          "ambientLightColorG": 200,
          "ambientLightColorR": 200,
          "camera2DPlaneMaxDrawingDistance": 5000,
          "camera3DFarPlaneDistance": 10000,
          "camera3DFieldOfView": 45,
          "camera3DNearPlaneDistance": 3,
          "cameraType": "",
          "followBaseLayerCamera": false,
          "isLightingLayer": false,
          "isLocked": false,
          "name": "MobileControls",
          "renderingType": "",
          "visibility": true,
          "cameras": [],
          "effects": []
        }
      ],
      "behaviorsSharedData": [
        {
          "name": "Animation",
          "type": "AnimatableCapability::AnimatableBehavior"
        },
        {
          "name": "ButtonFSM",
          "type": "ButtonStates::ButtonFSM"
        },
        {
          "name": "ButtonScaleTween",
          "type": "ButtonStates::ButtonScaleTween"
        },
        {
          "name": "Effect",
          "type": "EffectCapability::EffectBehavior"
        },
        {
          "name": "Flippable",
          "type": "FlippableCapability::FlippableBehavior"
        },
        {
          "name": "MultitouchButton",
          "type": "SpriteMultitouchJoystick::MultitouchButton"
        },
        {
          "name": "Opacity",
          "type": "OpacityCapability::OpacityBehavior"
        },
        {
          "name": "Platform",
          "type": "PlatformBehavior::PlatformBehavior"
        },
        {
          "name": "PlatformerMultitouchMapper",
          "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper"
        },
        {
          "name": "PlatformerObject",
          "type": "PlatformBehavior::PlatformerObjectBehavior"
        },
        {
          "name": "Resizable",
          "type": "ResizableCapability::ResizableBehavior"
        },
        {
          "name": "Scale",
          "type": "ScalableCapability::ScalableBehavior"
        },
        {
          "name": "SmoothCamera",
          "type": "SmoothCamera::SmoothCamera"
        },
        {
          "name": "Text",
          "type": "TextContainerCapability::TextContainerBehavior"
        },
        {
          "name": "Tween",
          "type": "Tween::TweenBehavior"
        }
      ]
    },
    {
      "b": 255,
      "disableInputWhenNotFocused": true,
      "mangledName": "Game_32Scene2",
      "name": "Game Scene2",
      "r": 255,
      "standardSortMethod": true,
      "stopSoundsOnStartup": true,
      "title": "",
      "v": 255,
      "uiSettings": {
        "grid": false,
        "gridType": "rectangular",
        "gridWidth": 32,
        "gridHeight": 32,
        "gridDepth": 32,
        "gridOffsetX": 0,
        "gridOffsetY": 0,
        "gridOffsetZ": 0,
        "gridColor": 10401023,
        "gridAlpha": 0.8,
        "snap": false,
        "zoomFactor": 0.5843784410741014,
        "windowMask": false,
        "selectedLayer": ""
      },
      "objectsGroups": [],
      "variables": [],
      "instances": [
        {
          "angle": 0,
          "customSize": false,
          "height": 78.99999999999999,
          "keepRatio": true,
          "layer": "",
          "name": "Player",
          "persistentUuid": "4ded1d81-e820-41d3-868a-3f314e5850bd",
          "width": 79,
          "x": 384,
          "y": 304,
          "zOrder": 1,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "MobileControls",
          "name": "MoveJoystick",
          "persistentUuid": "855d809a-f954-4072-86d5-1d6f0b24a066",
          "width": 0,
          "x": 176,
          "y": 576,
          "zOrder": 2,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 0,
          "height": 120,
          "keepRatio": true,
          "layer": "MobileControls",
          "name": "JumpButton",
          "persistentUuid": "b1d437ce-f3b4-4799-875e-bb51f731cef0",
          "width": 120,
          "x": 1104,
          "y": 576,
          "zOrder": 3,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "4c79f19c-996c-40e5-a8fb-fcaa13753abd",
          "width": 0,
          "x": 913,
          "y": 80,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "ad149014-b1f1-44bd-8a58-27b4aa2a7d41",
          "width": 0,
          "x": 913,
          "y": 46,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "4d3402ec-1550-4679-a363-6c1361c0fe53",
          "width": 0,
          "x": 860,
          "y": 248,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "e6622e84-477f-4c15-95ff-82ba580b8e3d",
          "width": 0,
          "x": 954,
          "y": 264,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "Coins",
          "persistentUuid": "d178725f-6851-40f2-949d-e15a89529086",
          "width": 0,
          "x": 855,
          "y": 215,
          "zOrder": 6,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 83,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "048aca19-5e8f-4254-b42c-eefee4cd6450",
          "width": 1509,
          "x": -100,
          "y": 738,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 973,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "934abe14-07b5-4970-a710-37bcc38fa6b2",
          "width": 64,
          "x": 1467,
          "y": -76,
          "zOrder": 8,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 64,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "c80f2a20-f8b2-4954-8a3f-8cee9f8ccf56",
          "width": 1563,
          "x": -46,
          "y": -304,
          "zOrder": 9,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 770,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "4a0a4826-ccfb-411c-91ef-95ebd994b956",
          "width": 64,
          "x": -79,
          "y": -21,
          "zOrder": 10,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 143,
          "keepRatio": true,
          "layer": "",
          "name": "Platform_Ground",
          "persistentUuid": "7c2b82b9-6d28-414d-af92-ceeb707596dc",
          "width": 32,
          "x": 973,
          "y": 224,
          "zOrder": 13,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 46,
          "keepRatio": true,
          "layer": "",
          "name": "NewText",
          "persistentUuid": "74f22bd4-268d-4cd8-addd-1a2bb3733038",
          "width": 420,
          "x": 364,
          "y": 184,
          "zOrder": 14,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 64,
          "keepRatio": true,
          "layer": "",
          "name": "килбокс",
          "persistentUuid": "038d599f-545d-4a93-a625-8182df75154e",
          "width": 103,
          "x": 1376,
          "y": 755,
          "zOrder": 15,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "12a1a1be-cd1c-4f89-9d1a-4218c7190c94",
          "width": 272,
          "x": 278,
          "y": 344,
          "zOrder": 21,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "3a1e440c-fb3b-4254-81b8-d0d928c37bfa",
          "width": 314,
          "x": 432,
          "y": 473,
          "zOrder": 22,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "1681e047-72ab-45b4-86ed-a20265c1ebc3",
          "width": 147,
          "x": 790,
          "y": 387,
          "zOrder": 23,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 32,
          "keepRatio": true,
          "layer": "",
          "name": "NewTiledSprite",
          "persistentUuid": "956fe201-9340-4677-96b7-32961c1d0754",
          "width": 362,
          "x": 393,
          "y": 110,
          "zOrder": 24,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 138,
          "keepRatio": true,
          "layer": "",
          "name": "Platform_Ground",
          "persistentUuid": "3c771ebe-3289-4917-ab8d-4c260992e423",
          "width": 32,
          "x": 816,
          "y": 170,
          "zOrder": 25,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 123,
          "keepRatio": true,
          "layer": "",
          "name": "Platform_Ground",
          "persistentUuid": "e1dc3ff2-331e-4bb0-8459-a8def94605f5",
          "width": 32,
          "x": 932,
          "y": 14,
          "zOrder": 26,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        }
      ],
      "objects": [
        {
          "adaptCollisionMaskAutomatically": false,
          "assetStoreId": "",
          "name": "Player",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "isFolded": true,
              "name": "PlatformerMultitouchMapper",
              "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper",
              "Property": "PlatformerObject",
              "ControllerIdentifier": 1,
              "JoystickIdentifier": "Primary",
              "JumpButton": "A"
            },
            {
              "name": "PlatformerObject",
              "type": "PlatformBehavior::PlatformerObjectBehavior",
              "acceleration": 500,
              "deceleration": 750,
              "gravity": 525,
              "jumpSpeed": 360,
              "jumpSustainTime": 0.3,
              "maxFallingSpeed": 400,
              "maxSpeed": 200,
              "canGoDownFromJumpthru": true,
              "canGrabPlatforms": false,
              "canGrabWithoutMoving": false,
              "ignoreDefaultControls": false,
              "ladderClimbingSpeed": 200,
              "slopeMaxAngle": 60,
              "useLegacyTrajectory": false,
              "xGrabTolerance": 10,
              "yGrabOffset": 0
            },
            {
              "name": "SmoothCamera",
              "type": "SmoothCamera::SmoothCamera",
              "LeftwardSpeed": 0.99,
              "RightwardSpeed": 0.99,
              "UpwardSpeed": 0.99,
              "DownwardSpeed": 0.99,
              "FollowOnX": true,
              "FollowOnY": true,
              "FollowFreeAreaLeft": 0,
              "FollowFreeAreaRight": 0,
              "FollowFreeAreaTop": 0,
              "FollowFreeAreaBottom": 0,
              "CameraOffsetX": 0,
              "CameraOffsetY": 0,
              "CameraDelay": 0,
              "ForecastTime": 0,
              "ForecastHistoryDuration": 0,
              "LogLeftwardSpeed": 2.0247e-320,
              "LogRightwardSpeed": 2.0247e-320,
              "LogDownwardSpeed": 2.0247e-320,
              "LogUpwardSpeed": 2.0247e-320,
              "DelayedCenterX": 2.0247e-320,
              "DelayedCenterY": 2.0247e-320,
              "ForecastHistoryMeanX": 2.0247e-320,
              "ForecastHistoryMeanY": 2.0247e-320,
              "ForecastHistoryVarianceX": 2.0247e-320,
              "ForecastHistoryCovariance": 2.0247e-320,
              "ForecastHistoryLinearA": 2.0247e-320,
              "ForecastHistoryLinearB": 2.0247e-320,
              "ForecastedX": 2.0247e-320,
              "ForecastedY": 2.0247e-320,
              "ProjectedNewestX": 2.0247e-320,
              "ProjectedNewestY": 2.0247e-320,
              "ProjectedOldestX": 2.0247e-320,
              "ProjectedOldestY": 2.0247e-320,
              "ForecastHistoryVarianceY": 2.0247e-320,
              "Index": 2.0247e-320,
              "CameraDelayCatchUpSpeed": 0,
              "CameraExtraDelay": 2.0247e-320,
              "WaitingSpeedXMax": 2.0247e-320,
              "WaitingSpeedYMax": 2.0247e-320,
              "WaitingEnd": 2.0247e-320,
              "CameraDelayCatchUpDuration": 2.0247e-320,
              "LeftwardSpeedMax": 9000,
              "RightwardSpeedMax": 9000,
              "UpwardSpeedMax": 9000,
              "DownwardSpeedMax": 9000,
              "OldX": 9000.000000007454,
              "OldY": 9000.000000007454,
              "IsCalledManually": false
            }
          ],
          "animations": [
            {
              "name": "стоит",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.15,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer15",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer4",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer5",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer6",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer7",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer8",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer9",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer10",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer11",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer12",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer13",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer14",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer16",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer17",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer18",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer19",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer20",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer21",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer22",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer23",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer24",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer25",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer3",
                      "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
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "бежит",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer26",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer27",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer28",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer29",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer30",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer31",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer32",
                      "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
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "лазанье по стенам",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "лазанье по стенам",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "лазанье по стенам2",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "лазанье по стенам3",
                      "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
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name": "прыжок",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": false,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.25,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer34",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer35",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer36",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer37",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer38",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer39",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer40",
                      "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
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "assets\\StartingPixelPlayer2",
                      "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": false,
          "assetStoreId": "",
          "name": "Coins",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "animations": [
            {
              "name": "",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": false,
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": false,
                      "image": "assets\\StartingPixelCoin.png",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 0,
                        "y": 0
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": []
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "adaptCollisionMaskAutomatically": true,
          "assetStoreId": "9c727020616afdd6ba786b8af206a90481f07db0ca175ed6a4cc5b7e01c66d06",
          "name": "JumpButton",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "ButtonFSM",
              "type": "ButtonStates::ButtonFSM",
              "ShouldCheckHovering": true,
              "State": "Idle",
              "TouchId": 0,
              "TouchIsInside": false,
              "MouseIsInside": false,
              "Index": 2.0247e-320
            },
            {
              "name": "ButtonScaleTween",
              "type": "ButtonStates::ButtonScaleTween",
              "Scale": "Scale",
              "ButtonFSM": "ButtonFSM",
              "Tween": "Tween",
              "IdleScale": 1.5,
              "FocusedScale": 1.45,
              "FadeInDuration": 0.05,
              "FadeOutDuration": 0.1,
              "PressedScale": 1.45,
              "FadeInEasing": "easeInOutQuad",
              "FadeOutEasing": "easeInOutQuad",
              "PreviousState": "Idle"
            },
            {
              "name": "MultitouchButton",
              "type": "SpriteMultitouchJoystick::MultitouchButton",
              "ControllerIdentifier": 1,
              "ButtonIdentifier": "A",
              "TouchId": 0,
              "TouchIndex": 2.0247e-320,
              "IsReleased": false
            },
            {
              "name": "Tween",
              "type": "Tween::TweenBehavior"
            }
          ],
          "animations": [
            {
              "name": "",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": true,
                  "timeBetweenFrames": 0.025,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "Top arrow button.png",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 40,
                        "y": 40
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": [
                        [
                          {
                            "x": 0,
                            "y": 0
                          },
                          {
                            "x": 80,
                            "y": 0
                          },
                          {
                            "x": 80,
                            "y": 80
                          },
                          {
                            "x": 0,
                            "y": 80
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d",
          "name": "MoveJoystick",
          "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
          "variant": "",
          "variables": [],
          "effects": [],
          "behaviors": [],
          "content": {},
          "childrenContent": {
            "Border": {
              "adaptCollisionMaskAutomatically": false,
              "updateIfNotVisible": false,
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": [
                        {
                          "hasCustomCollisionMask": false,
                          "image": "Flat dark joystick border.png",
                          "points": [],
                          "originPoint": {
                            "name": "origine",
                            "x": 0,
                            "y": 0
                          },
                          "centerPoint": {
                            "automatic": true,
                            "name": "centre",
                            "x": 0,
                            "y": 0
                          },
                          "customCollisionMask": []
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "Thumb": {
              "adaptCollisionMaskAutomatically": false,
              "updateIfNotVisible": false,
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": [
                        {
                          "hasCustomCollisionMask": false,
                          "image": "Flat dark joystick thumb.png",
                          "points": [],
                          "originPoint": {
                            "name": "origine",
                            "x": 0,
                            "y": 0
                          },
                          "centerPoint": {
                            "automatic": true,
                            "name": "centre",
                            "x": 0,
                            "y": 0
                          },
                          "customCollisionMask": []
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          }
        },
        {
          "assetStoreId": "",
          "height": 32,
          "name": "Platform_Ground",
          "texture": "assets\\StartingPixelGround.png2",
          "type": "TiledSpriteObject::TiledSprite",
          "width": 32,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Platform",
              "type": "PlatformBehavior::PlatformBehavior",
              "canBeGrabbed": false,
              "platformType": "NormalPlatform",
              "yGrabOffset": 0
            }
          ]
        },
        {
          "adaptCollisionMaskAutomatically": true,
          "assetStoreId": "",
          "name": "килбокс",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "animations": [
            {
              "name": "NewSprite",
              "useMultipleDirections": false,
              "directions": [
                {
                  "looping": false,
                  "metadata": "{\"pskl\":{}}",
                  "timeBetweenFrames": 0.08,
                  "sprites": [
                    {
                      "hasCustomCollisionMask": true,
                      "image": "NewSprite2",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 0,
                        "y": 0
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": [
                        [
                          {
                            "x": 0,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 64
                          },
                          {
                            "x": 0,
                            "y": 64
                          }
                        ]
                      ]
                    },
                    {
                      "hasCustomCollisionMask": true,
                      "image": "NewSprite3",
                      "points": [],
                      "originPoint": {
                        "name": "origine",
                        "x": 0,
                        "y": 0
                      },
                      "centerPoint": {
                        "automatic": true,
                        "name": "centre",
                        "x": 0,
                        "y": 0
                      },
                      "customCollisionMask": [
                        [
                          {
                            "x": 0,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 0
                          },
                          {
                            "x": 64,
                            "y": 64
                          },
                          {
                            "x": 0,
                            "y": 64
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "adaptCollisionMaskAutomatically": true,
          "assetStoreId": "",
          "name": "дверь",
          "type": "Sprite",
          "updateIfNotVisible": false,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Platform",
              "type": "PlatformBehavior::PlatformBehavior",
              "canBeGrabbed": true,
              "platformType": "NormalPlatform",
              "yGrabOffset": 0
            }
          ],
          "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": 20,
                            "y": 5
                          },
                          {
                            "x": 55,
                            "y": 5
                          },
                          {
                            "x": 55,
                            "y": 64
                          },
                          {
                            "x": 20,
                            "y": 64
                          }
                        ]
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "assetStoreId": "",
          "bold": false,
          "italic": false,
          "name": "NewText",
          "smoothed": true,
          "type": "TextObject::Text",
          "underlined": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "string": "если зажмешь клавишу up и сталкиваешься со стеной,то ты можешь сделать двойной прыжок\n",
          "font": "",
          "textAlignment": "left",
          "characterSize": 20,
          "color": {
            "b": 0,
            "g": 0,
            "r": 0
          },
          "content": {
            "bold": false,
            "isOutlineEnabled": false,
            "isShadowEnabled": false,
            "italic": false,
            "outlineColor": "255;255;255",
            "outlineThickness": 2,
            "shadowAngle": 90,
            "shadowBlurRadius": 2,
            "shadowColor": "0;0;0",
            "shadowDistance": 4,
            "shadowOpacity": 127,
            "smoothed": true,
            "underlined": false,
            "text": "если зажмешь клавишу up и сталкиваешься со стеной,то ты можешь сделать двойной прыжок\n",
            "font": "",
            "textAlignment": "left",
            "verticalTextAlignment": "top",
            "characterSize": 20,
            "lineHeight": 0,
            "color": "0;0;0"
          }
        },
        {
          "assetStoreId": "",
          "bold": false,
          "italic": false,
          "name": "NewText2",
          "smoothed": true,
          "type": "TextObject::Text",
          "underlined": false,
          "variables": [],
          "effects": [],
          "behaviors": [],
          "string": "это секретка,молодец\n",
          "font": "",
          "textAlignment": "left",
          "characterSize": 20,
          "color": {
            "b": 0,
            "g": 0,
            "r": 0
          },
          "content": {
            "bold": false,
            "isOutlineEnabled": false,
            "isShadowEnabled": false,
            "italic": false,
            "outlineColor": "255;255;255",
            "outlineThickness": 2,
            "shadowAngle": 90,
            "shadowBlurRadius": 2,
            "shadowColor": "0;0;0",
            "shadowDistance": 4,
            "shadowOpacity": 127,
            "smoothed": true,
            "underlined": false,
            "text": "это секретка,молодец\n",
            "font": "",
            "textAlignment": "left",
            "verticalTextAlignment": "top",
            "characterSize": 20,
            "lineHeight": 0,
            "color": "0;0;0"
          }
        },
        {
          "assetStoreId": "",
          "height": 32,
          "name": "NewTiledSprite",
          "texture": "NewTiledSprite4",
          "type": "TiledSpriteObject::TiledSprite",
          "width": 32,
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Platform",
              "type": "PlatformBehavior::PlatformBehavior",
              "canBeGrabbed": true,
              "platformType": "NormalPlatform",
              "yGrabOffset": 0
            }
          ]
        }
      ],
      "objectsFolderStructure": {
        "folderName": "__ROOT",
        "children": [
          {
            "objectName": "Player"
          },
          {
            "objectName": "килбокс"
          },
          {
            "objectName": "дверь"
          },
          {
            "objectName": "Platform_Ground"
          },
          {
            "objectName": "NewText2"
          },
          {
            "objectName": "Coins"
          },
          {
            "folderName": "Mobile Controls",
            "children": [
              {
                "objectName": "MoveJoystick"
              },
              {
                "objectName": "JumpButton"
              }
            ]
          },
          {
            "objectName": "NewText"
          },
          {
            "objectName": "NewTiledSprite"
          }
        ]
      },
      "events": [
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "Coins",
                "",
                "",
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "Delete"
              },
              "parameters": [
                "Coins",
                ""
              ]
            },
            {
              "type": {
                "value": "PlaySound"
              },
              "parameters": [
                "",
                "PickupCoin",
                "",
                "50",
                "RandomFloatInRange(1,1.1)"
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "килбокс",
                "",
                "",
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "PushScene"
              },
              "parameters": [
                "",
                "\"Game Scene\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "DepartScene"
              },
              "parameters": [
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "ZoomCamera"
              },
              "parameters": [
                "",
                "2",
                "",
                ""
              ]
            },
            {
              "type": {
                "value": "ZoomCamera"
              },
              "parameters": [
                "",
                "2",
                "\"Background\"",
                ""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "SceneInstancesCount"
              },
              "parameters": [
                "Coins",
                "Coins",
                "=",
                "0"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "Create"
              },
              "parameters": [
                "",
                "дверь",
                "590",
                "38",
                ""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "дверь",
                "",
                "",
                ""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "PushScene"
              },
              "parameters": [
                "",
                "\"Game Scene\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "CollisionNP"
              },
              "parameters": [
                "Player",
                "Platform_Ground",
                "",
                "",
                ""
              ]
            },
            {
              "type": {
                "value": "PlatformBehavior::PlatformerObjectBehavior::IsUsingControl"
              },
              "parameters": [
                "Player",
                "PlatformerObject",
                "\"Up\""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "PlatformBehavior::SetCanJump"
              },
              "parameters": [
                "Player",
                "PlatformerObject"
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "PlatformBehavior::PlatformerObjectBehavior::IsMovingEvenALittle"
              },
              "parameters": [
                "Player",
                "PlatformerObject"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "AnimatableCapability::AnimatableBehavior::SetName"
              },
              "parameters": [
                "Player",
                "Animation",
                "=",
                "\"бежит\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "HasNoForces"
              },
              "parameters": [
                "Player"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "AnimatableCapability::AnimatableBehavior::SetName"
              },
              "parameters": [
                "Player",
                "Animation",
                "=",
                "\"стоит\""
              ]
            }
          ]
        },
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "PlatformBehavior::IsJumping"
              },
              "parameters": [
                "Player",
                "PlatformerObject"
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "AnimatableCapability::AnimatableBehavior::SetName"
              },
              "parameters": [
                "Player",
                "Animation",
                "=",
                "\"прыжок\""
              ]
            }
          ]
        }
      ],
      "layers": [
        {
          "ambientLightColorB": 200,
          "ambientLightColorG": 200,
          "ambientLightColorR": 200,
          "camera2DPlaneMaxDrawingDistance": 5000,
          "camera3DFarPlaneDistance": 10000,
          "camera3DFieldOfView": 45,
          "camera3DNearPlaneDistance": 3,
          "cameraType": "",
          "followBaseLayerCamera": false,
          "isLightingLayer": false,
          "isLocked": false,
          "name": "Background",
          "renderingType": "",
          "visibility": true,
          "cameras": [],
          "effects": []
        },
        {
          "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": []
        },
        {
          "ambientLightColorB": 200,
          "ambientLightColorG": 200,
          "ambientLightColorR": 200,
          "camera2DPlaneMaxDrawingDistance": 5000,
          "camera3DFarPlaneDistance": 10000,
          "camera3DFieldOfView": 45,
          "camera3DNearPlaneDistance": 3,
          "cameraType": "",
          "followBaseLayerCamera": false,
          "isLightingLayer": false,
          "isLocked": false,
          "name": "MobileControls",
          "renderingType": "",
          "visibility": true,
          "cameras": [],
          "effects": []
        }
      ],
      "behaviorsSharedData": [
        {
          "name": "Animation",
          "type": "AnimatableCapability::AnimatableBehavior"
        },
        {
          "name": "ButtonFSM",
          "type": "ButtonStates::ButtonFSM"
        },
        {
          "name": "ButtonScaleTween",
          "type": "ButtonStates::ButtonScaleTween"
        },
        {
          "name": "Effect",
          "type": "EffectCapability::EffectBehavior"
        },
        {
          "name": "Flippable",
          "type": "FlippableCapability::FlippableBehavior"
        },
        {
          "name": "MultitouchButton",
          "type": "SpriteMultitouchJoystick::MultitouchButton"
        },
        {
          "name": "Opacity",
          "type": "OpacityCapability::OpacityBehavior"
        },
        {
          "name": "Platform",
          "type": "PlatformBehavior::PlatformBehavior"
        },
        {
          "name": "PlatformerMultitouchMapper",
          "type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper"
        },
        {
          "name": "PlatformerObject",
          "type": "PlatformBehavior::PlatformerObjectBehavior"
        },
        {
          "name": "Resizable",
          "type": "ResizableCapability::ResizableBehavior"
        },
        {
          "name": "Scale",
          "type": "ScalableCapability::ScalableBehavior"
        },
        {
          "name": "SmoothCamera",
          "type": "SmoothCamera::SmoothCamera"
        },
        {
          "name": "Text",
          "type": "TextContainerCapability::TextContainerBehavior"
        },
        {
          "name": "Tween",
          "type": "Tween::TweenBehavior"
        }
      ]
    }
  ],
  "externalEvents": [],
  "eventsFunctionsExtensions": [
    {
      "author": "",
      "category": "User interface",
      "extensionNamespace": "",
      "fullName": "Button states and effects",
      "gdevelopVersion": "",
      "helpPath": "/objects/button",
      "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWdlc3R1cmUtdGFwLWJ1dHRvbiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMyA1QzE1LjIxIDUgMTcgNi43OSAxNyA5QzE3IDEwLjUgMTYuMiAxMS43NyAxNSAxMi40NlYxMS4yNEMxNS42MSAxMC42OSAxNiA5Ljg5IDE2IDlDMTYgNy4zNCAxNC42NiA2IDEzIDZTMTAgNy4zNCAxMCA5QzEwIDkuODkgMTAuMzkgMTAuNjkgMTEgMTEuMjRWMTIuNDZDOS44IDExLjc3IDkgMTAuNSA5IDlDOSA2Ljc5IDEwLjc5IDUgMTMgNU0yMCAyMC41QzE5Ljk3IDIxLjMyIDE5LjMyIDIxLjk3IDE4LjUgMjJIMTNDMTIuNjIgMjIgMTIuMjYgMjEuODUgMTIgMjEuNTdMOCAxNy4zN0w4Ljc0IDE2LjZDOC45MyAxNi4zOSA5LjIgMTYuMjggOS41IDE2LjI4SDkuN0wxMiAxOFY5QzEyIDguNDUgMTIuNDUgOCAxMyA4UzE0IDguNDUgMTQgOVYxMy40N0wxNS4yMSAxMy42TDE5LjE1IDE1Ljc5QzE5LjY4IDE2LjAzIDIwIDE2LjU2IDIwIDE3LjE0VjIwLjVNMjAgMkg0QzIuOSAyIDIgMi45IDIgNFYxMkMyIDEzLjExIDIuOSAxNCA0IDE0SDhWMTJMNCAxMkw0IDRIMjBMMjAgMTJIMThWMTRIMjBWMTMuOTZMMjAuMDQgMTRDMjEuMTMgMTQgMjIgMTMuMDkgMjIgMTJWNEMyMiAyLjkgMjEuMTEgMiAyMCAyWiIgLz48L3N2Zz4=",
      "name": "ButtonStates",
      "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/753a9a794bd885058159b7509f06f5a8f67f72decfccb9a1b0efee26f41c3c4c_gesture-tap-button.svg",
      "shortDescription": "Use any object as a button and change appearance according to user interactions.",
      "version": "1.1.1",
      "description": [
        "Use the \"Button states\" behavior to track user interactions with an object, including:",
        "",
        "- Hovered",
        "- Pressed",
        "- Clicked",
        "- Idle",
        "",
        "Add additional behaviors to make juicy buttons with animated responses to user input:",
        "",
        "- Size",
        "- Color",
        "- Animation",
        "- Object effects"
      ],
      "origin": {
        "identifier": "ButtonStates",
        "name": "gdevelop-extension-store"
      },
      "tags": [
        "ui",
        "button"
      ],
      "authorIds": [
        "IWykYNRvhCZBN3vEgKEbBPOR3Oc2",
        "gqDaZjCfevOOxBYkK6zlhtZnXCg1"
      ],
      "dependencies": [],
      "globalVariables": [],
      "sceneVariables": [],
      "eventsFunctions": [],
      "eventsBasedBehaviors": [
        {
          "description": "Use objects as buttons.",
          "fullName": "Button states",
          "name": "ButtonFSM",
          "objectType": "",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPostEvents",
              "sentence": "",
              "events": [
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "Finite state machine",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Comment",
                      "color": {
                        "b": 109,
                        "g": 230,
                        "r": 255,
                        "textB": 0,
                        "textG": 0,
                        "textR": 0
                      },
                      "comment": "The \"Validated\" state only last one frame."
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::PropertyState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Validated\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::SetPropertyState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Idle\""
                          ]
                        }
                      ]
                    },
                    {
                      "colorB": 228,
                      "colorG": 176,
                      "colorR": 74,
                      "creationTime": 0,
                      "name": "Check position",
                      "source": "",
                      "type": "BuiltinCommonInstructions::Group",
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Comment",
                          "color": {
                            "b": 109,
                            "g": 230,
                            "r": 255,
                            "textB": 0,
                            "textG": 0,
                            "textR": 0
                          },
                          "comment": "Make sure the cursor position is only checked once per frame."
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyMouseIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "no"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyShouldCheckHovering"
                              },
                              "parameters": [
                                "Object",
                                "Behavior"
                              ]
                            },
                            {
                              "type": {
                                "value": "CollisionPoint"
                              },
                              "parameters": [
                                "Object",
                                "MouseOnlyCursorX(Object.Layer(), 0)",
                                "MouseOnlyCursorY(Object.Layer(), 0)"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyMouseIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "yes"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Comment",
                          "color": {
                            "b": 109,
                            "g": 230,
                            "r": 255,
                            "textB": 0,
                            "textG": 0,
                            "textR": 0
                          },
                          "comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter."
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "no"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyTouchId"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "!=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "CollisionPoint"
                              },
                              "parameters": [
                                "Object",
                                "TouchX(TouchId, Object.Layer(), 0)",
                                "TouchY(TouchId, Object.Layer(), 0)"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "yes"
                              ]
                            }
                          ]
                        }
                      ],
                      "parameters": []
                    },
                    {
                      "colorB": 228,
                      "colorG": 176,
                      "colorR": 74,
                      "creationTime": 0,
                      "name": "Handle touch start",
                      "source": "",
                      "type": "BuiltinCommonInstructions::Group",
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "HasAnyTouchOrMouseStarted"
                              },
                              "parameters": [
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            }
                          ],
                          "events": [
                            {
                              "type": "BuiltinCommonInstructions::Repeat",
                              "repeatExpression": "StartedTouchOrMouseCount()",
                              "conditions": [],
                              "actions": [],
                              "events": [
                                {
                                  "type": "BuiltinCommonInstructions::Standard",
                                  "conditions": [
                                    {
                                      "type": {
                                        "value": "CollisionPoint"
                                      },
                                      "parameters": [
                                        "Object",
                                        "TouchX(StartedTouchOrMouseId(Index), Object.Layer(), 0)",
                                        "TouchY(StartedTouchOrMouseId(Index), Object.Layer(), 0)"
                                      ]
                                    }
                                  ],
                                  "actions": [
                                    {
                                      "type": {
                                        "value": "ButtonStates::ButtonFSM::SetPropertyTouchId"
                                      },
                                      "parameters": [
                                        "Object",
                                        "Behavior",
                                        "=",
                                        "StartedTouchOrMouseId(Index)"
                                      ]
                                    },
                                    {
                                      "type": {
                                        "value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside"
                                      },
                                      "parameters": [
                                        "Object",
                                        "Behavior",
                                        "yes"
                                      ]
                                    }
                                  ],
                                  "events": [
                                    {
                                      "type": "BuiltinCommonInstructions::Standard",
                                      "conditions": [
                                        {
                                          "type": {
                                            "value": "BuiltinCommonInstructions::Or"
                                          },
                                          "parameters": [],
                                          "subInstructions": [
                                            {
                                              "type": {
                                                "value": "ButtonStates::ButtonFSM::PropertyState"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "\"Hovered\""
                                              ]
                                            },
                                            {
                                              "type": {
                                                "value": "ButtonStates::ButtonFSM::PropertyState"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "\"Idle\""
                                              ]
                                            }
                                          ]
                                        }
                                      ],
                                      "actions": [
                                        {
                                          "type": {
                                            "value": "ButtonStates::ButtonFSM::SetPropertyState"
                                          },
                                          "parameters": [
                                            "Object",
                                            "Behavior",
                                            "=",
                                            "\"PressedInside\""
                                          ]
                                        }
                                      ]
                                    }
                                  ]
                                },
                                {
                                  "type": "BuiltinCommonInstructions::Standard",
                                  "conditions": [],
                                  "actions": [
                                    {
                                      "type": {
                                        "value": "ButtonStates::ButtonFSM::SetPropertyIndex"
                                      },
                                      "parameters": [
                                        "Object",
                                        "Behavior",
                                        "+",
                                        "1"
                                      ]
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ],
                      "parameters": []
                    },
                    {
                      "colorB": 228,
                      "colorG": 176,
                      "colorR": 74,
                      "creationTime": 0,
                      "name": "Apply position changes",
                      "source": "",
                      "type": "BuiltinCommonInstructions::Group",
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "inverted": true,
                                "value": "ButtonStates::ButtonFSM::PropertyMouseIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior"
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Hovered\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Idle\""
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyMouseIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior"
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Idle\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Hovered\""
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "inverted": true,
                                "value": "ButtonStates::ButtonFSM::PropertyTouchIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior"
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"PressedInside\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"PressedOutside\""
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyTouchIsInside"
                              },
                              "parameters": [
                                "Object",
                                "Behavior"
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::PropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"PressedOutside\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"PressedInside\""
                              ]
                            }
                          ]
                        }
                      ],
                      "parameters": []
                    },
                    {
                      "colorB": 228,
                      "colorG": 176,
                      "colorR": 74,
                      "creationTime": 0,
                      "name": "Handle touch end",
                      "source": "",
                      "type": "BuiltinCommonInstructions::Group",
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "HasTouchEnded"
                              },
                              "parameters": [
                                "",
                                "TouchId"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonFSM::SetPropertyTouchId"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            }
                          ],
                          "events": [
                            {
                              "type": "BuiltinCommonInstructions::Standard",
                              "conditions": [
                                {
                                  "type": {
                                    "value": "ButtonStates::ButtonFSM::PropertyState"
                                  },
                                  "parameters": [
                                    "Object",
                                    "Behavior",
                                    "=",
                                    "\"PressedInside\""
                                  ]
                                }
                              ],
                              "actions": [
                                {
                                  "type": {
                                    "value": "ButtonStates::ButtonFSM::SetPropertyState"
                                  },
                                  "parameters": [
                                    "Object",
                                    "Behavior",
                                    "=",
                                    "\"Validated\""
                                  ]
                                }
                              ]
                            },
                            {
                              "type": "BuiltinCommonInstructions::Standard",
                              "conditions": [
                                {
                                  "type": {
                                    "inverted": true,
                                    "value": "ButtonStates::ButtonFSM::PropertyState"
                                  },
                                  "parameters": [
                                    "Object",
                                    "Behavior",
                                    "=",
                                    "\"PressedInside\""
                                  ]
                                },
                                {
                                  "type": {
                                    "inverted": true,
                                    "value": "ButtonStates::ButtonFSM::PropertyState"
                                  },
                                  "parameters": [
                                    "Object",
                                    "Behavior",
                                    "=",
                                    "\"Validated\""
                                  ]
                                }
                              ],
                              "actions": [
                                {
                                  "type": {
                                    "value": "ButtonStates::ButtonFSM::SetPropertyState"
                                  },
                                  "parameters": [
                                    "Object",
                                    "Behavior",
                                    "=",
                                    "\"Idle\""
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ],
                      "parameters": []
                    }
                  ],
                  "parameters": []
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onDeActivate",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::ResetState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Reset the state of the button.",
              "fullName": "Reset state",
              "functionType": "Action",
              "name": "ResetState",
              "private": true,
              "sentence": "Reset the button state of _PARAM0_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::SetPropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"Idle\""
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::SetPropertyTouchId"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "0"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button is not used.",
              "fullName": "Is idle",
              "functionType": "Condition",
              "name": "IsIdle",
              "sentence": "_PARAM0_ is idle",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::PropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"Idle\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button was just clicked.",
              "fullName": "Is clicked",
              "functionType": "Condition",
              "name": "IsClicked",
              "sentence": "_PARAM0_ is clicked",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::PropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"Validated\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the cursor is hovered over the button.",
              "fullName": "Is hovered",
              "functionType": "Condition",
              "name": "IsHovered",
              "sentence": "_PARAM0_ is hovered",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::PropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"Hovered\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button is either hovered or pressed but not hovered.",
              "fullName": "Is focused",
              "functionType": "Condition",
              "name": "IsFocused",
              "sentence": "_PARAM0_ is focused",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::PropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"Hovered\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::PropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"PressedOutside\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button is currently being pressed with mouse or touch.",
              "fullName": "Is pressed",
              "functionType": "Condition",
              "name": "IsPressed",
              "sentence": "_PARAM0_ is pressed",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::PropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"PressedInside\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button is currently being pressed outside with mouse or touch.",
              "fullName": "Is held outside",
              "functionType": "Condition",
              "name": "IsPressedOutside",
              "sentence": "_PARAM0_ is held outside",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonFSM::PropertyState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"PressedOutside\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the touch id that is using the button or 0 if none.",
              "fullName": "Touch id",
              "functionType": "ExpressionAndCondition",
              "name": "TouchId",
              "sentence": "the touch id",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "TouchId"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonFSM",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "true",
              "type": "Boolean",
              "label": "",
              "description": "Should check hovering",
              "hidden": true,
              "name": "ShouldCheckHovering"
            },
            {
              "value": "Idle",
              "type": "Choice",
              "label": "State",
              "choices": [
                {
                  "label": "Idle",
                  "value": "Idle"
                },
                {
                  "label": "Hovered",
                  "value": "Hovered"
                },
                {
                  "label": "PressedInside",
                  "value": "PressedInside"
                },
                {
                  "label": "PressedOutside",
                  "value": "PressedOutside"
                },
                {
                  "label": "Validated",
                  "value": "Validated"
                }
              ],
              "hidden": true,
              "name": "State"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "Touch id",
              "hidden": true,
              "name": "TouchId"
            },
            {
              "value": "",
              "type": "Boolean",
              "label": "Touch is inside",
              "hidden": true,
              "name": "TouchIsInside"
            },
            {
              "value": "",
              "type": "Boolean",
              "label": "Mouse is inside",
              "hidden": true,
              "name": "MouseIsInside"
            },
            {
              "value": "",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "Index"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "ShouldCheckHovering"
              },
              {
                "propertyName": "State"
              },
              {
                "propertyName": "TouchId"
              },
              {
                "propertyName": "TouchIsInside"
              },
              {
                "propertyName": "MouseIsInside"
              },
              {
                "propertyName": "Index"
              }
            ]
          }
        },
        {
          "description": "Enable effects on buttons based on their state.",
          "fullName": "Button object effects",
          "name": "ButtonObjectEffects",
          "objectType": "",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "EffectCapability::EffectBehavior::EnableEffect"
                      },
                      "parameters": [
                        "Object",
                        "Effect",
                        "IdleEffect",
                        "yes"
                      ]
                    },
                    {
                      "type": {
                        "value": "EffectCapability::EffectBehavior::EnableEffect"
                      },
                      "parameters": [
                        "Object",
                        "Effect",
                        "FocusedEffect",
                        "no"
                      ]
                    },
                    {
                      "type": {
                        "value": "EffectCapability::EffectBehavior::EnableEffect"
                      },
                      "parameters": [
                        "Object",
                        "Effect",
                        "PressedEffect",
                        "no"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "States",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [],
                      "actions": [
                        {
                          "type": {
                            "value": "EffectCapability::EffectBehavior::EnableEffect"
                          },
                          "parameters": [
                            "Object",
                            "Effect",
                            "IdleEffect",
                            "no"
                          ]
                        },
                        {
                          "type": {
                            "value": "EffectCapability::EffectBehavior::EnableEffect"
                          },
                          "parameters": [
                            "Object",
                            "Effect",
                            "FocusedEffect",
                            "no"
                          ]
                        },
                        {
                          "type": {
                            "value": "EffectCapability::EffectBehavior::EnableEffect"
                          },
                          "parameters": [
                            "Object",
                            "Effect",
                            "PressedEffect",
                            "no"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffects::PropertyIdleEffect"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsIdle"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "EffectCapability::EffectBehavior::EnableEffect"
                          },
                          "parameters": [
                            "Object",
                            "Effect",
                            "IdleEffect",
                            "yes"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffects::PropertyFocusedEffect"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsFocused"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "EffectCapability::EffectBehavior::EnableEffect"
                          },
                          "parameters": [
                            "Object",
                            "Effect",
                            "FocusedEffect",
                            "yes"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffects::PropertyPressedEffect"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsPressed"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "EffectCapability::EffectBehavior::EnableEffect"
                          },
                          "parameters": [
                            "Object",
                            "Effect",
                            "PressedEffect",
                            "yes"
                          ]
                        }
                      ]
                    }
                  ],
                  "parameters": []
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the idle state effect of the object.",
              "fullName": "Idle state effect",
              "functionType": "ExpressionAndCondition",
              "group": "Button object effects configuration",
              "name": "IdleEffect",
              "sentence": "the idle state effect",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "IdleEffect"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "IdleEffect",
              "name": "SetIdleEffect",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffects::SetPropertyIdleEffect"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the focused state effect of the object. The state is Focused when the button is hovered or held outside.",
              "fullName": "Focused state effect",
              "functionType": "ExpressionAndCondition",
              "group": "Button object effects configuration",
              "name": "FocusedEffect",
              "sentence": "the focused state effect",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FocusedEffect"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FocusedEffect",
              "name": "SetFocusedEffect",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffects::SetPropertyFocusedEffect"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the pressed state effect of the object.",
              "fullName": "Pressed state effect",
              "functionType": "ExpressionAndCondition",
              "group": "Button object effects configuration",
              "name": "PressedEffect",
              "sentence": "the pressed state effect",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "PressedEffect"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "PressedEffect",
              "name": "SetPressedEffect",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffects::SetPropertyPressedEffect"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffects",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "Button states",
              "extraInformation": [
                "ButtonStates::ButtonFSM"
              ],
              "choices": [],
              "name": "ButtonFSM"
            },
            {
              "value": "",
              "type": "Behavior",
              "label": "Effect capability",
              "extraInformation": [
                "EffectCapability::EffectBehavior"
              ],
              "choices": [],
              "name": "Effect"
            },
            {
              "value": "",
              "type": "String",
              "label": "Idle state effect",
              "group": "Effects",
              "name": "IdleEffect"
            },
            {
              "value": "",
              "type": "String",
              "label": "Focused state effect",
              "description": "The state is Focused when the button is hovered or held outside.",
              "group": "Effects",
              "name": "FocusedEffect"
            },
            {
              "value": "",
              "type": "String",
              "label": "Pressed state effect",
              "group": "Effects",
              "name": "PressedEffect"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "ButtonFSM"
              },
              {
                "propertyName": "Effect"
              },
              {
                "folderName": "Effects",
                "children": [
                  {
                    "propertyName": "IdleEffect"
                  },
                  {
                    "propertyName": "FocusedEffect"
                  },
                  {
                    "propertyName": "PressedEffect"
                  }
                ]
              }
            ]
          }
        },
        {
          "description": "Change the animation of buttons according to their state.",
          "fullName": "Button animation",
          "name": "ButtonAnimationName",
          "objectType": "",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "AnimatableCapability::AnimatableBehavior::SetName"
                      },
                      "parameters": [
                        "Object",
                        "Animation",
                        "=",
                        "IdleAnimationName"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "Change based on state",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsIdle"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "AnimatableCapability::AnimatableBehavior::SetName"
                          },
                          "parameters": [
                            "Object",
                            "Animation",
                            "=",
                            "IdleAnimationName"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsFocused"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "AnimatableCapability::AnimatableBehavior::SetName"
                          },
                          "parameters": [
                            "Object",
                            "Animation",
                            "=",
                            "FocusedAnimationName"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsPressed"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "AnimatableCapability::AnimatableBehavior::SetName"
                          },
                          "parameters": [
                            "Object",
                            "Animation",
                            "=",
                            "PressedAnimationName"
                          ]
                        }
                      ]
                    }
                  ],
                  "parameters": []
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the idle state animation name of the object.",
              "fullName": "Idle state animation name",
              "functionType": "ExpressionAndCondition",
              "group": "Button animation configuration",
              "name": "IdleAnimationName",
              "sentence": "the idle state animation name",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "IdleAnimationName"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "IdleAnimationName",
              "name": "SetIdleAnimationName",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonAnimationName::SetPropertyIdleAnimationName"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the focused state animation name of the object. The state is Focused when the button is hovered or held outside.",
              "fullName": "Focused state animation name",
              "functionType": "ExpressionAndCondition",
              "group": "Button animation configuration",
              "name": "FocusedAnimationName",
              "sentence": "the focused state animation name",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FocusedAnimationName"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FocusedAnimationName",
              "name": "SetFocusedAnimationName",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonAnimationName::SetPropertyFocusedAnimationName"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the pressed state animation name of the object.",
              "fullName": "Pressed state animation name",
              "functionType": "ExpressionAndCondition",
              "group": "Button animation configuration",
              "name": "PressedAnimationName",
              "sentence": "the pressed state animation name",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "PressedAnimationName"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "PressedAnimationName",
              "name": "SetPressedAnimationName",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonAnimationName::SetPropertyPressedAnimationName"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonAnimationName",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "Animatable capability",
              "extraInformation": [
                "AnimatableCapability::AnimatableBehavior"
              ],
              "choices": [],
              "name": "Animation"
            },
            {
              "value": "",
              "type": "Behavior",
              "label": "Button states",
              "extraInformation": [
                "ButtonStates::ButtonFSM"
              ],
              "choices": [],
              "name": "ButtonFSM"
            },
            {
              "value": "Idle",
              "type": "String",
              "label": "Idle state animation name",
              "group": "Animation",
              "name": "IdleAnimationName"
            },
            {
              "value": "Focused",
              "type": "String",
              "label": "Focused state animation name",
              "description": "The state is Focused when the button is hovered or held outside.",
              "group": "Animation",
              "name": "FocusedAnimationName"
            },
            {
              "value": "Pressed",
              "type": "String",
              "label": "Pressed state animation name",
              "group": "Animation",
              "name": "PressedAnimationName"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "Animation"
              },
              {
                "propertyName": "ButtonFSM"
              },
              {
                "folderName": "Animation",
                "children": [
                  {
                    "propertyName": "IdleAnimationName"
                  },
                  {
                    "propertyName": "FocusedAnimationName"
                  },
                  {
                    "propertyName": "PressedAnimationName"
                  }
                ]
              }
            ]
          }
        },
        {
          "description": "Smoothly change an effect on buttons according to their state.",
          "fullName": "Button object effect tween",
          "name": "ButtonObjectEffectTween",
          "objectType": "",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "IdleValue"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "States",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsIdle"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"Idle\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Idle\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::FadeOut"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "IdleValue",
                            ""
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsFocused"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [],
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Idle\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Focused\""
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonObjectEffectTween::FadeIn"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "FocusedValue",
                                ""
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Pressed\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Focused\""
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonObjectEffectTween::FadeOut"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "FocusedValue",
                                ""
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsPressed"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"Pressed\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Pressed\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::FadeIn"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "PressedValue",
                            ""
                          ]
                        }
                      ]
                    }
                  ],
                  "parameters": []
                },
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "Tween",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"FadeIn\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::PlayTween"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "FadeInDuration",
                            "FadeInEasing",
                            ""
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"FadeOut\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonObjectEffectTween::PlayTween"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "FadeOutDuration",
                            "FadeOutEasing",
                            ""
                          ]
                        }
                      ]
                    }
                  ],
                  "parameters": []
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Time delta",
              "functionType": "Expression",
              "name": "TimeDelta",
              "private": true,
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "TimeDelta() * LayerTimeScale(Object.Layer())"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Fade in",
              "functionType": "Action",
              "name": "FadeIn",
              "private": true,
              "sentence": "_PARAM0_ fade in to _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "0"
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"FadeIn\""
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenInitialValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "EffectValue"
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTargetedValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                },
                {
                  "description": "Value",
                  "name": "Value",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Fade out",
              "functionType": "Action",
              "name": "FadeOut",
              "private": true,
              "sentence": "_PARAM0_ fade out to _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "0"
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"FadeOut\""
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenInitialValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "EffectValue"
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTargetedValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                },
                {
                  "description": "Value",
                  "name": "Value",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Play tween",
              "functionType": "Action",
              "name": "PlayTween",
              "private": true,
              "sentence": "Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenTime"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "<",
                        "Duration"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "+",
                        "Object.Behavior::TimeDelta()"
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Tween::Ease(Easing, TweenInitialValue, TweenTargetedValue, TweenTime / Duration)"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenTime"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ">=",
                        "Duration"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "\"NoTween\""
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "TweenTargetedValue"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "EffectCapability::EffectBehavior::SetEffectDoubleParameter"
                      },
                      "parameters": [
                        "Object",
                        "Effect",
                        "EffectName",
                        "EffectProperty",
                        "EffectValue"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                },
                {
                  "description": "Duration (in seconds)",
                  "name": "Duration",
                  "type": "expression"
                },
                {
                  "description": "Easing",
                  "name": "Easing",
                  "supplementaryInformation": "[]",
                  "type": "string"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the effect name of the object.",
              "fullName": "Effect name",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "EffectName",
              "sentence": "the effect name",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "EffectName"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.",
              "fullName": "Effect parameter",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "EffectProperty",
              "sentence": "the effect parameter",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "EffectProperty"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.",
              "fullName": "Effect parameter",
              "functionType": "Action",
              "getterName": "EffectName",
              "group": "Button effect tween configuration",
              "name": "SetEffectProperty",
              "sentence": "Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectName"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectProperty"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                },
                {
                  "description": "Effect name",
                  "name": "EffectName",
                  "type": "string"
                },
                {
                  "description": "Parameter name",
                  "name": "PropertyName",
                  "type": "string"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the idle effect parameter value of the object.",
              "fullName": "Idle effect parameter value",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "IdleValue",
              "sentence": "the idle effect parameter value",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "IdleValue"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "IdleValue",
              "name": "SetIdleValue",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyIdleValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.",
              "fullName": "Focused effect parameter value",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "FocusedValue",
              "sentence": "the focused effect parameter value",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FocusedValue"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FocusedValue",
              "name": "SetFocusedValue",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFocusedValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the pressed effect parameter value of the object.",
              "fullName": "Pressed effect parameter value",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "PressedValue",
              "sentence": "the pressed effect parameter value",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "PressedValue"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "PressedValue",
              "name": "SetPressedValue",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPressedValue"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-in easing of the object.",
              "fullName": "Fade-in easing",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "FadeInEasing",
              "sentence": "the fade-in easing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FadeInEasing"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
                "type": "stringWithSelector"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeInEasing",
              "name": "SetFadeInEasing",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeInEasing"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-out easing of the object.",
              "fullName": "Fade-out easing",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "FadeOutEasing",
              "sentence": "the fade-out easing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FadeOutEasing"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
                "type": "stringWithSelector"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeOutEasing",
              "name": "SetFadeOutEasing",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeOutEasing"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-in duration of the object.",
              "fullName": "Fade-in duration",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "FadeInDuration",
              "sentence": "the fade-in duration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FadeInDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeInDuration",
              "name": "SetFadeInDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeInDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-out duration of the object.",
              "fullName": "Fade-out duration",
              "functionType": "ExpressionAndCondition",
              "group": "Button effect tween configuration",
              "name": "FadeOutDuration",
              "sentence": "the fade-out duration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FadeOutDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeOutDuration",
              "name": "SetFadeOutDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeOutDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "Button states",
              "extraInformation": [
                "ButtonStates::ButtonFSM"
              ],
              "choices": [],
              "name": "ButtonFSM"
            },
            {
              "value": "",
              "type": "Behavior",
              "label": "Effect capability",
              "extraInformation": [
                "EffectCapability::EffectBehavior"
              ],
              "choices": [],
              "name": "Effect"
            },
            {
              "value": "Effect",
              "type": "String",
              "label": "Effect name",
              "group": "Effect",
              "name": "EffectName"
            },
            {
              "value": "",
              "type": "String",
              "label": "Effect parameter",
              "description": "The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.",
              "group": "Effect",
              "name": "EffectProperty"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "Idle effect parameter value",
              "group": "Value",
              "name": "IdleValue"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "Focused effect parameter value",
              "description": "The state is Focused when the button is hovered or held outside.",
              "group": "Value",
              "name": "FocusedValue"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "Pressed effect parameter value",
              "group": "Value",
              "name": "PressedValue"
            },
            {
              "value": "easeInOutQuad",
              "type": "Choice",
              "label": "Fade-in easing",
              "group": "Speed",
              "choices": [
                {
                  "label": "linear",
                  "value": "linear"
                },
                {
                  "label": "easeInQuad",
                  "value": "easeInQuad"
                },
                {
                  "label": "easeOutQuad",
                  "value": "easeOutQuad"
                },
                {
                  "label": "easeInOutQuad",
                  "value": "easeInOutQuad"
                },
                {
                  "label": "easeInCubic",
                  "value": "easeInCubic"
                },
                {
                  "label": "easeOutCubic",
                  "value": "easeOutCubic"
                },
                {
                  "label": "easeInOutCubic",
                  "value": "easeInOutCubic"
                },
                {
                  "label": "easeInQuart",
                  "value": "easeInQuart"
                },
                {
                  "label": "easeOutQuart",
                  "value": "easeOutQuart"
                },
                {
                  "label": "easeInOutQuart",
                  "value": "easeInOutQuart"
                },
                {
                  "label": "easeInQuint",
                  "value": "easeInQuint"
                },
                {
                  "label": "easeOutQuint",
                  "value": "easeOutQuint"
                },
                {
                  "label": "easeInOutQuint",
                  "value": "easeInOutQuint"
                },
                {
                  "label": "easeInOutSine",
                  "value": "easeInOutSine"
                },
                {
                  "label": "easeInExpo",
                  "value": "easeInExpo"
                },
                {
                  "label": "easeOutExpo",
                  "value": "easeOutExpo"
                },
                {
                  "label": "easeInOutExpo",
                  "value": "easeInOutExpo"
                },
                {
                  "label": "easeInCirc",
                  "value": "easeInCirc"
                },
                {
                  "label": "easeOutCirc",
                  "value": "easeOutCirc"
                },
                {
                  "label": "easeInOutCirc",
                  "value": "easeInOutCirc"
                },
                {
                  "label": "easeOutBounce",
                  "value": "easeOutBounce"
                },
                {
                  "label": "easeInBack",
                  "value": "easeInBack"
                },
                {
                  "label": "easeOutBack",
                  "value": "easeOutBack"
                },
                {
                  "label": "easeInOutBack",
                  "value": "easeInOutBack"
                },
                {
                  "label": "elastic",
                  "value": "elastic"
                },
                {
                  "label": "swingFromTo",
                  "value": "swingFromTo"
                },
                {
                  "label": "swingFrom",
                  "value": "swingFrom"
                },
                {
                  "label": "swingTo",
                  "value": "swingTo"
                },
                {
                  "label": "bounce",
                  "value": "bounce"
                },
                {
                  "label": "bouncePast",
                  "value": "bouncePast"
                },
                {
                  "label": "easeFromTo",
                  "value": "easeFromTo"
                },
                {
                  "label": "easeFrom",
                  "value": "easeFrom"
                },
                {
                  "label": "easeTo",
                  "value": "easeTo"
                }
              ],
              "name": "FadeInEasing"
            },
            {
              "value": "easeInOutQuad",
              "type": "Choice",
              "label": "Fade-out easing",
              "group": "Speed",
              "choices": [
                {
                  "label": "linear",
                  "value": "linear"
                },
                {
                  "label": "easeInQuad",
                  "value": "easeInQuad"
                },
                {
                  "label": "easeOutQuad",
                  "value": "easeOutQuad"
                },
                {
                  "label": "easeInOutQuad",
                  "value": "easeInOutQuad"
                },
                {
                  "label": "easeInCubic",
                  "value": "easeInCubic"
                },
                {
                  "label": "easeOutCubic",
                  "value": "easeOutCubic"
                },
                {
                  "label": "easeInOutCubic",
                  "value": "easeInOutCubic"
                },
                {
                  "label": "easeInQuart",
                  "value": "easeInQuart"
                },
                {
                  "label": "easeOutQuart",
                  "value": "easeOutQuart"
                },
                {
                  "label": "easeInOutQuart",
                  "value": "easeInOutQuart"
                },
                {
                  "label": "easeInQuint",
                  "value": "easeInQuint"
                },
                {
                  "label": "easeOutQuint",
                  "value": "easeOutQuint"
                },
                {
                  "label": "easeInOutQuint",
                  "value": "easeInOutQuint"
                },
                {
                  "label": "easeInOutSine",
                  "value": "easeInOutSine"
                },
                {
                  "label": "easeInExpo",
                  "value": "easeInExpo"
                },
                {
                  "label": "easeOutExpo",
                  "value": "easeOutExpo"
                },
                {
                  "label": "easeInOutExpo",
                  "value": "easeInOutExpo"
                },
                {
                  "label": "easeInCirc",
                  "value": "easeInCirc"
                },
                {
                  "label": "easeOutCirc",
                  "value": "easeOutCirc"
                },
                {
                  "label": "easeInOutCirc",
                  "value": "easeInOutCirc"
                },
                {
                  "label": "easeOutBounce",
                  "value": "easeOutBounce"
                },
                {
                  "label": "easeInBack",
                  "value": "easeInBack"
                },
                {
                  "label": "easeOutBack",
                  "value": "easeOutBack"
                },
                {
                  "label": "easeInOutBack",
                  "value": "easeInOutBack"
                },
                {
                  "label": "elastic",
                  "value": "elastic"
                },
                {
                  "label": "swingFromTo",
                  "value": "swingFromTo"
                },
                {
                  "label": "swingFrom",
                  "value": "swingFrom"
                },
                {
                  "label": "swingTo",
                  "value": "swingTo"
                },
                {
                  "label": "bounce",
                  "value": "bounce"
                },
                {
                  "label": "bouncePast",
                  "value": "bouncePast"
                },
                {
                  "label": "easeFromTo",
                  "value": "easeFromTo"
                },
                {
                  "label": "easeFrom",
                  "value": "easeFrom"
                },
                {
                  "label": "easeTo",
                  "value": "easeTo"
                }
              ],
              "name": "FadeOutEasing"
            },
            {
              "value": "0.125",
              "type": "Number",
              "unit": "Second",
              "label": "Fade-in duration",
              "group": "Speed",
              "name": "FadeInDuration"
            },
            {
              "value": "0.5",
              "type": "Number",
              "unit": "Second",
              "label": "Fade-out duration",
              "group": "Speed",
              "name": "FadeOutDuration"
            },
            {
              "value": "Idle",
              "type": "Choice",
              "label": "",
              "choices": [
                {
                  "label": "Idle",
                  "value": "Idle"
                },
                {
                  "label": "Focused",
                  "value": "Focused"
                },
                {
                  "label": "Pressed",
                  "value": "Pressed"
                }
              ],
              "hidden": true,
              "name": "PreviousState"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "TweenInitialValue"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "TweenTargetedValue"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "TweenTime"
            },
            {
              "value": "NoTween",
              "type": "Choice",
              "label": "",
              "choices": [
                {
                  "label": "NoTween",
                  "value": "NoTween"
                },
                {
                  "label": "FadeIn",
                  "value": "FadeIn"
                },
                {
                  "label": "FadeOut",
                  "value": "FadeOut"
                }
              ],
              "hidden": true,
              "name": "TweenState"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "EffectValue"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "ButtonFSM"
              },
              {
                "propertyName": "Effect"
              },
              {
                "folderName": "Effect",
                "children": [
                  {
                    "propertyName": "EffectName"
                  },
                  {
                    "propertyName": "EffectProperty"
                  }
                ]
              },
              {
                "folderName": "Value",
                "children": [
                  {
                    "propertyName": "IdleValue"
                  },
                  {
                    "propertyName": "FocusedValue"
                  },
                  {
                    "propertyName": "PressedValue"
                  }
                ]
              },
              {
                "folderName": "Speed",
                "children": [
                  {
                    "propertyName": "FadeInEasing"
                  },
                  {
                    "propertyName": "FadeOutEasing"
                  },
                  {
                    "propertyName": "FadeInDuration"
                  },
                  {
                    "propertyName": "FadeOutDuration"
                  }
                ]
              },
              {
                "propertyName": "PreviousState"
              },
              {
                "propertyName": "TweenInitialValue"
              },
              {
                "propertyName": "TweenTargetedValue"
              },
              {
                "propertyName": "TweenTime"
              },
              {
                "propertyName": "TweenState"
              },
              {
                "propertyName": "EffectValue"
              }
            ]
          }
        },
        {
          "description": "Smoothly resize buttons according to their state.",
          "fullName": "Button scale tween",
          "name": "ButtonScaleTween",
          "objectType": "",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ScalableCapability::ScalableBehavior::SetValue"
                      },
                      "parameters": [
                        "Object",
                        "Scale",
                        "=",
                        "IdleScale"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "Change based on state",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsIdle"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"Idle\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Idle\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonScaleTween::FadeOut"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "IdleScale",
                            ""
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsFocused"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [],
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Idle\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Focused\""
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonScaleTween::FadeIn"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "FocusedScale",
                                ""
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Pressed\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Focused\""
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonScaleTween::FadeOut"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "FocusedScale",
                                ""
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsPressed"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"Pressed\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Pressed\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonScaleTween::FadeIn"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "PressedScale",
                            ""
                          ]
                        }
                      ]
                    }
                  ],
                  "parameters": []
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Fade in",
              "functionType": "Action",
              "name": "FadeIn",
              "private": true,
              "sentence": "_PARAM0_ fade in to _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "Tween::AddObjectScaleTween"
                      },
                      "parameters": [
                        "Object",
                        "Tween",
                        "\"__ButtonScaleTween.Fade\"",
                        "Value",
                        "Value",
                        "FadeInEasing",
                        "1000 * FadeInDuration",
                        "no",
                        "yes"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                },
                {
                  "description": "Value",
                  "name": "Value",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Fade out",
              "functionType": "Action",
              "name": "FadeOut",
              "private": true,
              "sentence": "_PARAM0_ fade out to _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "Tween::AddObjectScaleTween"
                      },
                      "parameters": [
                        "Object",
                        "Tween",
                        "\"__ButtonScaleTween.Fade\"",
                        "Value",
                        "Value",
                        "FadeOutEasing",
                        "1000 * FadeOutDuration",
                        "no",
                        "yes"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                },
                {
                  "description": "Value",
                  "name": "Value",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the idle state size scale of the object.",
              "fullName": "Idle state size scale",
              "functionType": "ExpressionAndCondition",
              "group": "Button scale tween configuration",
              "name": "IdleScale",
              "sentence": "the idle state size scale",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "IdleScale"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "IdleScale",
              "name": "SetIdleScale",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonScaleTween::SetPropertyIdleScale"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the focused state size scale of the object. The state is Focused when the button is hovered or held outside.",
              "fullName": "Focused state size scale",
              "functionType": "ExpressionAndCondition",
              "group": "Button scale tween configuration",
              "name": "FocusedScale",
              "sentence": "the focused state size scale",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FocusedScale"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FocusedScale",
              "name": "SetFocusedScale",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonScaleTween::SetPropertyFocusedScale"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the pressed state size scale of the object.",
              "fullName": "Pressed state size scale",
              "functionType": "ExpressionAndCondition",
              "group": "Button scale tween configuration",
              "name": "PressedScale",
              "sentence": "the pressed state size scale",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "PressedScale"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "PressedScale",
              "name": "SetPressedScale",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonScaleTween::SetPropertyPressedScale"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-in duration of the object.",
              "fullName": "Fade-in duration",
              "functionType": "ExpressionAndCondition",
              "group": "Button scale tween configuration",
              "name": "FadeInDuration",
              "sentence": "the fade-in duration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FadeInDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeInDuration",
              "name": "SetFadeInDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeInDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-out duration of the object.",
              "fullName": "Fade-out duration",
              "functionType": "ExpressionAndCondition",
              "group": "Button scale tween configuration",
              "name": "FadeOutDuration",
              "sentence": "the fade-out duration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FadeOutDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeOutDuration",
              "name": "SetFadeOutDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeOutDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-in easing of the object.",
              "fullName": "Fade-in easing",
              "functionType": "ExpressionAndCondition",
              "group": "Button scale tween configuration",
              "name": "FadeInEasing",
              "sentence": "the fade-in easing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FadeInEasing"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
                "type": "stringWithSelector"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeInEasing",
              "name": "SetFadeInEasing",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeInEasing"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-out easing of the object.",
              "fullName": "Fade-out easing",
              "functionType": "ExpressionAndCondition",
              "group": "Button scale tween configuration",
              "name": "FadeOutEasing",
              "sentence": "the fade-out easing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FadeOutEasing"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
                "type": "stringWithSelector"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeOutEasing",
              "name": "SetFadeOutEasing",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeOutEasing"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonScaleTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "Scalable capability",
              "extraInformation": [
                "ScalableCapability::ScalableBehavior"
              ],
              "choices": [],
              "name": "Scale"
            },
            {
              "value": "",
              "type": "Behavior",
              "label": "Button states behavior (required)",
              "extraInformation": [
                "ButtonStates::ButtonFSM"
              ],
              "choices": [],
              "name": "ButtonFSM"
            },
            {
              "value": "",
              "type": "Behavior",
              "label": "Tween behavior (required)",
              "extraInformation": [
                "Tween::TweenBehavior"
              ],
              "choices": [],
              "name": "Tween"
            },
            {
              "value": "1",
              "type": "Number",
              "unit": "Dimensionless",
              "label": "Idle state size scale",
              "group": "Size",
              "name": "IdleScale"
            },
            {
              "value": "1",
              "type": "Number",
              "unit": "Dimensionless",
              "label": "Focused state size scale",
              "description": "The state is Focused when the button is hovered or held outside.",
              "group": "Size",
              "name": "FocusedScale"
            },
            {
              "value": "0.1",
              "type": "Number",
              "unit": "Second",
              "label": "Fade-in duration",
              "group": "Speed",
              "name": "FadeInDuration"
            },
            {
              "value": "0.2",
              "type": "Number",
              "unit": "Second",
              "label": "Fade-out duration",
              "group": "Speed",
              "name": "FadeOutDuration"
            },
            {
              "value": "0.95",
              "type": "Number",
              "unit": "Dimensionless",
              "label": "Pressed state size scale",
              "group": "Size",
              "name": "PressedScale"
            },
            {
              "value": "easeInOutQuad",
              "type": "Choice",
              "label": "Fade-in easing",
              "group": "Speed",
              "choices": [
                {
                  "label": "linear",
                  "value": "linear"
                },
                {
                  "label": "easeInQuad",
                  "value": "easeInQuad"
                },
                {
                  "label": "easeOutQuad",
                  "value": "easeOutQuad"
                },
                {
                  "label": "easeInOutQuad",
                  "value": "easeInOutQuad"
                },
                {
                  "label": "easeInCubic",
                  "value": "easeInCubic"
                },
                {
                  "label": "easeOutCubic",
                  "value": "easeOutCubic"
                },
                {
                  "label": "easeInOutCubic",
                  "value": "easeInOutCubic"
                },
                {
                  "label": "easeInQuart",
                  "value": "easeInQuart"
                },
                {
                  "label": "easeOutQuart",
                  "value": "easeOutQuart"
                },
                {
                  "label": "easeInOutQuart",
                  "value": "easeInOutQuart"
                },
                {
                  "label": "easeInQuint",
                  "value": "easeInQuint"
                },
                {
                  "label": "easeOutQuint",
                  "value": "easeOutQuint"
                },
                {
                  "label": "easeInOutQuint",
                  "value": "easeInOutQuint"
                },
                {
                  "label": "easeInOutSine",
                  "value": "easeInOutSine"
                },
                {
                  "label": "easeInExpo",
                  "value": "easeInExpo"
                },
                {
                  "label": "easeOutExpo",
                  "value": "easeOutExpo"
                },
                {
                  "label": "easeInOutExpo",
                  "value": "easeInOutExpo"
                },
                {
                  "label": "easeInCirc",
                  "value": "easeInCirc"
                },
                {
                  "label": "easeOutCirc",
                  "value": "easeOutCirc"
                },
                {
                  "label": "easeInOutCirc",
                  "value": "easeInOutCirc"
                },
                {
                  "label": "easeOutBounce",
                  "value": "easeOutBounce"
                },
                {
                  "label": "easeInBack",
                  "value": "easeInBack"
                },
                {
                  "label": "easeOutBack",
                  "value": "easeOutBack"
                },
                {
                  "label": "easeInOutBack",
                  "value": "easeInOutBack"
                },
                {
                  "label": "elastic",
                  "value": "elastic"
                },
                {
                  "label": "swingFromTo",
                  "value": "swingFromTo"
                },
                {
                  "label": "swingFrom",
                  "value": "swingFrom"
                },
                {
                  "label": "swingTo",
                  "value": "swingTo"
                },
                {
                  "label": "bounce",
                  "value": "bounce"
                },
                {
                  "label": "bouncePast",
                  "value": "bouncePast"
                },
                {
                  "label": "easeFromTo",
                  "value": "easeFromTo"
                },
                {
                  "label": "easeFrom",
                  "value": "easeFrom"
                },
                {
                  "label": "easeTo",
                  "value": "easeTo"
                }
              ],
              "name": "FadeInEasing"
            },
            {
              "value": "easeInOutQuad",
              "type": "Choice",
              "label": "Fade-out easing",
              "group": "Speed",
              "choices": [
                {
                  "label": "linear",
                  "value": "linear"
                },
                {
                  "label": "easeInQuad",
                  "value": "easeInQuad"
                },
                {
                  "label": "easeOutQuad",
                  "value": "easeOutQuad"
                },
                {
                  "label": "easeInOutQuad",
                  "value": "easeInOutQuad"
                },
                {
                  "label": "easeInCubic",
                  "value": "easeInCubic"
                },
                {
                  "label": "easeOutCubic",
                  "value": "easeOutCubic"
                },
                {
                  "label": "easeInOutCubic",
                  "value": "easeInOutCubic"
                },
                {
                  "label": "easeInQuart",
                  "value": "easeInQuart"
                },
                {
                  "label": "easeOutQuart",
                  "value": "easeOutQuart"
                },
                {
                  "label": "easeInOutQuart",
                  "value": "easeInOutQuart"
                },
                {
                  "label": "easeInQuint",
                  "value": "easeInQuint"
                },
                {
                  "label": "easeOutQuint",
                  "value": "easeOutQuint"
                },
                {
                  "label": "easeInOutQuint",
                  "value": "easeInOutQuint"
                },
                {
                  "label": "easeInOutSine",
                  "value": "easeInOutSine"
                },
                {
                  "label": "easeInExpo",
                  "value": "easeInExpo"
                },
                {
                  "label": "easeOutExpo",
                  "value": "easeOutExpo"
                },
                {
                  "label": "easeInOutExpo",
                  "value": "easeInOutExpo"
                },
                {
                  "label": "easeInCirc",
                  "value": "easeInCirc"
                },
                {
                  "label": "easeOutCirc",
                  "value": "easeOutCirc"
                },
                {
                  "label": "easeInOutCirc",
                  "value": "easeInOutCirc"
                },
                {
                  "label": "easeOutBounce",
                  "value": "easeOutBounce"
                },
                {
                  "label": "easeInBack",
                  "value": "easeInBack"
                },
                {
                  "label": "easeOutBack",
                  "value": "easeOutBack"
                },
                {
                  "label": "easeInOutBack",
                  "value": "easeInOutBack"
                },
                {
                  "label": "elastic",
                  "value": "elastic"
                },
                {
                  "label": "swingFromTo",
                  "value": "swingFromTo"
                },
                {
                  "label": "swingFrom",
                  "value": "swingFrom"
                },
                {
                  "label": "swingTo",
                  "value": "swingTo"
                },
                {
                  "label": "bounce",
                  "value": "bounce"
                },
                {
                  "label": "bouncePast",
                  "value": "bouncePast"
                },
                {
                  "label": "easeFromTo",
                  "value": "easeFromTo"
                },
                {
                  "label": "easeFrom",
                  "value": "easeFrom"
                },
                {
                  "label": "easeTo",
                  "value": "easeTo"
                }
              ],
              "name": "FadeOutEasing"
            },
            {
              "value": "Idle",
              "type": "Choice",
              "label": "",
              "choices": [
                {
                  "label": "Idle",
                  "value": "Idle"
                },
                {
                  "label": "Focused",
                  "value": "Focused"
                },
                {
                  "label": "Pressed",
                  "value": "Pressed"
                }
              ],
              "hidden": true,
              "name": "PreviousState"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "Scale"
              },
              {
                "propertyName": "ButtonFSM"
              },
              {
                "propertyName": "Tween"
              },
              {
                "folderName": "Size",
                "children": [
                  {
                    "propertyName": "IdleScale"
                  },
                  {
                    "propertyName": "FocusedScale"
                  },
                  {
                    "propertyName": "PressedScale"
                  }
                ]
              },
              {
                "folderName": "Speed",
                "children": [
                  {
                    "propertyName": "FadeInDuration"
                  },
                  {
                    "propertyName": "FadeOutDuration"
                  },
                  {
                    "propertyName": "FadeInEasing"
                  },
                  {
                    "propertyName": "FadeOutEasing"
                  }
                ]
              },
              {
                "propertyName": "PreviousState"
              }
            ]
          }
        },
        {
          "description": "Smoothly change the color tint of buttons according to their state.",
          "fullName": "Button color tint tween",
          "name": "ButtonColorTintTween",
          "objectType": "Sprite",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ChangeColor"
                      },
                      "parameters": [
                        "Object",
                        "IdleColorTint"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "States",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsIdle"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"Idle\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Idle\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonColorTintTween::FadeOut"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "IdleColorTint",
                            ""
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsFocused"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        }
                      ],
                      "actions": [],
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Idle\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Focused\""
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonColorTintTween::FadeIn"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "FocusedColorTint",
                                ""
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Pressed\""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "\"Focused\""
                              ]
                            },
                            {
                              "type": {
                                "value": "ButtonStates::ButtonColorTintTween::FadeOut"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "FocusedColorTint",
                                ""
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonFSM::IsPressed"
                          },
                          "parameters": [
                            "Object",
                            "ButtonFSM",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "!=",
                            "\"Pressed\""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "\"Pressed\""
                          ]
                        },
                        {
                          "type": {
                            "value": "ButtonStates::ButtonColorTintTween::FadeIn"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "PressedColorTint",
                            ""
                          ]
                        }
                      ]
                    }
                  ],
                  "parameters": []
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Fade in",
              "functionType": "Action",
              "name": "FadeIn",
              "private": true,
              "sentence": "_PARAM0_ fade in to _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "Tween::AddObjectColorTween"
                      },
                      "parameters": [
                        "Object",
                        "Tween",
                        "\"__ButtonColorTintTween.Fade\"",
                        "Value",
                        "FadeInEasing",
                        "1000 * FadeInDuration",
                        "no",
                        "yes"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                },
                {
                  "description": "Value",
                  "name": "Value",
                  "type": "color"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Fade out",
              "functionType": "Action",
              "name": "FadeOut",
              "private": true,
              "sentence": "_PARAM0_ fade out to _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "Tween::AddObjectColorTween"
                      },
                      "parameters": [
                        "Object",
                        "Tween",
                        "\"__ButtonColorTintTween.Fade\"",
                        "Value",
                        "FadeOutEasing",
                        "1000 * FadeOutDuration",
                        "no",
                        "yes"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                },
                {
                  "description": "Value",
                  "name": "Value",
                  "type": "color"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the idle state color tint of the object.",
              "fullName": "Idle state color tint",
              "functionType": "ExpressionAndCondition",
              "group": "Button color tint tween",
              "name": "IdleColorTint",
              "sentence": "the idle state color tint",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "IdleColorTint"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "color"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "IdleColorTint",
              "name": "SetIdleColorTint",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonColorTintTween::SetPropertyIdleColorTint"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the focused state color tint of the object. The state is Focused when the button is hovered or held outside.",
              "fullName": "Focused state color tint",
              "functionType": "ExpressionAndCondition",
              "group": "Button color tint tween",
              "name": "FocusedColorTint",
              "sentence": "the focused state color tint",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FocusedColorTint"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "color"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FocusedColorTint",
              "name": "SetFocusedColorTint",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonColorTintTween::SetPropertyFocusedColorTint"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the pressed state color tint of the object.",
              "fullName": "Pressed state color tint",
              "functionType": "ExpressionAndCondition",
              "group": "Button color tint tween",
              "name": "PressedColorTint",
              "sentence": "the pressed state color tint",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "PressedColorTint"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "color"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "PressedColorTint",
              "name": "SetPressedColorTint",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonColorTintTween::SetPropertyPressedColorTint"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-in duration of the object.",
              "fullName": "Fade-in duration",
              "functionType": "ExpressionAndCondition",
              "group": "Button color tint tween",
              "name": "FadeInDuration",
              "sentence": "the fade-in duration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FadeInDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeInDuration",
              "name": "SetFadeInDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeInDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-out duration of the object.",
              "fullName": "Fade-out duration",
              "functionType": "ExpressionAndCondition",
              "group": "Button color tint tween",
              "name": "FadeOutDuration",
              "sentence": "the fade-out duration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FadeOutDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeOutDuration",
              "name": "SetFadeOutDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeOutDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-in easing of the object.",
              "fullName": "Fade-in easing",
              "functionType": "ExpressionAndCondition",
              "group": "Button color tint tween",
              "name": "FadeInEasing",
              "sentence": "the fade-in easing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FadeInEasing"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
                "type": "stringWithSelector"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeInEasing",
              "name": "SetFadeInEasing",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeInEasing"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the fade-out easing of the object.",
              "fullName": "Fade-out easing",
              "functionType": "ExpressionAndCondition",
              "group": "Button color tint tween",
              "name": "FadeOutEasing",
              "sentence": "the fade-out easing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "FadeOutEasing"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
                "type": "stringWithSelector"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FadeOutEasing",
              "name": "SetFadeOutEasing",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeOutEasing"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "Sprite",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ButtonStates::ButtonColorTintTween",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "Button states",
              "extraInformation": [
                "ButtonStates::ButtonFSM"
              ],
              "choices": [],
              "name": "ButtonFSM"
            },
            {
              "value": "",
              "type": "Behavior",
              "label": "Tween",
              "extraInformation": [
                "Tween::TweenBehavior"
              ],
              "choices": [],
              "name": "Tween"
            },
            {
              "value": "255;255;255",
              "type": "Color",
              "label": "Idle state color tint",
              "group": "Color",
              "name": "IdleColorTint"
            },
            {
              "value": "192;192;192",
              "type": "Color",
              "label": "Focused state color tint",
              "description": "The state is Focused when the button is hovered or held outside.",
              "group": "Color",
              "name": "FocusedColorTint"
            },
            {
              "value": "64;64;64",
              "type": "Color",
              "label": "Pressed state color tint",
              "group": "Color",
              "name": "PressedColorTint"
            },
            {
              "value": "0.1",
              "type": "Number",
              "unit": "Second",
              "label": "Fade-in duration",
              "group": "Speed",
              "name": "FadeInDuration"
            },
            {
              "value": "0.2",
              "type": "Number",
              "unit": "Second",
              "label": "Fade-out duration",
              "group": "Speed",
              "name": "FadeOutDuration"
            },
            {
              "value": "easeInOutQuad",
              "type": "Choice",
              "label": "Fade-in easing",
              "group": "Speed",
              "choices": [
                {
                  "label": "linear",
                  "value": "linear"
                },
                {
                  "label": "easeInQuad",
                  "value": "easeInQuad"
                },
                {
                  "label": "easeOutQuad",
                  "value": "easeOutQuad"
                },
                {
                  "label": "easeInOutQuad",
                  "value": "easeInOutQuad"
                },
                {
                  "label": "easeInCubic",
                  "value": "easeInCubic"
                },
                {
                  "label": "easeOutCubic",
                  "value": "easeOutCubic"
                },
                {
                  "label": "easeInOutCubic",
                  "value": "easeInOutCubic"
                },
                {
                  "label": "easeInQuart",
                  "value": "easeInQuart"
                },
                {
                  "label": "easeOutQuart",
                  "value": "easeOutQuart"
                },
                {
                  "label": "easeInOutQuart",
                  "value": "easeInOutQuart"
                },
                {
                  "label": "easeInQuint",
                  "value": "easeInQuint"
                },
                {
                  "label": "easeOutQuint",
                  "value": "easeOutQuint"
                },
                {
                  "label": "easeInOutQuint",
                  "value": "easeInOutQuint"
                },
                {
                  "label": "easeInOutSine",
                  "value": "easeInOutSine"
                },
                {
                  "label": "easeInExpo",
                  "value": "easeInExpo"
                },
                {
                  "label": "easeOutExpo",
                  "value": "easeOutExpo"
                },
                {
                  "label": "easeInOutExpo",
                  "value": "easeInOutExpo"
                },
                {
                  "label": "easeInCirc",
                  "value": "easeInCirc"
                },
                {
                  "label": "easeOutCirc",
                  "value": "easeOutCirc"
                },
                {
                  "label": "easeInOutCirc",
                  "value": "easeInOutCirc"
                },
                {
                  "label": "easeOutBounce",
                  "value": "easeOutBounce"
                },
                {
                  "label": "easeInBack",
                  "value": "easeInBack"
                },
                {
                  "label": "easeOutBack",
                  "value": "easeOutBack"
                },
                {
                  "label": "easeInOutBack",
                  "value": "easeInOutBack"
                },
                {
                  "label": "elastic",
                  "value": "elastic"
                },
                {
                  "label": "swingFromTo",
                  "value": "swingFromTo"
                },
                {
                  "label": "swingFrom",
                  "value": "swingFrom"
                },
                {
                  "label": "swingTo",
                  "value": "swingTo"
                },
                {
                  "label": "bounce",
                  "value": "bounce"
                },
                {
                  "label": "bouncePast",
                  "value": "bouncePast"
                },
                {
                  "label": "easeFromTo",
                  "value": "easeFromTo"
                },
                {
                  "label": "easeFrom",
                  "value": "easeFrom"
                },
                {
                  "label": "easeTo",
                  "value": "easeTo"
                }
              ],
              "name": "FadeInEasing"
            },
            {
              "value": "easeInOutQuad",
              "type": "Choice",
              "label": "Fade-out easing",
              "group": "Speed",
              "choices": [
                {
                  "label": "linear",
                  "value": "linear"
                },
                {
                  "label": "easeInQuad",
                  "value": "easeInQuad"
                },
                {
                  "label": "easeOutQuad",
                  "value": "easeOutQuad"
                },
                {
                  "label": "easeInOutQuad",
                  "value": "easeInOutQuad"
                },
                {
                  "label": "easeInCubic",
                  "value": "easeInCubic"
                },
                {
                  "label": "easeOutCubic",
                  "value": "easeOutCubic"
                },
                {
                  "label": "easeInOutCubic",
                  "value": "easeInOutCubic"
                },
                {
                  "label": "easeInQuart",
                  "value": "easeInQuart"
                },
                {
                  "label": "easeOutQuart",
                  "value": "easeOutQuart"
                },
                {
                  "label": "easeInOutQuart",
                  "value": "easeInOutQuart"
                },
                {
                  "label": "easeInQuint",
                  "value": "easeInQuint"
                },
                {
                  "label": "easeOutQuint",
                  "value": "easeOutQuint"
                },
                {
                  "label": "easeInOutQuint",
                  "value": "easeInOutQuint"
                },
                {
                  "label": "easeInOutSine",
                  "value": "easeInOutSine"
                },
                {
                  "label": "easeInExpo",
                  "value": "easeInExpo"
                },
                {
                  "label": "easeOutExpo",
                  "value": "easeOutExpo"
                },
                {
                  "label": "easeInOutExpo",
                  "value": "easeInOutExpo"
                },
                {
                  "label": "easeInCirc",
                  "value": "easeInCirc"
                },
                {
                  "label": "easeOutCirc",
                  "value": "easeOutCirc"
                },
                {
                  "label": "easeInOutCirc",
                  "value": "easeInOutCirc"
                },
                {
                  "label": "easeOutBounce",
                  "value": "easeOutBounce"
                },
                {
                  "label": "easeInBack",
                  "value": "easeInBack"
                },
                {
                  "label": "easeOutBack",
                  "value": "easeOutBack"
                },
                {
                  "label": "easeInOutBack",
                  "value": "easeInOutBack"
                },
                {
                  "label": "elastic",
                  "value": "elastic"
                },
                {
                  "label": "swingFromTo",
                  "value": "swingFromTo"
                },
                {
                  "label": "swingFrom",
                  "value": "swingFrom"
                },
                {
                  "label": "swingTo",
                  "value": "swingTo"
                },
                {
                  "label": "bounce",
                  "value": "bounce"
                },
                {
                  "label": "bouncePast",
                  "value": "bouncePast"
                },
                {
                  "label": "easeFromTo",
                  "value": "easeFromTo"
                },
                {
                  "label": "easeFrom",
                  "value": "easeFrom"
                },
                {
                  "label": "easeTo",
                  "value": "easeTo"
                }
              ],
              "name": "FadeOutEasing"
            },
            {
              "value": "Idle",
              "type": "Choice",
              "label": "",
              "choices": [
                {
                  "label": "Idle",
                  "value": "Idle"
                },
                {
                  "label": "Focused",
                  "value": "Focused"
                },
                {
                  "label": "Pressed",
                  "value": "Pressed"
                }
              ],
              "hidden": true,
              "name": "PreviousState"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "ButtonFSM"
              },
              {
                "propertyName": "Tween"
              },
              {
                "folderName": "Color",
                "children": [
                  {
                    "propertyName": "IdleColorTint"
                  },
                  {
                    "propertyName": "FocusedColorTint"
                  },
                  {
                    "propertyName": "PressedColorTint"
                  }
                ]
              },
              {
                "folderName": "Speed",
                "children": [
                  {
                    "propertyName": "FadeInDuration"
                  },
                  {
                    "propertyName": "FadeOutDuration"
                  },
                  {
                    "propertyName": "FadeInEasing"
                  },
                  {
                    "propertyName": "FadeOutEasing"
                  }
                ]
              },
              {
                "propertyName": "PreviousState"
              }
            ]
          }
        }
      ],
      "eventsBasedObjects": []
    },
    {
      "author": "",
      "category": "Input",
      "extensionNamespace": "",
      "fullName": "Multitouch joystick and buttons (sprite)",
      "gdevelopVersion": ">=5.5.222",
      "helpPath": "/objects/multitouch-joystick",
      "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTYiIGN5PSIxNiIgcj0iMTMiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjI4LjQsMTIgMjAsMTIgMjAsMy42ICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMjAsMjguNCAyMCwyMCAyOC40LDIwICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMy42LDIwIDEyLDIwIDEyLDI4LjQgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIxMiwzLjYgMTIsMTIgMy42LDEyICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNiw2IDE2LjcsNyAxNS4zLDcgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjE2LDI2IDE1LjMsMjUgMTYuNywyNSAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNiwxNiA3LDE1LjMgNywxNi43ICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyNiwxNiAyNSwxNi43IDI1LDE1LjMgIi8+DQo8L3N2Zz4NCg==",
      "name": "SpriteMultitouchJoystick",
      "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg",
      "shortDescription": "Joysticks or buttons for touchscreens.",
      "version": "1.9.0",
      "description": [
        "Multitouch joysticks are objects showing a joystick on the screen, useful for mobile. They work like a physical gamepad:",
        "- 4 or 8 directions",
        "- Analogus pads",
        "- Player selection",
        "- Automatic \"mapper\" behaviors for 2D and 3D movement behaviors (platformer characters, top-down movement, 3D character etc...). Add one of these to the object with the movement behavior (i.e: the player most of the time) and the behavior will then be controlled automatically by the virtual joystick (it works by reading the multitouch joystick state and simulating controls). No need for additional events to make it work once the behaviors are set up.",
        "",
        "There are ready-to-use joysticks in the asset-store [multitouch joysticks pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=multitouch-joysticks-multitouch-joysticks)."
      ],
      "origin": {
        "identifier": "SpriteMultitouchJoystick",
        "name": "gdevelop-extension-store"
      },
      "tags": [
        "multitouch",
        "joystick",
        "thumbstick",
        "controller",
        "touchscreen",
        "twin stick",
        "shooter",
        "virtual",
        "platformer",
        "platform",
        "top-down"
      ],
      "authorIds": [
        "gqDaZjCfevOOxBYkK6zlhtZnXCg1",
        "1OgYzWp5UeVPbiWGJwI6vqfgZLC3",
        "v0YRpdAnIucZFgiRCCecqVnGKno2",
        "IWykYNRvhCZBN3vEgKEbBPOR3Oc2"
      ],
      "dependencies": [],
      "globalVariables": [],
      "sceneVariables": [
        {
          "name": "Controllers",
          "type": "array",
          "children": [
            {
              "type": "structure",
              "children": [
                {
                  "name": "Buttons",
                  "type": "array",
                  "children": [
                    {
                      "type": "structure",
                      "children": [
                        {
                          "name": "State",
                          "type": "string",
                          "value": "Idle"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name": "Joystick",
                  "type": "structure",
                  "children": []
                }
              ]
            }
          ]
        }
      ],
      "eventsFunctions": [
        {
          "description": "Check if the events are running for the editor.",
          "fullName": "Editor is running",
          "functionType": "Condition",
          "name": "IsInGameEdition",
          "private": true,
          "sentence": "Events are running for the editor",
          "events": [
            {
              "type": "BuiltinCommonInstructions::JsCode",
              "inlineCode": [
                "const game = runtimeScene.getGame();\r",
                "eventsFunctionContext.returnValue = game.isInGameEdition && game.isInGameEdition();"
              ],
              "parameterObjects": "",
              "useStrict": true,
              "eventsSheetExpanded": false
            }
          ],
          "parameters": [],
          "objectGroups": []
        },
        {
          "fullName": "Accelerated speed",
          "functionType": "Expression",
          "name": "AcceleratedSpeed",
          "private": true,
          "sentence": "",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "AcceleratedSpeed",
                    "=",
                    "CurrentSpeed"
                  ]
                }
              ],
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "NumberVariable"
                      },
                      "parameters": [
                        "TargetedSpeed",
                        "<",
                        "0"
                      ]
                    }
                  ],
                  "actions": [],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Comment",
                      "color": {
                        "b": 109,
                        "g": 230,
                        "r": 255,
                        "textB": 0,
                        "textG": 0,
                        "textR": 0
                      },
                      "comment": "Reduce the speed to match the stick force."
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            "<",
                            "TargetedSpeed"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "=",
                            "min(TargetedSpeed, CurrentSpeed + Acceleration * TimeDelta())"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            ">",
                            "TargetedSpeed"
                          ]
                        },
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            "<",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "-",
                            "Acceleration * TimeDelta()"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Comment",
                      "color": {
                        "b": 109,
                        "g": 230,
                        "r": 255,
                        "textB": 0,
                        "textG": 0,
                        "textR": 0
                      },
                      "comment": "Turn back at least as fast as it would stop."
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            ">=",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "=",
                            "max(TargetedSpeed, CurrentSpeed - max(Acceleration , Deceleration) * TimeDelta())"
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "NumberVariable"
                      },
                      "parameters": [
                        "TargetedSpeed",
                        ">",
                        "0"
                      ]
                    }
                  ],
                  "actions": [],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Comment",
                      "color": {
                        "b": 109,
                        "g": 230,
                        "r": 255,
                        "textB": 0,
                        "textG": 0,
                        "textR": 0
                      },
                      "comment": "Reduce the speed to match the stick force."
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            ">",
                            "TargetedSpeed"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "=",
                            "max(TargetedSpeed, CurrentSpeed - Acceleration * TimeDelta())"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            "<",
                            "TargetedSpeed"
                          ]
                        },
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            ">",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "+",
                            "Acceleration * TimeDelta()"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Comment",
                      "color": {
                        "b": 109,
                        "g": 230,
                        "r": 255,
                        "textB": 0,
                        "textG": 0,
                        "textR": 0
                      },
                      "comment": "Turn back at least as fast as it would stop."
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            "<=",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "=",
                            "min(TargetedSpeed, CurrentSpeed + max(Acceleration , Deceleration) * TimeDelta())"
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "NumberVariable"
                      },
                      "parameters": [
                        "TargetedSpeed",
                        "=",
                        "0"
                      ]
                    }
                  ],
                  "actions": [],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            "<",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "=",
                            "min(0, CurrentSpeed + Acceleration * TimeDelta())"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "NumberVariable"
                          },
                          "parameters": [
                            "CurrentSpeed",
                            ">",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "AcceleratedSpeed",
                            "=",
                            "max(0, CurrentSpeed - Acceleration * TimeDelta())"
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "clamp(AcceleratedSpeed, -SpeedMax, SpeedMax)"
                      ]
                    }
                  ]
                }
              ],
              "variables": [
                {
                  "name": "AcceleratedSpeed",
                  "type": "number",
                  "value": 0
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Current speed",
              "name": "CurrentSpeed",
              "type": "expression"
            },
            {
              "description": "Targeted speed",
              "name": "TargetedSpeed",
              "type": "expression"
            },
            {
              "description": "Max speed",
              "name": "SpeedMax",
              "type": "expression"
            },
            {
              "description": "Acceleration",
              "name": "Acceleration",
              "type": "expression"
            },
            {
              "description": "Deceleration",
              "name": "Deceleration",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if a button was just pressed on a multitouch controller.",
          "fullName": "Multitouch controller button just pressed",
          "functionType": "Condition",
          "name": "IsButtonJustPressed",
          "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "StringVariable"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Buttons[Button].State",
                    "=",
                    "\"JustPressed\""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Button name",
              "name": "Button",
              "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]",
              "type": "string"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if a button is pressed on a multitouch controller.",
          "fullName": "Multitouch controller button pressed",
          "functionType": "Condition",
          "name": "IsButtonPressed",
          "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is pressed",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::Or"
                  },
                  "parameters": [],
                  "subInstructions": [
                    {
                      "type": {
                        "value": "StringVariable"
                      },
                      "parameters": [
                        "Controllers[ControllerIdentifier].Buttons[Button].State",
                        "=",
                        "\"Pressed\""
                      ]
                    },
                    {
                      "type": {
                        "value": "StringVariable"
                      },
                      "parameters": [
                        "Controllers[ControllerIdentifier].Buttons[Button].State",
                        "=",
                        "\"JustPressed\""
                      ]
                    }
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Button name",
              "name": "Button",
              "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]",
              "type": "string"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if a button is released on a multitouch controller.",
          "fullName": "Multitouch controller button released",
          "functionType": "Condition",
          "name": "IsButtonReleased",
          "sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is released",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "StringVariable"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Buttons[Button].State",
                    "=",
                    "\"Released\""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Button name",
              "name": "Button",
              "supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]",
              "type": "string"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Change a button state for a multitouch controller.",
          "fullName": "Button state",
          "functionType": "Action",
          "name": "SetButtonState",
          "private": true,
          "sentence": "Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetStringVariable"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Buttons[Button].State",
                    "=",
                    "ButtonState"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Button name",
              "name": "Button",
              "type": "string"
            },
            {
              "description": "Button state",
              "name": "ButtonState",
              "supplementaryInformation": "[\"Idle\",\"Pressed\",\"JustPressed\",\"Released\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
          "fullName": "Dead zone radius",
          "functionType": "Action",
          "name": "SetDeadZone",
          "private": true,
          "sentence": "Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].DeadZone",
                    "=",
                    "DeadZoneRadius"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "type": "string"
            },
            {
              "description": "Dead zone radius",
              "name": "DeadZoneRadius",
              "supplementaryInformation": "[]",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
          "fullName": "Dead zone radius",
          "functionType": "Expression",
          "name": "DeadZone",
          "private": true,
          "sentence": "Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].DeadZone"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "type": "string"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).",
          "fullName": "Angle to 4-way index",
          "functionType": "ExpressionAndCondition",
          "name": "AngleTo4Way",
          "private": true,
          "sentence": "The angle _PARAM1_ 4-way index",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "mod(round(Angle * 4 / 360), 4)"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Angle",
              "name": "Angle",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).",
          "fullName": "Angle to 8-way index",
          "functionType": "ExpressionAndCondition",
          "name": "AngleTo8Way",
          "private": true,
          "sentence": "The angle _PARAM1_ 8-way index",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "mod(round(Angle * 8 / 360), 8)"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Angle",
              "name": "Angle",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if angle is in a given direction.",
          "fullName": "Angle 4-way direction",
          "functionType": "Condition",
          "name": "IsAngleIn4WayDirection",
          "private": true,
          "sentence": "The angle _PARAM1_ is the 4-way direction _PARAM2_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Right\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo4Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "0",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Down\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo4Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "1",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Left\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo4Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "2",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Up\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo4Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "3",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Angle",
              "name": "Angle",
              "type": "expression"
            },
            {
              "description": "Direction",
              "name": "Direction",
              "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if angle is in a given direction.",
          "fullName": "Angle 8-way direction",
          "functionType": "Condition",
          "name": "IsAngleIn8WayDirection",
          "private": true,
          "sentence": "The angle _PARAM1_ is the 8-way direction _PARAM2_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Right\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "0",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"DownRight\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "1",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Down\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "2",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"DownLeft\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "3",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Left\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "4",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"UpLeft\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "5",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"Up\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "6",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "BuiltinCommonInstructions::CompareStrings"
                  },
                  "parameters": [
                    "Direction",
                    "=",
                    "\"UpRight\""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::AngleTo8Way"
                  },
                  "parameters": [
                    "",
                    "=",
                    "7",
                    "Angle",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Angle",
              "name": "Angle",
              "type": "expression"
            },
            {
              "description": "Direction",
              "name": "Direction",
              "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if joystick is pushed in a given direction.",
          "fullName": "Joystick pushed in a direction (4-way)",
          "functionType": "Condition",
          "name": "IsDirectionPushed4Way",
          "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Comment",
              "color": {
                "b": 109,
                "g": 230,
                "r": 255,
                "textB": 0,
                "textG": 0,
                "textR": 0
              },
              "comment": "Make sure the joystick has moved from center"
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::JoystickForce"
                  },
                  "parameters": [
                    "",
                    ">",
                    "0",
                    "ControllerIdentifier",
                    "JoystickIdentifier",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection"
                  },
                  "parameters": [
                    "",
                    "SpriteMultitouchJoystick::JoystickAngle(ControllerIdentifier, JoystickIdentifier)",
                    "Direction",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            },
            {
              "description": "Direction",
              "name": "Direction",
              "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if joystick is pushed in a given direction.",
          "fullName": "Joystick pushed in a direction (8-way)",
          "functionType": "Condition",
          "name": "IsDirectionPushed8Way",
          "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Comment",
              "color": {
                "b": 109,
                "g": 230,
                "r": 255,
                "textB": 0,
                "textG": 0,
                "textR": 0
              },
              "comment": "Make sure the joystick has moved from center"
            },
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::JoystickForce"
                  },
                  "parameters": [
                    "",
                    ">",
                    "0",
                    "ControllerIdentifier",
                    "JoystickIdentifier",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection"
                  },
                  "parameters": [
                    "",
                    "SpriteMultitouchJoystick::JoystickAngle(ControllerIdentifier, JoystickIdentifier)",
                    "Direction",
                    ""
                  ]
                }
              ],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnBoolean"
                  },
                  "parameters": [
                    "True"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            },
            {
              "description": "Direction",
              "name": "Direction",
              "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).",
          "fullName": "Joystick force (deprecated)",
          "functionType": "ExpressionAndCondition",
          "name": "JoystickForce",
          "private": true,
          "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ force",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier)"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            },
            {
              "description": "",
              "name": "Coucou",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "the force of multitouch contoller stick (from 0 to 1).",
          "fullName": "Stick force",
          "functionType": "ExpressionAndCondition",
          "name": "StickForce",
          "sentence": "multitouch controller _PARAM1_ _PARAM2_ stick force",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "max(0, Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Force - SpriteMultitouchJoystick::DeadZone(ControllerIdentifier, JoystickIdentifier)) / (1 - SpriteMultitouchJoystick::DeadZone(ControllerIdentifier, JoystickIdentifier))"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Stick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).",
          "fullName": "Joystick force",
          "functionType": "Action",
          "name": "SetJoystickForce",
          "private": true,
          "sentence": "Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Force",
                    "=",
                    "Value"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "type": "string"
            },
            {
              "description": "Value",
              "name": "Value",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).",
          "fullName": "Joystick angle (deprecated)",
          "functionType": "Expression",
          "name": "JoystickAngle",
          "private": true,
          "sentence": "",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier)"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).",
          "fullName": "Stick angle",
          "functionType": "Expression",
          "name": "StickAngle",
          "sentence": "",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Angle"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).",
          "fullName": "Joystick angle",
          "functionType": "Action",
          "name": "SetJoystickAngle",
          "private": true,
          "sentence": "Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Angle",
                    "=",
                    "Value"
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "type": "string"
            },
            {
              "description": "Value",
              "name": "Value",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).",
          "fullName": "Stick X force",
          "functionType": "Expression",
          "name": "StickForceX",
          "sentence": "",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "XFromAngleAndDistance(SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier), SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier))"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).",
          "fullName": "Stick Y force",
          "functionType": "Expression",
          "name": "StickForceY",
          "sentence": "",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "YFromAngleAndDistance(SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier), SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier))"
                  ]
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier",
              "type": "expression"
            },
            {
              "description": "Joystick name",
              "name": "JoystickIdentifier",
              "supplementaryInformation": "[\"Primary\",\"Secondary\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Check if a new touch has started on the right or left side of the screen.",
          "fullName": "New touch on a screen side",
          "functionType": "Condition",
          "group": "Multitouch Joystick",
          "name": "HasTouchStartedOnScreenSide",
          "sentence": "A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [
                {
                  "type": {
                    "value": "HasAnyTouchOrMouseStarted"
                  },
                  "parameters": [
                    ""
                  ]
                }
              ],
              "actions": [],
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "StringVariable"
                      },
                      "parameters": [
                        "Side",
                        "=",
                        "\"Left\""
                      ]
                    },
                    {
                      "type": {
                        "value": "TouchX"
                      },
                      "parameters": [
                        "",
                        "StartedTouchOrMouseId(0)",
                        "<",
                        "CameraCenterX(Object.Layer())",
                        "Object.Layer()",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "StringVariable"
                      },
                      "parameters": [
                        "Side",
                        "=",
                        "\"Right\""
                      ]
                    },
                    {
                      "type": {
                        "value": "TouchX"
                      },
                      "parameters": [
                        "",
                        "StartedTouchOrMouseId(0)",
                        ">=",
                        "CameraCenterX(Object.Layer())",
                        "Object.Layer()",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Multitouch joystick",
              "name": "Object",
              "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
              "type": "objectList"
            },
            {
              "description": "Screen side",
              "name": "Side",
              "supplementaryInformation": "[\"Left\",\"Right\"]",
              "type": "stringWithSelector"
            }
          ],
          "objectGroups": []
        }
      ],
      "eventsBasedBehaviors": [
        {
          "description": "Joystick that can be controlled by interacting with a touchscreen.",
          "fullName": "Multitouch Joystick",
          "name": "MultitouchJoystick",
          "objectType": "",
          "private": true,
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SetDeadZone"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "DeadZoneRadius",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onDeActivate",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "inverted": true,
                        "value": "SpriteMultitouchJoystick::IsInGameEdition"
                      },
                      "parameters": [
                        "",
                        ""
                      ]
                    }
                  ],
                  "actions": [],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "HasGameJustResumed"
                          },
                          "parameters": [
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            ""
                          ]
                        }
                      ]
                    },
                    {
                      "colorB": 228,
                      "colorG": 176,
                      "colorR": 74,
                      "creationTime": 0,
                      "name": "Manage touches",
                      "source": "",
                      "type": "BuiltinCommonInstructions::Group",
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "HasAnyTouchOrMouseStarted"
                              },
                              "parameters": [
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetNumberVariable"
                              },
                              "parameters": [
                                "TouchIndex",
                                "=",
                                "0"
                              ]
                            }
                          ],
                          "events": [
                            {
                              "type": "BuiltinCommonInstructions::Repeat",
                              "repeatExpression": "StartedTouchOrMouseCount()",
                              "conditions": [],
                              "actions": [],
                              "events": [
                                {
                                  "type": "BuiltinCommonInstructions::Standard",
                                  "conditions": [
                                    {
                                      "type": {
                                        "value": "NumberVariable"
                                      },
                                      "parameters": [
                                        "TouchId",
                                        "=",
                                        "0"
                                      ]
                                    },
                                    {
                                      "type": {
                                        "value": "CollisionPoint"
                                      },
                                      "parameters": [
                                        "Object",
                                        "TouchX(StartedTouchOrMouseId(TouchIndex), Object.Layer(), 0)",
                                        "TouchY(StartedTouchOrMouseId(TouchIndex), Object.Layer(), 0)"
                                      ]
                                    }
                                  ],
                                  "actions": [
                                    {
                                      "type": {
                                        "value": "SetNumberVariable"
                                      },
                                      "parameters": [
                                        "TouchId",
                                        "=",
                                        "StartedTouchOrMouseId(TouchIndex)"
                                      ]
                                    }
                                  ]
                                },
                                {
                                  "type": "BuiltinCommonInstructions::Standard",
                                  "conditions": [],
                                  "actions": [
                                    {
                                      "type": {
                                        "value": "SetNumberVariable"
                                      },
                                      "parameters": [
                                        "TouchIndex",
                                        "+",
                                        "1"
                                      ]
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Comment",
                          "color": {
                            "b": 109,
                            "g": 230,
                            "r": 255,
                            "textB": 0,
                            "textG": 0,
                            "textR": 0
                          },
                          "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)"
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "HasTouchEnded"
                              },
                              "parameters": [
                                "",
                                "TouchId"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                ""
                              ]
                            }
                          ]
                        }
                      ],
                      "parameters": []
                    },
                    {
                      "colorB": 228,
                      "colorG": 176,
                      "colorR": 74,
                      "creationTime": 0,
                      "name": "Update joystick position",
                      "source": "",
                      "type": "BuiltinCommonInstructions::Group",
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "NumberVariable"
                              },
                              "parameters": [
                                "TouchId",
                                "!=",
                                "0"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickAngle"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(TouchId, Object.Layer(), 0), TouchY(TouchId, Object.Layer(), 0))",
                                "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(TouchId, Object.Layer(), 0), TouchY(TouchId, Object.Layer(), 0))"
                              ]
                            },
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "clamp(2 * DistanceBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(TouchId, Object.Layer(), 0), TouchY(TouchId, Object.Layer(), 0)) / Object.Width(), 0, 1)",
                                ""
                              ]
                            }
                          ]
                        }
                      ],
                      "parameters": []
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the joystick force (from 0 to 1).",
              "fullName": "Joystick force",
              "functionType": "ExpressionAndCondition",
              "name": "JoystickForce",
              "sentence": "the joystick force",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "max(0, JoystickForce - DeadZoneRadius) / (1 - DeadZoneRadius)"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "JoystickForce",
              "name": "SetJoystickForce",
              "private": true,
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "JoystickForce",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SetJoystickForce"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "JoystickForce",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                },
                {
                  "description": "",
                  "name": "Parameter",
                  "type": "objectList"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).",
              "fullName": "Joystick angle",
              "functionType": "Expression",
              "name": "JoystickAngle",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "JoystickAngle"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).",
              "fullName": "Joystick angle",
              "functionType": "Action",
              "name": "SetJoystickAngle",
              "private": true,
              "sentence": "Change the joystick angle of _PARAM0_ to _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "JoystickAngle",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SetJoystickAngle"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "JoystickAngle",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                },
                {
                  "description": "Angle",
                  "name": "Value",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return the stick force on X axis (from -1 at the left to 1 at the right).",
              "fullName": "Stick X force",
              "functionType": "Expression",
              "name": "StickForceX",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Object.Behavior::JoystickForce() * cos(ToRad(Object.Behavior::JoystickAngle()))"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return the stick force on Y axis (from -1 at the top to 1 at the bottom).",
              "fullName": "Stick Y force",
              "functionType": "Expression",
              "name": "StickForceY",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Object.Behavior::JoystickForce() * sin(ToRad(Object.Behavior::JoystickAngle()))"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if joystick is pushed in a given direction.",
              "fullName": "Joystick pushed in a direction (4-way movement)",
              "functionType": "Condition",
              "name": "IsDirectionPushed4Way",
              "sentence": "_PARAM0_ is pushed in direction _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::JoystickForce"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ">",
                        "0",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection"
                      },
                      "parameters": [
                        "",
                        "JoystickAngle",
                        "Direction",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                },
                {
                  "description": "Direction",
                  "name": "Direction",
                  "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
                  "type": "stringWithSelector"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if joystick is pushed in a given direction.",
              "fullName": "Joystick pushed in a direction (8-way movement)",
              "functionType": "Condition",
              "name": "IsDirectionPushed8Way",
              "sentence": "_PARAM0_ is pushed in direction _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::JoystickForce"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ">",
                        "0",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection"
                      },
                      "parameters": [
                        "",
                        "JoystickAngle",
                        "Direction",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                },
                {
                  "description": "Direction",
                  "name": "Direction",
                  "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
                  "type": "stringWithSelector"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if a joystick is pressed.",
              "fullName": "Joystick pressed",
              "functionType": "Condition",
              "name": "IsPressed",
              "sentence": "Joystick _PARAM0_ is pressed",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "NumberVariable"
                      },
                      "parameters": [
                        "TouchId",
                        "!=",
                        "0"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Reset the joystick values (except for angle, which stays the same)",
              "fullName": "Reset",
              "functionType": "Action",
              "name": "Reset",
              "private": true,
              "sentence": "Reset the joystick of _PARAM0_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "0",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TouchId",
                        "=",
                        "0"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the multitouch controller identifier.",
              "fullName": "Multitouch controller identifier",
              "functionType": "ExpressionAndCondition",
              "group": "Multitouch Joystick configuration",
              "name": "ControllerIdentifier",
              "sentence": "the multitouch controller identifier",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "ControllerIdentifier"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "ControllerIdentifier",
              "name": "SetControllerIdentifier",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "ControllerIdentifier",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the joystick name.",
              "fullName": "Joystick name",
              "functionType": "ExpressionAndCondition",
              "group": "Multitouch Joystick configuration",
              "name": "JoystickIdentifier",
              "sentence": "the joystick name",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "JoystickIdentifier"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "JoystickIdentifier",
              "name": "SetJoystickIdentifier",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetStringVariable"
                      },
                      "parameters": [
                        "JoystickIdentifier",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
              "fullName": "Dead zone radius",
              "functionType": "ExpressionAndCondition",
              "group": "Multitouch Joystick configuration",
              "name": "DeadZoneRadius",
              "sentence": "the dead zone radius",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "DeadZoneRadius"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "DeadZoneRadius",
              "name": "SetDeadZoneRadius",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "DeadZoneRadius",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SetDeadZone"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "Value",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Force the joystick into the pressing state.",
              "fullName": "Force start pressing",
              "functionType": "Action",
              "name": "ForceStartPressing",
              "sentence": "Force start pressing _PARAM0_ with touch identifier: _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TouchId",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "type": "behavior"
                },
                {
                  "description": "Touch identifier",
                  "name": "Value",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "1",
              "type": "Number",
              "label": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Primary",
              "type": "String",
              "label": "Joystick name",
              "name": "JoystickIdentifier"
            },
            {
              "value": "0.4",
              "type": "Number",
              "label": "Dead zone radius (range: 0 to 1)",
              "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)",
              "name": "DeadZoneRadius"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "Joystick angle (range: -180 to 180)",
              "hidden": true,
              "name": "JoystickAngle"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "Joystick force (range: 0 to 1)",
              "hidden": true,
              "name": "JoystickForce"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "TouchId"
            },
            {
              "value": "",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "TouchIndex"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "propertyName": "JoystickIdentifier"
              },
              {
                "propertyName": "DeadZoneRadius"
              },
              {
                "propertyName": "JoystickAngle"
              },
              {
                "propertyName": "JoystickForce"
              },
              {
                "propertyName": "TouchId"
              },
              {
                "propertyName": "TouchIndex"
              }
            ]
          }
        },
        {
          "description": "Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.",
          "fullName": "Multitouch button",
          "name": "MultitouchButton",
          "objectType": "",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "IsReleased",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "IsReleased",
                        "False",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "\"Idle\"",
                        ""
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "IsJustPressed",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "IsJustPressed",
                        "False",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "\"Pressed\"",
                        ""
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "inverted": true,
                        "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "HasAnyTouchOrMouseStarted"
                      },
                      "parameters": [
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TouchIndex",
                        "=",
                        "0"
                      ]
                    }
                  ],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Repeat",
                      "repeatExpression": "StartedTouchOrMouseCount()",
                      "conditions": [],
                      "actions": [],
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "BuiltinCommonInstructions::Or"
                              },
                              "parameters": [],
                              "subInstructions": [
                                {
                                  "type": {
                                    "value": "CollisionPoint"
                                  },
                                  "parameters": [
                                    "Object",
                                    "TouchX(StartedTouchOrMouseId(TouchIndex), Object.Layer())",
                                    "TouchY(StartedTouchOrMouseId(TouchIndex), Object.Layer())"
                                  ]
                                },
                                {
                                  "type": {
                                    "value": "NumberVariable"
                                  },
                                  "parameters": [
                                    "Radius",
                                    ">",
                                    "DistanceBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(StartedTouchOrMouseId(TouchIndex), Object.Layer()), TouchY(StartedTouchOrMouseId(TouchIndex), Object.Layer()))"
                                  ]
                                }
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetNumberVariable"
                              },
                              "parameters": [
                                "TouchId",
                                "=",
                                "StartedTouchOrMouseId(TouchIndex)"
                              ]
                            },
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "\"JustPressed\"",
                                ""
                              ]
                            },
                            {
                              "type": {
                                "value": "SetBooleanVariable"
                              },
                              "parameters": [
                                "IsJustPressed",
                                "True",
                                ""
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "SetNumberVariable"
                              },
                              "parameters": [
                                "TouchIndex",
                                "+",
                                "1"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "HasTouchEnded"
                      },
                      "parameters": [
                        "",
                        "TouchId"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "\"Released\"",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "IsReleased",
                        "True",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "IsJustPressed",
                        "False",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TouchId",
                        "=",
                        "0"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button was just pressed.",
              "fullName": "Button just pressed",
              "functionType": "Condition",
              "name": "IsJustPressed",
              "sentence": "Button _PARAM0_ was just pressed",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "IsJustPressed",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button is pressed.",
              "fullName": "Button pressed",
              "functionType": "Condition",
              "name": "IsPressed",
              "sentence": "Button _PARAM0_ is pressed",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "NumberVariable"
                      },
                      "parameters": [
                        "TouchId",
                        "!=",
                        "0"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if the button is released.",
              "fullName": "Button released",
              "functionType": "Condition",
              "name": "IsReleased",
              "sentence": "Button _PARAM0_ is released",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "IsReleased",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "Button state",
              "functionType": "Action",
              "name": "SetButtonState",
              "private": true,
              "sentence": "Mark the button _PARAM0_ as _PARAM2_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SetButtonState"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "ButtonIdentifier",
                        "ButtonState",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
                  "type": "behavior"
                },
                {
                  "description": "Button state",
                  "name": "ButtonState",
                  "supplementaryInformation": "[\"Idle\",\"JustPressed\",\"Pressed\",\"Released\"]",
                  "type": "stringWithSelector"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "1",
              "type": "Number",
              "label": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "A",
              "type": "String",
              "label": "Button identifier",
              "name": "ButtonIdentifier"
            },
            {
              "value": "0",
              "type": "Number",
              "label": "TouchID",
              "hidden": true,
              "name": "TouchId"
            },
            {
              "value": "",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "TouchIndex"
            },
            {
              "value": "",
              "type": "Boolean",
              "label": "Button released",
              "hidden": true,
              "name": "IsReleased"
            },
            {
              "value": "",
              "type": "Boolean",
              "label": "Button just pressed",
              "hidden": true,
              "name": "IsJustPressed"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "Triggering circle radius",
              "description": "This circle adds up to the object collision mask.",
              "name": "Radius"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "propertyName": "ButtonIdentifier"
              },
              {
                "propertyName": "TouchId"
              },
              {
                "propertyName": "TouchIndex"
              },
              {
                "propertyName": "IsReleased"
              },
              {
                "propertyName": "IsJustPressed"
              },
              {
                "propertyName": "Radius"
              }
            ]
          }
        },
        {
          "description": "Control a platformer character with a multitouch controller.",
          "fullName": "Platformer multitouch controller mapper",
          "name": "PlatformerMultitouchMapper",
          "objectType": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "\"Left\"",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "PlatformBehavior::SimulateLeftKey"
                      },
                      "parameters": [
                        "Object",
                        "Property"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "\"Right\"",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "PlatformBehavior::SimulateRightKey"
                      },
                      "parameters": [
                        "Object",
                        "Property"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "\"Up\"",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "PlatformBehavior::SimulateUpKey"
                      },
                      "parameters": [
                        "Object",
                        "Property"
                      ]
                    },
                    {
                      "type": {
                        "value": "PlatformBehavior::SimulateLadderKey"
                      },
                      "parameters": [
                        "Object",
                        "Property"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        "\"Down\"",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "PlatformBehavior::SimulateDownKey"
                      },
                      "parameters": [
                        "Object",
                        "Property"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsButtonPressed"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JumpButton",
                        "\"Down\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "PlatformBehavior::SimulateJumpKey"
                      },
                      "parameters": [
                        "Object",
                        "Property"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::PlatformerMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "Platform character behavior",
              "extraInformation": [
                "PlatformBehavior::PlatformerObjectBehavior"
              ],
              "choices": [],
              "name": "Property"
            },
            {
              "value": "1",
              "type": "Number",
              "label": "Controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Primary",
              "type": "Choice",
              "label": "Joystick name",
              "group": "Controls",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "JoystickIdentifier"
            },
            {
              "value": "A",
              "type": "String",
              "label": "Jump button name",
              "group": "Controls",
              "name": "JumpButton"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "Property"
              },
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "folderName": "Controls",
                "children": [
                  {
                    "propertyName": "JoystickIdentifier"
                  },
                  {
                    "propertyName": "JumpButton"
                  }
                ]
              }
            ]
          }
        },
        {
          "description": "Control a 3D physics character with a multitouch controller.",
          "fullName": "3D platformer multitouch controller mapper",
          "name": "Platformer3DMultitouchMapper",
          "objectType": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::StickForce"
                      },
                      "parameters": [
                        "",
                        ">",
                        "0",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCharacter3D::SetForwardAngle"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCharacter3D",
                        "=",
                        "SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier) + CameraAngle(Object.Layer())"
                      ]
                    },
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCharacter3D::SimulateStick"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCharacter3D",
                        "-90",
                        "SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier)"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsButtonPressed"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JumpButton",
                        "\"Down\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCharacter3D::SimulateJumpKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCharacter3D"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::Platformer3DMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "3D physics character",
              "extraInformation": [
                "Physics3D::PhysicsCharacter3D"
              ],
              "choices": [],
              "name": "PhysicsCharacter3D"
            },
            {
              "value": "1",
              "type": "Number",
              "label": "Controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Primary",
              "type": "Choice",
              "label": "Walk joystick",
              "group": "Controls",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "JoystickIdentifier"
            },
            {
              "value": "A",
              "type": "String",
              "label": "Jump button name",
              "group": "Controls",
              "name": "JumpButton"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "PhysicsCharacter3D"
              },
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "folderName": "Controls",
                "children": [
                  {
                    "propertyName": "JoystickIdentifier"
                  },
                  {
                    "propertyName": "JumpButton"
                  }
                ]
              }
            ]
          }
        },
        {
          "description": "Control a 3D physics character with a multitouch controller.",
          "fullName": "3D shooter multitouch controller mapper",
          "name": "Shooter3DMultitouchMapper",
          "objectType": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::StickForce"
                      },
                      "parameters": [
                        "",
                        ">",
                        "0",
                        "ControllerIdentifier",
                        "JoystickIdentifier",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCharacter3D::SimulateStick"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCharacter3D",
                        "SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier)",
                        "SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier)"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsButtonPressed"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "JumpButton",
                        "\"Down\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCharacter3D::SimulateJumpKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCharacter3D"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::Shooter3DMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "3D physics character",
              "extraInformation": [
                "Physics3D::PhysicsCharacter3D"
              ],
              "choices": [],
              "name": "PhysicsCharacter3D"
            },
            {
              "value": "1",
              "type": "Number",
              "label": "Controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Primary",
              "type": "Choice",
              "label": "Walk joystick",
              "group": "Controls",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "JoystickIdentifier"
            },
            {
              "value": "A",
              "type": "String",
              "label": "Jump button name",
              "group": "Controls",
              "name": "JumpButton"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "PhysicsCharacter3D"
              },
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "folderName": "Controls",
                "children": [
                  {
                    "propertyName": "JoystickIdentifier"
                  },
                  {
                    "propertyName": "JumpButton"
                  }
                ]
              }
            ]
          }
        },
        {
          "description": "Control camera rotations with a multitouch controller.",
          "fullName": "First person camera multitouch controller mapper",
          "name": "FirstPersonMultitouchMapper",
          "objectType": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Comment",
                  "color": {
                    "b": 109,
                    "g": 230,
                    "r": 255,
                    "textB": 0,
                    "textG": 0,
                    "textR": 0
                  },
                  "comment": "TODO It's probably a bad idea to rotate the object around Y."
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "CurrentRotationSpeedZ",
                        "=",
                        "SpriteMultitouchJoystick::AcceleratedSpeed(CurrentRotationSpeedZ, SpriteMultitouchJoystick::StickForceX(ControllerIdentifier, CameraStick) * HorizontalRotationSpeedMax, HorizontalRotationSpeedMax, HorizontalRotationAcceleration, HorizontalRotationDeceleration)"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetAngle"
                      },
                      "parameters": [
                        "Object",
                        "+",
                        "CurrentRotationSpeedZ * TimeDelta()"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "CurrentRotationSpeedY",
                        "=",
                        "SpriteMultitouchJoystick::AcceleratedSpeed(CurrentRotationSpeedY, SpriteMultitouchJoystick::StickForceY(ControllerIdentifier, CameraStick) * VerticalRotationSpeedMax, VerticalRotationSpeedMax, VerticalRotationAcceleration, VerticalRotationDeceleration)"
                      ]
                    },
                    {
                      "type": {
                        "value": "Scene3D::Base3DBehavior::SetRotationY"
                      },
                      "parameters": [
                        "Object",
                        "Object3D",
                        "+",
                        "CurrentRotationSpeedY * TimeDelta()"
                      ]
                    },
                    {
                      "type": {
                        "value": "Scene3D::Base3DBehavior::SetRotationY"
                      },
                      "parameters": [
                        "Object",
                        "Object3D",
                        "=",
                        "clamp(Object.Object3D::RotationY(), VerticalAngleMin, VerticalAngleMax)"
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper::LookFromObjectEyes"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.",
              "fullName": "Look through object eyes",
              "functionType": "Action",
              "group": "Layers and cameras",
              "name": "LookFromObjectEyes",
              "private": true,
              "sentence": "Move the camera to look though _PARAM0_ eyes",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "CentreCamera"
                      },
                      "parameters": [
                        "",
                        "Object",
                        "",
                        "Object.Layer()",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "Scene3D::SetCameraZ"
                      },
                      "parameters": [
                        "",
                        "=",
                        "Object.Object3D::Z() + Object.Object3D::Depth() + OffsetZ",
                        "",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "Scene3D::SetCameraRotationX"
                      },
                      "parameters": [
                        "",
                        "=",
                        "- Object.Object3D::RotationY() + 90",
                        "GetArgumentAsString(\"Layer\")",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "Scene3D::SetCameraRotationY"
                      },
                      "parameters": [
                        "",
                        "=",
                        "Object.Object3D::RotationX()",
                        "GetArgumentAsString(\"Layer\")",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetCameraAngle"
                      },
                      "parameters": [
                        "",
                        "=",
                        "Object.Angle() + 90",
                        "Object.Layer()",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the maximum horizontal rotation speed of the object.",
              "fullName": "Maximum horizontal rotation speed",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper horizontal rotation configuration",
              "name": "HorizontalRotationSpeedMax",
              "sentence": "the maximum horizontal rotation speed",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "HorizontalRotationSpeedMax"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "HorizontalRotationSpeedMax",
              "name": "SetHorizontalRotationSpeedMax",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "HorizontalRotationSpeedMax",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the horizontal rotation acceleration of the object.",
              "fullName": "Horizontal rotation acceleration",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper horizontal rotation configuration",
              "name": "HorizontalRotationAcceleration",
              "sentence": "the horizontal rotation acceleration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "HorizontalRotationAcceleration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "HorizontalRotationAcceleration",
              "name": "SetHorizontalRotationAcceleration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "HorizontalRotationAcceleration",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the horizontal rotation deceleration of the object.",
              "fullName": "Horizontal rotation deceleration",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper horizontal rotation configuration",
              "name": "HorizontalRotationDeceleration",
              "sentence": "the horizontal rotation deceleration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "HorizontalRotationDeceleration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "HorizontalRotationDeceleration",
              "name": "SetHorizontalRotationDeceleration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "HorizontalRotationDeceleration",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the maximum vertical rotation speed of the object.",
              "fullName": "Maximum vertical rotation speed",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "name": "VerticalRotationSpeedMax",
              "sentence": "the maximum vertical rotation speed",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "VerticalRotationSpeedMax"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "VerticalRotationSpeedMax",
              "name": "SetVerticalRotationSpeedMax",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "VerticalRotationSpeedMax",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the vertical rotation acceleration of the object.",
              "fullName": "Vertical rotation acceleration",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "name": "VerticalRotationAcceleration",
              "sentence": "the vertical rotation acceleration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "VerticalRotationAcceleration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "VerticalRotationAcceleration",
              "name": "SetVerticalRotationAcceleration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "VerticalRotationAcceleration",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the vertical rotation deceleration of the object.",
              "fullName": "Vertical rotation deceleration",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "name": "VerticalRotationDeceleration",
              "sentence": "the vertical rotation deceleration",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "VerticalRotationDeceleration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "VerticalRotationDeceleration",
              "name": "SetVerticalRotationDeceleration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "VerticalRotationDeceleration",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the minimum vertical camera angle of the object.",
              "fullName": "Minimum vertical camera angle",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "name": "VerticalAngleMin",
              "sentence": "the minimum vertical camera angle",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "VerticalAngleMin"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "VerticalAngleMin",
              "name": "SetVerticalAngleMin",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "VerticalAngleMin",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the maximum vertical camera angle of the object.",
              "fullName": "Maximum vertical camera angle",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "name": "VerticalAngleMax",
              "sentence": "the maximum vertical camera angle",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "VerticalAngleMax"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "VerticalAngleMax",
              "name": "SetVerticalAngleMax",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "VerticalAngleMax",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the z position offset of the object.",
              "fullName": "Z position offset",
              "functionType": "ExpressionAndCondition",
              "group": "First person camera multitouch controller mapper position configuration",
              "name": "OffsetZ",
              "sentence": "the z position offset",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "OffsetZ"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "OffsetZ",
              "name": "SetOffsetZ",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "OffsetZ",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::FirstPersonMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "3D capability",
              "extraInformation": [
                "Scene3D::Base3DBehavior"
              ],
              "choices": [],
              "name": "Object3D"
            },
            {
              "value": "1",
              "type": "Number",
              "label": "Controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Secondary",
              "type": "Choice",
              "label": "Camera joystick",
              "group": "Controls",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "CameraStick"
            },
            {
              "value": "180",
              "type": "Number",
              "unit": "AngularSpeed",
              "label": "Maximum rotation speed",
              "group": "Horizontal rotation",
              "name": "HorizontalRotationSpeedMax"
            },
            {
              "value": "360",
              "type": "Number",
              "label": "Rotation acceleration",
              "group": "Horizontal rotation",
              "name": "HorizontalRotationAcceleration"
            },
            {
              "value": "720",
              "type": "Number",
              "label": "Rotation deceleration",
              "group": "Horizontal rotation",
              "name": "HorizontalRotationDeceleration"
            },
            {
              "value": "120",
              "type": "Number",
              "unit": "AngularSpeed",
              "label": "Maximum rotation speed",
              "group": "Vertical rotation",
              "name": "VerticalRotationSpeedMax"
            },
            {
              "value": "240",
              "type": "Number",
              "label": "Rotation acceleration",
              "group": "Vertical rotation",
              "name": "VerticalRotationAcceleration"
            },
            {
              "value": "480",
              "type": "Number",
              "label": "Rotation deceleration",
              "group": "Vertical rotation",
              "name": "VerticalRotationDeceleration"
            },
            {
              "value": "-90",
              "type": "Number",
              "unit": "DegreeAngle",
              "label": "Minimum angle",
              "group": "Vertical rotation",
              "name": "VerticalAngleMin"
            },
            {
              "value": "90",
              "type": "Number",
              "unit": "DegreeAngle",
              "label": "Maximum angle",
              "group": "Vertical rotation",
              "name": "VerticalAngleMax"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "Z position offset",
              "group": "Position",
              "name": "OffsetZ"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "AngularSpeed",
              "label": "Current rotation speed Z",
              "hidden": true,
              "name": "CurrentRotationSpeedZ"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "AngularSpeed",
              "label": "Current rotation speed Y",
              "hidden": true,
              "name": "CurrentRotationSpeedY"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "Object3D"
              },
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "folderName": "Controls",
                "children": [
                  {
                    "propertyName": "CameraStick"
                  }
                ]
              },
              {
                "folderName": "Horizontal rotation",
                "children": [
                  {
                    "propertyName": "HorizontalRotationSpeedMax"
                  },
                  {
                    "propertyName": "HorizontalRotationAcceleration"
                  },
                  {
                    "propertyName": "HorizontalRotationDeceleration"
                  }
                ]
              },
              {
                "folderName": "Vertical rotation",
                "children": [
                  {
                    "propertyName": "VerticalRotationSpeedMax"
                  },
                  {
                    "propertyName": "VerticalRotationAcceleration"
                  },
                  {
                    "propertyName": "VerticalRotationDeceleration"
                  },
                  {
                    "propertyName": "VerticalAngleMin"
                  },
                  {
                    "propertyName": "VerticalAngleMax"
                  }
                ]
              },
              {
                "folderName": "Position",
                "children": [
                  {
                    "propertyName": "OffsetZ"
                  }
                ]
              },
              {
                "propertyName": "CurrentRotationSpeedZ"
              },
              {
                "propertyName": "CurrentRotationSpeedY"
              }
            ]
          }
        },
        {
          "description": "Control a 3D physics car with a multitouch controller.",
          "fullName": "3D car multitouch controller mapper",
          "name": "PhysicsCar3DMultitouchMapper",
          "objectType": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::StickForce"
                      },
                      "parameters": [
                        "",
                        ">",
                        "0",
                        "ControllerIdentifier",
                        "SteerJoystickIdentifier",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateSteeringStick"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D",
                        "SpriteMultitouchJoystick::StickForceX(ControllerIdentifier, \"Primary\")"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::StickForce"
                      },
                      "parameters": [
                        "",
                        ">",
                        "0",
                        "ControllerIdentifier",
                        "SpeedJoystickIdentifier",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateAcceleratorStick"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D",
                        "-SpriteMultitouchJoystick::StickForceY(ControllerIdentifier, \"Secondary\")"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::IsButtonPressed"
                      },
                      "parameters": [
                        "",
                        "ControllerIdentifier",
                        "HandBrakeButton",
                        "\"Down\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateHandBrakeKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::PhysicsCar3DMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "3D physics car",
              "extraInformation": [
                "Physics3D::PhysicsCar3D"
              ],
              "choices": [],
              "name": "PhysicsCar3D"
            },
            {
              "value": "1",
              "type": "Number",
              "label": "Controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Primary",
              "type": "Choice",
              "label": "Steer joystick",
              "group": "Controls",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "SteerJoystickIdentifier"
            },
            {
              "value": "Secondary",
              "type": "Choice",
              "label": "Speed joystick",
              "group": "Controls",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "SpeedJoystickIdentifier"
            },
            {
              "value": "B",
              "type": "String",
              "label": "Hand brake button name",
              "group": "Controls",
              "name": "HandBrakeButton"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "PhysicsCar3D"
              },
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "folderName": "Controls",
                "children": [
                  {
                    "propertyName": "SteerJoystickIdentifier"
                  },
                  {
                    "propertyName": "SpeedJoystickIdentifier"
                  },
                  {
                    "propertyName": "HandBrakeButton"
                  }
                ]
              }
            ]
          }
        },
        {
          "description": "Control a top-down character with a multitouch controller.",
          "fullName": "Top-down multitouch controller mapper",
          "name": "TopDownMultitouchMapper",
          "objectType": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "StringVariable"
                      },
                      "parameters": [
                        "StickMode",
                        "=",
                        "\"Analog\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "TopDownMovementBehavior::SimulateStick"
                      },
                      "parameters": [
                        "Object",
                        "TopDownMovement",
                        "SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier)",
                        "SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier)"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "StringVariable"
                      },
                      "parameters": [
                        "StickMode",
                        "=",
                        "\"360°\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "TopDownMovementBehavior::SimulateStick"
                      },
                      "parameters": [
                        "Object",
                        "TopDownMovement",
                        "SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier)",
                        "sign(SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier))"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "StringVariable"
                      },
                      "parameters": [
                        "StickMode",
                        "=",
                        "\"8 Directions\""
                      ]
                    }
                  ],
                  "actions": [],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "inverted": true,
                            "value": "TopDownMovementBehavior::DiagonalsAllowed"
                          },
                          "parameters": [
                            "Object",
                            "TopDownMovement"
                          ]
                        }
                      ],
                      "actions": [],
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Left\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateLeftKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Right\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateRightKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Up\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateUpKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Down\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateDownKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "TopDownMovementBehavior::DiagonalsAllowed"
                          },
                          "parameters": [
                            "Object",
                            "TopDownMovement"
                          ]
                        }
                      ],
                      "actions": [],
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Left\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateLeftKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Right\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateRightKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Up\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateUpKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"Down\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateDownKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"UpLeft\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateUpKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            },
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateLeftKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"UpRight\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateUpKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            },
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateRightKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"DownLeft\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateDownKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            },
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateLeftKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
                              },
                              "parameters": [
                                "",
                                "ControllerIdentifier",
                                "JoystickIdentifier",
                                "\"DownRight\"",
                                ""
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateDownKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            },
                            {
                              "type": {
                                "value": "TopDownMovementBehavior::SimulateRightKey"
                              },
                              "parameters": [
                                "Object",
                                "TopDownMovement"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SpriteMultitouchJoystick::TopDownMultitouchMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "Top-down movement behavior",
              "extraInformation": [
                "TopDownMovementBehavior::TopDownMovementBehavior"
              ],
              "choices": [],
              "name": "TopDownMovement"
            },
            {
              "value": "1",
              "type": "Number",
              "label": "Controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Primary",
              "type": "Choice",
              "label": "Joystick name",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "JoystickIdentifier"
            },
            {
              "value": "Analog",
              "type": "Choice",
              "label": "Stick mode",
              "group": "Controls",
              "choices": [
                {
                  "label": "Analog",
                  "value": "Analog"
                },
                {
                  "label": "360°",
                  "value": "360°"
                },
                {
                  "label": "8 Directions",
                  "value": "8 Directions"
                }
              ],
              "name": "StickMode"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "TopDownMovement"
              },
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "propertyName": "JoystickIdentifier"
              },
              {
                "folderName": "Controls",
                "children": [
                  {
                    "propertyName": "StickMode"
                  }
                ]
              }
            ]
          }
        }
      ],
      "eventsBasedObjects": [
        {
          "areaMaxX": 64,
          "areaMaxY": 64,
          "areaMaxZ": 64,
          "areaMinX": 0,
          "areaMinY": 0,
          "areaMinZ": 0,
          "defaultName": "Joystick",
          "description": "Joystick for touchscreens.",
          "fullName": "Multitouch Joystick",
          "isUsingLegacyInstancesRenderer": true,
          "name": "SpriteMultitouchJoystick",
          "objects": [
            {
              "adaptCollisionMaskAutomatically": false,
              "assetStoreId": "",
              "name": "Thumb",
              "type": "Sprite",
              "updateIfNotVisible": false,
              "variables": [],
              "effects": [],
              "behaviors": [],
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": []
                    }
                  ]
                }
              ]
            },
            {
              "adaptCollisionMaskAutomatically": false,
              "assetStoreId": "",
              "name": "Border",
              "type": "Sprite",
              "updateIfNotVisible": false,
              "variables": [],
              "effects": [],
              "behaviors": [
                {
                  "name": "MultitouchJoystick",
                  "type": "SpriteMultitouchJoystick::MultitouchJoystick",
                  "ControllerIdentifier": 1,
                  "JoystickIdentifier": "Primary",
                  "FloatingEnabled": false,
                  "DeadZoneRadius": 0.4,
                  "JoystickAngle": 0,
                  "JoystickForce": 0,
                  "TouchId": 0,
                  "TouchIndex": 0
                }
              ],
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": []
                    }
                  ]
                }
              ]
            }
          ],
          "objectsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "objectName": "Thumb"
              },
              {
                "objectName": "Border"
              }
            ]
          },
          "objectsGroups": [],
          "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": []
            }
          ],
          "instances": [],
          "editionSettings": [],
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "Create"
                      },
                      "parameters": [
                        "",
                        "Border",
                        "0",
                        "0",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "Create"
                      },
                      "parameters": [
                        "",
                        "Thumb",
                        "0",
                        "0",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "ChangePlan"
                      },
                      "parameters": [
                        "Border",
                        "=",
                        "1"
                      ]
                    },
                    {
                      "type": {
                        "value": "ChangePlan"
                      },
                      "parameters": [
                        "Thumb",
                        "=",
                        "2"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetCenter"
                      },
                      "parameters": [
                        "Border",
                        "=",
                        "0",
                        "=",
                        "0"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetCenter"
                      },
                      "parameters": [
                        "Thumb",
                        "=",
                        "0",
                        "=",
                        "0"
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration"
                      },
                      "parameters": [
                        "Object",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetIncludedInParentCollisionMask"
                      },
                      "parameters": [
                        "Thumb",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPostEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "inverted": true,
                        "value": "SpriteMultitouchJoystick::IsInGameEdition"
                      },
                      "parameters": [
                        "",
                        ""
                      ]
                    }
                  ],
                  "actions": [],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [],
                      "actions": [
                        {
                          "type": {
                            "value": "MettreAutour"
                          },
                          "parameters": [
                            "Thumb",
                            "Border",
                            "Border.MultitouchJoystick::JoystickForce() * Border.Width() / 2",
                            "Border.MultitouchJoystick::JoystickAngle()"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "BooleanVariable"
                          },
                          "parameters": [
                            "ShouldBeHiddenWhenReleased",
                            "True",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "inverted": true,
                            "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::IsPressed"
                          },
                          "parameters": [
                            "Object",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "Cache"
                          },
                          "parameters": [
                            "Object"
                          ]
                        },
                        {
                          "type": {
                            "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::ActivateControl"
                          },
                          "parameters": [
                            "Object",
                            "no",
                            ""
                          ]
                        },
                        {
                          "type": {
                            "value": "SetBooleanVariable"
                          },
                          "parameters": [
                            "ShouldBeHiddenWhenReleased",
                            "False",
                            ""
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onHotReloading",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration"
                      },
                      "parameters": [
                        "Object",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Pass the object property values to the behavior.",
              "fullName": "Update configuration",
              "functionType": "Action",
              "name": "UpdateConfiguration",
              "private": true,
              "sentence": "Update the configuration of _PARAM0_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "=",
                        "ControllerIdentifier",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "=",
                        "JoystickIdentifier",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "=",
                        "DeadZoneRadius",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Show the joystick until it is released.",
              "fullName": "Show and start pressing",
              "functionType": "Action",
              "name": "TeleportAndPress",
              "sentence": "Show _PARAM0_ at the cursor position and start pressing",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "HasAnyTouchOrMouseStarted"
                      },
                      "parameters": [
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "MettreXY"
                      },
                      "parameters": [
                        "Object",
                        "=",
                        "Object.ParentTouchX(StartedTouchOrMouseId(0))",
                        "=",
                        "Object.ParentTouchY(StartedTouchOrMouseId(0))"
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::ActivateControl"
                      },
                      "parameters": [
                        "Object",
                        "yes",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "Montre"
                      },
                      "parameters": [
                        "Object",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "ShouldBeHiddenWhenReleased",
                        "True",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::ForceStartPressing"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "StartedTouchOrMouseId(0)",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return the X position of a specified touch",
              "fullName": "Touch X position (on parent)",
              "functionType": "Expression",
              "name": "ParentTouchX",
              "private": true,
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": []
                },
                {
                  "type": "BuiltinCommonInstructions::JsCode",
                  "inlineCode": [
                    "const object = objects[0];",
                    "const touchId = eventsFunctionContext.getArgument(\"TouchId\");",
                    "eventsFunctionContext.returnValue = gdjs.evtTools.input.getTouchX(object.getInstanceContainer(), touchId, object.getLayer());"
                  ],
                  "parameterObjects": "Object",
                  "useStrict": true,
                  "eventsSheetExpanded": false
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                },
                {
                  "description": "Touch identifier",
                  "name": "TouchId",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return the X position of a specified touch",
              "fullName": "Touch X position (on parent)",
              "functionType": "Expression",
              "name": "ParentTouchY",
              "private": true,
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": []
                },
                {
                  "type": "BuiltinCommonInstructions::JsCode",
                  "inlineCode": [
                    "const object = objects[0];",
                    "const touchId = eventsFunctionContext.getArgument(\"TouchId\");",
                    "eventsFunctionContext.returnValue = gdjs.evtTools.input.getTouchY(object.getInstanceContainer(), touchId, object.getLayer());"
                  ],
                  "parameterObjects": "Object",
                  "useStrict": true,
                  "eventsSheetExpanded": false
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                },
                {
                  "description": "Touch identifier",
                  "name": "TouchId",
                  "type": "expression"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "De/activate control of the joystick.",
              "fullName": "De/activate control",
              "functionType": "Action",
              "name": "ActivateControl",
              "sentence": "Activate control of _PARAM0_: _PARAM1_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "inverted": true,
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "ShouldActivate",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "ActivateBehavior"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "no"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "ShouldActivate",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "ActivateBehavior"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "yes"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                },
                {
                  "description": "Activate",
                  "name": "ShouldActivate",
                  "type": "yesorno"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if a stick is pressed.",
              "fullName": "Stick pressed",
              "functionType": "Condition",
              "name": "IsPressed",
              "sentence": "Stick _PARAM0_ is pressed",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "!="
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the joystick force (from 0 to 1).",
              "fullName": "Joystick force (deprecated)",
              "functionType": "ExpressionAndCondition",
              "name": "JoystickForce",
              "private": true,
              "sentence": "the joystick force",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::JoystickForce()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the strick force (from 0 to 1).",
              "fullName": "Stick force",
              "functionType": "ExpressionAndCondition",
              "name": "StickForce",
              "sentence": "the stick force",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::JoystickForce()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the stick force on X axis (from -1 at the left to 1 at the right).",
              "fullName": "Stick X force",
              "functionType": "ExpressionAndCondition",
              "name": "StickForceX",
              "sentence": "the stick X force",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::StickForceX()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the stick force on Y axis (from -1 at the top to 1 at the bottom).",
              "fullName": "Stick Y force",
              "functionType": "ExpressionAndCondition",
              "name": "StickForceY",
              "sentence": "the stick Y force",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::StickForceY()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return the angle the joystick is pointing towards (from -180 to 180).",
              "fullName": "Joystick angle (deprecated)",
              "functionType": "Expression",
              "name": "JoystickAngle",
              "private": true,
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::JoystickAngle()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return the angle the stick is pointing towards (from -180 to 180).",
              "fullName": "Stick angle",
              "functionType": "Expression",
              "name": "StickAngle",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::JoystickAngle()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if joystick is pushed in a given direction.",
              "fullName": "Joystick pushed in a direction (4-way movement)",
              "functionType": "Condition",
              "name": "IsDirectionPushed4Way",
              "sentence": "_PARAM0_ is pushed in direction _PARAM1_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed4Way"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "Direction",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                },
                {
                  "description": "Direction",
                  "name": "Direction",
                  "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
                  "type": "stringWithSelector"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Check if joystick is pushed in a given direction.",
              "fullName": "Joystick pushed in a direction (8-way movement)",
              "functionType": "Condition",
              "name": "IsDirectionPushed8Way",
              "sentence": "_PARAM0_ is pushed in direction _PARAM1_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed8Way"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "Direction",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnBoolean"
                      },
                      "parameters": [
                        "True"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                },
                {
                  "description": "Direction",
                  "name": "Direction",
                  "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
                  "type": "stringWithSelector"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the multitouch controller identifier (1, 2, 3, 4...).",
              "fullName": "Multitouch controller identifier",
              "functionType": "ExpressionAndCondition",
              "group": "Multitouch Joystick configuration",
              "name": "ControllerIdentifier",
              "sentence": "the multitouch controller identifier",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::PropertyControllerIdentifier()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "ControllerIdentifier",
              "name": "SetControllerIdentifier",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "=",
                        "Value",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the joystick name of the object.",
              "fullName": "Joystick name",
              "functionType": "ExpressionAndCondition",
              "group": "Multitouch Joystick configuration",
              "name": "JoystickIdentifier",
              "sentence": "the joystick name",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnString"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::PropertyJoystickIdentifier()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "string"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "JoystickIdentifier",
              "name": "SetJoystickIdentifier",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "=",
                        "Value",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
              "fullName": "Dead zone radius",
              "functionType": "ExpressionAndCondition",
              "group": "Multitouch Joystick configuration",
              "name": "DeadZoneRadius",
              "sentence": "the dead zone radius",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Border.MultitouchJoystick::PropertyDeadZoneRadius()"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "DeadZoneRadius",
              "name": "SetDeadZoneRadius",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius"
                      },
                      "parameters": [
                        "Border",
                        "MultitouchJoystick",
                        "=",
                        "Value",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
                  "type": "object"
                }
              ],
              "objectGroups": []
            }
          ],
          "propertyDescriptors": [
            {
              "value": "1",
              "type": "Number",
              "label": "Multitouch controller identifier (1, 2, 3, 4...)",
              "name": "ControllerIdentifier"
            },
            {
              "value": "Primary",
              "type": "Choice",
              "label": "Joystick name",
              "choices": [
                {
                  "label": "Primary",
                  "value": "Primary"
                },
                {
                  "label": "Secondary",
                  "value": "Secondary"
                }
              ],
              "name": "JoystickIdentifier"
            },
            {
              "value": "0.4",
              "type": "Number",
              "label": "Dead zone radius (range: 0 to 1)",
              "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)",
              "name": "DeadZoneRadius"
            },
            {
              "value": "Center-center",
              "type": "String",
              "label": "",
              "description": "Only used by the scene editor.",
              "extraInformation": [
                "Thumb"
              ],
              "choices": [],
              "hidden": true,
              "name": "ThumbAnchorOrigin"
            },
            {
              "value": "Center-center",
              "type": "Number",
              "label": "",
              "description": "Only used by the scene editor.",
              "hidden": true,
              "name": "ThumbAnchorTarget"
            },
            {
              "value": "true",
              "type": "Boolean",
              "label": "",
              "description": "Only used by the scene editor.",
              "extraInformation": [
                "Thumb"
              ],
              "choices": [],
              "hidden": true,
              "name": "ThumbIsScaledProportionally"
            },
            {
              "value": "Center-center",
              "type": "String",
              "label": "",
              "description": "Only used by the scene editor.",
              "hidden": true,
              "name": "ParentOrigin"
            },
            {
              "value": "",
              "type": "Boolean",
              "label": "",
              "hidden": true,
              "name": "ShouldBeHiddenWhenReleased"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "ControllerIdentifier"
              },
              {
                "propertyName": "JoystickIdentifier"
              },
              {
                "propertyName": "DeadZoneRadius"
              },
              {
                "propertyName": "ThumbAnchorOrigin"
              },
              {
                "propertyName": "ThumbAnchorTarget"
              },
              {
                "propertyName": "ThumbIsScaledProportionally"
              },
              {
                "propertyName": "ParentOrigin"
              },
              {
                "propertyName": "ShouldBeHiddenWhenReleased"
              }
            ]
          },
          "variants": []
        }
      ]
    },
    {
      "author": "",
      "category": "Camera",
      "extensionNamespace": "",
      "fullName": "Smooth Camera",
      "gdevelopVersion": "",
      "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.3.2",
      "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": [],
      "eventsBasedBehaviors": [
        {
          "description": "Smoothly scroll to follow an object.",
          "fullName": "Smooth Camera",
          "name": "SmoothCamera",
          "objectType": "",
          "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": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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": "SmoothCamera::SmoothCamera::PropertyIsCalledManually"
                      },
                      "parameters": [
                        "Object",
                        "Behavior"
                      ]
                    }
                  ],
                  "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": "SmoothCamera::SmoothCamera::SetPropertyIsCalledManually"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "yes"
                      ]
                    },
                    {
                      "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": "SmoothCamera::SmoothCamera::PropertyFollowOnX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyOldX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "CameraX(Object.Layer(), 0)"
                      ]
                    }
                  ],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "CameraX"
                          },
                          "parameters": [
                            "",
                            ">",
                            "Object.Behavior::FreeAreaRight()",
                            "Object.Layer()",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetCameraX"
                          },
                          "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": "CameraX"
                              },
                              "parameters": [
                                "",
                                "<",
                                "OldX - LeftwardSpeedMax * TimeDelta()",
                                "Object.Layer()",
                                "0"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetCameraX"
                              },
                              "parameters": [
                                "",
                                "=",
                                "OldX - LeftwardSpeedMax * TimeDelta()",
                                "Object.Layer()",
                                "0"
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "CameraX"
                          },
                          "parameters": [
                            "",
                            "<",
                            "Object.Behavior::FreeAreaLeft()",
                            "Object.Layer()",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetCameraX"
                          },
                          "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": "CameraX"
                              },
                              "parameters": [
                                "",
                                ">",
                                "OldX + RightwardSpeedMax * TimeDelta()",
                                "Object.Layer()",
                                "0"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetCameraX"
                              },
                              "parameters": [
                                "",
                                "=",
                                "OldX + RightwardSpeedMax * TimeDelta()",
                                "Object.Layer()",
                                "0"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::PropertyFollowOnY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyOldY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "CameraY(Object.Layer(), 0)"
                      ]
                    }
                  ],
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "CameraY"
                          },
                          "parameters": [
                            "",
                            ">",
                            "Object.Behavior::FreeAreaBottom()",
                            "Object.Layer()",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetCameraY"
                          },
                          "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": "CameraY"
                              },
                              "parameters": [
                                "",
                                "<",
                                "OldY - UpwardSpeedMax * TimeDelta()",
                                "Object.Layer()",
                                "0"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetCameraY"
                              },
                              "parameters": [
                                "",
                                "=",
                                "OldY - UpwardSpeedMax * TimeDelta()",
                                "Object.Layer()",
                                "0"
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "CameraY"
                          },
                          "parameters": [
                            "",
                            "<",
                            "Object.Behavior::FreeAreaTop()",
                            "Object.Layer()",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetCameraY"
                          },
                          "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": "CameraY"
                              },
                              "parameters": [
                                "",
                                ">",
                                "OldY + DownwardSpeedMax * TimeDelta()",
                                "Object.Layer()",
                                "0"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetCameraY"
                              },
                              "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": "SmoothCamera::SmoothCamera::SetPropertyWaitingEnd"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "TimeFromStart() + WaitingDuration"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedXMax"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "WaitingSpeedXMax"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedYMax"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "WaitingSpeedYMax"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "CatchUpDuration"
                      ]
                    }
                  ]
                },
                {
                  "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": "WaitingDuration",
                  "type": "expression"
                },
                {
                  "description": "Waiting maximum camera target speed X",
                  "name": "WaitingSpeedXMax",
                  "type": "expression"
                },
                {
                  "description": "Waiting maximum camera target speed Y",
                  "name": "WaitingSpeedYMax",
                  "type": "expression"
                },
                {
                  "description": "Catch up duration (in seconds)",
                  "name": "CatchUpDuration",
                  "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": "Egal"
                          },
                          "parameters": [
                            "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
                            ">",
                            "0"
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "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": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "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": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaLeft"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "!=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaRight"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "!=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaTop"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "!=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaBottom"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "!=",
                                "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": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "GetArgumentAsBoolean"
                      },
                      "parameters": [
                        "\"FollowOnX\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "yes"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Follow on X axis",
                  "name": "FollowOnX",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "GetArgumentAsBoolean"
                      },
                      "parameters": [
                        "\"FollowOnY\""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "yes"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Follow on Y axis",
                  "name": "FollowOnY",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, SetFollowFreeAreaRight)"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Follow free area right border",
                  "name": "SetFollowFreeAreaRight",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, SetFollowFreeAreaLeft)"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Follow free area left border",
                  "name": "SetFollowFreeAreaLeft",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, FollowFreeAreaTop)"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Follow free area top border",
                  "name": "FollowFreeAreaTop",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaBottom"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, SetFollowFreeAreaBottom)"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Follow free area bottom border",
                  "name": "SetFollowFreeAreaBottom",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, Speed)"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Leftward maximum speed (in ratio per second)",
                  "name": "Speed",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, Speed)"
                      ]
                    }
                  ]
                }
              ],
              "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": "Speed",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeedMax"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, Speed)"
                      ]
                    }
                  ]
                }
              ],
              "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": "Speed",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeedMax"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "max(0, Speed)"
                      ]
                    }
                  ]
                }
              ],
              "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": "Speed",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "clamp(0, 1, LeftwardSpeed)"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyLogLeftwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "log(1 - LeftwardSpeed)"
                      ]
                    }
                  ]
                }
              ],
              "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": "LeftwardSpeed",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyRightwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "clamp(0, 1, RightwardSpeed)"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyLogRightwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "log(1 - RightwardSpeed)"
                      ]
                    }
                  ]
                }
              ],
              "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": "RightwardSpeed",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "clamp(0, 1, DownwardSpeed)"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyLogDownwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "log(1 - DownwardSpeed)"
                      ]
                    }
                  ]
                }
              ],
              "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": "DownwardSpeed",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "clamp(0, 1, UpwardSpeed)"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyLogUpwardSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "log(1 - UpwardSpeed)"
                      ]
                    }
                  ]
                }
              ],
              "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": "UpwardSpeed",
                  "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",
              "name": "SetOffsetXOp",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyCameraOffsetX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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",
                        "=",
                        "CameraOffsetX",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Camera offset X",
                  "name": "CameraOffsetX",
                  "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",
              "name": "SetOffsetYOp",
              "sentence": "",
              "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::SetPropertyCameraOffsetY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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::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": "SmoothCamera::SmoothCamera::SetPropertyForecastTime"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "min(0, ForecastTime)"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Forecast time",
                  "name": "ForecastTime",
                  "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": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "min(0, CameraDelay)"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "SmoothCamera::SmoothCamera",
                  "type": "behavior"
                },
                {
                  "description": "Camera delay",
                  "name": "CameraDelay",
                  "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": "Egal"
                      },
                      "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": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "Object.CenterX()"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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": "Egal"
                          },
                          "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": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "Object.Variable(__SmoothCamera.ObjectX[0])"
                          ]
                        },
                        {
                          "type": {
                            "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            "=",
                            "Object.Variable(__SmoothCamera.ObjectY[0])"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "Egal"
                          },
                          "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": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "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": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "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": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "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": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpSpeed"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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": "SmoothCamera::SmoothCamera::PropertyCameraExtraDelay"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ">",
                        "0"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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": "Egal"
                      },
                      "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": "SmoothCamera::SmoothCamera::PropertyWaitingEnd"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ">",
                        "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": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            ">",
                            "0"
                          ]
                        },
                        {
                          "type": {
                            "value": "SmoothCamera::SmoothCamera::PropertyForecastTime"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            ">",
                            "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": "Egal"
                          },
                          "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": "SmoothCamera::SmoothCamera::SetPropertyForecastedX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "DelayedCenterX"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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": "Egal"
                      },
                      "parameters": [
                        "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
                        ">=",
                        "2"
                      ]
                    },
                    {
                      "type": {
                        "value": "BuiltinCommonInstructions::Or"
                      },
                      "parameters": [],
                      "subInstructions": [
                        {
                          "type": {
                            "value": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            ">",
                            "0"
                          ]
                        },
                        {
                          "type": {
                            "value": "SmoothCamera::SmoothCamera::PropertyForecastTime"
                          },
                          "parameters": [
                            "Object",
                            "Behavior",
                            ">",
                            "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": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Repeat",
                          "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "Object.Variable(__SmoothCamera.ForecastHistoryX[Index])"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "1"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "/",
                                "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": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Repeat",
                          "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "Object.Variable(__SmoothCamera.ForecastHistoryY[Index])"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "1"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "/",
                                "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": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "0"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Repeat",
                          "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
                          "conditions": [],
                          "actions": [
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "pow(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX, 2)"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "pow(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY, 2)"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX)\n*\n(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY)"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "+",
                                "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": "Egal"
                              },
                              "parameters": [
                                "abs(ForecastHistoryVarianceX)",
                                "<",
                                "1"
                              ]
                            },
                            {
                              "type": {
                                "value": "Egal"
                              },
                              "parameters": [
                                "abs(ForecastHistoryVarianceY)",
                                "<",
                                "1"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "DelayedCenterX"
                              ]
                            },
                            {
                              "type": {
                                "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY"
                              },
                              "parameters": [
                                "Object",
                                "Behavior",
                                "=",
                                "DelayedCenterY"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "BuiltinCommonInstructions::Or"
                              },
                              "parameters": [],
                              "subInstructions": [
                                {
                                  "type": {
                                    "value": "Egal"
                                  },
                                  "parameters": [
                                    "abs(ForecastHistoryVarianceX)",
                                    ">=",
                                    "1"
                                  ]
                                },
                                {
                                  "type": {
                                    "value": "Egal"
                                  },
                                  "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": "Egal"
                                      },
                                      "parameters": [
                                        "abs(ForecastHistoryVarianceX)",
                                        ">=",
                                        "abs(ForecastHistoryVarianceY)"
                                      ]
                                    }
                                  ],
                                  "actions": [
                                    {
                                      "type": {
                                        "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA"
                                      },
                                      "parameters": [
                                        "Object",
                                        "Behavior",
                                        "=",
                                        "ForecastHistoryCovariance / ForecastHistoryVarianceX"
                                      ]
                                    },
                                    {
                                      "type": {
                                        "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB"
                                      },
                                      "parameters": [
                                        "Object",
                                        "Behavior",
                                        "=",
                                        "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": "Egal"
                                      },
                                      "parameters": [
                                        "abs(ForecastHistoryVarianceX)",
                                        "<",
                                        "abs(ForecastHistoryVarianceY)"
                                      ]
                                    }
                                  ],
                                  "actions": [
                                    {
                                      "type": {
                                        "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA"
                                      },
                                      "parameters": [
                                        "Object",
                                        "Behavior",
                                        "=",
                                        "ForecastHistoryCovariance / ForecastHistoryVarianceY"
                                      ]
                                    },
                                    {
                                      "type": {
                                        "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB"
                                      },
                                      "parameters": [
                                        "Object",
                                        "Behavior",
                                        "=",
                                        "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": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "ProjectedOldestX"
                                              ]
                                            },
                                            {
                                              "type": {
                                                "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "ProjectedOldestY"
                                              ]
                                            },
                                            {
                                              "type": {
                                                "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "Index"
                                              ]
                                            }
                                          ]
                                        },
                                        {
                                          "type": "BuiltinCommonInstructions::Standard",
                                          "conditions": [],
                                          "actions": [
                                            {
                                              "type": {
                                                "value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "ProjectedNewestX"
                                              ]
                                            },
                                            {
                                              "type": {
                                                "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "ProjectedNewestY"
                                              ]
                                            },
                                            {
                                              "type": {
                                                "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY"
                                              },
                                              "parameters": [
                                                "Object",
                                                "Behavior",
                                                "=",
                                                "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": "SmoothCamera::SmoothCamera::SetPropertyForecastedX"
                                          },
                                          "parameters": [
                                            "Object",
                                            "Behavior",
                                            "=",
                                            "ProjectedNewestX + ( ProjectedNewestX - ProjectedOldestX) * Object.Behavior::ForecastTimeRatio()"
                                          ]
                                        },
                                        {
                                          "type": {
                                            "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY"
                                          },
                                          "parameters": [
                                            "Object",
                                            "Behavior",
                                            "=",
                                            "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": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "(NewestX + (NewestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "NewestY + (NewestX * ForecastHistoryLinearA - NewestY \n+ ForecastHistoryLinearB) / (1 + pow(ForecastHistoryLinearA, 2))"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "(OldestX + (OldestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))"
                      ]
                    },
                    {
                      "type": {
                        "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "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": []
            }
          ],
          "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",
          "name": "SmoothPlatformerCamera",
          "objectType": "",
          "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": []
            }
          ],
          "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": []
    }
  ],
  "externalLayouts": []
}