{
  "firstLayout": "",
  "gdVersion": {
    "build": 265,
    "major": 5,
    "minor": 6,
    "revision": 0
  },
  "properties": {
    "adaptGameResolutionAtRuntime": true,
    "antialiasingMode": "MSAA",
    "antialisingEnabledOnMobile": false,
    "folderProject": false,
    "orientation": "landscape",
    "packageName": "com.example.gamename",
    "pixelsRounding": false,
    "projectUuid": "548cd1a8-a8d2-469e-9926-54df98cd66a3",
    "scaleMode": "linear",
    "sizeOnStartupMode": "",
    "templateSlug": "starting-3d-driving",
    "version": "1.0.0",
    "name": "Hesitant Mist - 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"
    ],
    "extensionProperties": [],
    "platforms": [
      {
        "name": "GDevelop JS platform"
      }
    ],
    "currentPlatform": "GDevelop JS platform"
  },
  "resources": {
    "resources": [
      {
        "file": "assets/StartingCheckeredPattern.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\StartingCheckeredPattern.png",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/StartingBackground.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\StartingBackground.png",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/Flat dark joystick thumb.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\Flat dark joystick thumb.png",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/Flat dark joystick border.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\Flat dark joystick border.png",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/Orange - Sedan Sports.glb",
        "kind": "model3D",
        "metadata": "",
        "name": "assets\\Orange - Sedan Sports.glb",
        "userAdded": false
      },
      {
        "file": "assets/StartingGround.png",
        "kind": "image",
        "metadata": "",
        "name": "assets\\StartingGround.png",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/Traffic Cone.glb",
        "kind": "model3D",
        "metadata": "",
        "name": "Traffic Cone.glb",
        "userAdded": false,
        "origin": {
          "identifier": "https://asset-resources.gdevelop.io/public-resources/3D Toon Shooter/Prop/341d0630877a91adc1813baeb761051a5f9768cdbd5a083a7d8b1972a187ed34_Traffic Cone.glb",
          "name": "Traffic Cone.glb"
        }
      },
      {
        "file": "assets/New3DBox_Front.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox_Front",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox_Back.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox_Back",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox_Left.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox_Left",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox_Right.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox_Right",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox_Top.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox_Top",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox_Bottom.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox_Bottom",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox2_Front.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox2_Front",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox2_Back.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox2_Back",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox2_Left.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox2_Left",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox2_Right.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox2_Right",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox2_Top.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox2_Top",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox2_Bottom.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox2_Bottom",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox3_Front.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox3_Front",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox3_Back.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox3_Back",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox3_Left.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox3_Left",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox3_Right.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox3_Right",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox3_Top.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox3_Top",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "assets/New3DBox3_Bottom.png",
        "kind": "image",
        "metadata": "{\"extension\":\".png\",\"pskl\":{}}",
        "name": "New3DBox3_Bottom",
        "smoothed": true,
        "userAdded": false
      },
      {
        "file": "Belaz 75710.glb",
        "kind": "model3D",
        "metadata": "",
        "name": "Belaz 75710.glb",
        "userAdded": false
      },
      {
        "file": "pocoyo_-_hello_pocoyo.glb",
        "kind": "model3D",
        "metadata": "",
        "name": "pocoyo_-_hello_pocoyo.glb",
        "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": 64,
        "gridHeight": 64,
        "gridDepth": 32,
        "gridOffsetX": 0,
        "gridOffsetY": 0,
        "gridOffsetZ": 0,
        "gridColor": 10401023,
        "gridAlpha": 0.8,
        "snap": false,
        "zoomFactor": 0.13138826996360053,
        "windowMask": false,
        "selectedLayer": "",
        "gameEditorMode": "embedded-game"
      },
      "objectsGroups": [],
      "variables": [],
      "instances": [
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 704,
          "layer": "",
          "name": "Road_3D",
          "persistentUuid": "46a0d799-55c4-4f44-b430-120b5b0bc11e",
          "width": 4160,
          "x": -1442,
          "y": 1344,
          "z": -10,
          "zOrder": 1,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 584,
          "height": 320,
          "layer": "",
          "name": "Road_3D",
          "persistentUuid": "7e18d5f9-dfff-4bca-840a-a8089a7fa03e",
          "rotationY": 75,
          "width": 320,
          "x": 373,
          "y": 1536,
          "z": -374,
          "zOrder": 3,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 1,
          "height": 720,
          "keepRatio": true,
          "layer": "Background",
          "locked": true,
          "name": "Skybox",
          "persistentUuid": "4563d4a1-ae53-4ef4-ad8d-9dd785f74c9c",
          "width": 1280,
          "x": 0,
          "y": 0,
          "zOrder": 4,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 512,
          "layer": "",
          "locked": true,
          "name": "Grass_3D",
          "persistentUuid": "0ded717a-a950-4abf-8393-0a554a43b2f2",
          "width": 416500,
          "x": -1442,
          "y": 832,
          "z": -10,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 180,
          "customSize": true,
          "depth": 150,
          "height": 150,
          "layer": "",
          "name": "PlayerCar",
          "persistentUuid": "31232cc0-c2cd-4841-8233-8189786cb81f",
          "width": 150,
          "x": -244,
          "y": 1696,
          "zOrder": 8,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 512,
          "layer": "",
          "name": "Grass_3D",
          "persistentUuid": "f9ea97fc-7ed3-421a-8559-e7f829e15f39",
          "width": 416000,
          "x": -1442,
          "y": 2554,
          "z": -10,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "MobileControls",
          "name": "Speed_Joystick",
          "persistentUuid": "98bcbea1-1b37-46a3-8686-ff716b1b1024",
          "width": 0,
          "x": 1072,
          "y": 537,
          "zOrder": 9,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "MobileControls",
          "name": "Steer_Joystick",
          "persistentUuid": "6c0d6cbc-a8d1-4930-b2e4-a83ac76f2d7e",
          "width": 0,
          "x": 208,
          "y": 537,
          "zOrder": 10,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "d099a348-ab4f-49c1-95d1-96f433ab7515",
          "width": 0,
          "x": 200,
          "y": 1744,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "b372c747-5d02-4905-b811-3f2d08302d8f",
          "width": 0,
          "x": 200,
          "y": 1712,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "e5048878-7457-4a8f-a549-232fc5f23a2b",
          "width": 0,
          "x": 200,
          "y": 1520,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "aae81141-644b-430c-8ae2-3b228deeda2d",
          "width": 0,
          "x": 200,
          "y": 1456,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "d420e61c-2987-44bb-aeff-ca926bbe4469",
          "width": 0,
          "x": 200,
          "y": 1392,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "b0380194-7b5c-47d9-a64c-d5f99c2b9039",
          "width": 0,
          "x": 200,
          "y": 1584,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "670a97e3-f2f6-4972-bcc9-f9cb23903efb",
          "width": 0,
          "x": 200,
          "y": 1808,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "dbd3b71b-4d30-44cd-a325-2fa1b488359c",
          "width": 0,
          "x": 200,
          "y": 2000,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "764f4c9e-a65e-45a6-9703-4423a681ab82",
          "width": 0,
          "x": 200,
          "y": 1680,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "7dac2e39-f4e4-4087-9a0e-64729b8dfae9",
          "width": 0,
          "x": 200,
          "y": 1648,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "91ecfa35-6de1-49fc-b5fc-2241e68a93c8",
          "width": 0,
          "x": 200,
          "y": 1872,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "0096ab21-a0bb-49a7-9912-456a2dc90c90",
          "width": 0,
          "x": 200,
          "y": 1936,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "9596b884-895c-4211-a8c4-db491cafda41",
          "rotationY": -6,
          "width": 0,
          "x": 747,
          "y": 1648,
          "z": 149,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "21b2f552-4717-4a74-81e1-c9f144dd0629",
          "rotationY": -6,
          "width": 0,
          "x": 747,
          "y": 1680,
          "z": 149,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "71637c94-d9d4-4f38-8213-7557fe837906",
          "rotationY": -6,
          "width": 0,
          "x": 747,
          "y": 1712,
          "z": 149,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "5a5a00a2-6d99-4db2-a1b2-c7d6ac9fdc86",
          "rotationY": -6,
          "width": 0,
          "x": 747,
          "y": 1744,
          "z": 149,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "a114df5f-00cd-48ce-a30a-4a626e26f875",
          "width": 0,
          "x": 813,
          "y": 1655,
          "zOrder": 12,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "c38b0947-d8b2-43c5-9931-065357b99d54",
          "width": 0,
          "x": 824,
          "y": 1549,
          "z": 384,
          "zOrder": 13,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "3b5de197-ab56-4f88-913d-96351eb59982",
          "width": 0,
          "x": 810,
          "y": 1674,
          "z": 313,
          "zOrder": 14,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "4741a821-4ca4-498b-b2b0-2178a38f4195",
          "width": 0,
          "x": 806,
          "y": 1547,
          "zOrder": 15,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "3ecc6f45-528f-4ed1-9fc9-7686532f3863",
          "width": 0,
          "x": 822,
          "y": 1771,
          "z": 205,
          "zOrder": 16,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "3f0c254f-bc57-4ce5-b959-be37aac87c15",
          "width": 0,
          "x": 818,
          "y": 1766,
          "z": 105,
          "zOrder": 17,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "ec8f73ab-7160-40b3-8fd5-1122080e361d",
          "width": 0,
          "x": 817,
          "y": 1760,
          "zOrder": 18,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "94da821f-1200-49a8-a94b-dd60c6b37e7b",
          "width": 0,
          "x": 822,
          "y": 1772,
          "z": 298,
          "zOrder": 19,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "a3aea675-fc2b-4205-a043-07d5d20533b5",
          "width": 0,
          "x": 814,
          "y": 1537,
          "z": 192,
          "zOrder": 20,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "889500cd-161c-459f-81c1-ca1fd1af9738",
          "width": 0,
          "x": 825,
          "y": 1649,
          "z": 392,
          "zOrder": 21,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "cbad6b0b-3126-483f-8d5d-bf074ab2d355",
          "width": 0,
          "x": 824,
          "y": 1547,
          "z": 292,
          "zOrder": 22,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "0eda5aec-e54f-4dad-be2c-564b6adf96ed",
          "width": 0,
          "x": 809,
          "y": 1655,
          "z": 213,
          "zOrder": 23,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "6978897e-e8b8-48bf-b170-b5f6992bd1cc",
          "width": 0,
          "x": 805,
          "y": 1546,
          "z": 93,
          "zOrder": 24,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "cef57cfc-9029-4854-a999-dbc47260857c",
          "width": 0,
          "x": 810,
          "y": 1650,
          "z": 95,
          "zOrder": 25,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "b23c3077-be3a-418a-9353-d21686cca8fb",
          "width": 100,
          "x": 810,
          "y": 1769,
          "z": 402,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 512,
          "layer": "",
          "locked": true,
          "name": "Grass_3D",
          "persistentUuid": "0431e5b8-b72b-49e5-9b9f-06ff8e35d8b6",
          "width": 416000,
          "x": -1442,
          "y": 2048,
          "z": -10,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 512,
          "layer": "",
          "name": "Grass_3D",
          "persistentUuid": "818737a6-9ac0-4855-abed-d57709f68bfd",
          "width": 416000,
          "x": -1442,
          "y": -175,
          "z": -10,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 512,
          "layer": "",
          "name": "Grass_3D",
          "persistentUuid": "2d43da5e-8e14-41c1-981d-72d71fb3c92e",
          "width": 416000,
          "x": -1442,
          "y": 335,
          "z": -10,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 512,
          "layer": "",
          "name": "Grass_3D",
          "persistentUuid": "36631836-8997-441a-8053-df1819b01d2c",
          "width": 416000,
          "x": -1442,
          "y": 3063,
          "z": -10,
          "zOrder": 7,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 704,
          "layer": "",
          "name": "Road_3D",
          "persistentUuid": "55691f13-5ef5-4418-95a8-6cea1061d666",
          "width": 4160,
          "x": 2709,
          "y": 1344,
          "z": -10,
          "zOrder": 1,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 10,
          "height": 704,
          "layer": "",
          "name": "Road_3D",
          "persistentUuid": "82f99f0a-dff8-45c7-953d-0472e9c872fb",
          "width": 4160707,
          "x": 6797,
          "y": 1344,
          "z": -10,
          "zOrder": 1,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 584,
          "height": 320,
          "layer": "",
          "name": "Road_3D",
          "persistentUuid": "bd713495-4ec1-4bd6-89d0-4eda3374b2de",
          "rotationY": 75,
          "width": 320,
          "x": 2982,
          "y": 1536,
          "z": -374,
          "zOrder": 3,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "b4c3b023-17cb-42f6-8486-5595a049c2f3",
          "width": 0,
          "x": 2744,
          "y": 1854,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "7aabb04e-a405-4997-b150-7428e8127a79",
          "width": 0,
          "x": 2622,
          "y": 1536,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "6a1ff942-8eab-424d-abb4-8a85c15a0977",
          "width": 0,
          "x": 2724,
          "y": 1703,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "5403a4c8-0057-4922-b90c-4cbf52c4ac33",
          "width": 0,
          "x": 2668,
          "y": 1779,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "65685f59-90a2-4f4b-95a0-a9d36593573b",
          "width": 0,
          "x": 2709,
          "y": 1622,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "694be665-e256-46ca-a727-9ce15676101e",
          "width": 0,
          "x": 3322,
          "y": 1608,
          "z": 132,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "adf9dd21-5428-45f4-800d-0ca2015173f8",
          "width": 0,
          "x": 3322,
          "y": 1677,
          "z": 132,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "158a995b-61c8-4daa-882d-85d38d570b5c",
          "width": 0,
          "x": 3338,
          "y": 1773,
          "z": 136,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "40053d0f-d8a0-4746-bb86-e63a6b7f5d04",
          "width": 0,
          "x": 3209,
          "y": 1784,
          "z": 102,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "9a72d3cb-e57c-439b-a955-ce5f180c2822",
          "width": 0,
          "x": 3271,
          "y": 1706,
          "z": 118,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "8d0f4cc0-e8b6-461e-ab9c-1bb88e60d848",
          "width": 0,
          "x": 3082,
          "y": 1637,
          "z": 68,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "07a9ad88-380e-4e92-aad0-7c1f473a6477",
          "width": 0,
          "x": 3179,
          "y": 1672,
          "z": 93,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 0,
          "keepRatio": true,
          "layer": "",
          "name": "TrafficCone",
          "persistentUuid": "fa607013-f43f-4a7c-a8fb-2ff190b3fb4e",
          "width": 0,
          "x": 3077,
          "y": 1750,
          "z": 66,
          "zOrder": 11,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "9b01f64b-9a85-4dd4-9496-0639ea921e02",
          "width": 100,
          "x": 3827,
          "y": 1824,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "069d9704-c048-4ef5-bc5a-83993c1e3ca2",
          "width": 100,
          "x": 3677,
          "y": 1538,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "64f5045f-e575-48b8-862f-6a4323682767",
          "width": 100,
          "x": 4104,
          "y": 1662,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "b26dc8ac-8412-432e-8920-a889394d18b7",
          "width": 100,
          "x": 4439,
          "y": 1807,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox2",
          "persistentUuid": "1c2c3754-ac7b-407a-8a8f-7d14aae373a0",
          "width": 100,
          "x": 4720,
          "y": 1545,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": true,
          "depth": 584,
          "height": 320,
          "layer": "",
          "name": "Road_3D",
          "persistentUuid": "12bb3f4a-c61d-4232-961e-3f76b92ec083",
          "rotationY": 75,
          "width": 320,
          "x": 6367,
          "y": 1536,
          "z": -374,
          "zOrder": 3,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 128,
          "layer": "",
          "name": "Road_3D",
          "persistentUuid": "a009f849-a4cc-4368-bc1e-8b224a57e152",
          "width": 128,
          "x": 10424,
          "y": 1004,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "85d3e65a-56bb-485f-9f1d-b770610fd5c3",
          "width": 100,
          "x": 7271,
          "y": 1923,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "13d7e631-b7e9-41a4-a6ad-9ab38f0adf43",
          "width": 100,
          "x": 7269,
          "y": 1819,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "fb2a3764-ea0b-4d15-b80c-c51bb02ca352",
          "width": 100,
          "x": 7263,
          "y": 1724,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "9ec04f56-f8dc-44bd-88aa-d2f3688880ed",
          "width": 100,
          "x": 7277,
          "y": 1634,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "90056eb2-fca7-4415-81ca-d7888667d989",
          "width": 100,
          "x": 7284,
          "y": 1537,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "0cc36316-8469-452d-a284-39507ec0f91e",
          "width": 100,
          "x": 7273,
          "y": 1439,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "a7ba0316-07a1-4136-a68e-47853fa3f841",
          "width": 100,
          "x": 7282,
          "y": 1341,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "d3595415-4dfa-4ee5-8b49-16d5b5bdd9cd",
          "width": 100,
          "x": 7180,
          "y": 1966,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "e458592f-146f-406d-8515-3928cb5d79b4",
          "width": 100,
          "x": 7285,
          "y": 1359,
          "z": 100,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "78e4380c-06f5-492a-9f2e-f1a7c640d925",
          "width": 100,
          "x": 7305,
          "y": 1636,
          "z": 100,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "45803e74-8f6e-41a4-a2e9-2ec792a23439",
          "width": 100,
          "x": 7296,
          "y": 1547,
          "z": 100,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "5e1bdd83-764a-428e-94e0-6c7f795c5bc2",
          "width": 100,
          "x": 7271,
          "y": 1911,
          "z": 100,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "939fd104-af64-4212-a36b-e6eb4b4a7821",
          "width": 100,
          "x": 7272,
          "y": 1834,
          "z": 100,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "b91319b1-21cd-4310-97ca-8fb25a568efa",
          "width": 100,
          "x": 7273,
          "y": 1459,
          "z": 99.40272352475094,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "15064ec3-1da3-4ede-9f28-6b00c3804dfd",
          "width": 100,
          "x": 7268,
          "y": 1727,
          "z": 100,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "84c66ede-2148-4ae2-8e90-2e04635e97ae",
          "width": 100,
          "x": 7293,
          "y": 1363,
          "z": 200,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "9e42f196-2ff7-43d5-893d-00a91349dbec",
          "width": 100,
          "x": 7286,
          "y": 1872,
          "z": 200,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "1d964966-865f-4659-85ee-c2b541e0841e",
          "width": 100,
          "x": 7286,
          "y": 1462,
          "z": 199.40272352475094,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "8da60dfe-42c6-4c76-8bd3-c74b7e30ec4e",
          "width": 100,
          "x": 7299,
          "y": 1565,
          "z": 200,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "a8f56b93-7055-4dac-97b7-f0b5008c809e",
          "width": 100,
          "x": 7299,
          "y": 1654,
          "z": 201.68104538914454,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "8f1eeb56-59d9-461a-965a-b6b1fab91659",
          "width": 100,
          "x": 7285,
          "y": 1761,
          "z": 200,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "c960de92-733d-437d-aab3-3fa9f926f644",
          "width": 100,
          "x": 7293,
          "y": 1403,
          "z": 295.79928169922005,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "1044940d-e800-4dcc-a185-5a8ea1912c29",
          "width": 100,
          "x": 7286,
          "y": 1501,
          "z": 297.21209609729334,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        },
        {
          "angle": 0,
          "customSize": false,
          "height": 100,
          "layer": "",
          "name": "New3DBox",
          "persistentUuid": "9f825965-0456-423a-bfcb-c310f1bb9911",
          "width": 100,
          "x": 7342,
          "y": 1627,
          "z": 300,
          "zOrder": 0,
          "numberProperties": [],
          "stringProperties": [],
          "initialVariables": []
        }
      ],
      "objects": [
        {
          "assetStoreId": "",
          "name": "Road_3D",
          "persistentUuid": "3816e188-97d0-4d70-8fd6-da0afe552862",
          "type": "Scene3D::Cube3DObject",
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Physics3D",
              "type": "Physics3D::Physics3DBehavior",
              "object3D": "Object3D",
              "bodyType": "Static",
              "bullet": false,
              "fixedRotation": false,
              "shape": "Box",
              "shapeOrientation": "Z",
              "shapeDimensionA": 0,
              "shapeDimensionB": 0,
              "shapeDimensionC": 0,
              "density": 1,
              "friction": 7,
              "restitution": 0,
              "linearDamping": 0.1,
              "angularDamping": 0.1,
              "gravityScale": 1,
              "layers": 17,
              "masks": 17,
              "shapeOffsetX": 0,
              "shapeOffsetY": 0,
              "shapeOffsetZ": 0,
              "massCenterOffsetX": 0,
              "massCenterOffsetY": 0,
              "massCenterOffsetZ": 0,
              "massOverride": 0
            }
          ],
          "content": {
            "width": 128,
            "height": 128,
            "depth": 128,
            "enableTextureTransparency": false,
            "facesOrientation": "Y",
            "frontFaceResourceName": "assets\\StartingCheckeredPattern.png",
            "backFaceResourceName": "assets\\StartingCheckeredPattern.png",
            "backFaceUpThroughWhichAxisRotation": "X",
            "leftFaceResourceName": "assets\\StartingCheckeredPattern.png",
            "rightFaceResourceName": "assets\\StartingCheckeredPattern.png",
            "topFaceResourceName": "assets\\StartingCheckeredPattern.png",
            "bottomFaceResourceName": "assets\\StartingCheckeredPattern.png",
            "frontFaceVisible": true,
            "backFaceVisible": true,
            "leftFaceVisible": true,
            "rightFaceVisible": true,
            "topFaceVisible": true,
            "bottomFaceVisible": true,
            "frontFaceResourceRepeat": true,
            "backFaceResourceRepeat": true,
            "leftFaceResourceRepeat": true,
            "rightFaceResourceRepeat": true,
            "topFaceResourceRepeat": true,
            "bottomFaceResourceRepeat": true,
            "materialType": "StandardWithoutMetalness",
            "tint": "255;255;255",
            "isCastingShadow": true,
            "isReceivingShadow": true
          }
        },
        {
          "assetStoreId": "",
          "height": 128,
          "name": "Skybox",
          "texture": "assets\\StartingBackground.png",
          "type": "TiledSpriteObject::TiledSprite",
          "width": 128,
          "variables": [],
          "effects": [],
          "behaviors": []
        },
        {
          "assetStoreId": "",
          "name": "Grass_3D",
          "persistentUuid": "3e1c69c4-e7b3-4e0a-b19c-1bfa32b0e14b",
          "type": "Scene3D::Cube3DObject",
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Physics3D",
              "type": "Physics3D::Physics3DBehavior",
              "object3D": "Object3D",
              "bodyType": "Static",
              "bullet": false,
              "fixedRotation": false,
              "shape": "Box",
              "shapeOrientation": "Z",
              "shapeDimensionA": 0,
              "shapeDimensionB": 0,
              "shapeDimensionC": 0,
              "density": 1,
              "friction": 5,
              "restitution": 0.1,
              "linearDamping": 0.1,
              "angularDamping": 0.1,
              "gravityScale": 1,
              "layers": 17,
              "masks": 17,
              "shapeOffsetX": 0,
              "shapeOffsetY": 0,
              "shapeOffsetZ": 0,
              "massCenterOffsetX": 0,
              "massCenterOffsetY": 0,
              "massCenterOffsetZ": 0,
              "massOverride": 0
            }
          ],
          "content": {
            "width": 128,
            "height": 128,
            "depth": 128,
            "enableTextureTransparency": false,
            "facesOrientation": "Y",
            "frontFaceResourceName": "assets\\StartingGround.png",
            "backFaceResourceName": "assets\\StartingGround.png",
            "backFaceUpThroughWhichAxisRotation": "X",
            "leftFaceResourceName": "assets\\StartingGround.png",
            "rightFaceResourceName": "assets\\StartingGround.png",
            "topFaceResourceName": "assets\\StartingGround.png",
            "bottomFaceResourceName": "assets\\StartingGround.png",
            "frontFaceVisible": true,
            "backFaceVisible": true,
            "leftFaceVisible": true,
            "rightFaceVisible": true,
            "topFaceVisible": true,
            "bottomFaceVisible": true,
            "frontFaceResourceRepeat": true,
            "backFaceResourceRepeat": true,
            "leftFaceResourceRepeat": true,
            "rightFaceResourceRepeat": true,
            "topFaceResourceRepeat": true,
            "bottomFaceResourceRepeat": true,
            "materialType": "StandardWithoutMetalness",
            "tint": "255;255;255",
            "isCastingShadow": true,
            "isReceivingShadow": true
          }
        },
        {
          "assetStoreId": "cddab55130dbd5a0b36f763200e876fb514aa608e1b057a136ebdb5f80006e2c",
          "name": "PlayerCar",
          "persistentUuid": "909c749f-5f6b-479e-802f-47f1e37a76a0",
          "type": "Scene3D::Model3DObject",
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Physics3D",
              "type": "Physics3D::Physics3DBehavior",
              "object3D": "Object3D",
              "bodyType": "Dynamic",
              "bullet": false,
              "fixedRotation": false,
              "shape": "Box",
              "shapeOrientation": "Z",
              "shapeDimensionA": 74,
              "shapeDimensionB": 39,
              "shapeDimensionC": 27,
              "density": 1,
              "friction": 10,
              "restitution": 0.5,
              "linearDamping": 0.1,
              "angularDamping": 0.1,
              "gravityScale": 6,
              "layers": 17,
              "masks": 17,
              "shapeOffsetX": 0,
              "shapeOffsetY": 0,
              "shapeOffsetZ": 6,
              "massCenterOffsetX": 0,
              "massCenterOffsetY": 0,
              "massCenterOffsetZ": -25,
              "massOverride": 1500
            },
            {
              "name": "PhysicsCar3D",
              "type": "Physics3D::PhysicsCar3D",
              "physics3D": "Physics3D",
              "steerAngleMax": 70,
              "beginningSteerSpeed": 140,
              "endSteerSpeed": 10,
              "mass": 1500,
              "engineTorqueMax": 8000,
              "engineSpeedMax": 6000,
              "engineInertia": 0.1,
              "reverseGearRatio1": -2.9,
              "gearRatio1": 2.66,
              "gearRatio2": 1.78,
              "gearRatio3": 1.3,
              "gearRatio4": 1,
              "gearRatio5": 0.74,
              "gearRatio6": 0,
              "backWheelOffsetX": -6,
              "frontWheelOffsetX": 10,
              "wheelOffsetY": 3,
              "wheelOffsetZ": 0,
              "wheelRadius": 6,
              "wheelWidth": 3,
              "brakeTorqueMax": 3000,
              "handBrakeTorqueMax": 6000,
              "hasBackWheelDrive": false,
              "hasFrontWheelDrive": true,
              "pitchRollAngleMax": 89
            },
            {
              "name": "PhysicsCar3DKeyboardMapper",
              "type": "PhysicsCar3DKeyMapper::PhysicsCar3DKeyboardMapper",
              "PhysicsCar3D": "PhysicsCar3D",
              "HandBrake": "Space",
              "Up": "Up",
              "Left": "Left",
              "Down": "Down",
              "Right": "Right"
            },
            {
              "name": "PhysicsCar3DMultitouchMapper",
              "type": "SpriteMultitouchJoystick::PhysicsCar3DMultitouchMapper",
              "PhysicsCar3D": "PhysicsCar3D",
              "ControllerIdentifier": 1,
              "SteerJoystickIdentifier": "Primary",
              "SpeedJoystickIdentifier": "Secondary",
              "HandBrakeButton": "B"
            },
            {
              "name": "ThirdPersonCamera",
              "type": "ThirdPersonCamera::ThirdPersonCamera",
              "Object3D": "Object3D",
              "RotationHalfwayDuration": 0.125,
              "TranslationZHalfwayDuration": 0.25,
              "Distance": 450,
              "LateralOffset": 0,
              "AheadOffset": 200,
              "OffsetZ": 0,
              "RotationAngleOffset": 0,
              "ElevationAngleOffset": 10,
              "FollowFreeAreaZMax": 0,
              "FollowFreeAreaZMin": 0,
              "RotationLogSpeed": 2.0247e-320,
              "TranslationZLogSpeed": 2.0247e-320,
              "IsCalledManually": false,
              "CameraZ": 0,
              "LocalOffsetY": 200,
              "LocalOffsetX": 0,
              "OffsetY": 200,
              "ElevationHalfwayDuration": 1,
              "IsElevatingWithObject": false
            }
          ],
          "content": {
            "centerLocation": "ObjectCenter",
            "crossfadeDuration": 0,
            "depth": 74,
            "height": 74,
            "isCastingShadow": true,
            "isReceivingShadow": true,
            "keepAspectRatio": true,
            "materialType": "StandardWithoutMetalness",
            "modelResourceName": "pocoyo_-_hello_pocoyo.glb",
            "originLocation": "ModelOrigin",
            "rotationX": 90,
            "rotationY": 0,
            "rotationZ": -90,
            "width": 74,
            "animations": []
          }
        },
        {
          "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d",
          "name": "Speed_Joystick",
          "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
          "variant": "",
          "variables": [],
          "effects": [],
          "behaviors": [],
          "content": {
            "DeadZoneRadius": 0.2,
            "JoystickIdentifier": "Primary"
          },
          "childrenContent": {
            "Border": {
              "adaptCollisionMaskAutomatically": false,
              "updateIfNotVisible": false,
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": [
                        {
                          "hasCustomCollisionMask": false,
                          "image": "assets\\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": "assets\\Flat dark joystick thumb.png",
                          "points": [],
                          "originPoint": {
                            "name": "origine",
                            "x": 0,
                            "y": 0
                          },
                          "centerPoint": {
                            "automatic": true,
                            "name": "centre",
                            "x": 0,
                            "y": 0
                          },
                          "customCollisionMask": []
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          }
        },
        {
          "assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d",
          "name": "Steer_Joystick",
          "type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
          "variant": "",
          "variables": [],
          "effects": [],
          "behaviors": [],
          "content": {
            "JoystickIdentifier": "Secondary",
            "DeadZoneRadius": 0.2
          },
          "childrenContent": {
            "Border": {
              "adaptCollisionMaskAutomatically": false,
              "updateIfNotVisible": false,
              "animations": [
                {
                  "name": "Idle",
                  "useMultipleDirections": false,
                  "directions": [
                    {
                      "looping": false,
                      "timeBetweenFrames": 0.08,
                      "sprites": [
                        {
                          "hasCustomCollisionMask": false,
                          "image": "assets\\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": "assets\\Flat dark joystick thumb.png",
                          "points": [],
                          "originPoint": {
                            "name": "origine",
                            "x": 0,
                            "y": 0
                          },
                          "centerPoint": {
                            "automatic": true,
                            "name": "centre",
                            "x": 0,
                            "y": 0
                          },
                          "customCollisionMask": []
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          }
        },
        {
          "assetStoreId": "8f75165255eac00288d9b81c0063f2a3bdb26a7748fc7b2e17963a426f0a0aa4",
          "name": "TrafficCone",
          "type": "Scene3D::Model3DObject",
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Physics3D",
              "type": "Physics3D::Physics3DBehavior",
              "object3D": "Object3D",
              "bodyType": "Dynamic",
              "bullet": false,
              "fixedRotation": false,
              "shape": "Cylinder",
              "shapeOrientation": "Z",
              "shapeDimensionA": 0,
              "shapeDimensionB": 0,
              "shapeDimensionC": 0,
              "shapeOffsetX": 0,
              "shapeOffsetY": 0,
              "shapeOffsetZ": 0,
              "massCenterOffsetX": 0,
              "massCenterOffsetY": 0,
              "massCenterOffsetZ": 0,
              "massOverride": 0,
              "density": 2,
              "friction": 0.3,
              "restitution": 0.1,
              "linearDamping": 0.1,
              "angularDamping": 0.1,
              "gravityScale": 2,
              "layers": 17,
              "masks": 17
            }
          ],
          "content": {
            "centerLocation": "ObjectCenter",
            "crossfadeDuration": 0.10000000149011612,
            "depth": 32,
            "height": 32,
            "isCastingShadow": true,
            "isReceivingShadow": true,
            "keepAspectRatio": true,
            "materialType": "StandardWithoutMetalness",
            "modelResourceName": "Traffic Cone.glb",
            "originLocation": "ModelOrigin",
            "rotationX": 90,
            "rotationY": 0,
            "rotationZ": 90,
            "width": 32,
            "animations": []
          }
        },
        {
          "assetStoreId": "",
          "name": "New3DModel",
          "persistentUuid": "329a77da-9bfd-4e6c-8dfe-97db77852e23",
          "type": "Scene3D::Model3DObject",
          "variables": [],
          "effects": [],
          "behaviors": [],
          "content": {
            "centerLocation": "ModelOrigin",
            "crossfadeDuration": 0.10000000149011612,
            "depth": 100,
            "height": 100,
            "isCastingShadow": true,
            "isReceivingShadow": true,
            "keepAspectRatio": true,
            "materialType": "StandardWithoutMetalness",
            "modelResourceName": "",
            "originLocation": "ModelOrigin",
            "rotationX": 90,
            "rotationY": 0,
            "rotationZ": 90,
            "width": 100,
            "animations": []
          }
        },
        {
          "assetStoreId": "",
          "name": "New3DBox",
          "persistentUuid": "5548d409-97a6-490b-8e08-cc21cc0ea9a7",
          "type": "Scene3D::Cube3DObject",
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Physics3D",
              "type": "Physics3D::Physics3DBehavior",
              "object3D": "Object3D",
              "bodyType": "Dynamic",
              "bullet": false,
              "fixedRotation": false,
              "shape": "Box",
              "meshShapeResourceName": "",
              "shapeOrientation": "Z",
              "shapeDimensionA": 0,
              "shapeDimensionB": 0,
              "shapeDimensionC": 0,
              "shapeOffsetX": 0,
              "shapeOffsetY": 0,
              "shapeOffsetZ": 0,
              "massCenterOffsetX": 0,
              "massCenterOffsetY": 0,
              "massCenterOffsetZ": 0,
              "massOverride": 0,
              "density": 1,
              "friction": 0.3,
              "restitution": 0.1,
              "linearDamping": 0.1,
              "angularDamping": 0.1,
              "gravityScale": 1,
              "layers": 17,
              "masks": 17
            }
          ],
          "content": {
            "width": 100,
            "height": 100,
            "depth": 100,
            "enableTextureTransparency": false,
            "facesOrientation": "Y",
            "frontFaceResourceName": "New3DBox_Front",
            "backFaceResourceName": "New3DBox_Back",
            "backFaceUpThroughWhichAxisRotation": "X",
            "leftFaceResourceName": "New3DBox_Left",
            "rightFaceResourceName": "New3DBox_Right",
            "topFaceResourceName": "New3DBox_Top",
            "bottomFaceResourceName": "New3DBox_Bottom",
            "frontFaceVisible": true,
            "backFaceVisible": true,
            "leftFaceVisible": true,
            "rightFaceVisible": true,
            "topFaceVisible": true,
            "bottomFaceVisible": true,
            "frontFaceResourceRepeat": false,
            "backFaceResourceRepeat": false,
            "leftFaceResourceRepeat": false,
            "rightFaceResourceRepeat": false,
            "topFaceResourceRepeat": false,
            "bottomFaceResourceRepeat": false,
            "materialType": "StandardWithoutMetalness",
            "tint": "255;255;255",
            "isCastingShadow": true,
            "isReceivingShadow": true
          }
        },
        {
          "assetStoreId": "",
          "name": "New3DBox2",
          "persistentUuid": "c3b888f5-bf4a-466f-8a95-67d8472e71a5",
          "type": "Scene3D::Cube3DObject",
          "variables": [],
          "effects": [],
          "behaviors": [
            {
              "name": "Physics3D",
              "type": "Physics3D::Physics3DBehavior",
              "object3D": "Object3D",
              "bodyType": "Dynamic",
              "bullet": false,
              "fixedRotation": false,
              "shape": "Box",
              "meshShapeResourceName": "",
              "shapeOrientation": "Z",
              "shapeDimensionA": 0,
              "shapeDimensionB": 0,
              "shapeDimensionC": 0,
              "shapeOffsetX": 0,
              "shapeOffsetY": 0,
              "shapeOffsetZ": 0,
              "massCenterOffsetX": 0,
              "massCenterOffsetY": 0,
              "massCenterOffsetZ": 0,
              "massOverride": 0,
              "density": 1,
              "friction": 0.3,
              "restitution": 0.1,
              "linearDamping": 0.1,
              "angularDamping": 0.1,
              "gravityScale": 1,
              "layers": 17,
              "masks": 17
            }
          ],
          "content": {
            "width": 100,
            "height": 100,
            "depth": 100,
            "enableTextureTransparency": false,
            "facesOrientation": "Y",
            "frontFaceResourceName": "New3DBox2_Front",
            "backFaceResourceName": "New3DBox2_Back",
            "backFaceUpThroughWhichAxisRotation": "X",
            "leftFaceResourceName": "New3DBox2_Left",
            "rightFaceResourceName": "New3DBox2_Right",
            "topFaceResourceName": "New3DBox2_Top",
            "bottomFaceResourceName": "New3DBox2_Bottom",
            "frontFaceVisible": true,
            "backFaceVisible": true,
            "leftFaceVisible": true,
            "rightFaceVisible": true,
            "topFaceVisible": true,
            "bottomFaceVisible": true,
            "frontFaceResourceRepeat": false,
            "backFaceResourceRepeat": false,
            "leftFaceResourceRepeat": false,
            "rightFaceResourceRepeat": false,
            "topFaceResourceRepeat": false,
            "bottomFaceResourceRepeat": false,
            "materialType": "StandardWithoutMetalness",
            "tint": "255;255;255",
            "isCastingShadow": true,
            "isReceivingShadow": true
          }
        }
      ],
      "objectsFolderStructure": {
        "folderName": "__ROOT",
        "children": [
          {
            "objectName": "Road_3D"
          },
          {
            "objectName": "Grass_3D"
          },
          {
            "objectName": "PlayerCar"
          },
          {
            "objectName": "New3DModel"
          },
          {
            "objectName": "New3DBox"
          },
          {
            "objectName": "TrafficCone"
          },
          {
            "objectName": "Skybox"
          },
          {
            "folderName": "Mobile Controls",
            "children": [
              {
                "objectName": "Speed_Joystick"
              },
              {
                "objectName": "Steer_Joystick"
              }
            ]
          },
          {
            "objectName": "New3DBox2"
          }
        ]
      },
      "events": [
        {
          "type": "BuiltinCommonInstructions::Standard",
          "conditions": [
            {
              "type": {
                "value": "KeyFromTextPressed"
              },
              "parameters": [
                "",
                "\"Escape\""
              ]
            }
          ],
          "actions": [
            {
              "type": {
                "value": "PushScene"
              },
              "parameters": [
                "",
                "\"Game Scene\""
              ]
            }
          ]
        }
      ],
      "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": [
            {
              "effectType": "Scene3D::AmbientLight",
              "name": "3D Light",
              "doubleParameters": {
                "intensity": 0.25
              },
              "stringParameters": {
                "color": "255;255;255"
              },
              "booleanParameters": {}
            },
            {
              "effectType": "Scene3D::DirectionalLight",
              "name": "Effect",
              "doubleParameters": {
                "distanceFromCamera": 1500,
                "elevation": 45,
                "frustumSize": 4000,
                "intensity": 0.75,
                "rotation": 0
              },
              "stringParameters": {
                "color": "255;255;255",
                "shadowQuality": "medium",
                "top": "Z+"
              },
              "booleanParameters": {
                "isCastingShadow": true
              }
            }
          ]
        },
        {
          "ambientLightColorB": 200,
          "ambientLightColorG": 200,
          "ambientLightColorR": 200,
          "camera2DPlaneMaxDrawingDistance": 5000,
          "camera3DFarPlaneDistance": 10000,
          "camera3DFieldOfView": 45,
          "camera3DNearPlaneDistance": 3,
          "cameraType": "",
          "followBaseLayerCamera": false,
          "isLightingLayer": false,
          "isLocked": false,
          "name": "MobileControls",
          "renderingType": "",
          "visibility": true,
          "cameras": [],
          "effects": []
        }
      ],
      "behaviorsSharedData": [
        {
          "name": "Animation",
          "type": "AnimatableCapability::AnimatableBehavior"
        },
        {
          "name": "Effect",
          "type": "EffectCapability::EffectBehavior"
        },
        {
          "name": "Flippable",
          "type": "FlippableCapability::FlippableBehavior"
        },
        {
          "name": "Object3D",
          "type": "Scene3D::Base3DBehavior"
        },
        {
          "name": "Opacity",
          "type": "OpacityCapability::OpacityBehavior"
        },
        {
          "name": "Physics3D",
          "type": "Physics3D::Physics3DBehavior",
          "gravityX": 0,
          "gravityY": 0,
          "gravityZ": -9.8,
          "worldScale": 20
        },
        {
          "name": "PhysicsCar3D",
          "type": "Physics3D::PhysicsCar3D"
        },
        {
          "name": "PhysicsCar3DKeyboardMapper",
          "type": "PhysicsCar3DKeyMapper::PhysicsCar3DKeyboardMapper"
        },
        {
          "name": "PhysicsCar3DMultitouchMapper",
          "type": "SpriteMultitouchJoystick::PhysicsCar3DMultitouchMapper"
        },
        {
          "name": "Resizable",
          "type": "ResizableCapability::ResizableBehavior"
        },
        {
          "name": "Scale",
          "type": "ScalableCapability::ScalableBehavior"
        },
        {
          "name": "ThirdPersonCamera",
          "type": "ThirdPersonCamera::ThirdPersonCamera"
        }
      ]
    }
  ],
  "externalEvents": [],
  "eventsFunctionsExtensions": [
    {
      "author": "",
      "category": "Camera",
      "dimension": "",
      "extensionNamespace": "",
      "fullName": "Third person camera",
      "gdevelopVersion": ">=5.5.222",
      "helpPath": "",
      "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSI3LDEwIDEsMTMgNywxNiAxMywxMyAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjEsMTMgMSwyMCA3LDIzIDEzLDIwIDEzLDEzICIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjciIHkxPSIxNiIgeDI9IjciIHkyPSIyMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMxIiB5MT0iMTYiIHgyPSIyMSIgeTI9IjgiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyMSIgeTE9IjI0IiB4Mj0iMzEiIHkyPSIxNiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIyLjcsMjIuNkMyMCwyMS43LDE4LDE5LjEsMTgsMTZjMC0zLjEsMi01LjcsNC43LTYuNiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5LjgsMTEuM2MxLjQsMS4xLDIuMiwyLjgsMi4yLDQuN2MwLDEuOS0wLjksMy42LTIuMiw0LjciLz4NCjwvc3ZnPg0K",
      "name": "ThirdPersonCamera",
      "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Virtual Reality/94e95d2c318e1f3dc7151a351024e13c574e1e44669c6696aa107d60230073f6_Virtual Reality_3d_vision_eye_vr.svg",
      "shortDescription": "Move the camera  to look at an object from a given distance.",
      "version": "1.7.1",
      "description": [
        "Move the camera  to look at an object from a given distance with a rotation and an elevation angles.",
        "",
        "It can be useful for:",
        "- 3D platformer games ([open the project online](https://editor.gdevelop.io/?project=example://3d-platformer))",
        "- 3D racing games ([open the project online](https://editor.gdevelop.io/?project=example://3d-car-coin-hunt))",
        "- Orbit camera controls ([open the project online](https://editor.gdevelop.io/?project=example://3d-tile-based-city-builder))",
        "- Isometric-like point of view ([open the project online](https://editor.gdevelop.io/?project=example://3d-road-crosser))"
      ],
      "origin": {
        "identifier": "ThirdPersonCamera",
        "name": "gdevelop-extension-store"
      },
      "tags": [
        "3d",
        "camera"
      ],
      "authorIds": [
        "IWykYNRvhCZBN3vEgKEbBPOR3Oc2"
      ],
      "dependencies": [],
      "globalVariables": [],
      "sceneVariables": [],
      "eventsFunctions": [
        {
          "description": "Move the camera to look at a position from a distance.",
          "fullName": "Look at a position from a distance (deprecated)",
          "functionType": "Action",
          "name": "LookFromDistanceAtPosition",
          "private": true,
          "sentence": "Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetCameraCenterX"
                  },
                  "parameters": [
                    "",
                    "=",
                    "PositionX + Distance * cos(ToRad(RotationAngle + 90)) * cos(ToRad(ElevationAngle))",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "SetCameraCenterY"
                  },
                  "parameters": [
                    "",
                    "=",
                    "PositionY + Distance * sin(ToRad(RotationAngle + 90)) * cos(ToRad(ElevationAngle))",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "Scene3D::SetCameraZ"
                  },
                  "parameters": [
                    "",
                    "=",
                    "Distance * sin(ToRad(ElevationAngle))",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "Scene3D::TurnCameraTowardPosition"
                  },
                  "parameters": [
                    "",
                    "PositionX",
                    "PositionY",
                    "0",
                    "Layer",
                    "",
                    ""
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Position on X axis",
              "name": "PositionX",
              "type": "expression"
            },
            {
              "description": "Position on Y axis",
              "name": "PositionY",
              "type": "expression"
            },
            {
              "description": "Distance",
              "name": "Distance",
              "type": "expression"
            },
            {
              "description": "Rotation angle (around Z axis)",
              "name": "RotationAngle",
              "type": "expression"
            },
            {
              "description": "Elevation angle (around Y axis)",
              "name": "ElevationAngle",
              "type": "expression"
            },
            {
              "description": "Layer",
              "name": "Layer",
              "type": "layer"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Move the camera to look at an object from a distance.",
          "fullName": "Look at an object from a distance (deprecated)",
          "functionType": "Action",
          "name": "LookFromDistanceAtObject",
          "private": true,
          "sentence": "Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_° and an elevation of _PARAM4_°",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "ThirdPersonCamera::LookFromDistanceAtPosition"
                  },
                  "parameters": [
                    "",
                    "Object.CenterX()",
                    "Object.CenterY()",
                    "Distance",
                    "RotationAngle",
                    "ElevationAngle",
                    "Layer",
                    ""
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Object",
              "name": "Object",
              "type": "objectList"
            },
            {
              "description": "Distance",
              "name": "Distance",
              "type": "expression"
            },
            {
              "description": "Rotation angle (around Z axis)",
              "name": "RotationAngle",
              "type": "expression"
            },
            {
              "description": "Elevation angle (around Y axis)",
              "name": "ElevationAngle",
              "type": "expression"
            },
            {
              "description": "Layer",
              "name": "Layer",
              "type": "layer"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Move the camera to look at a position from a distance.",
          "fullName": "Look at a position from a distance",
          "functionType": "Action",
          "name": "LookFromDistanceAtPosition3D",
          "sentence": "Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_° and an elevation of _PARAM6_°",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetCameraCenterX"
                  },
                  "parameters": [
                    "",
                    "=",
                    "PositionX + Distance * cos(ToRad(RotationAngle + 90)) * cos(ToRad(ElevationAngle))",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "SetCameraCenterY"
                  },
                  "parameters": [
                    "",
                    "=",
                    "PositionY + Distance * sin(ToRad(RotationAngle + 90)) * cos(ToRad(ElevationAngle))",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "Scene3D::SetCameraZ"
                  },
                  "parameters": [
                    "",
                    "=",
                    "PositionZ + Distance * sin(ToRad(ElevationAngle))",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "Scene3D::SetCameraRotationX"
                  },
                  "parameters": [
                    "",
                    "=",
                    "90 - ElevationAngle",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "Scene3D::SetCameraRotationY"
                  },
                  "parameters": [
                    "",
                    "=",
                    "0",
                    "Layer",
                    ""
                  ]
                },
                {
                  "type": {
                    "value": "SetCameraAngle"
                  },
                  "parameters": [
                    "",
                    "=",
                    "RotationAngle",
                    "Layer",
                    ""
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Position on X axis",
              "name": "PositionX",
              "type": "expression"
            },
            {
              "description": "Position on Y axis",
              "name": "PositionY",
              "type": "expression"
            },
            {
              "description": "Position on Z axis",
              "name": "PositionZ",
              "type": "expression"
            },
            {
              "description": "Distance",
              "name": "Distance",
              "type": "expression"
            },
            {
              "description": "Rotation angle (around Z axis)",
              "name": "RotationAngle",
              "type": "expression"
            },
            {
              "description": "Elevation angle (around Y axis)",
              "name": "ElevationAngle",
              "type": "expression"
            },
            {
              "description": "Layer",
              "name": "Layer",
              "type": "layer"
            }
          ],
          "objectGroups": []
        },
        {
          "description": "Move the camera to look at an object from a distance.",
          "fullName": "Look at an object from a distance",
          "functionType": "Action",
          "group": "Layers and cameras",
          "name": "LookFromDistanceAtObject3D",
          "sentence": "Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "ThirdPersonCamera::LookFromDistanceAtPosition3D"
                  },
                  "parameters": [
                    "",
                    "Object.CenterX()",
                    "Object.CenterY()",
                    "Object.Object3D::CenterZ()",
                    "Distance",
                    "RotationAngle",
                    "ElevationAngle",
                    "Layer",
                    ""
                  ]
                }
              ]
            }
          ],
          "parameters": [
            {
              "description": "Object",
              "name": "Object",
              "type": "objectList"
            },
            {
              "description": "3D capability",
              "name": "Object3D",
              "supplementaryInformation": "Scene3D::Base3DBehavior",
              "type": "behavior"
            },
            {
              "description": "Distance",
              "name": "Distance",
              "type": "expression"
            },
            {
              "description": "Rotation angle (around Z axis)",
              "name": "RotationAngle",
              "type": "expression"
            },
            {
              "description": "Elevation angle (around Y axis)",
              "name": "ElevationAngle",
              "type": "expression"
            },
            {
              "description": "Layer",
              "name": "Layer",
              "type": "layer"
            }
          ],
          "objectGroups": []
        },
        {
          "fullName": "",
          "functionType": "Expression",
          "name": "RotatedX",
          "private": true,
          "sentence": "",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "Cos",
                    "=",
                    "cos(ToRad(RotationAngle))"
                  ]
                },
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "Sin",
                    "=",
                    "sin(ToRad(RotationAngle))"
                  ]
                },
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "Cos * X - Sin * Y"
                  ]
                }
              ],
              "variables": [
                {
                  "folded": true,
                  "name": "Cos",
                  "type": "number",
                  "value": 0
                },
                {
                  "folded": true,
                  "name": "Sin",
                  "type": "number",
                  "value": 0
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Rotation angle",
              "name": "RotationAngle",
              "supplementaryInformation": "Tank::Tank",
              "type": "expression"
            },
            {
              "description": "",
              "name": "X",
              "type": "expression"
            },
            {
              "description": "",
              "name": "Y",
              "type": "expression"
            }
          ],
          "objectGroups": []
        },
        {
          "fullName": "",
          "functionType": "Expression",
          "name": "RotatedY",
          "private": true,
          "sentence": "",
          "events": [
            {
              "type": "BuiltinCommonInstructions::Standard",
              "conditions": [],
              "actions": [
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "Cos",
                    "=",
                    "cos(ToRad(RotationAngle))"
                  ]
                },
                {
                  "type": {
                    "value": "SetNumberVariable"
                  },
                  "parameters": [
                    "Sin",
                    "=",
                    "sin(ToRad(RotationAngle))"
                  ]
                },
                {
                  "type": {
                    "value": "SetReturnNumber"
                  },
                  "parameters": [
                    "Sin * X + Cos * Y"
                  ]
                }
              ],
              "variables": [
                {
                  "folded": true,
                  "name": "Cos",
                  "type": "number",
                  "value": 0
                },
                {
                  "folded": true,
                  "name": "Sin",
                  "type": "number",
                  "value": 0
                }
              ]
            }
          ],
          "expressionType": {
            "type": "expression"
          },
          "parameters": [
            {
              "description": "Rotation angle",
              "name": "RotationAngle",
              "supplementaryInformation": "Tank::Tank",
              "type": "expression"
            },
            {
              "description": "",
              "name": "X",
              "type": "expression"
            },
            {
              "description": "",
              "name": "Y",
              "type": "expression"
            }
          ],
          "objectGroups": []
        }
      ],
      "eventsFunctionsFolderStructure": {
        "folderName": "__ROOT",
        "children": [
          {
            "functionName": "LookFromDistanceAtPosition"
          },
          {
            "functionName": "LookFromDistanceAtObject"
          },
          {
            "functionName": "LookFromDistanceAtPosition3D"
          },
          {
            "folderName": "Layers and cameras",
            "children": [
              {
                "functionName": "LookFromDistanceAtObject3D"
              }
            ]
          },
          {
            "functionName": "RotatedX"
          },
          {
            "functionName": "RotatedY"
          }
        ]
      },
      "eventsBasedBehaviors": [
        {
          "description": "Smoothly follow an object at a distance.",
          "fullName": "Third person camera",
          "helpPath": "",
          "iconUrl": "",
          "name": "ThirdPersonCamera",
          "objectType": "",
          "previewIconUrl": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "onCreated",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Comment",
                  "color": {
                    "b": 109,
                    "g": 230,
                    "r": 255,
                    "textB": 0,
                    "textG": 0,
                    "textR": 0
                  },
                  "comment": "Update private properties through setters to check their values and initialize state."
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ThirdPersonCamera::ThirdPersonCamera::SetRotationHalfwayDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "RotationHalfwayDuration",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "ThirdPersonCamera::ThirdPersonCamera::SetElevationHalfwayDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "ElevationHalfwayDuration",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "ThirdPersonCamera::ThirdPersonCamera::SetTranslationZHalfwayDuration"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        "=",
                        "TranslationZHalfwayDuration",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "HasJustBeenCreated",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "HasJustBeenCreated",
                        "False",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "CameraZ",
                        "=",
                        "Object.Object3D::CenterZ()"
                      ]
                    },
                    {
                      "type": {
                        "value": "ThirdPersonCamera::ThirdPersonCamera::JumpToTargetedRotation"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "inverted": true,
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "IsCalledManually",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "ThirdPersonCamera::ThirdPersonCamera::DoMoveCameraCloser"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "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": [
                    {
                      "type": {
                        "value": "BehaviorActivated"
                      },
                      "parameters": [
                        "Object",
                        "Behavior"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "IsCalledManually",
                        "False",
                        ""
                      ]
                    },
                    {
                      "type": {
                        "value": "ThirdPersonCamera::ThirdPersonCamera::DoMoveCameraCloser"
                      },
                      "parameters": [
                        "Object",
                        "Behavior",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "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": "At each frame, the camera must catchup the target by a given ratio (speed)\ncameraX(t) - targetX = (cameraX(t - 1) - targetX) * (1 - 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) * (1 - 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) * (1 - speed)^timeDelta\ncameraX(t) = targetX + (cameraX(t - timeDelta) - targetX) * exp(timeDelta * ln((1 - speed)))\n\npow is probably more efficient than precalculated log if the speed is changed continuously but this might be rare enough."
                },
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "Z translation",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [],
                      "actions": [],
                      "events": [
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "NumberVariable"
                              },
                              "parameters": [
                                "CameraZ",
                                "<",
                                "Object.Behavior::FreeAreaZMin()"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetNumberVariable"
                              },
                              "parameters": [
                                "CameraZ",
                                "=",
                                "Object.Behavior::FreeAreaZMin() + (CameraZ - Object.Behavior::FreeAreaZMin()) * exp(TimeDelta() * TranslationZLogSpeed)"
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BuiltinCommonInstructions::Standard",
                          "conditions": [
                            {
                              "type": {
                                "value": "NumberVariable"
                              },
                              "parameters": [
                                "CameraZ",
                                ">",
                                "Object.Behavior::FreeAreaZMax()"
                              ]
                            }
                          ],
                          "actions": [
                            {
                              "type": {
                                "value": "SetNumberVariable"
                              },
                              "parameters": [
                                "CameraZ",
                                "=",
                                "Object.Behavior::FreeAreaZMax() + (CameraZ - Object.Behavior::FreeAreaZMax()) * exp(TimeDelta() * TranslationZLogSpeed)"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "parameters": []
                },
                {
                  "colorB": 228,
                  "colorG": 176,
                  "colorR": 74,
                  "creationTime": 0,
                  "name": "Z rotation",
                  "source": "",
                  "type": "BuiltinCommonInstructions::Group",
                  "events": [
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "BooleanVariable"
                          },
                          "parameters": [
                            "IsRotatingWithObject",
                            "True",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "TargetedRotationAngle",
                            "=",
                            "Object.Angle()"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [
                        {
                          "type": {
                            "value": "BooleanVariable"
                          },
                          "parameters": [
                            "IsElevatingWithObject",
                            "True",
                            ""
                          ]
                        }
                      ],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "TargetedElevationAngle",
                            "=",
                            "Object.Object3D::RotationY()"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BuiltinCommonInstructions::Standard",
                      "conditions": [],
                      "actions": [
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "CameraRotationAngle",
                            "=",
                            "TargetedRotationAngle + 90 + RotationAngleOffset + AngleDifference(CameraAngle(Object.Layer()), TargetedRotationAngle + 90 + RotationAngleOffset) * exp(TimeDelta() * RotationLogSpeed)"
                          ]
                        },
                        {
                          "type": {
                            "value": "SetNumberVariable"
                          },
                          "parameters": [
                            "CameraElevationAngle",
                            "=",
                            "TargetedElevationAngle + ElevationAngleOffset + AngleDifference(90 - Scene3D::CameraRotationX(Object.Layer()), TargetedElevationAngle + ElevationAngleOffset) * exp(TimeDelta() * ElevationLogSpeed)"
                          ]
                        },
                        {
                          "type": {
                            "value": "ThirdPersonCamera::LookFromDistanceAtPosition3D"
                          },
                          "parameters": [
                            "",
                            "Object.CenterX() + ThirdPersonCamera::RotatedX(CameraRotationAngle, OffsetX, -OffsetY)",
                            "Object.CenterY() + ThirdPersonCamera::RotatedY(CameraRotationAngle, OffsetX, -OffsetY)",
                            "CameraZ + OffsetZ",
                            "Distance",
                            "CameraRotationAngle",
                            "CameraElevationAngle",
                            "",
                            ""
                          ]
                        }
                      ],
                      "variables": [
                        {
                          "folded": true,
                          "name": "CameraRotationAngle",
                          "type": "number",
                          "value": 0
                        },
                        {
                          "name": "CameraElevationAngle",
                          "type": "number",
                          "value": 0
                        }
                      ]
                    }
                  ],
                  "parameters": []
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Rotate the camera all the way to the targeted angle.",
              "fullName": "Rotate the camera all the way",
              "functionType": "Action",
              "name": "JumpToTargetedRotation",
              "sentence": "Rotate the camera all the way to the targeted angle of _PARAM0_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "IsRotatingWithObject",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TargetedRotationAngle",
                        "=",
                        "Object.Angle()"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "BooleanVariable"
                      },
                      "parameters": [
                        "IsElevatingWithObject",
                        "True",
                        ""
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TargetedElevationAngle",
                        "=",
                        "Object.Object3D::RotationY()"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "CameraAngle",
                        "=",
                        "TargetedRotationAngle + 90 + RotationAngleOffset"
                      ]
                    },
                    {
                      "type": {
                        "value": "ThirdPersonCamera::LookFromDistanceAtPosition3D"
                      },
                      "parameters": [
                        "",
                        "Object.CenterX() + ThirdPersonCamera::RotatedX(CameraAngle, OffsetX, -OffsetY)",
                        "Object.CenterY() + ThirdPersonCamera::RotatedY(CameraAngle, OffsetX, -OffsetY)",
                        "CameraZ + OffsetZ",
                        "Distance",
                        "CameraAngle",
                        "Object.Object3D::RotationY() + ElevationAngleOffset",
                        "",
                        ""
                      ]
                    }
                  ],
                  "variables": [
                    {
                      "folded": true,
                      "name": "CameraAngle",
                      "type": "number",
                      "value": 0
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the camera rotation.",
              "fullName": "Camera rotation",
              "functionType": "ExpressionAndCondition",
              "name": "RotationAngle",
              "private": true,
              "sentence": "the camera rotation",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "CameraAngle(Object.Layer())"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Rotate the camera all the way to the targeted angle.",
              "fullName": "Rotate the camera all the way",
              "functionType": "ActionWithOperator",
              "getterName": "RotationAngle",
              "name": "SetCameraRotation",
              "sentence": "Rotate the camera all the way to the targeted angle of _PARAM0_",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "ThirdPersonCamera::LookFromDistanceAtPosition3D"
                      },
                      "parameters": [
                        "",
                        "Object.CenterX() + ThirdPersonCamera::RotatedX(Value, OffsetX, -OffsetY)",
                        "Object.CenterY() + ThirdPersonCamera::RotatedY(Value, OffsetX, -OffsetY)",
                        "CameraZ + OffsetZ",
                        "Distance",
                        "Value",
                        "Object.Object3D::RotationY() + ElevationAngleOffset",
                        "",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the halfway time for rotation of the object.",
              "fullName": "Halfway time for rotation",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "RotationHalfwayDuration",
              "sentence": "the halfway time for rotation",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "RotationHalfwayDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "RotationHalfwayDuration",
              "group": "Third person camera configuration",
              "name": "SetRotationHalfwayDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Comment",
                  "color": {
                    "b": 109,
                    "g": 230,
                    "r": 255,
                    "textB": 0,
                    "textG": 0,
                    "textR": 0
                  },
                  "comment": "ln((1 - speed)) = ln(1 / 2) / halfwatTime"
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "RotationHalfwayDuration",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "RotationLogSpeed",
                        "=",
                        "log(0.5) / Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the halfway  time for elevation rotation of the object.",
              "fullName": "Halfway  time for elevation rotation",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "ElevationHalfwayDuration",
              "sentence": "the halfway  time for elevation rotation",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "ElevationHalfwayDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "ElevationHalfwayDuration",
              "group": "Third person camera configuration",
              "name": "SetElevationHalfwayDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Comment",
                  "color": {
                    "b": 109,
                    "g": 230,
                    "r": 255,
                    "textB": 0,
                    "textG": 0,
                    "textR": 0
                  },
                  "comment": "ln((1 - speed)) = ln(1 / 2) / halfwatTime"
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "ElevationHalfwayDuration",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "ElevationLogSpeed",
                        "=",
                        "log(0.5) / Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the halfway time on Z axis of the object.",
              "fullName": "Halfway time on Z axis",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "TranslationZHalfwayDuration",
              "sentence": "the halfway time on Z axis",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "TranslationZHalfwayDuration"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "TranslationZHalfwayDuration",
              "group": "Third person camera configuration",
              "name": "SetTranslationZHalfwayDuration",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Comment",
                  "color": {
                    "b": 109,
                    "g": 230,
                    "r": 255,
                    "textB": 0,
                    "textG": 0,
                    "textR": 0
                  },
                  "comment": "ln((1 - speed)) = ln(1 / 2) / halfwatTime"
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TranslationZHalfwayDuration",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TranslationZLogSpeed",
                        "=",
                        "log(0.5) / Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return follow free area bottom border Z.",
              "fullName": "Free area Z min",
              "functionType": "Expression",
              "group": "Private",
              "name": "FreeAreaZMin",
              "private": true,
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Object.Object3D::CenterZ() + OffsetZ - FollowFreeAreaZMin"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "Return follow free area top border Z.",
              "fullName": "Free area Z max",
              "functionType": "Expression",
              "group": "Private",
              "name": "FreeAreaZMax",
              "private": true,
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Object.Object3D::CenterZ() + OffsetZ + FollowFreeAreaZMax"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the follow free area top border on Z axis of the object.",
              "fullName": "Follow free area top border on Z axis",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "FollowFreeAreaZMax",
              "sentence": "the follow free area top border on Z axis",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FollowFreeAreaZMax"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FollowFreeAreaZMax",
              "group": "Third person camera configuration",
              "name": "SetFollowFreeAreaZMax",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "FollowFreeAreaZMax",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the follow free area bottom border on Z axis of the object.",
              "fullName": "Follow free area bottom border on Z axis",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "FollowFreeAreaZMin",
              "sentence": "the follow free area bottom border on Z axis",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "FollowFreeAreaZMin"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "FollowFreeAreaZMin",
              "group": "Third person camera configuration",
              "name": "SetFollowFreeAreaZMin",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "FollowFreeAreaZMin",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the camera distance of the object.",
              "fullName": "Camera distance",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "Distance",
              "sentence": "the camera distance",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "Distance"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "Distance",
              "group": "Third person camera configuration",
              "name": "SetDistance",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "Distance",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the lateral distance offset of the object.",
              "fullName": "Lateral distance offset",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "OffsetX",
              "sentence": "the lateral distance offset",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "OffsetX"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "OffsetX",
              "group": "Third person camera configuration",
              "name": "SetOffsetX",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "OffsetX",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the ahead distance offset of the object.",
              "fullName": "Ahead distance offset",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "OffsetY",
              "sentence": "the ahead distance offset",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "OffsetY"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "OffsetY",
              "group": "Third person camera configuration",
              "name": "SetOffsetY",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "OffsetY",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the z offset of the object.",
              "fullName": "Z offset",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "OffsetZ",
              "sentence": "the z 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": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "OffsetZ",
              "group": "Third person camera configuration",
              "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": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the rotation angle offset of the object.",
              "fullName": "Rotation angle offset",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "RotationAngleOffset",
              "sentence": "the rotation angle offset",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "RotationAngleOffset"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "RotationAngleOffset",
              "group": "Third person camera configuration",
              "name": "SetRotationAngleOffset",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "RotationAngleOffset",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the elevation angle offset of the object.",
              "fullName": "Elevation angle offset",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "ElevationAngleOffset",
              "sentence": "the elevation angle offset",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "ElevationAngleOffset"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "ElevationAngleOffset",
              "group": "Third person camera configuration",
              "name": "SetElevationAngleOffset",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "ElevationAngleOffset",
                        "=",
                        "Value"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "description": "the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.",
              "fullName": "Targeted rotation angle",
              "functionType": "ExpressionAndCondition",
              "group": "Third person camera configuration",
              "name": "TargetedRotationAngle",
              "sentence": "the targeted camera rotation angle",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetReturnNumber"
                      },
                      "parameters": [
                        "TargetedRotationAngle"
                      ]
                    }
                  ]
                }
              ],
              "expressionType": {
                "type": "expression"
              },
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            },
            {
              "fullName": "",
              "functionType": "ActionWithOperator",
              "getterName": "TargetedRotationAngle",
              "group": "Third person camera configuration",
              "name": "SetTargetedRotationAngle",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [],
                  "actions": [
                    {
                      "type": {
                        "value": "SetNumberVariable"
                      },
                      "parameters": [
                        "TargetedRotationAngle",
                        "=",
                        "Value"
                      ]
                    },
                    {
                      "type": {
                        "value": "SetBooleanVariable"
                      },
                      "parameters": [
                        "IsRotatingWithObject",
                        "False",
                        ""
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "ThirdPersonCamera::ThirdPersonCamera",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "onCreated"
              },
              {
                "functionName": "doStepPreEvents"
              },
              {
                "functionName": "MoveCameraCloser"
              },
              {
                "functionName": "DoMoveCameraCloser"
              },
              {
                "functionName": "JumpToTargetedRotation"
              },
              {
                "functionName": "RotationAngle"
              },
              {
                "functionName": "SetCameraRotation"
              },
              {
                "folderName": "Third person camera configuration",
                "children": [
                  {
                    "functionName": "RotationHalfwayDuration"
                  },
                  {
                    "functionName": "SetRotationHalfwayDuration"
                  },
                  {
                    "functionName": "ElevationHalfwayDuration"
                  },
                  {
                    "functionName": "SetElevationHalfwayDuration"
                  },
                  {
                    "functionName": "TranslationZHalfwayDuration"
                  },
                  {
                    "functionName": "SetTranslationZHalfwayDuration"
                  },
                  {
                    "functionName": "FollowFreeAreaZMax"
                  },
                  {
                    "functionName": "SetFollowFreeAreaZMax"
                  },
                  {
                    "functionName": "FollowFreeAreaZMin"
                  },
                  {
                    "functionName": "SetFollowFreeAreaZMin"
                  },
                  {
                    "functionName": "Distance"
                  },
                  {
                    "functionName": "SetDistance"
                  },
                  {
                    "functionName": "OffsetX"
                  },
                  {
                    "functionName": "SetOffsetX"
                  },
                  {
                    "functionName": "OffsetY"
                  },
                  {
                    "functionName": "SetOffsetY"
                  },
                  {
                    "functionName": "OffsetZ"
                  },
                  {
                    "functionName": "SetOffsetZ"
                  },
                  {
                    "functionName": "RotationAngleOffset"
                  },
                  {
                    "functionName": "SetRotationAngleOffset"
                  },
                  {
                    "functionName": "ElevationAngleOffset"
                  },
                  {
                    "functionName": "SetElevationAngleOffset"
                  },
                  {
                    "functionName": "TargetedRotationAngle"
                  },
                  {
                    "functionName": "SetTargetedRotationAngle"
                  }
                ]
              },
              {
                "folderName": "Private",
                "children": [
                  {
                    "functionName": "FreeAreaZMin"
                  },
                  {
                    "functionName": "FreeAreaZMax"
                  }
                ]
              }
            ]
          },
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "3D capability",
              "extraInformation": [
                "Scene3D::Base3DBehavior"
              ],
              "choices": [],
              "name": "Object3D"
            },
            {
              "value": "0.125",
              "type": "Number",
              "unit": "Second",
              "label": "Halfway  time for rotation",
              "group": "Catch-up speed",
              "quickCustomizationVisibility": "hidden",
              "name": "RotationHalfwayDuration"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Second",
              "label": "Halfway  time for elevation rotation",
              "group": "Catch-up speed",
              "quickCustomizationVisibility": "hidden",
              "name": "ElevationHalfwayDuration"
            },
            {
              "value": "0.125",
              "type": "Number",
              "unit": "Second",
              "label": "Halfway time on Z axis",
              "group": "Catch-up speed",
              "quickCustomizationVisibility": "hidden",
              "name": "TranslationZHalfwayDuration"
            },
            {
              "value": "500",
              "type": "Number",
              "unit": "Pixel",
              "label": "Camera distance",
              "group": "Position",
              "name": "Distance"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "Lateral distance offset",
              "group": "Position",
              "name": "OffsetX"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "Ahead distance offset",
              "group": "Position",
              "name": "OffsetY"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "Z offset",
              "group": "Position",
              "name": "OffsetZ"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "DegreeAngle",
              "label": "Rotation angle offset",
              "group": "Position",
              "name": "RotationAngleOffset"
            },
            {
              "value": "20",
              "type": "Number",
              "unit": "DegreeAngle",
              "label": "Elevation angle offset",
              "group": "Position",
              "name": "ElevationAngleOffset"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "Follow free area top border on Z axis",
              "group": "Position",
              "advanced": true,
              "quickCustomizationVisibility": "hidden",
              "name": "FollowFreeAreaZMax"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "Follow free area bottom border on Z axis",
              "group": "Position",
              "advanced": true,
              "quickCustomizationVisibility": "hidden",
              "name": "FollowFreeAreaZMin"
            },
            {
              "value": "",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "RotationLogSpeed"
            },
            {
              "value": "",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "ElevationLogSpeed"
            },
            {
              "value": "",
              "type": "Number",
              "label": "",
              "hidden": true,
              "name": "TranslationZLogSpeed"
            },
            {
              "value": "",
              "type": "Boolean",
              "label": "",
              "hidden": true,
              "name": "IsCalledManually"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "Pixel",
              "label": "",
              "hidden": true,
              "name": "CameraZ"
            },
            {
              "value": "true",
              "type": "Boolean",
              "label": "",
              "hidden": true,
              "name": "HasJustBeenCreated"
            },
            {
              "value": "true",
              "type": "Boolean",
              "label": "Automatically rotate the camera with the object",
              "quickCustomizationVisibility": "hidden",
              "name": "IsRotatingWithObject"
            },
            {
              "value": "false",
              "type": "Boolean",
              "label": "Automatically rotate the camera with the object (elevation)",
              "quickCustomizationVisibility": "hidden",
              "name": "IsElevatingWithObject"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "DegreeAngle",
              "label": "Targeted camera rotation angle",
              "description": "When this angle is set, the camera follow this value instead of the object angle.",
              "hidden": true,
              "name": "TargetedRotationAngle"
            },
            {
              "value": "0",
              "type": "Number",
              "unit": "DegreeAngle",
              "label": "Targeted camera rotation angle",
              "description": "When this angle is set, the camera follow this value instead of the object angle.",
              "hidden": true,
              "name": "TargetedElevationAngle"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "Object3D"
              },
              {
                "folderName": "Catch-up speed",
                "children": [
                  {
                    "propertyName": "RotationHalfwayDuration"
                  },
                  {
                    "propertyName": "ElevationHalfwayDuration"
                  },
                  {
                    "propertyName": "TranslationZHalfwayDuration"
                  }
                ]
              },
              {
                "folderName": "Position",
                "children": [
                  {
                    "propertyName": "Distance"
                  },
                  {
                    "propertyName": "OffsetX"
                  },
                  {
                    "propertyName": "OffsetY"
                  },
                  {
                    "propertyName": "OffsetZ"
                  },
                  {
                    "propertyName": "RotationAngleOffset"
                  },
                  {
                    "propertyName": "ElevationAngleOffset"
                  },
                  {
                    "propertyName": "FollowFreeAreaZMax"
                  },
                  {
                    "propertyName": "FollowFreeAreaZMin"
                  }
                ]
              },
              {
                "propertyName": "RotationLogSpeed"
              },
              {
                "propertyName": "ElevationLogSpeed"
              },
              {
                "propertyName": "TranslationZLogSpeed"
              },
              {
                "propertyName": "IsCalledManually"
              },
              {
                "propertyName": "CameraZ"
              },
              {
                "propertyName": "HasJustBeenCreated"
              },
              {
                "propertyName": "IsRotatingWithObject"
              },
              {
                "propertyName": "IsElevatingWithObject"
              },
              {
                "propertyName": "TargetedRotationAngle"
              },
              {
                "propertyName": "TargetedElevationAngle"
              }
            ]
          }
        }
      ],
      "eventsBasedObjects": []
    },
    {
      "author": "",
      "category": "Input",
      "dimension": "",
      "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": []
        }
      ],
      "eventsFunctionsFolderStructure": {
        "folderName": "__ROOT",
        "children": [
          {
            "functionName": "IsInGameEdition"
          },
          {
            "functionName": "AcceleratedSpeed"
          },
          {
            "functionName": "IsButtonJustPressed"
          },
          {
            "functionName": "IsButtonPressed"
          },
          {
            "functionName": "IsButtonReleased"
          },
          {
            "functionName": "SetButtonState"
          },
          {
            "functionName": "SetDeadZone"
          },
          {
            "functionName": "DeadZone"
          },
          {
            "functionName": "AngleTo4Way"
          },
          {
            "functionName": "AngleTo8Way"
          },
          {
            "functionName": "IsAngleIn4WayDirection"
          },
          {
            "functionName": "IsAngleIn8WayDirection"
          },
          {
            "functionName": "IsDirectionPushed4Way"
          },
          {
            "functionName": "IsDirectionPushed8Way"
          },
          {
            "functionName": "JoystickForce"
          },
          {
            "functionName": "StickForce"
          },
          {
            "functionName": "SetJoystickForce"
          },
          {
            "functionName": "JoystickAngle"
          },
          {
            "functionName": "StickAngle"
          },
          {
            "functionName": "SetJoystickAngle"
          },
          {
            "functionName": "StickForceX"
          },
          {
            "functionName": "StickForceY"
          },
          {
            "folderName": "Multitouch Joystick",
            "children": [
              {
                "functionName": "HasTouchStartedOnScreenSide"
              }
            ]
          }
        ]
      },
      "eventsBasedBehaviors": [
        {
          "description": "Joystick that can be controlled by interacting with a touchscreen.",
          "fullName": "Multitouch Joystick",
          "helpPath": "",
          "iconUrl": "",
          "name": "MultitouchJoystick",
          "objectType": "",
          "previewIconUrl": "",
          "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",
              "group": "Multitouch Joystick configuration",
              "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",
              "group": "Multitouch Joystick configuration",
              "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",
              "group": "Multitouch Joystick configuration",
              "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "onCreated"
              },
              {
                "functionName": "onDeActivate"
              },
              {
                "functionName": "doStepPreEvents"
              },
              {
                "functionName": "JoystickForce"
              },
              {
                "functionName": "SetJoystickForce"
              },
              {
                "functionName": "JoystickAngle"
              },
              {
                "functionName": "SetJoystickAngle"
              },
              {
                "functionName": "StickForceX"
              },
              {
                "functionName": "StickForceY"
              },
              {
                "functionName": "IsDirectionPushed4Way"
              },
              {
                "functionName": "IsDirectionPushed8Way"
              },
              {
                "functionName": "IsPressed"
              },
              {
                "functionName": "Reset"
              },
              {
                "folderName": "Multitouch Joystick configuration",
                "children": [
                  {
                    "functionName": "ControllerIdentifier"
                  },
                  {
                    "functionName": "SetControllerIdentifier"
                  },
                  {
                    "functionName": "JoystickIdentifier"
                  },
                  {
                    "functionName": "SetJoystickIdentifier"
                  },
                  {
                    "functionName": "DeadZoneRadius"
                  },
                  {
                    "functionName": "SetDeadZoneRadius"
                  }
                ]
              },
              {
                "functionName": "ForceStartPressing"
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "name": "MultitouchButton",
          "objectType": "",
          "previewIconUrl": "",
          "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              },
              {
                "functionName": "IsJustPressed"
              },
              {
                "functionName": "IsPressed"
              },
              {
                "functionName": "IsReleased"
              },
              {
                "functionName": "SetButtonState"
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "name": "PlatformerMultitouchMapper",
          "objectType": "",
          "previewIconUrl": "",
          "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "name": "Platformer3DMultitouchMapper",
          "objectType": "",
          "previewIconUrl": "",
          "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "name": "Shooter3DMultitouchMapper",
          "objectType": "",
          "previewIconUrl": "",
          "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "name": "FirstPersonMultitouchMapper",
          "objectType": "",
          "previewIconUrl": "",
          "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",
              "group": "First person camera multitouch controller mapper horizontal rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper horizontal rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper horizontal rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper vertical rotation configuration",
              "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",
              "group": "First person camera multitouch controller mapper position configuration",
              "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              },
              {
                "folderName": "Layers and cameras",
                "children": [
                  {
                    "functionName": "LookFromObjectEyes"
                  }
                ]
              },
              {
                "folderName": "First person camera multitouch controller mapper horizontal rotation configuration",
                "children": [
                  {
                    "functionName": "HorizontalRotationSpeedMax"
                  },
                  {
                    "functionName": "SetHorizontalRotationSpeedMax"
                  },
                  {
                    "functionName": "HorizontalRotationAcceleration"
                  },
                  {
                    "functionName": "SetHorizontalRotationAcceleration"
                  },
                  {
                    "functionName": "HorizontalRotationDeceleration"
                  },
                  {
                    "functionName": "SetHorizontalRotationDeceleration"
                  }
                ]
              },
              {
                "folderName": "First person camera multitouch controller mapper vertical rotation configuration",
                "children": [
                  {
                    "functionName": "VerticalRotationSpeedMax"
                  },
                  {
                    "functionName": "SetVerticalRotationSpeedMax"
                  },
                  {
                    "functionName": "VerticalRotationAcceleration"
                  },
                  {
                    "functionName": "SetVerticalRotationAcceleration"
                  },
                  {
                    "functionName": "VerticalRotationDeceleration"
                  },
                  {
                    "functionName": "SetVerticalRotationDeceleration"
                  },
                  {
                    "functionName": "VerticalAngleMin"
                  },
                  {
                    "functionName": "SetVerticalAngleMin"
                  },
                  {
                    "functionName": "VerticalAngleMax"
                  },
                  {
                    "functionName": "SetVerticalAngleMax"
                  }
                ]
              },
              {
                "folderName": "First person camera multitouch controller mapper position configuration",
                "children": [
                  {
                    "functionName": "OffsetZ"
                  },
                  {
                    "functionName": "SetOffsetZ"
                  }
                ]
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "name": "PhysicsCar3DMultitouchMapper",
          "objectType": "",
          "previewIconUrl": "",
          "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "name": "TopDownMultitouchMapper",
          "objectType": "",
          "previewIconUrl": "",
          "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              }
            ]
          },
          "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",
          "helpPath": "",
          "iconUrl": "",
          "isUsingLegacyInstancesRenderer": true,
          "name": "SpriteMultitouchJoystick",
          "previewIconUrl": "",
          "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",
              "group": "Multitouch Joystick configuration",
              "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",
              "group": "Multitouch Joystick configuration",
              "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",
              "group": "Multitouch Joystick configuration",
              "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": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "onCreated"
              },
              {
                "functionName": "doStepPostEvents"
              },
              {
                "functionName": "onHotReloading"
              },
              {
                "functionName": "UpdateConfiguration"
              },
              {
                "functionName": "TeleportAndPress"
              },
              {
                "functionName": "ParentTouchX"
              },
              {
                "functionName": "ParentTouchY"
              },
              {
                "functionName": "ActivateControl"
              },
              {
                "functionName": "IsPressed"
              },
              {
                "functionName": "JoystickForce"
              },
              {
                "functionName": "StickForce"
              },
              {
                "functionName": "StickForceX"
              },
              {
                "functionName": "StickForceY"
              },
              {
                "functionName": "JoystickAngle"
              },
              {
                "functionName": "StickAngle"
              },
              {
                "functionName": "IsDirectionPushed4Way"
              },
              {
                "functionName": "IsDirectionPushed8Way"
              },
              {
                "folderName": "Multitouch Joystick configuration",
                "children": [
                  {
                    "functionName": "ControllerIdentifier"
                  },
                  {
                    "functionName": "SetControllerIdentifier"
                  },
                  {
                    "functionName": "JoystickIdentifier"
                  },
                  {
                    "functionName": "SetJoystickIdentifier"
                  },
                  {
                    "functionName": "DeadZoneRadius"
                  },
                  {
                    "functionName": "SetDeadZoneRadius"
                  }
                ]
              }
            ]
          },
          "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": "Input",
      "dimension": "",
      "extensionNamespace": "",
      "fullName": "3D car keyboard mapper",
      "gdevelopVersion": ">=5.5.222",
      "helpPath": "",
      "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggZD0iTTI5LDE0aC00LjJjMC4xLTAuMywwLjItMC42LDAuMi0xYzAtMS43LTEuMy0zLTMtM0g4Yy0wLjYsMC0xLTAuNC0xLTFzMC40LTEsMS0xaDZjMS43LDAsMy0xLjMsMy0zVjJjMC0wLjYtMC40LTEtMS0xDQoJcy0xLDAuNC0xLDF2M2MwLDAuNi0wLjQsMS0xLDFIOEM2LjMsNiw1LDcuMyw1LDlzMS4zLDMsMywzaDE0YzAuNiwwLDEsMC40LDEsMXMtMC40LDEtMSwxSDNjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDENCgloMjZjMC42LDAsMS0wLjQsMS0xVjE1QzMwLDE0LjQsMjkuNiwxNCwyOSwxNHogTTcsMThoMmMwLjYsMCwxLDAuNCwxLDFjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxYzAtMC42LDAuNC0xLDEtMWgyDQoJYzAuNiwwLDEsMC40LDEsMWMwLTAuNiwwLjQtMSwxLTFoMmMwLjYsMCwxLDAuNCwxLDFjMC0wLjYsMC40LTEsMS0xaDJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFoLTJjLTAuNiwwLTEtMC40LTEtMQ0KCWMwLDAuNi0wLjQsMS0xLDFoLTJjLTAuNiwwLTEtMC40LTEtMWMwLDAuNi0wLjQsMS0xLDFoLTJjLTAuNiwwLTEtMC40LTEtMWMwLDAuNi0wLjQsMS0xLDFoLTJjLTAuNiwwLTEtMC40LTEtMWMwLDAuNi0wLjQsMS0xLDFINw0KCWMtMC42LDAtMS0wLjQtMS0xUzYuNCwxOCw3LDE4eiBNMTksMjJjMCwwLjEsMCwwLjMtMC4xLDAuNHMtMC4xLDAuMi0wLjIsMC4zYzAsMC0wLjEsMC4xLTAuMiwwLjFjMCwwLTAuMSwwLjEtMC4yLDAuMQ0KCWMtMC4xLDAtMC4xLDAtMC4yLDAuMWMtMC4xLDAtMC4xLDAtMC4yLDBjLTAuMSwwLTAuMSwwLTAuMiwwYy0wLjEsMC0wLjEsMC0wLjItMC4xYy0wLjEsMC0wLjEtMC4xLTAuMi0wLjFjMCwwLTAuMS0wLjEtMC4xLTAuMQ0KCWMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjNDMTcsMjIuMywxNywyMi4xLDE3LDIyYzAtMC4xLDAtMC4zLDAuMS0wLjRjMC0wLjEsMC4xLTAuMiwwLjItMC4zYzAsMCwwLjEtMC4xLDAuMS0wLjENCgljMC4xLDAsMC4xLTAuMSwwLjItMC4xYzAuMSwwLDAuMSwwLDAuMi0wLjFjMC4xLDAsMC4zLDAsMC40LDBjMC4xLDAsMC4xLDAsMC4yLDAuMWMwLjEsMCwwLjEsMC4xLDAuMiwwLjFjMC4xLDAsMC4xLDAuMSwwLjIsMC4xDQoJYzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4zQzE5LDIxLjcsMTksMjEuOSwxOSwyMnogTTE1LDIyYzAsMC4xLDAsMC4zLTAuMSwwLjRzLTAuMSwwLjItMC4yLDAuM2MwLDAtMC4xLDAuMS0wLjIsMC4xDQoJYzAsMC0wLjEsMC4xLTAuMiwwLjFjLTAuMSwwLTAuMSwwLTAuMiwwLjFjLTAuMSwwLTAuMSwwLTAuMiwwYy0wLjMsMC0wLjUtMC4xLTAuNy0wLjNjLTAuMS0wLjEtMC4yLTAuMi0wLjItMC4zDQoJQzEzLDIyLjMsMTMsMjIuMSwxMywyMmMwLTAuMSwwLTAuMSwwLTAuMmMwLTAuMSwwLTAuMSwwLjEtMC4yYzAtMC4xLDAtMC4xLDAuMS0wLjJjMC0wLjEsMC4xLTAuMSwwLjEtMC4xYzAuMi0wLjIsMC42LTAuMywwLjktMC4zDQoJYzAuMSwwLDAuMSwwLDAuMiwwLjFjMC4xLDAsMC4xLDAuMSwwLjIsMC4xYzAuMSwwLDAuMSwwLjEsMC4yLDAuMWMwLDAsMC4xLDAuMSwwLjEsMC4xYzAsMC4xLDAuMSwwLjEsMC4xLDAuMmMwLDAuMSwwLDAuMSwwLjEsMC4yDQoJQzE1LDIxLjksMTUsMjEuOSwxNSwyMnogTTUsMjJjMC0wLjEsMC0wLjMsMC4xLTAuNGMwLTAuMSwwLjEtMC4yLDAuMi0wLjNjMC4yLTAuMiwwLjYtMC4zLDAuOS0wLjNjMC4xLDAsMC4xLDAsMC4yLDAuMQ0KCWMwLjEsMCwwLjEsMC4xLDAuMiwwLjFjMCwwLDAuMSwwLjEsMC4yLDAuMWMwLjEsMC4xLDAuMiwwLjIsMC4yLDAuM0M3LDIxLjcsNywyMS45LDcsMjJjMCwwLjMtMC4xLDAuNS0wLjMsMC43YzAsMC0wLjEsMC4xLTAuMiwwLjENCgljLTAuMSwwLTAuMSwwLjEtMC4yLDAuMWMtMC4xLDAtMC4xLDAtMC4yLDAuMWMtMC4xLDAtMC4xLDAtMC4yLDBjLTAuMywwLTAuNS0wLjEtMC43LTAuM0M1LjEsMjIuNSw1LDIyLjMsNSwyMnogTTgsMjZINw0KCWMtMC42LDAtMS0wLjQtMS0xczAuNC0xLDEtMWgxYzAuNiwwLDEsMC40LDEsMVM4LjYsMjYsOCwyNnogTTEwLjksMjIuNGMwLDAuMSwwLDAuMS0wLjEsMC4yYzAsMC0wLjEsMC4xLTAuMSwwLjENCglDMTAuNSwyMi45LDEwLjMsMjMsMTAsMjNjLTAuMSwwLTAuMywwLTAuNC0wLjFjLTAuMS0wLjEtMC4yLTAuMS0wLjMtMC4yYzAtMC4xLTAuMS0wLjEtMC4xLTAuMWMwLTAuMS0wLjEtMC4xLTAuMS0wLjINCgljMC0wLjEsMC0wLjEtMC4xLTAuMmMwLTAuMSwwLTAuMSwwLTAuMmMwLTAuMywwLjEtMC41LDAuMy0wLjdjMC4xLTAuMSwwLjItMC4yLDAuMy0wLjJjMC40LTAuMiwwLjgtMC4xLDEuMSwwLjINCgljMC4yLDAuMiwwLjMsMC40LDAuMywwLjdjMCwwLjEsMCwwLjEsMCwwLjJDMTEsMjIuMywxMSwyMi4zLDEwLjksMjIuNHogTTIwLDI2aC04Yy0wLjYsMC0xLTAuNC0xLTFzMC40LTEsMS0xaDhjMC42LDAsMSwwLjQsMSwxDQoJUzIwLjYsMjYsMjAsMjZ6IE0yMi45LDIyLjRjMCwwLjEsMCwwLjEtMC4xLDAuMmMwLDAtMC4xLDAuMS0wLjEsMC4xYzAsMC0wLjEsMC4xLTAuMiwwLjFjMCwwLTAuMSwwLjEtMC4yLDAuMWMtMC4xLDAtMC4xLDAtMC4yLDAuMQ0KCWMtMC4xLDAtMC4xLDAtMC4yLDBjLTAuMSwwLTAuMSwwLTAuMiwwYy0wLjEsMC0wLjEsMC0wLjItMC4xYy0wLjEsMC0wLjEtMC4xLTAuMi0wLjFjMCwwLTAuMS0wLjEtMC4xLTAuMWMwLTAuMS0wLjEtMC4xLTAuMS0wLjENCgljMC0wLjEtMC4xLTAuMS0wLjEtMC4yYzAtMC4xLDAtMC4xLTAuMS0wLjJjMC0wLjEsMC0wLjEsMC0wLjJjMC0wLjMsMC4xLTAuNSwwLjMtMC43YzAsMCwwLjEtMC4xLDAuMS0wLjFjMC4xLDAsMC4xLTAuMSwwLjItMC4xDQoJYzAuMSwwLDAuMSwwLDAuMi0wLjFjMC4xLDAsMC4zLDAsMC40LDBjMC4xLDAsMC4xLDAsMC4yLDAuMWMwLjEsMCwwLjEsMC4xLDAuMiwwLjFjMC4xLDAsMC4xLDAuMSwwLjIsMC4xYzAuMiwwLjIsMC4zLDAuNCwwLjMsMC43DQoJYzAsMC4xLDAsMC4xLDAsMC4yQzIzLDIyLjMsMjMsMjIuMywyMi45LDIyLjR6IE0yNSwyNmgtMWMtMC42LDAtMS0wLjQtMS0xczAuNC0xLDEtMWgxYzAuNiwwLDEsMC40LDEsMVMyNS42LDI2LDI1LDI2eiBNMjYuNywyMi43DQoJQzI2LjUsMjIuOSwyNi4zLDIzLDI2LDIzYy0wLjEsMC0wLjEsMC0wLjIsMGMtMC4xLDAtMC4xLDAtMC4yLTAuMWMtMC4xLDAtMC4xLTAuMS0wLjItMC4xYy0wLjEsMC0wLjEtMC4xLTAuMi0wLjENCglDMjUuMSwyMi41LDI1LDIyLjMsMjUsMjJjMC0wLjEsMC0wLjMsMC4xLTAuNGMwLTAuMSwwLjEtMC4yLDAuMi0wLjNjMCwwLDAuMS0wLjEsMC4yLTAuMWMwLDAsMC4xLTAuMSwwLjItMC4xYzAuMSwwLDAuMSwwLDAuMi0wLjENCgljMC4zLTAuMSwwLjcsMCwwLjksMC4zYzAuMiwwLjIsMC4zLDAuNCwwLjMsMC43QzI3LDIyLjMsMjYuOSwyMi41LDI2LjcsMjIuN3oiLz4NCjwvc3ZnPg0K",
      "name": "PhysicsCar3DKeyMapper",
      "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Computers and Hardware/3e5871434a72821bf3ecb44a6857e62a438cf23dc8f95966f56ae97e95315468_Computers and Hardware_keyboard.svg",
      "shortDescription": "3D car keyboard controls.",
      "version": "1.0.1",
      "description": "3D physics car keyboard controls.",
      "origin": {
        "identifier": "PhysicsCar3DKeyMapper",
        "name": "gdevelop-extension-store"
      },
      "tags": [
        "3d"
      ],
      "authorIds": [
        "IWykYNRvhCZBN3vEgKEbBPOR3Oc2"
      ],
      "dependencies": [],
      "globalVariables": [],
      "sceneVariables": [],
      "eventsFunctions": [],
      "eventsFunctionsFolderStructure": {
        "folderName": "__ROOT"
      },
      "eventsBasedBehaviors": [
        {
          "description": "Control a 3D physics car with a keyboard.",
          "fullName": "3D car keyboard mapper",
          "helpPath": "",
          "iconUrl": "",
          "name": "PhysicsCar3DKeyboardMapper",
          "objectType": "",
          "previewIconUrl": "",
          "quickCustomizationVisibility": "hidden",
          "eventsFunctions": [
            {
              "fullName": "",
              "functionType": "Action",
              "name": "doStepPreEvents",
              "sentence": "",
              "events": [
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "KeyFromTextPressed"
                      },
                      "parameters": [
                        "",
                        "Down"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateBackwardKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "KeyFromTextPressed"
                      },
                      "parameters": [
                        "",
                        "Up"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateForwardKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "KeyFromTextPressed"
                      },
                      "parameters": [
                        "",
                        "Left"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateLeftKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "KeyFromTextPressed"
                      },
                      "parameters": [
                        "",
                        "Right"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateRightKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D"
                      ]
                    }
                  ]
                },
                {
                  "type": "BuiltinCommonInstructions::Standard",
                  "conditions": [
                    {
                      "type": {
                        "value": "KeyFromTextPressed"
                      },
                      "parameters": [
                        "",
                        "HandBrake"
                      ]
                    }
                  ],
                  "actions": [
                    {
                      "type": {
                        "value": "Physics3D::PhysicsCar3D::SimulateHandBrakeKey"
                      },
                      "parameters": [
                        "Object",
                        "PhysicsCar3D"
                      ]
                    }
                  ]
                }
              ],
              "parameters": [
                {
                  "description": "Object",
                  "name": "Object",
                  "type": "object"
                },
                {
                  "description": "Behavior",
                  "name": "Behavior",
                  "supplementaryInformation": "PhysicsCar3DKeyMapper::PhysicsCar3DKeyboardMapper",
                  "type": "behavior"
                }
              ],
              "objectGroups": []
            }
          ],
          "eventsFunctionsFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "functionName": "doStepPreEvents"
              }
            ]
          },
          "propertyDescriptors": [
            {
              "value": "",
              "type": "Behavior",
              "label": "3D physics car",
              "extraInformation": [
                "Physics3D::PhysicsCar3D"
              ],
              "choices": [],
              "name": "PhysicsCar3D"
            },
            {
              "value": "Space",
              "type": "KeyboardKey",
              "label": "Hand brake key",
              "name": "HandBrake"
            },
            {
              "value": "Up",
              "type": "KeyboardKey",
              "label": "Up key",
              "name": "Up"
            },
            {
              "value": "Left",
              "type": "KeyboardKey",
              "label": "Left key",
              "name": "Left"
            },
            {
              "value": "Down",
              "type": "KeyboardKey",
              "label": "Down key",
              "name": "Down"
            },
            {
              "value": "Right",
              "type": "KeyboardKey",
              "label": "Right key",
              "name": "Right"
            }
          ],
          "propertiesFolderStructure": {
            "folderName": "__ROOT",
            "children": [
              {
                "propertyName": "PhysicsCar3D"
              },
              {
                "propertyName": "HandBrake"
              },
              {
                "propertyName": "Up"
              },
              {
                "propertyName": "Left"
              },
              {
                "propertyName": "Down"
              },
              {
                "propertyName": "Right"
              }
            ]
          }
        }
      ],
      "eventsBasedObjects": []
    }
  ],
  "externalLayouts": []
}
