{ "firstLayout": "", "gdVersion": { "build": 277, "major": 5, "minor": 6, "revision": 0 }, "initialGDVersion": "5.6.274", "properties": { "adaptGameResolutionAtRuntime": true, "antialiasingMode": "MSAA", "antialisingEnabledOnMobile": false, "folderProject": false, "orientation": "landscape", "packageName": "com.example.gamename", "pixelsRounding": true, "projectUuid": "9386a7f4-fb47-4bec-8bd2-99c1fb11403b", "scaleMode": "nearest", "sizeOnStartupMode": "", "templateSlug": "", "version": "1.0.0", "name": "MiniDungeonMultiplayerDev", "description": "", "author": "", "windowWidth": 640, "windowHeight": 480, "latestCompilationDirectory": "", "maxFPS": 60, "minFPS": 20, "verticalSync": false, "platformSpecificAssets": { "android-icon-144": "", "android-icon-192": "", "android-icon-36": "", "android-icon-48": "", "android-icon-72": "", "android-icon-96": "", "android-windowSplashScreenAnimatedIcon": "", "desktop-icon-512": "", "ios-icon-100": "", "ios-icon-1024": "", "ios-icon-114": "", "ios-icon-120": "", "ios-icon-144": "", "ios-icon-152": "", "ios-icon-167": "", "ios-icon-180": "", "ios-icon-20": "", "ios-icon-29": "", "ios-icon-40": "", "ios-icon-50": "", "ios-icon-57": "", "ios-icon-58": "", "ios-icon-60": "", "ios-icon-72": "", "ios-icon-76": "", "ios-icon-80": "", "ios-icon-87": "" }, "loadingScreen": { "backgroundColor": 0, "backgroundFadeInDuration": 0.2, "backgroundImageResourceName": "", "gdevelopLogoStyle": "light", "logoAndProgressFadeInDuration": 0.2, "logoAndProgressLogoFadeInDelay": 0, "minDuration": 1.5, "progressBarColor": 16777215, "progressBarHeight": 20, "progressBarMaxWidth": 200, "progressBarMinWidth": 40, "progressBarWidthPercent": 30, "showGDevelopSplash": true, "showProgressBar": true }, "watermark": { "placement": "bottom-left", "showWatermark": true }, "authorIds": [], "authorUsernames": [], "categories": [], "playableDevices": [], "extensionProperties": [], "platforms": [ { "name": "GDevelop JS platform" } ], "currentPlatform": "GDevelop JS platform" }, "resources": { "resources": [ { "file": "assets/03Idle25.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle25", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle26.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle26", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle27.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle27", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle28.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle28", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle29.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle29", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle30.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle30", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle31.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle31", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle32.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle32", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle33.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle33", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle34.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle34", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle35.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle35", "smoothed": false, "userAdded": false }, { "file": "assets/03Idle36.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Idle36", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk2.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk2", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk3.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk3", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk4.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk4", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk5.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk5", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk6.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk6", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk7.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk7", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk8", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk9.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk9", "smoothed": false, "userAdded": false }, { "file": "assets/03Walk10.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Walk10", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite4.png", "kind": "image", "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/NewSprite4.png\"}", "name": "NewSprite4", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite5.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite5", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite6.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite6", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite7.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite7", "smoothed": false, "userAdded": false }, { "file": "assets/TestRoom4Way.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "TestRoom4Way", "smoothed": false, "userAdded": false }, { "file": "assets/TestRoomLR.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "TestRoomLR", "smoothed": false, "userAdded": false }, { "file": "assets/TestRoomDeadU.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "TestRoomDeadU", "smoothed": false, "userAdded": false }, { "file": "assets/TestRoomDeadD.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "TestRoomDeadD", "smoothed": false, "userAdded": false }, { "file": "assets/TestRoomUD.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "TestRoomUD", "smoothed": false, "userAdded": false }, { "file": "assets/TestRoomDeadL.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "TestRoomDeadL", "smoothed": false, "userAdded": false }, { "file": "assets/TestRoomDeadR.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "TestRoomDeadR", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite2", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite3", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite8", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite9.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite9", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite10.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite10", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite11.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite11", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite12.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite12", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite13.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite13", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite14.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite14", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite15.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite15", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite16.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite16", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite17.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite17", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite18.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite18", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite19.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite19", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite20.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite20", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite21.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite21", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite22.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite22", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite23.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite23", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite24.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite24", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite25.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite25", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite26.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite26", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite27.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite27", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite28.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite28", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite29.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite29", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite30.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite30", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite31.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite31", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite32.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite32", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite33.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite33", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite34.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite34", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite35.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite35", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite36.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite36", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite37.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite37", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite38.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite38", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite39.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite39", "smoothed": false, "userAdded": false }, { "file": "assets/03Attack.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Attack", "smoothed": false, "userAdded": false }, { "file": "assets/03Attack2.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Attack2", "smoothed": false, "userAdded": false }, { "file": "assets/03Attack3.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Attack3", "smoothed": false, "userAdded": false }, { "file": "assets/03Attack4.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Attack4", "smoothed": false, "userAdded": false }, { "file": "assets/03Attack5.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Attack5", "smoothed": false, "userAdded": false }, { "file": "assets/03Attack6.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03Attack6", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle2.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle2", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle3.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle3", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle4.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle4", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle5.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle5", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle6.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle6", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle7.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle7", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle8", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle9.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle9", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle10.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle10", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle11.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle11", "smoothed": false, "userAdded": false }, { "file": "assets/01Idle12.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01Idle12", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk2.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk2", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk3.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk3", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk4.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk4", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk5.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk5", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack2.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack2", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack3.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack3", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack4.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack4", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack5.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack5", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack6.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack6", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack7.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack7", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack8", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack9.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack9", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack10.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack10", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack11.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack11", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack12.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack12", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle2.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle2", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle3.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle3", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle4.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle4", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle5.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle5", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle6.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle6", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle7.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle7", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle8", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle9.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle9", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle10.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle10", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle11.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle11", "smoothed": false, "userAdded": false }, { "file": "assets/02Idle12.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Idle12", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk6.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk6", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk7.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk7", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk8.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk8", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk9.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk9", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk10.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk10", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk11.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk11", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk12.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk12", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk13.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk13", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk14.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk14", "smoothed": false, "userAdded": false }, { "file": "assets/02Walk15.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Walk15", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack13.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack13", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack14.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack14", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack15.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack15", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack16.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack16", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack17.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack17", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack18.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack18", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack19.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack19", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack20.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack20", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack21.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack21", "smoothed": false, "userAdded": false }, { "file": "assets/02Attack22.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02Attack22", "smoothed": false, "userAdded": false }, { "file": "assets/01.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "01", "smoothed": false, "userAdded": false }, { "file": "assets/02.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "02", "smoothed": false, "userAdded": false }, { "file": "assets/03.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "03", "smoothed": false, "userAdded": false }, { "file": "assets/04.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "04", "smoothed": false, "userAdded": false }, { "file": "assets/05.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "05", "smoothed": false, "userAdded": false }, { "file": "assets/06.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "06", "smoothed": false, "userAdded": false }, { "file": "assets/07.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "07", "smoothed": false, "userAdded": false }, { "file": "assets/08.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "08", "smoothed": false, "userAdded": false }, { "file": "assets/09.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "09", "smoothed": false, "userAdded": false }, { "file": "assets/010.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "010", "smoothed": false, "userAdded": false }, { "file": "assets/011.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "011", "smoothed": false, "userAdded": false }, { "file": "assets/012.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "012", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite40.png", "kind": "image", "metadata": "{\"extension\":\".png\"}", "name": "NewSprite40", "smoothed": false, "userAdded": false }, { "file": "assets/NewSprite41.png", "kind": "image", "metadata": "{\"extension\":\".png\",\"localFilePath\":\"assets/NewSprite41.png\"}", "name": "NewSprite41", "smoothed": false, "userAdded": false } ] }, "objects": [], "objectsFolderStructure": { "folderName": "__ROOT" }, "objectsGroups": [], "variables": [], "layouts": [ { "b": 255, "disableInputWhenNotFocused": true, "mangledName": "Game", "name": "Game", "r": 247, "standardSortMethod": true, "stopSoundsOnStartup": true, "title": "", "v": 249, "uiSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 1.134371579716097, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" }, "objectsGroups": [ { "name": "Rooms", "objects": [ { "name": "spr_4Way" }, { "name": "spr_LR" }, { "name": "spr_UD" }, { "name": "spr_DeadL" }, { "name": "spr_DeadR" }, { "name": "spr_DeadUp" }, { "name": "spr_DeadDown" } ] }, { "name": "Checker", "objects": [ { "name": "spr_right" }, { "name": "spr_left" }, { "name": "spr_up" }, { "name": "spr_down" } ] }, { "name": "Enemies", "objects": [ { "name": "spr_skelly01" } ] } ], "variables": [ { "name": "var_roomCount", "persistentUuid": "c143876b-6251-4aec-a302-41a096a13d9d", "type": "number", "value": 1 } ], "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_player", "persistentUuid": "168f7870-38ea-449a-b480-8a38e037e176", "width": 0, "x": 288, "y": 256, "zOrder": 30, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_4Way", "persistentUuid": "346c6f81-2757-45a8-a096-c776d3ab76bc", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_right", "persistentUuid": "e34ef6cd-0335-48e6-8d19-d84d325b8591", "width": 0, "x": 640, "y": 0, "zOrder": 31, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_left", "persistentUuid": "a02511d0-68fd-4f90-afe7-4326ed28fd87", "width": 0, "x": -640, "y": 0, "zOrder": 32, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_up", "persistentUuid": "bfc88395-d3c8-47c3-bb4e-c2a8d1950bb8", "width": 0, "x": 0, "y": -480, "zOrder": 33, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_down", "persistentUuid": "03b1aa00-32fd-48b7-aaea-14d1e7e1196b", "width": 0, "x": 0, "y": 480, "zOrder": 34, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "b49413c4-39f9-41f9-9c64-b4ae76cd2ad9", "width": 0, "x": 352, "y": 0, "zOrder": 35, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "baf49daf-10df-4608-b6e4-359b0f395cac", "width": 0, "x": 256, "y": 0, "zOrder": 36, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "95fcb59f-88a5-4137-ade0-1788226b3252", "width": 0, "x": 352, "y": 448, "zOrder": 37, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "2a116ece-9265-456a-b2aa-6399354e0b4b", "width": 0, "x": 256, "y": 448, "zOrder": 38, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "3a816cd3-f87f-47d4-98e0-2943a9dcaaa4", "width": 256, "x": 352, "y": 32, "zOrder": 39, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "390c640e-d2ae-494e-b3ba-eaa7a737d262", "width": 256, "x": 32, "y": 32, "zOrder": 39, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "94ab7ace-3ea6-4466-a8bb-ab408aaf2656", "width": 256, "x": 32, "y": 416, "zOrder": 39, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "1b5b4a92-a874-4ce0-99d5-fb066071eb17", "width": 256, "x": 352, "y": 416, "zOrder": 39, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "915cea7d-00dc-48e6-b658-1a679dabb35a", "width": 32, "x": 608, "y": 64, "zOrder": 40, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "7e61f02d-9158-4a01-a137-a7a4a12678da", "width": 32, "x": 608, "y": 288, "zOrder": 40, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "c333414c-b787-464f-b406-46358a49f085", "width": 32, "x": 0, "y": 288, "zOrder": 40, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "c5ae41a4-8993-4917-ab04-e7db150e2d14", "width": 32, "x": 0, "y": 64, "zOrder": 40, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_playerShooter", "persistentUuid": "86ffa407-b37d-4387-b3ff-89a254b3fef2", "width": 0, "x": 704, "y": 160, "zOrder": 41, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "txt_instructions", "persistentUuid": "714bcdca-20b0-4d8e-96ff-fc857b5bacf0", "width": 0, "x": 64, "y": 320, "zOrder": 42, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "objects": [ { "adaptCollisionMaskAutomatically": false, "assetStoreId": "", "name": "spr_player", "persistentUuid": "15baac05-8645-4485-b856-649122e1892c", "type": "Sprite", "updateIfNotVisible": false, "variables": [ { "name": "var_sprite", "persistentUuid": "815f23c1-63b9-424b-b968-4232f6355a8e", "type": "string", "value": "01" } ], "effects": [], "behaviors": [ { "name": "TopDownMovement", "type": "TopDownMovementBehavior::TopDownMovementBehavior", "acceleration": 9999, "allowDiagonals": true, "angleOffset": 0, "angularMaxSpeed": 180, "customIsometryAngle": 30, "deceleration": 9999, "ignoreDefaultControls": false, "maxSpeed": 200, "movementAngleOffset": 0, "rotateObject": false, "useLegacyTurnBack": false, "viewpoint": "TopDown" } ], "animations": [ { "name": "03Idle", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "03Idle25", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle26", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle27", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle28", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle29", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle30", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle31", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle32", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle33", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle34", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle35", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Idle36", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "03Walk", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "03Walk", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk2", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk3", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk4", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk5", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk6", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk7", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk8", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk9", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Walk10", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "03Attack", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "03Attack", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Attack2", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Attack3", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Attack4", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Attack5", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "03Attack6", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "01Idle", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "01Idle", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle2", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle3", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle4", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle5", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle6", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle7", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle8", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle9", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle10", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle11", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "01Idle12", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "01Walk", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "02Walk", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk2", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk3", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk4", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk5", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "01Attack", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "02Attack", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack2", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack3", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack4", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack5", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack6", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack7", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack8", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack9", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack10", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack11", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack12", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "02Idle", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "02Idle", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle2", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle3", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle4", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle5", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle6", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle7", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle8", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle9", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle10", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle11", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Idle12", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "02Walk", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "02Walk6", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk7", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk8", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk9", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk10", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk11", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk12", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk13", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk14", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Walk15", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] }, { "name": "02Attack", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "02Attack13", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack14", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack15", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack16", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack17", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack18", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack19", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack20", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack21", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] }, { "hasCustomCollisionMask": true, "image": "02Attack22", "points": [ { "name": "Fire", "x": 38, "y": 20.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 40 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 28 }, { "x": 32, "y": 28 }, { "x": 32, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_4Way", "persistentUuid": "0e24c193-6010-4988-84e4-84247e4111a6", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "TestRoom4Way", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "TestRoom4Way", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 640, "y": 0 }, { "x": 640, "y": 480 }, { "x": 0, "y": 480 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_right", "persistentUuid": "1e631ce1-545f-451f-9f16-36ae35076ff7", "type": "Sprite", "updateIfNotVisible": false, "variables": [ { "name": "var_Random", "persistentUuid": "22df5395-a194-44b8-bc37-bb550d070d01", "type": "number", "value": 0 } ], "effects": [], "behaviors": [], "animations": [ { "name": "NewSprite", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite4", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 32, "y": 0 }, { "x": 32, "y": 32 }, { "x": 0, "y": 32 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_LR", "persistentUuid": "216f1ec8-083e-4ddc-8ecc-19dfe2b3e31d", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "TestRoomLR", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "TestRoomLR", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 640, "y": 0 }, { "x": 640, "y": 480 }, { "x": 0, "y": 480 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_UD", "persistentUuid": "63a7090f-a6d8-4eb9-93ee-9e076596ce88", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "TestRoomUD", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "TestRoomUD", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 640, "y": 0 }, { "x": 640, "y": 480 }, { "x": 0, "y": 480 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_DeadL", "persistentUuid": "cc600b8e-3783-4703-abe3-426832db2a92", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "TestRoomDeadL", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "TestRoomDeadL", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 640, "y": 0 }, { "x": 640, "y": 480 }, { "x": 0, "y": 480 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_DeadR", "persistentUuid": "49f00013-44d6-443c-9ffe-0330d4559935", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "TestRoomDeadR", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "TestRoomDeadR", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 640, "y": 0 }, { "x": 640, "y": 480 }, { "x": 0, "y": 480 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_DeadUp", "persistentUuid": "76f7a08f-18f4-4bf4-a4d2-9db38bad7409", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "TestRoomDeadU", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "TestRoomDeadU", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 640, "y": 0 }, { "x": 640, "y": 480 }, { "x": 0, "y": 480 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_DeadDown", "persistentUuid": "24006229-fc36-4f86-8b51-c78029706d67", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "TestRoomDeadD", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "TestRoomDeadD", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 640, "y": 0 }, { "x": 640, "y": 480 }, { "x": 0, "y": 480 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_left", "persistentUuid": "975b00e7-0480-4497-baaf-2030a83377fb", "type": "Sprite", "updateIfNotVisible": false, "variables": [ { "name": "var_Random", "persistentUuid": "ce81a637-0f6f-41db-a57b-8decaed70174", "type": "number", "value": 0 } ], "effects": [], "behaviors": [], "animations": [ { "name": "NewSprite", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite5", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 32, "y": 0 }, { "x": 32, "y": 32 }, { "x": 0, "y": 32 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_up", "persistentUuid": "64de8436-160b-4de7-af7c-2e25f8e83b8b", "type": "Sprite", "updateIfNotVisible": false, "variables": [ { "name": "var_Random", "persistentUuid": "297f1f68-b1b2-42fd-90e3-ed8b0e5f8335", "type": "number", "value": 0 } ], "effects": [], "behaviors": [], "animations": [ { "name": "NewSprite", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite6", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 32, "y": 0 }, { "x": 32, "y": 32 }, { "x": 0, "y": 32 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_down", "persistentUuid": "11b66a89-0299-4709-97bb-fbfd0e05d9ab", "type": "Sprite", "updateIfNotVisible": false, "variables": [ { "name": "var_Random", "persistentUuid": "01025634-8159-420e-b49c-09c609ea3e6a", "type": "number", "value": 0 } ], "effects": [], "behaviors": [], "animations": [ { "name": "NewSprite", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite7", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 32, "y": 0 }, { "x": 32, "y": 32 }, { "x": 0, "y": 32 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_skelly01", "persistentUuid": "a50eed58-da79-4406-ad04-ae846f10346a", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [], "animations": [ { "name": "skel_idle", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite2", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite3", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite8", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite9", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite10", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite11", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite12", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite13", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite14", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite15", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite16", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] } ] } ] }, { "name": "skel_die", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite17", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite18", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite19", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite20", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite21", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite22", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite23", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite24", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite25", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite26", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite27", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite28", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite29", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite30", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] } ] } ] }, { "name": "skel_attack", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite31", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite32", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite33", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite34", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite35", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite36", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite37", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] }, { "hasCustomCollisionMask": true, "image": "NewSprite38", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 4, "y": 4 }, { "x": 36, "y": 4 }, { "x": 36, "y": 34 }, { "x": 4, "y": 34 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_wall", "persistentUuid": "b3e8803e-3284-4865-a2d2-f0cf1d2c2de8", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [ { "effectType": "Adjustment", "name": "Effect", "doubleParameters": { "alpha": 0, "blue": 1, "brightness": 1, "contrast": 1, "gamma": 1, "green": 1, "red": 1, "saturation": 1 }, "stringParameters": {}, "booleanParameters": {} } ], "behaviors": [], "animations": [ { "name": "NewSprite", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite39", "points": [], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 32, "y": 0 }, { "x": 32, "y": 32 }, { "x": 0, "y": 32 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_projectile", "persistentUuid": "c86007dd-74d4-4cf1-8e9a-e8bc7074e993", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], "behaviors": [ { "name": "DestroyOutside", "type": "DestroyOutsideBehavior::DestroyOutside", "extraBorder": 200, "unseenGraceDistance": 10000 } ], "animations": [ { "name": "01", "useMultipleDirections": false, "directions": [ { "looping": true, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "01", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "02", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "03", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "04", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "05", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "06", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "07", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "08", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "09", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "010", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "011", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] }, { "hasCustomCollisionMask": true, "image": "012", "points": [], "originPoint": { "name": "origine", "x": 16, "y": 16 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 2, "y": 10 }, { "x": 30, "y": 10 }, { "x": 30, "y": 22 }, { "x": 2, "y": 22 } ] ] } ] } ] } ] }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "", "name": "spr_playerShooter", "persistentUuid": "d1afb116-2292-4cdd-9f0d-0edad9ce1dd6", "type": "Sprite", "updateIfNotVisible": false, "variables": [ { "name": "var_firepointX", "persistentUuid": "1d726ed1-91fe-44ec-8975-203de99a8696", "type": "number", "value": 0 }, { "name": "var_firepointY", "persistentUuid": "b68aad65-9bb8-4f74-a4a9-2cbe5fd0d5bc", "type": "number", "value": 0 } ], "effects": [ { "effectType": "Adjustment", "name": "Effect", "doubleParameters": { "alpha": 0, "blue": 1, "brightness": 1, "contrast": 1, "gamma": 1, "green": 1, "red": 1, "saturation": 1 }, "stringParameters": {}, "booleanParameters": {} } ], "behaviors": [ { "name": "FireBullet", "type": "FireBullet::FireBullet", "FireCooldown": 0.2, "HasJustFired": false, "RotateBullet": true, "FiringArc": 0, "BulletQuantity": 1, "AngleVariance": 0, "BulletSpeedVariance": 0, "AmmoQuantity": 0, "ShotsPerReload": 0, "ReloadDuration": 1, "MaxAmmo": 0, "ShotsBeforeNextReload": 0, "TotalShotsFired": 0, "TotalBulletsCreated": 0, "StartingAmmo": 0, "TotalReloadsCompleted": 0, "UnlimitedAmmo": true, "ReloadInProgress": false, "HeatIncreasePerShot": 0, "HeatLevel": 0, "AutomaticReloading": true, "OverheatDuration": 0, "LinearCoolingRate": 0.1, "ExponentialCoolingRate": 0.3, "BulletLayer": "", "RandomizedAngle": 0 } ], "animations": [ { "name": "NewSprite", "useMultipleDirections": false, "directions": [ { "looping": false, "metadata": "{\"pskl\":{}}", "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": true, "image": "NewSprite41", "points": [ { "name": "Fire", "x": 40, "y": 19.5 } ], "originPoint": { "name": "origine", "x": 0, "y": 0 }, "centerPoint": { "automatic": true, "name": "centre", "x": 0, "y": 0 }, "customCollisionMask": [ [ { "x": 0, "y": 0 }, { "x": 40, "y": 0 }, { "x": 40, "y": 40 }, { "x": 0, "y": 40 } ] ] } ] } ] } ] }, { "assetStoreId": "", "bold": false, "italic": false, "name": "txt_instructions", "persistentUuid": "94575b5e-4a1b-4814-8ce7-9c223e59dcd0", "smoothed": true, "type": "TextObject::Text", "underlined": false, "variables": [], "effects": [], "behaviors": [], "string": "Arrows to move\nClick to shoot\nSpace to restart", "font": "", "textAlignment": "left", "characterSize": 20, "color": { "b": 255, "g": 255, "r": 255 }, "content": { "bold": false, "isOutlineEnabled": false, "isShadowEnabled": false, "italic": false, "outlineColor": "255;255;255", "outlineThickness": 2, "shadowAngle": 90, "shadowBlurRadius": 2, "shadowColor": "0;0;0", "shadowDistance": 4, "shadowOpacity": 127, "smoothed": true, "underlined": false, "text": "Arrows to move\nClick to shoot\nSpace to restart", "font": "", "textAlignment": "left", "verticalTextAlignment": "top", "characterSize": 20, "lineHeight": 0, "color": "255;255;255" } } ], "objectsFolderStructure": { "folderName": "__ROOT", "children": [ { "objectName": "txt_instructions" }, { "folderName": "Enemies", "children": [ { "objectName": "spr_skelly01" } ] }, { "folderName": "Players", "children": [ { "objectName": "spr_player" } ] }, { "folderName": "Rooms", "children": [ { "folderName": "2Way", "children": [ { "objectName": "spr_LR" }, { "objectName": "spr_UD" } ] }, { "folderName": "Dead End", "children": [ { "objectName": "spr_DeadDown" }, { "objectName": "spr_DeadL" }, { "objectName": "spr_DeadR" } ] }, { "folderName": "DeadUp", "children": [ { "objectName": "spr_DeadUp" } ] }, { "folderName": "4Way", "children": [ { "objectName": "spr_4Way" } ] } ] }, { "folderName": "Checkers", "children": [ { "objectName": "spr_down" }, { "objectName": "spr_up" }, { "objectName": "spr_left" }, { "objectName": "spr_right" }, { "objectName": "spr_wall" } ] }, { "objectName": "spr_projectile" }, { "objectName": "spr_playerShooter" } ] }, "events": [ { "type": "BuiltinCommonInstructions::Link", "include": { "includeConfig": 0 }, "target": "Functions" } ], "layers": [ { "ambientLightColorB": 200, "ambientLightColorG": 200, "ambientLightColorR": 200, "camera2DPlaneMaxDrawingDistance": 5000, "camera3DFarPlaneDistance": 10000, "camera3DFieldOfView": 45, "camera3DNearPlaneDistance": 3, "cameraType": "", "followBaseLayerCamera": false, "isLightingLayer": false, "isLocked": false, "name": "", "renderingType": "", "visibility": true, "cameras": [ { "defaultSize": true, "defaultViewport": true, "height": 0, "viewportBottom": 1, "viewportLeft": 0, "viewportRight": 1, "viewportTop": 0, "width": 0 } ], "effects": [ { "effectType": "Scene3D::HemisphereLight", "name": "3D Ambient Hemisphere Light", "doubleParameters": { "elevation": 40, "intensity": 0.33, "rotation": 300 }, "stringParameters": { "groundColor": "127;127;127", "skyColor": "255;255;255", "top": "Z+" }, "booleanParameters": {} }, { "effectType": "Scene3D::DirectionalLight", "name": "3D Sun Light", "doubleParameters": { "distanceFromCamera": 1500, "elevation": 40, "frustumSize": 4000, "intensity": 0.75, "minimumShadowBias": 0, "rotation": 300 }, "stringParameters": { "color": "255;255;255", "shadowQuality": "medium", "top": "Z+" }, "booleanParameters": { "isCastingShadow": true } } ] }, { "ambientLightColorB": 200, "ambientLightColorG": 200, "ambientLightColorR": 200, "camera2DPlaneMaxDrawingDistance": 5000, "camera3DFarPlaneDistance": 10000, "camera3DFieldOfView": 45, "camera3DNearPlaneDistance": 3, "cameraType": "", "followBaseLayerCamera": false, "isLightingLayer": false, "isLocked": false, "name": "UI", "renderingType": "", "visibility": true, "cameras": [], "effects": [ { "effectType": "Scene3D::HemisphereLight", "name": "3D Ambient Hemisphere Light", "doubleParameters": { "elevation": 40, "intensity": 0.33, "rotation": 300 }, "stringParameters": { "groundColor": "127;127;127", "skyColor": "255;255;255", "top": "Z+" }, "booleanParameters": {} }, { "effectType": "Scene3D::DirectionalLight", "name": "3D Sun Light", "doubleParameters": { "distanceFromCamera": 1500, "elevation": 40, "frustumSize": 4000, "intensity": 0.75, "minimumShadowBias": 0, "rotation": 300 }, "stringParameters": { "color": "255;255;255", "shadowQuality": "medium", "top": "Z+" }, "booleanParameters": { "isCastingShadow": true } } ] } ], "behaviorsSharedData": [ { "name": "Animation", "type": "AnimatableCapability::AnimatableBehavior" }, { "name": "Effect", "type": "EffectCapability::EffectBehavior" }, { "name": "FireBullet", "type": "FireBullet::FireBullet" }, { "name": "Flippable", "type": "FlippableCapability::FlippableBehavior" }, { "name": "Opacity", "type": "OpacityCapability::OpacityBehavior" }, { "name": "Resizable", "type": "ResizableCapability::ResizableBehavior" }, { "name": "Scale", "type": "ScalableCapability::ScalableBehavior" }, { "name": "Text", "type": "TextContainerCapability::TextContainerBehavior" }, { "name": "TopDownMovement", "type": "TopDownMovementBehavior::TopDownMovementBehavior" } ] } ], "externalEvents": [ { "associatedLayout": "Game", "name": "Functions", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Scene Start", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "SceneJustBegins" }, "parameters": [ "" ] } ], "actions": [ { "type": { "value": "ZoomCamera" }, "parameters": [ "", "0", "", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "folded": true, "name": "Generate Rooms", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Right" }, { "folded": true, "type": "BuiltinCommonInstructions::ForEach", "object": "spr_right", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickRandomInstance" }, "parameters": [ "", "spr_right" ] } ], "actions": [ { "type": { "value": "SetNumberObjectVariable" }, "parameters": [ "spr_right", "var_Random", "=", "RandomInRange(1,6)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", "<=", "8" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_right", "var_Random", ">=", "1" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_right", "var_Random", "<=", "3" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"LR\"", "spr_right.X()", "spr_right.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_right", "var_Random", ">=", "4" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_right", "var_Random", "<=", "5" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadR\"", "spr_right.X()", "spr_right.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_right", "var_Random", "=", "6" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"4Way\"", "spr_right.X()", "spr_right.Y()", "" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", ">", "8" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadR\"", "spr_right.X()", "spr_right.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickNearest" }, "parameters": [ "spr_left", "spr_right.X()", "spr_right.Y()", "" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_left", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_right", "" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "var_roomCount", "+", "1" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Left" }, { "folded": true, "type": "BuiltinCommonInstructions::ForEach", "object": "spr_left", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickRandomInstance" }, "parameters": [ "", "spr_left" ] } ], "actions": [ { "type": { "value": "SetNumberObjectVariable" }, "parameters": [ "spr_left", "var_Random", "=", "RandomInRange(1,6)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", "<=", "8" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_left", "var_Random", ">=", "1" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_left", "var_Random", "<=", "3" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"LR\"", "spr_left.X()", "spr_left.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_left", "var_Random", ">=", "4" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_left", "var_Random", "<=", "5" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadL\"", "spr_left.X()", "spr_left.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_left", "var_Random", "=", "6" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"4Way\"", "spr_left.X()", "spr_left.Y()", "" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", ">", "8" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadL\"", "spr_left.X()", "spr_left.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickNearest" }, "parameters": [ "spr_right", "spr_left.X()", "spr_left.Y()", "" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_right", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_left", "" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "var_roomCount", "+", "1" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Up" }, { "folded": true, "type": "BuiltinCommonInstructions::ForEach", "object": "spr_up", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickRandomInstance" }, "parameters": [ "", "spr_up" ] } ], "actions": [ { "type": { "value": "SetNumberObjectVariable" }, "parameters": [ "spr_up", "var_Random", "=", "RandomInRange(1,6)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", "<=", "8" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_up", "var_Random", ">=", "1" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_up", "var_Random", "<=", "3" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"UD\"", "spr_up.X()", "spr_up.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_up", "var_Random", ">=", "4" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_up", "var_Random", "<=", "5" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadUp\"", "spr_up.X()", "spr_up.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_up", "var_Random", "=", "6" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"4Way\"", "spr_up.X()", "spr_up.Y()", "" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", ">", "8" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadUp\"", "spr_up.X()", "spr_up.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickNearest" }, "parameters": [ "spr_down", "spr_up.X()", "spr_up.Y()", "" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_down", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_up", "" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "var_roomCount", "+", "1" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Down" }, { "folded": true, "type": "BuiltinCommonInstructions::ForEach", "object": "spr_down", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickRandomInstance" }, "parameters": [ "", "spr_down" ] } ], "actions": [ { "type": { "value": "SetNumberObjectVariable" }, "parameters": [ "spr_down", "var_Random", "=", "RandomInRange(1,6)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", "<=", "8" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_down", "var_Random", ">=", "1" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_down", "var_Random", "<=", "3" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"UD\"", "spr_down.X()", "spr_down.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_down", "var_Random", ">=", "4" ] }, { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_down", "var_Random", "<=", "5" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadDown\"", "spr_down.X()", "spr_down.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberObjectVariable" }, "parameters": [ "spr_down", "var_Random", "=", "6" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"4Way\"", "spr_down.X()", "spr_down.Y()", "" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "var_roomCount", ">", "8" ] } ], "actions": [ { "type": { "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", "\"DeadDown\"", "spr_down.X()", "spr_down.Y()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickNearest" }, "parameters": [ "spr_up", "spr_down.X()", "spr_down.Y()", "" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_up", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_down", "" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "var_roomCount", "+", "1" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "Rooms", "Rooms", "", "", "yes" ] } ], "actions": [ { "type": { "value": "Scene" }, "parameters": [ "", "\"Game\"", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Movement/Sprite Control", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "TopDownMovementBehavior::TopDownMovementBehavior::IsUsingControl" }, "parameters": [ "spr_player", "TopDownMovement", "\"Right\"" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "TopDownMovementBehavior::TopDownMovementBehavior::IsMovementAngleAround" }, "parameters": [ "spr_player", "TopDownMovement", "0", "45" ] }, { "type": { "value": "BuiltinCommonInstructions::Once" }, "parameters": [] } ], "actions": [ { "type": { "value": "FlippableCapability::FlippableBehavior::FlipX" }, "parameters": [ "spr_player", "Flippable", "no" ] }, { "type": { "value": "AnimatableCapability::AnimatableBehavior::SetName" }, "parameters": [ "spr_player", "Animation", "=", "spr_player.var_sprite+\"Walk\"" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "TopDownMovementBehavior::TopDownMovementBehavior::IsMovementAngleAround" }, "parameters": [ "spr_player", "TopDownMovement", "180", "45" ] }, { "type": { "value": "BuiltinCommonInstructions::Once" }, "parameters": [] } ], "actions": [ { "type": { "value": "FlippableCapability::FlippableBehavior::FlipX" }, "parameters": [ "spr_player", "Flippable", "yes" ] }, { "type": { "value": "AnimatableCapability::AnimatableBehavior::SetName" }, "parameters": [ "spr_player", "Animation", "=", "spr_player.var_sprite+\"Walk\"" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "TopDownMovementBehavior::TopDownMovementBehavior::IsMovementAngleAround" }, "parameters": [ "spr_player", "TopDownMovement", "90", "45" ] }, { "type": { "value": "BuiltinCommonInstructions::Once" }, "parameters": [] } ], "actions": [ { "type": { "value": "AnimatableCapability::AnimatableBehavior::SetName" }, "parameters": [ "spr_player", "Animation", "=", "spr_player.var_sprite+\"Walk\"" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "TopDownMovementBehavior::TopDownMovementBehavior::IsMovementAngleAround" }, "parameters": [ "spr_player", "TopDownMovement", "270", "45" ] }, { "type": { "value": "BuiltinCommonInstructions::Once" }, "parameters": [] } ], "actions": [ { "type": { "value": "AnimatableCapability::AnimatableBehavior::SetName" }, "parameters": [ "spr_player", "Animation", "=", "spr_player.var_sprite+\"Walk\"" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "TopDownMovementBehavior::IsMoving" }, "parameters": [ "spr_player", "TopDownMovement" ] }, { "type": { "value": "BuiltinCommonInstructions::Once" }, "parameters": [] } ], "actions": [ { "type": { "value": "AnimatableCapability::AnimatableBehavior::SetName" }, "parameters": [ "spr_player", "Animation", "=", "spr_player.var_sprite+\"Idle\"" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Camera Control", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "spr_player", "Rooms", "", "", "" ] } ], "actions": [ { "type": { "value": "RoomBasedCameraMovement::MoveCameraToActiveRoom" }, "parameters": [ "", "Rooms", "spr_player", "", "", "0", "", "", "0", "" ] } ] } ], "parameters": [] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "KeyFromTextReleased" }, "parameters": [ "", "\"Space\"" ] } ], "actions": [ { "type": { "value": "Scene" }, "parameters": [ "", "\"Game\"", "" ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Collision", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "spr_player", "spr_wall", "", "", "" ] } ], "actions": [ { "type": { "value": "SeparateFromObjects" }, "parameters": [ "spr_player", "spr_wall", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "Enemies", "spr_wall", "", "", "" ] } ], "actions": [ { "type": { "value": "SeparateFromObjects" }, "parameters": [ "Enemies", "spr_wall", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "spr_projectile", "spr_wall", "", "", "" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_projectile", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "spr_projectile", "Enemies", "", "", "" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "spr_projectile", "" ] }, { "type": { "value": "AnimatableCapability::AnimatableBehavior::SetName" }, "parameters": [ "spr_skelly01", "Animation", "=", "\"skel_die\"" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "AnimatableCapability::AnimatableBehavior::Name" }, "parameters": [ "spr_skelly01", "Animation", "=", "\"skel_die\"" ] }, { "type": { "value": "AnimatableCapability::AnimatableBehavior::HasAnimationEnded" }, "parameters": [ "spr_skelly01", "Animation" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "Enemies", "" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Firing", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetCenter" }, "parameters": [ "spr_playerShooter", "=", "spr_player.CenterX()", "=", "spr_player.CenterY()" ] }, { "type": { "value": "TextContainerCapability::TextContainerBehavior::SetValue" }, "parameters": [ "txt_pointX", "Text", "=", "spr_playerShooter.var_firepointX" ] }, { "type": { "value": "TextContainerCapability::TextContainerBehavior::SetValue" }, "parameters": [ "txt_PointY", "Text", "=", "spr_playerShooter.var_firepointY" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "MouseButtonFromTextPressed" }, "parameters": [ "", "\"Left\"" ] } ], "actions": [ { "type": { "value": "RotateTowardPosition" }, "parameters": [ "spr_playerShooter", "CursorX()", "CursorY()", "0", "" ] }, { "type": { "value": "FireBullet::FireBullet::FireTowardPosition" }, "parameters": [ "spr_playerShooter", "FireBullet", "spr_playerShooter.PointX(\"Fire\")", "spr_playerShooter.PointY(\"Fire\")", "spr_projectile", "CursorX(\"\", 0)", "CursorY(\"\", 0)", "500", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Enemy Control", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "Distance" }, "parameters": [ "spr_skelly01", "spr_player", "500", "" ] }, { "type": { "value": "AnimatableCapability::AnimatableBehavior::Name" }, "parameters": [ "spr_skelly01", "Animation", "=", "\"skel_idle\"" ] } ], "actions": [ { "type": { "value": "AddForceTowardObject" }, "parameters": [ "spr_skelly01", "spr_player", "100", "0" ] } ] } ], "parameters": [] } ] } ], "eventsFunctionsExtensions": [ { "author": "", "category": "Camera", "dimension": "2D", "extensionNamespace": "", "fullName": "Smooth Camera", "gdevelopVersion": ">=5.5.222", "helpPath": "/tutorials/follow-player-with-camera/", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCjwvc3R5bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQsMTNoLTZjLTEuMSwwLTItMC45LTItMlY1YzAtMS4xLDAuOS0yLDItMmg2YzEuMSwwLDIsMC45LDIsMnY2QzI2LDEyLjEsMjUuMSwxMywyNCwxM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNiw4djEwYzAsMS4xLTAuOSwyLTIsMkg4Yy0xLjEsMC0yLTAuOS0yLTJWOGMwLTEuMSwwLjktMiwyLTJoOCIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjEiIGN5PSI4IiByPSIyIi8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSIxMSIgY3k9IjE2IiByPSIxIi8+DQo8cmVjdCB4PSI5IiB5PSI5IiBjbGFzcz0ic3QwIiB3aWR0aD0iNCIgaGVpZ2h0PSIzIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIyMSwyOSAyMSwyOSAxMSwyOSAxMSwyOSAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjE4LDIwIDE4LDI5IDE0LDI5IDE0LDIwICIvPg0KPHJlY3QgeD0iNyIgeT0iMyIgY2xhc3M9InN0MCIgd2lkdGg9IjQiIGhlaWdodD0iMyIvPg0KPC9zdmc+DQo=", "name": "SmoothCamera", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Computers and Hardware/Computers and Hardware_camcoder_gopro_go_pro_camera.svg", "shortDescription": "Smoothly scroll to follow an object.", "version": "0.4.5", "description": [ "The camera follows an object according to:", "- a frame rate independent catch-up speed to make the scrolling from smooth to strong", "- a maximum speed to do linear following ([open the project online](https://editor.gdevelop.io/?project=example://platformer-with-tilemap)) or slow down the camera when teleporting the object", "- a follow-free zone to avoid scrolling on small movements", "- an offset to see further in one direction", "- an extra delay and catch-up speed to give an impression of speed (useful for dash)", "- position forecasting and delay to simulate a cameraman response time", "", "A platformer dedicated behavior allows to switch of settings when the character is in air or on the floor. This can be used to stabilize the camera when jumping." ], "origin": { "identifier": "SmoothCamera", "name": "gdevelop-extension-store" }, "tags": [ "camera", "scrolling", "follow", "smooth", "platformer", "platform" ], "authorIds": [ "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" ], "dependencies": [], "globalVariables": [], "sceneVariables": [], "eventsFunctions": [], "eventsFunctionsFolderStructure": { "folderName": "__ROOT" }, "eventsBasedBehaviors": [ { "description": "Smoothly scroll to follow an object.", "fullName": "Smooth Camera", "helpPath": "", "iconUrl": "", "name": "SmoothCamera", "objectType": "", "previewIconUrl": "", "quickCustomizationVisibility": "hidden", "eventsFunctions": [ { "fullName": "", "functionType": "Action", "name": "onCreated", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Update private properties through setters to check their values and initialize state." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::SetLeftwardSpeed" }, "parameters": [ "Object", "Behavior", "LeftwardSpeed", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetRightwardSpeed" }, "parameters": [ "Object", "Behavior", "RightwardSpeed", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" }, "parameters": [ "Object", "Behavior", "UpwardSpeed", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" }, "parameters": [ "Object", "Behavior", "DownwardSpeed", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetLeftwardSpeedMax" }, "parameters": [ "Object", "Behavior", "LeftwardSpeedMax", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetRightwardSpeedMax" }, "parameters": [ "Object", "Behavior", "RightwardSpeedMax", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" }, "parameters": [ "Object", "Behavior", "UpwardSpeedMax", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" }, "parameters": [ "Object", "Behavior", "DownwardSpeedMax", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaLeft" }, "parameters": [ "Object", "Behavior", "FollowFreeAreaLeft", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaRight" }, "parameters": [ "Object", "Behavior", "FollowFreeAreaRight", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" }, "parameters": [ "Object", "Behavior", "FollowFreeAreaTop", "log(1 - )" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" }, "parameters": [ "Object", "Behavior", "FollowFreeAreaBottom", "log(1 - )" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraDelay", "=", "CameraDelay" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "Action", "name": "doStepPreEvents", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "BooleanVariable" }, "parameters": [ "IsCalledManually", "True", "" ] } ], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser" }, "parameters": [ "Object", "Behavior", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Move the camera closer to the object. This action must be called after the object has moved for the frame.", "fullName": "Move the camera closer", "functionType": "Action", "name": "MoveCameraCloser", "sentence": "Move the camera closer to _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "The camera following is called with an action, the call from doStepPreEvents must be disabled to avoid to do it twice." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "IsCalledManually", "True", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser" }, "parameters": [ "Object", "Behavior", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Move the camera closer to the object.", "fullName": "Do move the camera closer", "functionType": "Action", "name": "DoMoveCameraCloser", "private": true, "sentence": "Do move the camera closer _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Delaying and forecasting can be used at the same time.\nForecasting only use the positions that are older than the one used for delaying.\nThe behavior uses a position history that is split in 2 arrays:\n- one for delaying the position (from TimeFromStart to TimeFromStart - CamearDelay)\n- one for forecasting the position (from TimeFromStart - CamearDelay to TimeFromStart - CamearDelay - ForecastHistoryDuration" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::UpdateDelayedPosition" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::UpdateForecastedPosition" }, "parameters": [ "Object", "Behavior", "" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "At each frame, the camera must catchup the target by a given ratio (speed)\ncameraX(t) - targetX = (cameraX(t - 1) - targetX) * speed\n\nThe frame rate must not impact on the catch-up speed, we don't want a speed in ratio per frame but a speed ratio per second, like this:\ncameraX(t) - targetX = (cameraX(t - 1s) - targetX) * speed\n\nOk, but we still need to process each frame, we can use a exponent for this:\ncameraX(t) - targetX = (cameraX(t - timeDelta) - targetX) * speed^timeDelta\ncameraX(t) = targetX + (cameraX(t - timeDelta) - targetX) * exp(timeDelta * ln(speed))\n\npow is probably more efficient than precalculated log if the speed is changed continuously but this might be rare enough." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "FollowOnX", "True", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "OldX", "=", "CameraX(Object.Layer(), 0)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterX" }, "parameters": [ "", ">", "Object.Behavior::FreeAreaRight()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterX" }, "parameters": [ "", "=", "Object.Behavior::FreeAreaRight()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaRight())\n* exp(TimeDelta() * LogLeftwardSpeed)", "Object.Layer()", "0" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterX" }, "parameters": [ "", "<", "OldX - LeftwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterX" }, "parameters": [ "", "=", "OldX - LeftwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterX" }, "parameters": [ "", "<", "Object.Behavior::FreeAreaLeft()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterX" }, "parameters": [ "", "=", "Object.Behavior::FreeAreaLeft()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaLeft())\n* exp(TimeDelta() * LogRightwardSpeed)", "Object.Layer()", "0" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterX" }, "parameters": [ "", ">", "OldX + RightwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterX" }, "parameters": [ "", "=", "OldX + RightwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "FollowOnY", "True", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "OldY", "=", "CameraY(Object.Layer(), 0)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterY" }, "parameters": [ "", ">", "Object.Behavior::FreeAreaBottom()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterY" }, "parameters": [ "", "=", "Object.Behavior::FreeAreaBottom()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaBottom())\n* exp(TimeDelta() * LogUpwardSpeed)", "Object.Layer()", "0" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterY" }, "parameters": [ "", "<", "OldY - UpwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterY" }, "parameters": [ "", "=", "OldY - UpwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterY" }, "parameters": [ "", "<", "Object.Behavior::FreeAreaTop()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterY" }, "parameters": [ "", "=", "Object.Behavior::FreeAreaTop()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaTop())\n* exp(TimeDelta() * LogDownwardSpeed)", "Object.Layer()", "0" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CameraCenterY" }, "parameters": [ "", ">", "OldY + DownwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ], "actions": [ { "type": { "value": "SetCameraCenterY" }, "parameters": [ "", "=", "OldY + DownwardSpeedMax * TimeDelta()", "Object.Layer()", "0" ] } ] } ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Delay the camera according to a maximum speed and catch up the delay.", "fullName": "Wait and catch up", "functionType": "Action", "name": "WaitAndCatchUp", "sentence": "Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Maybe the catch-up show be done in constant pixel speed instead of constant time speed." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "WaitingEnd", "=", "TimeFromStart() + NewWaitingDuration" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "WaitingSpeedXMax", "=", "NewWaitingSpeedXMax" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "WaitingSpeedYMax", "=", "NewWaitingSpeedYMax" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraDelayCatchUpDuration", "=", "NewCatchUpDuration" ] } ] }, { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Wait and catch up\"", "\"info\"", "\"SmoothCamera\"" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Waiting duration (in seconds)", "name": "NewWaitingDuration", "type": "expression" }, { "description": "Waiting maximum camera target speed X", "name": "NewWaitingSpeedXMax", "type": "expression" }, { "description": "Waiting maximum camera target speed Y", "name": "NewWaitingSpeedYMax", "type": "expression" }, { "description": "Catch up duration (in seconds)", "name": "NewCatchUpDuration", "type": "expression" } ], "objectGroups": [] }, { "description": "Draw the targeted and actual camera position.", "fullName": "Draw debug", "functionType": "Action", "name": "DrawDebug", "sentence": "Draw targeted and actual camera position for _PARAM0_ on _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "PrimitiveDrawing::FillOpacity" }, "parameters": [ "ShapePainter", "=", "0" ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Path used by the forecasting", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "=", "0" ] }, { "type": { "value": "PrimitiveDrawing::OutlineColor" }, "parameters": [ "ShapePainter", "\"245;166;35\"" ] }, { "type": { "value": "PrimitiveDrawing::BeginFillPath" }, "parameters": [ "ShapePainter", "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", "Object.Variable(__SmoothCamera.ForecastHistoryY[0])" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", "conditions": [], "actions": [ { "type": { "value": "PrimitiveDrawing::PathLineTo" }, "parameters": [ "ShapePainter", "Object.Variable(__SmoothCamera.ForecastHistoryX[Index])", "Object.Variable(__SmoothCamera.ForecastHistoryY[Index])" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "+", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "PrimitiveDrawing::EndFillPath" }, "parameters": [ "ShapePainter" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Follow-free area.", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "FollowFreeAreaLeft", "!=", "0" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "FollowFreeAreaRight", "!=", "0" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "FollowFreeAreaTop", "!=", "0" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "FollowFreeAreaBottom", "!=", "0" ] } ] } ], "actions": [ { "type": { "value": "PrimitiveDrawing::OutlineColor" }, "parameters": [ "ShapePainter", "\"126;211;33\"" ] }, { "type": { "value": "PrimitiveDrawing::Rectangle" }, "parameters": [ "ShapePainter", "Object.Behavior::FreeAreaLeft() - 1", "Object.Behavior::FreeAreaTop() - 1", "Object.Behavior::FreeAreaRight() + 1", "Object.Behavior::FreeAreaBottom() + 1" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Linear regression vector used by the forecasting.", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "PrimitiveDrawing::OutlineColor" }, "parameters": [ "ShapePainter", "\"208;2;27\"" ] }, { "type": { "value": "PrimitiveDrawing::LineV2" }, "parameters": [ "ShapePainter", "ProjectedOldestX", "ProjectedOldestY", "ProjectedNewestX", "ProjectedNewestY", "1" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Targeted and actual camera position", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "PrimitiveDrawing::Circle" }, "parameters": [ "ShapePainter", "ForecastedX", "ForecastedY", "3" ] }, { "type": { "value": "PrimitiveDrawing::LineV2" }, "parameters": [ "ShapePainter", "CameraX(Object.Layer(), 0)", "CameraY(Object.Layer(), 0) - 4", "CameraX(Object.Layer(), 0)", "CameraY(Object.Layer(), 0) + 4", "1" ] }, { "type": { "value": "PrimitiveDrawing::LineV2" }, "parameters": [ "ShapePainter", "CameraX(Object.Layer(), 0) - 4", "CameraY(Object.Layer(), 0)", "CameraX(Object.Layer(), 0) + 4", "CameraY(Object.Layer(), 0)", "1" ] } ] } ], "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Shape painter", "name": "ShapePainter", "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "objectList" } ], "objectGroups": [] }, { "description": "Enable or disable the following on X axis.", "fullName": "Follow on X", "functionType": "Action", "group": "Camera configuration", "name": "SetFollowOnX", "sentence": "The camera follows _PARAM0_ on X axis: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "FollowOnX", "False", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "Value", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "FollowOnX", "True", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Follow on X axis", "name": "Value", "type": "yesorno" } ], "objectGroups": [] }, { "description": "Enable or disable the following on Y axis.", "fullName": "Follow on Y", "functionType": "Action", "group": "Camera configuration", "name": "SetFollowOnY", "sentence": "The camera follows _PARAM0_ on Y axis: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "FollowOnY", "False", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "Value", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "FollowOnY", "True", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Follow on Y axis", "name": "Value", "type": "yesorno" } ], "objectGroups": [] }, { "description": "Change the camera follow free area right border.", "fullName": "Follow free area right border", "functionType": "Action", "group": "Camera configuration", "name": "SetFollowFreeAreaRight", "sentence": "Change the camera follow free area right border of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "FollowFreeAreaRight", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Follow free area right border", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera follow free area left border.", "fullName": "Follow free area left border", "functionType": "Action", "group": "Camera configuration", "name": "SetFollowFreeAreaLeft", "sentence": "Change the camera follow free area left border of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "FollowFreeAreaLeft", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Follow free area left border", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera follow free area top border.", "fullName": "Follow free area top border", "functionType": "Action", "group": "Camera configuration", "name": "SetFollowFreeAreaTop", "sentence": "Change the camera follow free area top border of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "FollowFreeAreaTop", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Follow free area top border", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera follow free area bottom border.", "fullName": "Follow free area bottom border", "functionType": "Action", "group": "Camera configuration", "name": "SetFollowFreeAreaBottom", "sentence": "Change the camera follow free area bottom border of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "FollowFreeAreaBottom", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Follow free area bottom border", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera leftward maximum speed (in pixels per second).", "fullName": "Leftward maximum speed", "functionType": "Action", "group": "Camera configuration", "name": "SetLeftwardSpeedMax", "sentence": "Change the camera leftward maximum speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "LeftwardSpeedMax", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Leftward maximum speed (in pixels per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera rightward maximum speed (in pixels per second).", "fullName": "Rightward maximum speed", "functionType": "Action", "group": "Camera configuration", "name": "SetRightwardSpeedMax", "sentence": "Change the camera rightward maximum speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "RightwardSpeedMax", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Rightward maximum speed (in pixels per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera upward maximum speed (in pixels per second).", "fullName": "Upward maximum speed", "functionType": "Action", "group": "Camera configuration", "name": "SetUpwardSpeedMax", "sentence": "Change the camera upward maximum speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "UpwardSpeedMax", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Upward maximum speed (in pixels per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera downward maximum speed (in pixels per second).", "fullName": "Downward maximum speed", "functionType": "Action", "group": "Camera configuration", "name": "SetDownwardSpeedMax", "sentence": "Change the camera downward maximum speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "DownwardSpeedMax", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Downward maximum speed (in pixels per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera leftward catch-up speed (in ratio per second).", "fullName": "Leftward catch-up speed", "functionType": "Action", "group": "Camera configuration", "name": "SetLeftwardSpeed", "sentence": "Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "LeftwardSpeed", "=", "clamp(0, 1, Value)" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "LogLeftwardSpeed", "=", "log(1 - Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Leftward catch-up speed (in ratio per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera rightward catch-up speed (in ratio per second).", "fullName": "Rightward catch-up speed", "functionType": "Action", "group": "Camera configuration", "name": "SetRightwardSpeed", "sentence": "Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "RightwardSpeed", "=", "clamp(0, 1, Value)" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "LogRightwardSpeed", "=", "log(1 - Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Rightward catch-up speed (in ratio per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera downward catch-up speed (in ratio per second).", "fullName": "Downward catch-up speed", "functionType": "Action", "group": "Camera configuration", "name": "SetDownwardSpeed", "sentence": "Change the camera downward catch-up speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "DownwardSpeed", "=", "clamp(0, 1, Value)" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "LogDownwardSpeed", "=", "log(1 - Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Downward catch-up speed (in ratio per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera upward catch-up speed (in ratio per second).", "fullName": "Upward catch-up speed", "functionType": "Action", "group": "Camera configuration", "name": "SetUpwardSpeed", "sentence": "Change the camera upward catch-up speed of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "UpwardSpeed", "=", "clamp(0, 1, Value)" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "LogUpwardSpeed", "=", "log(1 - Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Upward catch-up speed (in ratio per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the camera offset on X axis of the object. This is not the current difference between the object and the camera position.", "fullName": "Camera offset X", "functionType": "ExpressionAndCondition", "group": "Camera configuration", "name": "OffsetX", "sentence": "the camera offset on X axis", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "CameraOffsetX" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "OffsetX", "group": "Camera configuration", "name": "SetOffsetXOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraOffsetX", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Change the camera offset on X axis of an object.", "fullName": "Camera Offset X", "functionType": "Action", "group": "Camera configuration", "name": "SetOffsetX", "private": true, "sentence": "Change the camera offset on X axis of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Deprecated use SetOffsetXOp instead." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::SetOffsetXOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Camera offset X", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.", "fullName": "Camera offset Y", "functionType": "ExpressionAndCondition", "group": "Camera configuration", "name": "OffsetY", "sentence": "the camera offset on Y axis", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "CameraOffsetY" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "OffsetY", "group": "Camera configuration", "name": "SetOffsetYOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraOffsetY", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Change the camera offset on Y axis of an object.", "fullName": "Camera Offset Y", "functionType": "Action", "group": "Camera configuration", "name": "SetOffsetY", "private": true, "sentence": "Change the camera offset on Y axis of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Deprecated use SetOffsetYOp instead." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::SetOffsetYOp" }, "parameters": [ "Object", "Behavior", "=", "CameraOffsetY", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Camera offset Y", "name": "CameraOffsetY", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera forecast time (in seconds).", "fullName": "Forecast time", "functionType": "Action", "group": "Camera configuration", "name": "SetForecastTime", "sentence": "Change the camera forecast time of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastTime", "=", "min(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Forecast time", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the camera delay (in seconds).", "fullName": "Camera delay", "functionType": "Action", "group": "Camera configuration", "name": "SetCameraDelay", "sentence": "Change the camera delay of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraDelay", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Camera delay", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Return follow free area left border X.", "fullName": "Free area left", "functionType": "Expression", "group": "Private", "name": "FreeAreaLeft", "private": true, "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ForecastedX + CameraOffsetX - FollowFreeAreaLeft" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Return follow free area right border X.", "fullName": "Free area right", "functionType": "Expression", "group": "Private", "name": "FreeAreaRight", "private": true, "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ForecastedX + CameraOffsetX + FollowFreeAreaRight" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Return follow free area bottom border Y.", "fullName": "Free area bottom", "functionType": "Expression", "group": "Private", "name": "FreeAreaBottom", "private": true, "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ForecastedY + CameraOffsetY + FollowFreeAreaBottom" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Return follow free area top border Y.", "fullName": "Free area top", "functionType": "Expression", "group": "Private", "name": "FreeAreaTop", "private": true, "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ForecastedY + CameraOffsetY - FollowFreeAreaTop" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Update delayed position and delayed history. This is called in doStepPreEvents.", "fullName": "Update delayed position", "functionType": "Action", "group": "Private", "name": "UpdateDelayedPosition", "private": true, "sentence": "Update delayed position and delayed history of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Add the previous position to have enough (2) positions to evaluate the extra delay for waiting mode." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "SmoothCamera::SmoothCamera::IsWaiting" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.VariableChildCount(__SmoothCamera.ObjectTime)", "=", "0" ] } ], "actions": [ { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ObjectTime", "TimeFromStart()" ] }, { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ObjectX", "DelayedCenterX" ] }, { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ObjectY", "DelayedCenterY" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Use the object center when no delay is asked." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "DelayedCenterX", "=", "Object.CenterX()" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "DelayedCenterY", "=", "Object.CenterY()" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "SmoothCamera::SmoothCamera::IsDelayed" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition" }, "parameters": [ "Object", "Behavior", "TimeFromStart()", "Object.CenterX()", "Object.CenterY()", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "SmoothCamera::SmoothCamera::IsDelayed" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::IsWaiting" }, "parameters": [ "Object", "Behavior", "" ] } ] } ], "actions": [ { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ObjectTime", "TimeFromStart()" ] }, { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ObjectX", "Object.CenterX()" ] }, { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ObjectY", "Object.CenterY()" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Remove history entries that are too old to be useful for delaying and pass it to the history for forecasting." }, { "infiniteLoopWarning": true, "type": "BuiltinCommonInstructions::While", "whileConditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.VariableChildCount(__SmoothCamera.ObjectTime)", ">=", "2" ] }, { "type": { "value": "VarObjet" }, "parameters": [ "Object", "__SmoothCamera.ObjectTime[1]", "<", "TimeFromStart() - Object.Behavior::CurrentDelay()" ] } ], "conditions": [], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition" }, "parameters": [ "Object", "Behavior", "Object.Variable(__SmoothCamera.ObjectTime[0])", "Object.Variable(__SmoothCamera.ObjectX[0])", "Object.Variable(__SmoothCamera.ObjectY[0])", "" ] }, { "type": { "value": "ObjectVariableRemoveAt" }, "parameters": [ "Object", "__SmoothCamera.ObjectTime", "0" ] }, { "type": { "value": "ObjectVariableRemoveAt" }, "parameters": [ "Object", "__SmoothCamera.ObjectX", "0" ] }, { "type": { "value": "ObjectVariableRemoveAt" }, "parameters": [ "Object", "__SmoothCamera.ObjectY", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Don't move the camera if there is not enough history." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "DelayedCenterX", "=", "Object.Variable(__SmoothCamera.ObjectX[0])" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "DelayedCenterY", "=", "Object.Variable(__SmoothCamera.ObjectY[0])" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.VariableChildCount(__SmoothCamera.ObjectTime)", ">=", "2" ] }, { "type": { "value": "VarObjet" }, "parameters": [ "Object", "__SmoothCamera.ObjectTime[0]", "<", "TimeFromStart() - Object.Behavior::CurrentDelay()" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Add the extra delay that could be needed to respect the speed limit in waiting mode.\n\nspeedRatio = min(speedMaxX / historySpeedX, speedMaxY / historySpeedY)\ndelay += min(0, timeDelta * (1 - speedRatio))" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "SmoothCamera::SmoothCamera::IsWaiting" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraExtraDelay", "+", "max(0, TimeDelta() * (1 - min(WaitingSpeedXMax * abs(Object.Variable(__SmoothCamera.ObjectX[1]) - Object.Variable(__SmoothCamera.ObjectX[0])), WaitingSpeedYMax * abs(Object.Variable(__SmoothCamera.ObjectY[1]) - Object.Variable(__SmoothCamera.ObjectY[0]))) / (Object.Variable(__SmoothCamera.ObjectTime[1]) - Object.Variable(__SmoothCamera.ObjectTime[0]))))" ] } ], "events": [ { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Extra delay: \" + ToString(CameraExtraDelay)", "\"info\"", "\"SmoothCamera\"" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "The time with delay is now between the first 2 indexes" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "DelayedCenterX", "=", "lerp(Object.Variable(__SmoothCamera.ObjectX[1]), Object.Variable(__SmoothCamera.ObjectX[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "DelayedCenterY", "=", "lerp(Object.Variable(__SmoothCamera.ObjectY[1]), Object.Variable(__SmoothCamera.ObjectY[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "SmoothCamera::SmoothCamera::IsDelayed" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "inverted": true, "value": "SmoothCamera::SmoothCamera::IsWaiting" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "ObjectVariableClearChildren" }, "parameters": [ "Object", "__SmoothCamera.ObjectTime" ] }, { "type": { "value": "ObjectVariableClearChildren" }, "parameters": [ "Object", "__SmoothCamera.ObjectX" ] }, { "type": { "value": "ObjectVariableClearChildren" }, "parameters": [ "Object", "__SmoothCamera.ObjectY" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "SmoothCamera::SmoothCamera::IsWaiting" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "BuiltinCommonInstructions::Once" }, "parameters": [] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraDelayCatchUpSpeed", "=", "CameraExtraDelay / CameraDelayCatchUpDuration" ] } ], "events": [ { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Start to catch up\"", "\"info\"", "\"SmoothCamera\"" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "SmoothCamera::SmoothCamera::IsWaiting" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "CameraExtraDelay", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "CameraExtraDelay", "=", "max(0, CameraExtraDelay -CameraDelayCatchUpSpeed * TimeDelta())" ] } ], "events": [ { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Catching up delay: \" + ToString(CameraExtraDelay)", "\"info\"", "\"SmoothCamera\"" ] } ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if the camera following target is delayed from the object.", "fullName": "Camera is delayed", "functionType": "Condition", "name": "IsDelayed", "private": true, "sentence": "The camera of _PARAM0_ is delayed", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.Behavior::CurrentDelay()", ">", "0" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Return the current camera delay.", "fullName": "Current delay", "functionType": "Expression", "name": "CurrentDelay", "private": true, "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "CameraDelay + CameraExtraDelay" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if the camera following is waiting at a reduced speed.", "fullName": "Camera is waiting", "functionType": "Condition", "name": "IsWaiting", "private": true, "sentence": "The camera of _PARAM0_ is waiting", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "WaitingEnd", ">", "TimeFromStart()" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.", "fullName": "Add forecast history position", "functionType": "Action", "group": "Private", "name": "AddForecastHistoryPosition", "private": true, "sentence": "Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "ForecastHistoryDuration", ">", "0" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "ForecastTime", ">", "0" ] } ] } ], "actions": [ { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ForecastHistoryTime", "Time" ] }, { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ForecastHistoryX", "ObjectX" ] }, { "type": { "value": "ObjectVariablePushNumber" }, "parameters": [ "Object", "__SmoothCamera.ForecastHistoryY", "ObjectY" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Remove history entries that are too old to be useful.\nKeep at least 2 positions because no forecast can be done with less positions." }, { "infiniteLoopWarning": true, "type": "BuiltinCommonInstructions::While", "whileConditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", ">=", "3" ] }, { "type": { "value": "VarObjet" }, "parameters": [ "Object", "__SmoothCamera.ForecastHistoryTime[0]", "<", "TimeFromStart() - CameraDelay - CameraExtraDelay - ForecastHistoryDuration" ] } ], "conditions": [], "actions": [ { "type": { "value": "ObjectVariableRemoveAt" }, "parameters": [ "Object", "__SmoothCamera.ForecastHistoryTime", "0" ] }, { "type": { "value": "ObjectVariableRemoveAt" }, "parameters": [ "Object", "__SmoothCamera.ForecastHistoryX", "0" ] }, { "type": { "value": "ObjectVariableRemoveAt" }, "parameters": [ "Object", "__SmoothCamera.ForecastHistoryY", "0" ] } ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "Time", "name": "Time", "type": "expression" }, { "description": "Object X", "name": "ObjectX", "type": "expression" }, { "description": "Object Y", "name": "ObjectY", "type": "expression" } ], "objectGroups": [] }, { "description": "Update forecasted position. This is called in doStepPreEvents.", "fullName": "Update forecasted position", "functionType": "Action", "group": "Private", "name": "UpdateForecastedPosition", "private": true, "sentence": "Update forecasted position of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastedX", "=", "DelayedCenterX" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastedY", "=", "DelayedCenterY" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Simple linear regression\ny = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX\n\nNote than we could use only one position every N positions to reduce the process time,\nbut if we really need efficient process JavaScript and circular queues are a must." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", ">=", "2" ] }, { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "ForecastHistoryDuration", ">", "0" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "ForecastTime", ">", "0" ] } ] } ], "actions": [], "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Mean X", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryMeanX", "=", "0" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryMeanX", "+", "Object.Variable(__SmoothCamera.ForecastHistoryX[Index])" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "+", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryMeanX", "/", "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Mean Y", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryMeanY", "=", "0" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryMeanY", "+", "Object.Variable(__SmoothCamera.ForecastHistoryY[Index])" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "+", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryMeanY", "/", "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)" ] } ] }, { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Mean: \" + ToString(ForecastHistoryMeanX) + \" \" + ToString(ForecastHistoryMeanY)", "", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Variance and Covariance", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "VarianceX = sum((X[i] - MeanX)²)\nVarianceY = sum((Y[i] - MeanY)²)\nCovariance = sum((X[i] - MeanX) * (Y[i] - MeanY))" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryVarianceX", "=", "0" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryVarianceY", "=", "0" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryCovariance", "=", "0" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryVarianceX", "+", "pow(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX, 2)" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryVarianceY", "+", "pow(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY, 2)" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryCovariance", "+", "(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX)\n*\n(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY)" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "+", "1" ] } ] }, { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Variances: \" + ToString(ForecastHistoryVarianceX) + \" \" + ToString(ForecastHistoryVarianceY) + \" \" + ToString(ForecastHistoryCovariance)", "\"info\"", "\"SmoothCamera\"" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "abs(ForecastHistoryVarianceX)", "<", "1" ] }, { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "abs(ForecastHistoryVarianceY)", "<", "1" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastedX", "=", "DelayedCenterX" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastedY", "=", "DelayedCenterY" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "abs(ForecastHistoryVarianceX)", ">=", "1" ] }, { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "abs(ForecastHistoryVarianceY)", ">=", "1" ] } ] } ], "actions": [], "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Linear function parameters", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "y = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "abs(ForecastHistoryVarianceX)", ">=", "abs(ForecastHistoryVarianceY)" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryLinearA", "=", "ForecastHistoryCovariance / ForecastHistoryVarianceX" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryLinearB", "=", "ForecastHistoryMeanY - ForecastHistoryLinearA * ForecastHistoryMeanX" ] } ], "events": [ { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Linear: \" + ToString(ForecastHistoryLinearA) + \" \" + ToString(ForecastHistoryLinearB)", "\"info\"", "\"SmoothCamera\"" ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Projection", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds" }, "parameters": [ "Object", "Behavior", "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", "Object.Variable(__SmoothCamera.ForecastHistoryY[0])", "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])", "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])", "" ] } ] } ], "parameters": [] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Axis permutation to avoid a ratio between 2 numbers near 0." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "abs(ForecastHistoryVarianceX)", "<", "abs(ForecastHistoryVarianceY)" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryLinearA", "=", "ForecastHistoryCovariance / ForecastHistoryVarianceY" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastHistoryLinearB", "=", "ForecastHistoryMeanX - ForecastHistoryLinearA * ForecastHistoryMeanY" ] } ], "events": [ { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Linear: \" + ToString(ForecastHistoryLinearA) + \" \" + ToString(ForecastHistoryLinearB)", "\"info\"", "\"SmoothCamera\"" ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Projection", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds" }, "parameters": [ "Object", "Behavior", "Object.Variable(__SmoothCamera.ForecastHistoryY[0])", "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])", "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])", "" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Permute back axis" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "=", "ProjectedOldestX" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedOldestX", "=", "ProjectedOldestY" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedOldestY", "=", "Index" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "Index", "=", "ProjectedNewestX" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedNewestX", "=", "ProjectedNewestY" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedNewestY", "=", "Index" ] } ] } ], "parameters": [] }, { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Oldest: \" + ToString(ProjectedOldestX) + \" \" + ToString(ProjectedOldestY)", "\"info\"", "\"SmoothCamera\"" ] } ] }, { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Newest: \" + ToString(ProjectedNewestX) + \" \" + ToString(ProjectedNewestY)", "\"info\"", "\"SmoothCamera\"" ] } ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Forecasted position", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastedX", "=", "ProjectedNewestX + ( ProjectedNewestX - ProjectedOldestX) * Object.Behavior::ForecastTimeRatio()" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ForecastedY", "=", "ProjectedNewestY + ( ProjectedNewestY - ProjectedOldestY) * Object.Behavior::ForecastTimeRatio()" ] } ] }, { "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DebuggerTools::ConsoleLog" }, "parameters": [ "\"Forecasted: \" + ToString(ForecastedX) + \" \" + ToString(ForecastedY)", "\"info\"", "\"SmoothCamera\"" ] } ] } ], "parameters": [] } ], "parameters": [] } ] } ], "parameters": [] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] }, { "description": "Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.", "fullName": "Project history ends", "functionType": "Action", "group": "Private", "name": "ProjectHistoryEnds", "private": true, "sentence": "Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Perpendicular line:\npA = -1/a; \npB = -pA * x + y\n\nIntersection:\n/ ProjectedY = a * ProjectedX + b\n\\ ProjectedY = pA * ProjectedX + b\n\nSolution that is cleaned out from indeterminism (like 0 / 0 or infinity / infinity):\nProjectedX= (x + (y - b) * a) / (a² + 1)\nProjectedY = y + (x * a - y + b) / (a² + 1)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedNewestX", "=", "(NewestX + (NewestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedNewestY", "=", "NewestY + (NewestX * ForecastHistoryLinearA - NewestY \n+ ForecastHistoryLinearB) / (1 + pow(ForecastHistoryLinearA, 2))" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedOldestX", "=", "(OldestX + (OldestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ProjectedOldestY", "=", "OldestY + (OldestX * ForecastHistoryLinearA - OldestY \n+ ForecastHistoryLinearB) / (1 + pow(ForecastHistoryLinearA, 2))" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" }, { "description": "OldestX", "name": "OldestX", "type": "expression" }, { "description": "OldestY", "name": "OldestY", "type": "expression" }, { "description": "Newest X", "name": "NewestX", "type": "expression" }, { "description": "Newest Y", "name": "NewestY", "type": "expression" } ], "objectGroups": [] }, { "description": "Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.", "fullName": "Forecast time ratio", "functionType": "Expression", "group": "Private", "name": "ForecastTimeRatio", "private": true, "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "- ForecastTime / (Object.Variable(__SmoothCamera.ForecastHistoryTime[0]) - Object.Variable(__SmoothCamera.ForecastHistoryTime[Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime) - 1]))" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothCamera", "type": "behavior" } ], "objectGroups": [] } ], "eventsFunctionsFolderStructure": { "folderName": "__ROOT", "children": [ { "functionName": "onCreated" }, { "functionName": "doStepPreEvents" }, { "functionName": "MoveCameraCloser" }, { "functionName": "DoMoveCameraCloser" }, { "functionName": "WaitAndCatchUp" }, { "functionName": "DrawDebug" }, { "folderName": "Camera configuration", "children": [ { "functionName": "SetFollowOnX" }, { "functionName": "SetFollowOnY" }, { "functionName": "SetFollowFreeAreaRight" }, { "functionName": "SetFollowFreeAreaLeft" }, { "functionName": "SetFollowFreeAreaTop" }, { "functionName": "SetFollowFreeAreaBottom" }, { "functionName": "SetLeftwardSpeedMax" }, { "functionName": "SetRightwardSpeedMax" }, { "functionName": "SetUpwardSpeedMax" }, { "functionName": "SetDownwardSpeedMax" }, { "functionName": "SetLeftwardSpeed" }, { "functionName": "SetRightwardSpeed" }, { "functionName": "SetDownwardSpeed" }, { "functionName": "SetUpwardSpeed" }, { "functionName": "OffsetX" }, { "functionName": "SetOffsetXOp" }, { "functionName": "SetOffsetX" }, { "functionName": "OffsetY" }, { "functionName": "SetOffsetYOp" }, { "functionName": "SetOffsetY" }, { "functionName": "SetForecastTime" }, { "functionName": "SetCameraDelay" } ] }, { "folderName": "Private", "children": [ { "functionName": "FreeAreaLeft" }, { "functionName": "FreeAreaRight" }, { "functionName": "FreeAreaBottom" }, { "functionName": "FreeAreaTop" }, { "functionName": "UpdateDelayedPosition" }, { "functionName": "AddForecastHistoryPosition" }, { "functionName": "UpdateForecastedPosition" }, { "functionName": "ProjectHistoryEnds" }, { "functionName": "ForecastTimeRatio" } ] }, { "functionName": "IsDelayed" }, { "functionName": "CurrentDelay" }, { "functionName": "IsWaiting" } ] }, "propertyDescriptors": [ { "value": "0.9", "type": "Number", "label": "Leftward catch-up speed (in ratio per second)", "group": "Catch-up speed", "name": "LeftwardSpeed" }, { "value": "0.9", "type": "Number", "label": "Rightward catch-up speed (in ratio per second)", "group": "Catch-up speed", "name": "RightwardSpeed" }, { "value": "0.9", "type": "Number", "label": "Upward catch-up speed (in ratio per second)", "group": "Catch-up speed", "name": "UpwardSpeed" }, { "value": "0.9", "type": "Number", "label": "Downward catch-up speed (in ratio per second)", "group": "Catch-up speed", "name": "DownwardSpeed" }, { "value": "true", "type": "Boolean", "label": "Follow on X axis", "name": "FollowOnX" }, { "value": "true", "type": "Boolean", "label": "Follow on Y axis", "name": "FollowOnY" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area left border", "group": "Position", "advanced": true, "name": "FollowFreeAreaLeft" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area right border", "group": "Position", "advanced": true, "name": "FollowFreeAreaRight" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area top border", "group": "Position", "advanced": true, "name": "FollowFreeAreaTop" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area bottom border", "group": "Position", "advanced": true, "name": "FollowFreeAreaBottom" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Camera offset X", "group": "Position", "advanced": true, "name": "CameraOffsetX" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Camera offset Y", "group": "Position", "advanced": true, "name": "CameraOffsetY" }, { "value": "0", "type": "Number", "unit": "Second", "label": "Camera delay", "group": "Timing", "deprecated": true, "name": "CameraDelay" }, { "value": "0", "type": "Number", "unit": "Second", "label": "Forecast time", "group": "Timing", "deprecated": true, "name": "ForecastTime" }, { "value": "0", "type": "Number", "unit": "Second", "label": "Forecast history duration", "group": "Timing", "deprecated": true, "name": "ForecastHistoryDuration" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "LogLeftwardSpeed" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "LogRightwardSpeed" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "LogDownwardSpeed" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "LogUpwardSpeed" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "DelayedCenterX" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "DelayedCenterY" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastHistoryMeanX" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastHistoryMeanY" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastHistoryVarianceX" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastHistoryCovariance" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastHistoryLinearA" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastHistoryLinearB" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastedX" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastedY" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ProjectedNewestX" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ProjectedNewestY" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ProjectedOldestX" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ProjectedOldestY" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "ForecastHistoryVarianceY" }, { "value": "", "type": "Number", "label": "Index (local variable)", "hidden": true, "name": "Index" }, { "value": "0", "type": "Number", "label": "", "hidden": true, "name": "CameraDelayCatchUpSpeed" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "CameraExtraDelay" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "WaitingSpeedXMax" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "WaitingSpeedYMax" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "WaitingEnd" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "CameraDelayCatchUpDuration" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Leftward maximum speed", "group": "Maximum speed", "advanced": true, "name": "LeftwardSpeedMax" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Rightward maximum speed", "group": "Maximum speed", "advanced": true, "name": "RightwardSpeedMax" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Upward maximum speed", "group": "Maximum speed", "advanced": true, "name": "UpwardSpeedMax" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Downward maximum speed", "group": "Maximum speed", "advanced": true, "name": "DownwardSpeedMax" }, { "value": "", "type": "Number", "label": "OldX (local variable)", "hidden": true, "name": "OldX" }, { "value": "", "type": "Number", "label": "OldY (local variable)", "hidden": true, "name": "OldY" }, { "value": "", "type": "Boolean", "label": "", "hidden": true, "name": "IsCalledManually" } ], "propertiesFolderStructure": { "folderName": "__ROOT", "children": [ { "folderName": "Catch-up speed", "children": [ { "propertyName": "LeftwardSpeed" }, { "propertyName": "RightwardSpeed" }, { "propertyName": "UpwardSpeed" }, { "propertyName": "DownwardSpeed" } ] }, { "propertyName": "FollowOnX" }, { "propertyName": "FollowOnY" }, { "folderName": "Position", "children": [ { "propertyName": "FollowFreeAreaLeft" }, { "propertyName": "FollowFreeAreaRight" }, { "propertyName": "FollowFreeAreaTop" }, { "propertyName": "FollowFreeAreaBottom" }, { "propertyName": "CameraOffsetX" }, { "propertyName": "CameraOffsetY" } ] }, { "folderName": "Timing", "children": [ { "propertyName": "CameraDelay" }, { "propertyName": "ForecastTime" }, { "propertyName": "ForecastHistoryDuration" } ] }, { "propertyName": "LogLeftwardSpeed" }, { "propertyName": "LogRightwardSpeed" }, { "propertyName": "LogDownwardSpeed" }, { "propertyName": "LogUpwardSpeed" }, { "propertyName": "DelayedCenterX" }, { "propertyName": "DelayedCenterY" }, { "propertyName": "ForecastHistoryMeanX" }, { "propertyName": "ForecastHistoryMeanY" }, { "propertyName": "ForecastHistoryVarianceX" }, { "propertyName": "ForecastHistoryCovariance" }, { "propertyName": "ForecastHistoryLinearA" }, { "propertyName": "ForecastHistoryLinearB" }, { "propertyName": "ForecastedX" }, { "propertyName": "ForecastedY" }, { "propertyName": "ProjectedNewestX" }, { "propertyName": "ProjectedNewestY" }, { "propertyName": "ProjectedOldestX" }, { "propertyName": "ProjectedOldestY" }, { "propertyName": "ForecastHistoryVarianceY" }, { "propertyName": "Index" }, { "propertyName": "CameraDelayCatchUpSpeed" }, { "propertyName": "CameraExtraDelay" }, { "propertyName": "WaitingSpeedXMax" }, { "propertyName": "WaitingSpeedYMax" }, { "propertyName": "WaitingEnd" }, { "propertyName": "CameraDelayCatchUpDuration" }, { "folderName": "Maximum speed", "children": [ { "propertyName": "LeftwardSpeedMax" }, { "propertyName": "RightwardSpeedMax" }, { "propertyName": "UpwardSpeedMax" }, { "propertyName": "DownwardSpeedMax" } ] }, { "propertyName": "OldX" }, { "propertyName": "OldY" }, { "propertyName": "IsCalledManually" } ] } }, { "description": "Smoothly scroll to follow a character and stabilize the camera when jumping.", "fullName": "Smooth platformer camera", "helpPath": "", "iconUrl": "", "name": "SmoothPlatformerCamera", "objectType": "", "previewIconUrl": "", "quickCustomizationVisibility": "hidden", "eventsFunctions": [ { "fullName": "", "functionType": "Action", "name": "doStepPreEvents", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "PlatformBehavior::IsJumping" }, "parameters": [ "Object", "PlatformerCharacter" ] }, { "type": { "inverted": true, "value": "PlatformBehavior::IsFalling" }, "parameters": [ "Object", "PlatformerCharacter" ] } ], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" }, "parameters": [ "Object", "SmoothCamera", "FloorFollowFreeAreaTop", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" }, "parameters": [ "Object", "SmoothCamera", "FloorFollowFreeAreaBottom", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" }, "parameters": [ "Object", "SmoothCamera", "FloorUpwardSpeed", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" }, "parameters": [ "Object", "SmoothCamera", "FloorDownwardSpeed", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" }, "parameters": [ "Object", "SmoothCamera", "FloorUpwardSpeedMax", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" }, "parameters": [ "Object", "SmoothCamera", "FloorDownwardSpeedMax", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "PlatformBehavior::IsJumping" }, "parameters": [ "Object", "PlatformerCharacter" ] }, { "type": { "value": "PlatformBehavior::IsFalling" }, "parameters": [ "Object", "PlatformerCharacter" ] } ] } ], "actions": [ { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" }, "parameters": [ "Object", "SmoothCamera", "AirFollowFreeAreaTop", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" }, "parameters": [ "Object", "SmoothCamera", "AirFollowFreeAreaBottom", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" }, "parameters": [ "Object", "SmoothCamera", "AirUpwardSpeed", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" }, "parameters": [ "Object", "SmoothCamera", "AirDownwardSpeed", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" }, "parameters": [ "Object", "SmoothCamera", "AirUpwardSpeedMax", "" ] }, { "type": { "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" }, "parameters": [ "Object", "SmoothCamera", "AirDownwardSpeedMax", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "SmoothCamera::SmoothPlatformerCamera", "type": "behavior" } ], "objectGroups": [] } ], "eventsFunctionsFolderStructure": { "folderName": "__ROOT", "children": [ { "functionName": "doStepPreEvents" } ] }, "propertyDescriptors": [ { "value": "", "type": "Behavior", "label": "Platformer character behavior", "extraInformation": [ "PlatformBehavior::PlatformerObjectBehavior" ], "choices": [], "name": "PlatformerCharacter" }, { "value": "", "type": "Behavior", "label": "Smooth camera behavior", "extraInformation": [ "SmoothCamera::SmoothCamera" ], "choices": [], "name": "SmoothCamera" }, { "value": "", "type": "Number", "label": "", "hidden": true, "name": "JumpOriginY" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area top in the air", "group": "Position", "name": "AirFollowFreeAreaTop" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area bottom in the air", "group": "Position", "name": "AirFollowFreeAreaBottom" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area top on the floor", "group": "Position", "name": "FloorFollowFreeAreaTop" }, { "value": "0", "type": "Number", "unit": "Pixel", "label": "Follow free area bottom on the floor", "group": "Position", "name": "FloorFollowFreeAreaBottom" }, { "value": "0.95", "type": "Number", "label": "Upward speed in the air (in ratio per second)", "group": "Catch-up speed", "name": "AirUpwardSpeed" }, { "value": "0.95", "type": "Number", "label": "Downward speed in the air (in ratio per second)", "group": "Catch-up speed", "name": "AirDownwardSpeed" }, { "value": "0.9", "type": "Number", "label": "Upward speed on the floor (in ratio per second)", "group": "Catch-up speed", "name": "FloorUpwardSpeed" }, { "value": "0.9", "type": "Number", "label": "Downward speed on the floor (in ratio per second)", "group": "Catch-up speed", "name": "FloorDownwardSpeed" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Upward maximum speed in the air", "group": "Maximum speed", "name": "AirUpwardSpeedMax" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Downward maximum speed in the air", "group": "Maximum speed", "name": "AirDownwardSpeedMax" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Upward maximum speed on the floor", "group": "Maximum speed", "name": "FloorUpwardSpeedMax" }, { "value": "9000", "type": "Number", "unit": "PixelSpeed", "label": "Downward maximum speed on the floor", "group": "Maximum speed", "name": "FloorDownwardSpeedMax" } ], "propertiesFolderStructure": { "folderName": "__ROOT", "children": [ { "propertyName": "PlatformerCharacter" }, { "propertyName": "SmoothCamera" }, { "propertyName": "JumpOriginY" }, { "folderName": "Position", "children": [ { "propertyName": "AirFollowFreeAreaTop" }, { "propertyName": "AirFollowFreeAreaBottom" }, { "propertyName": "FloorFollowFreeAreaTop" }, { "propertyName": "FloorFollowFreeAreaBottom" } ] }, { "folderName": "Catch-up speed", "children": [ { "propertyName": "AirUpwardSpeed" }, { "propertyName": "AirDownwardSpeed" }, { "propertyName": "FloorUpwardSpeed" }, { "propertyName": "FloorDownwardSpeed" } ] }, { "folderName": "Maximum speed", "children": [ { "propertyName": "AirUpwardSpeedMax" }, { "propertyName": "AirDownwardSpeedMax" }, { "propertyName": "FloorUpwardSpeedMax" }, { "propertyName": "FloorDownwardSpeedMax" } ] } ] } } ], "eventsBasedObjects": [] }, { "author": "", "category": "Camera", "dimension": "2D", "extensionNamespace": "", "fullName": "Room-based camera movement", "gdevelopVersion": ">=5.5.222", "helpPath": "https://victrisgames.itch.io/room-based-camera-movement", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggZD0iTTE0LDNINEMzLjQsMywzLDMuNCwzLDR2MTBjMCwwLjYsMC40LDEsMSwxaDEwYzAuNiwwLDEtMC40LDEtMVY0QzE1LDMuNCwxNC42LDMsMTQsM3oiLz4NCgk8cGF0aCBkPSJNMTQsMTdINGMtMC42LDAtMSwwLjQtMSwxdjEwYzAsMC42LDAuNCwxLDEsMWgxMGMwLjYsMCwxLTAuNCwxLTFWMThDMTUsMTcuNCwxNC42LDE3LDE0LDE3eiIvPg0KCTxwYXRoIGQ9Ik0yOCwzSDE4Yy0wLjYsMC0xLDAuNC0xLDF2MTBjMCwwLjYsMC40LDEsMSwxaDEwYzAuNiwwLDEtMC40LDEtMVY0QzI5LDMuNCwyOC42LDMsMjgsM3oiLz4NCgk8cGF0aCBkPSJNMjgsMTdIMThjLTAuNiwwLTEsMC40LTEsMXYxMGMwLDAuNiwwLjQsMSwxLDFoMTBjMC42LDAsMS0wLjQsMS0xVjE4QzI5LDE3LjQsMjguNiwxNywyOCwxN3oiLz4NCjwvZz4NCjwvc3ZnPg0K", "name": "RoomBasedCameraMovement", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Applications and Programming/Applications and Programming_app_apps_applications_tiles.svg", "shortDescription": "Move/zoom camera to frame the room object containing the player.", "version": "1.0.5", "description": [ "Move camera to the room that contains the trigger object (usually the player). If desired, change zoom to show the entire room or keep zoom static.", "", "How to use:", "- Place room objects on scene", "- Select camera zoom limits, how fast the camera should move, and the visible buffer around each room", "- Run the \"Move and zoom camera\" action on every frame", "- Move the trigger object (player) between rooms and the camera will center on the room that contains the trigger object.", "", "Tips:", "- Use these conditions for custom logic when changing rooms : \"Camera moving\", \"Camera zooming\", and \"Room changed\"", "- Set \"Lerp Speed\" to \"1\" to change the camera instantly" ], "origin": { "identifier": "RoomBasedCameraMovement", "name": "gdevelop-extension-store" }, "tags": [ "camera", "follow", "room", "trigger", "zoom", "move", "smooth" ], "authorIds": [ "gqDaZjCfevOOxBYkK6zlhtZnXCg1", "8Ih1aa8f5gWUp4UB2BdhQ2iXWxJ3", "dt0tRnf2kHWJnjkrpnzTzNj9Yc63" ], "dependencies": [], "globalVariables": [], "sceneVariables": [], "eventsFunctions": [ { "description": "Move and zoom camera to the room object that contains the trigger object (usually the player).", "fullName": "Move and zoom camera to the room object that contains the trigger object (player)", "functionType": "Action", "group": "Layers and cameras", "name": "MoveCameraToActiveRoom", "sentence": "Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Initialize", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Save input values" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.MaxZoom", "=", "MaxZoom" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.LerpSpeed", "=", "LerpSpeed" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Set default values if none provided" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.MaxZoom", "<=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.MaxZoom", "=", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.LerpSpeed", "<=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.LerpSpeed", "=", "0.1" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Main", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Identify the current room", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Detect which room is the current one" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionPoint" }, "parameters": [ "RoomObject", "TriggerObject.CenterX()", "TriggerObject.CenterY()" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Room has NOT changed" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarObjet" }, "parameters": [ "TriggerObject", "__RoomBasedCameraMovement.CurrentRoomID", "=", "RoomObject.Variable(__RoomBasedCameraMovement.RoomID)" ] } ], "actions": [ { "type": { "value": "SetObjectVariableAsBoolean" }, "parameters": [ "TriggerObject", "__RoomBasedCameraMovement.RoomChanged", "False" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Room has changed" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarObjet" }, "parameters": [ "TriggerObject", "__RoomBasedCameraMovement.CurrentRoomID", "!=", "RoomObject.Variable(__RoomBasedCameraMovement.RoomID)" ] } ], "actions": [ { "type": { "value": "SetObjectVariableAsBoolean" }, "parameters": [ "TriggerObject", "__RoomBasedCameraMovement.RoomChanged", "True" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Update CurrentRoomID variable" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "TriggerObject", "__RoomBasedCameraMovement.CurrentRoomID", "=", "RoomObject.Variable(__RoomBasedCameraMovement.RoomID)" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Move camera", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::ForEach", "object": "RoomObject", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Assign each room a unique ID if they don't have one yet" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarObjet" }, "parameters": [ "RoomObject", "__RoomBasedCameraMovement.RoomID", "=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.MaxRoomID", "+", "1" ] }, { "type": { "value": "ModVarObjet" }, "parameters": [ "RoomObject", "__RoomBasedCameraMovement.RoomID", "=", "Variable(__RoomBasedCameraMovement.MaxRoomID)" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Check if this room is the current room" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarObjet" }, "parameters": [ "RoomObject", "__RoomBasedCameraMovement.RoomID", "=", "TriggerObject.Variable(__RoomBasedCameraMovement.CurrentRoomID)" ] } ], "actions": [], "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Change zoom", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Calculate the camera dimensions" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraWidth", "=", "RoomObject.Width()+2*OutsideBuffer" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraHeight", "=", "RoomObject.Height()+2*OutsideBuffer" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraZoom", "=", "min(SceneWindowHeight() / Variable(__RoomBasedCameraMovement.CameraHeight), SceneWindowWidth() / Variable(__RoomBasedCameraMovement.CameraWidth))" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Adjust zoom to stay within min/max values" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraZoom", "=", "clamp(Variable(__RoomBasedCameraMovement.CameraZoom),MinZoom,Variable(__RoomBasedCameraMovement.MaxZoom))" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Change camera zoom" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ZoomCamera" }, "parameters": [ "", "ceil(lerp(CameraZoom(Layer,Camera),Variable(__RoomBasedCameraMovement.CameraZoom),Variable(__RoomBasedCameraMovement.LerpSpeed))*1000)/1000", "Layer", "Camera" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Move camera position", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "For rooms smaller than the viewable screen, center the camera on the center of the room" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraWidth", "<=", "SceneWindowWidth()" ] } ], "actions": [ { "type": { "value": "SetCameraCenterX" }, "parameters": [ "", "=", "ceil(lerp(CameraX(Layer,Camera), RoomObject.CenterX(), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100", "Layer", "Camera" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraHeight", "<=", "SceneWindowHeight()" ] } ], "actions": [ { "type": { "value": "SetCameraCenterY" }, "parameters": [ "", "=", "ceil(lerp(CameraY(Layer,Camera), RoomObject.CenterY(), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100", "Layer", "Camera" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "For rooms larger than the viewable screen, center the camera on the TriggerObject and clamp camera so it only shows the room + buffer" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraWidth", ">", "SceneWindowWidth()" ] } ], "actions": [ { "type": { "value": "SetCameraCenterX" }, "parameters": [ "", "=", "ceil(lerp(CameraX(Layer,Camera), clamp(TriggerObject.CenterX(), \nRoomObject.CenterX() - RoomObject.Width()/2 + SceneWindowWidth()/2 - OutsideBuffer, RoomObject.CenterX() + RoomObject.Width()/2 - SceneWindowWidth()/2 + OutsideBuffer), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100", "Layer", "Camera" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.CameraHeight", ">", "SceneWindowHeight()" ] } ], "actions": [ { "type": { "value": "SetCameraCenterY" }, "parameters": [ "", "=", "ceil(lerp(CameraY(Layer,Camera), clamp(TriggerObject.CenterY(), \nRoomObject.CenterY() - RoomObject.Height()/2 + SceneWindowHeight()/2 - OutsideBuffer, RoomObject.CenterY() + RoomObject.Height()/2 - SceneWindowHeight()/2 + OutsideBuffer), Variable(__RoomBasedCameraMovement.LerpSpeed))*100)/100", "Layer", "Camera" ] } ] } ], "parameters": [] } ] } ] } ], "parameters": [] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Calculate \"IsCameraMoving\" condition", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Initialize", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraX", "=", "0" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraY", "=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraX", "=", "CameraX(Layer, Camera)" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraY", "=", "CameraY(Layer, Camera)" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Check if camera position changed", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Camera has NOT moved" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraX", "=", "CameraX(Layer,Camera)" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraY", "=", "CameraY(Layer,Camera)" ] } ], "actions": [ { "type": { "value": "SetSceneVariableAsBoolean" }, "parameters": [ "__RoomBasedCameraMovement.CameraMoving", "False" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Camera has moved" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraX", "!=", "CameraX(Layer,Camera)" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraY", "!=", "CameraY(Layer,Camera)" ] } ] } ], "actions": [ { "type": { "value": "SetSceneVariableAsBoolean" }, "parameters": [ "__RoomBasedCameraMovement.CameraMoving", "True" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Update with current camera position" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraX", "=", "CameraX(Layer, Camera)" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.PrevCameraY", "=", "CameraY(Layer, Camera)" ] } ] } ] } ], "parameters": [] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Calculate \"IsCameraZooming\" condition", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Initialize", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PreviousZoom", "=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.PreviousZoom", "=", "CameraZoom(Layer, Camera)" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Check if camera zoom changed", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Camera zoom has NOT changed" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PreviousZoom", "=", "CameraZoom(Layer,Camera)" ] } ], "actions": [ { "type": { "value": "SetSceneVariableAsBoolean" }, "parameters": [ "__RoomBasedCameraMovement.CameraZooming", "False" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Camera zoom has changed" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__RoomBasedCameraMovement.PreviousZoom", "!=", "CameraZoom(Layer,Camera)" ] } ], "actions": [ { "type": { "value": "SetSceneVariableAsBoolean" }, "parameters": [ "__RoomBasedCameraMovement.CameraZooming", "True" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Update with current camera zoom" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__RoomBasedCameraMovement.PreviousZoom", "=", "CameraZoom(Layer, Camera)" ] } ] } ] } ], "parameters": [] } ], "parameters": [] } ], "parameters": [ { "description": "Room object", "longDescription": "Room objects are used to mark areas that should be seen by the camera.", "name": "RoomObject", "type": "objectList" }, { "description": "Trigger object (player)", "longDescription": "When the Trigger Object touches a new Room Object, the camera will move to the new room", "name": "TriggerObject", "type": "objectList" }, { "description": "Layer", "name": "Layer", "type": "layer" }, { "description": "Lerp speed", "longDescription": "Range: 0 to 1", "name": "LerpSpeed", "type": "expression" }, { "description": "Maximum zoom", "name": "MaxZoom", "type": "expression" }, { "description": "Minimum zoom", "name": "MinZoom", "type": "expression" }, { "description": "Outside buffer (pixels)", "longDescription": "Minimum extra space displayed around each side the room", "name": "OutsideBuffer", "type": "expression" }, { "description": "Camera", "name": "Camera", "type": "expression" } ], "objectGroups": [] }, { "description": "Check if trigger object (usually the player) has entered a new room on this frame.", "fullName": "Check if trigger object (player) has entered a new room", "functionType": "Condition", "name": "ActiveRoomChanged", "sentence": "_PARAM1_ has just entered a new room", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "ObjectVariableAsBoolean" }, "parameters": [ "TriggerObject", "__RoomBasedCameraMovement.RoomChanged", "True" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Trigger object (player)", "name": "TriggerObject", "type": "objectList" } ], "objectGroups": [] }, { "description": "Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).", "fullName": "Check if camera is zooming", "functionType": "Condition", "name": "IsCameraZooming", "sentence": "Camera is zooming", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "SceneVariableAsBoolean" }, "parameters": [ "__RoomBasedCameraMovement.CameraZooming", "True" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [], "objectGroups": [] }, { "description": "Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).", "fullName": "Check if camera is moving", "functionType": "Condition", "name": "IsCameraMoving", "sentence": "Camera is moving", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "SceneVariableAsBoolean" }, "parameters": [ "__RoomBasedCameraMovement.CameraMoving", "True" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [], "objectGroups": [] } ], "eventsFunctionsFolderStructure": { "folderName": "__ROOT", "children": [ { "folderName": "Layers and cameras", "children": [ { "functionName": "MoveCameraToActiveRoom" } ] }, { "functionName": "ActiveRoomChanged" }, { "functionName": "IsCameraZooming" }, { "functionName": "IsCameraMoving" } ] }, "eventsBasedBehaviors": [], "eventsBasedObjects": [] }, { "author": "@oscuridad6661, Tristan Rhodes (@VictrisGames)", "category": "Game mechanic", "dimension": "", "extensionNamespace": "", "fullName": "Dungeon generator", "gdevelopVersion": ">=5.5.222", "helpPath": "https://victrisgames.itch.io/extension-dungeon-generator", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXNpdGVtYXAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNOSwyVjhIMTFWMTFINUMzLjg5LDExIDMsMTEuODkgMywxM1YxNkgxVjIySDdWMTZINVYxM0gxMVYxNkg5VjIySDE1VjE2SDEzVjEzSDE5VjE2SDE3VjIySDIzVjE2SDIxVjEzQzIxLDExLjg5IDIwLjExLDExIDE5LDExSDEzVjhIMTVWMkg5WiIgLz48L3N2Zz4=", "name": "DungeonGenerator", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/sitemap.svg", "shortDescription": "Create a procedurally generated dungeon. Includes two layouts: \"rooms and hallways\" and \"dungeon cave\".", "version": "1.2.1", "description": [ "How to use:", "- Run the \"Generate Dungeon Cave\" or \"Generate Dungeon with Rooms\" action at the beginning of a scene.", "", "Tips:", "- Keep the amount of space used by room objects to less than ~25% of the total map. If you add too many rooms, they will not be placed correctly and might collide with other rooms.", "- Try using top-down controls combined with physics behavior (with no gravity) on the player and wall objects", "- Use external layouts to place pre-designed rooms on randomly created room objects", "- Use \"Delete Unused Terrain\" option to reduce resources used", "- Use \"RoomID(object)\" expression to determine the starting and ending room", "- Use \"NeighborCount(object)\" expression to find good places to place treasure. A high amount of neighbors means that the tile is a nook or cranny.", "- Use \"IsRoomEntrance\" condition to identify hallway objects that are adjacent to a room", "", "An example shows how to procedurally generate dungeons or caves ([open the project online](https://editor.gdevelop.io/?project=example://dungeon-generator))." ], "origin": { "identifier": "DungeonGenerator", "name": "gdevelop-extension-store" }, "tags": [ "dungeon", "generator", "procedural", "generation", "automatic", "build", "create", "rogue", "roguelike", "hallway", "entrance", "floor", "room", "cave" ], "authorIds": [ "gqDaZjCfevOOxBYkK6zlhtZnXCg1", "5iOtaj8yEsam4mIj7TEUDk4LSAe2" ], "dependencies": [], "globalVariables": [], "sceneVariables": [], "eventsFunctions": [ { "description": "Set the size of hallway objects to be placed on the path created by the pathfinding object.", "fullName": "Set size of hallway objects", "functionType": "Action", "name": "AdjustHallwaySizes", "private": true, "sentence": "Set the size of hallway objects _PARAM1_ to be placed on the path created by _PARAM2_ (Tile size: _PARAM4_ pixels, Hallway width: _PARAM5_ tiles)", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Adjust size of hallway objects", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Set the default size of hallway object to the tilesize" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ChangeHeight" }, "parameters": [ "HallwayObject", "=", "TileSize " ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "HallwayObject", "=", "TileSize " ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Skip the first step in the path (so this function doesn't try to evaluate step 0)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.PathCounter", ">", "1" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Vertical move (previous frame)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))", "=", "PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter)-1)" ] } ], "actions": [ { "type": { "value": "ChangeWidth" }, "parameters": [ "HallwayObject", "=", "TileSize * max(1,HallwayWidth)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Change in direction (this frame)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))", "=", "PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter)+1)" ] } ], "actions": [ { "type": { "value": "ChangeHeight" }, "parameters": [ "HallwayObject", "=", "TileSize * max(1,HallwayWidth)" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Horizontal move (previous frame)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))", "=", "PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter)-1)" ] } ], "actions": [ { "type": { "value": "ChangeHeight" }, "parameters": [ "HallwayObject", "=", "TileSize * max(1,HallwayWidth)" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Change in direction (this frame)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))", "=", "PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter)+1)" ] } ], "actions": [ { "type": { "value": "ChangeWidth" }, "parameters": [ "HallwayObject", "=", "TileSize * max(1,HallwayWidth)" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.PathCounter", "+", "1" ] } ] } ], "parameters": [] } ], "parameters": [ { "description": "Hallway object", "name": "HallwayObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Pathfinder object", "name": "PathfinderObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Pathfinding behavior", "name": "PathfindingBehavior", "supplementaryInformation": "PathfindingBehavior::PathfindingBehavior", "type": "behavior" }, { "description": "Tile size (pixels)", "name": "TileSize", "type": "expression" }, { "description": "Hallway width (tiles)", "name": "HallwayWidth", "type": "expression" } ], "objectGroups": [] }, { "description": "Fill world with terrain", "fullName": "Fill world with terrain", "functionType": "Action", "name": "FillWorld", "private": true, "sentence": "Fill world with terrain (Tile size: _PARAM1_ pixels, Columns: _PARAM2_ tiles, Rows: _PARAM3_ tiles, Fill object: _PARAM4_)", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Populate map with terrain objects everywhere", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterX", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterY", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "MapHeight", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "MapWidth", "conditions": [], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "TerrainObject", "Variable(__DungeonGenerator.CounterX) * TileSize", "Variable(__DungeonGenerator.CounterY) * TileSize", "Layer" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "TerrainObject", "=", "TileSize" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "TerrainObject", "=", "TileSize" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterX", "+", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterX", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterY", "+", "1" ] } ] } ] } ], "parameters": [] } ], "parameters": [ { "description": "Tile size (pixels)", "name": "TileSize", "type": "expression" }, { "description": "Map width (number of colums)", "name": "MapWidth", "type": "expression" }, { "description": "Map height (number of rows)", "name": "MapHeight", "type": "expression" }, { "description": "Terrain object", "name": "TerrainObject", "supplementaryInformation": "Sprite", "type": "objectList" } ], "objectGroups": [] }, { "description": "Generate a dungeon cave using a random walk algorithm. When the walker touches an edge of the map, it is moved back to the center of map.", "fullName": "Generate a dungeon cave", "functionType": "Action", "name": "GenerateDungeonCave", "sentence": "Generate a dungeon cave that has _PARAM8_ percent floor objects (Tile size: _PARAM1_ pixels, Map width: _PARAM2_ tiles, Map height: _PARAM3_ tiles, Terrain object: _PARAM4_, Floor object: _PARAM5_, Wall object: _PARAM12_, Walker object: _PARAM7_, Walker width/height: _PARAM9_ tiles, Minimum border: _PARAM10_ tiles, Create objects on layer: _PARAM6_, Delete unused terrain: _PARAM11_, Calculate neighbors: _PARAM13_)", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Random walk", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Calculate the number of floor objects to be created. Don't include border in calculation. Multiply border by 2 because it needs to exist on both sides (top+bottom, left+right)." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.FloorGoal", "=", "round((MapWidth - 2 * MinBorder) * (MapHeight - 2 * MinBorder) * FloorPercentage)" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Initialize counters" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.StepsTaken", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.FloorCreated", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerRestarts", "=", "0" ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Walk until complete (using a 2D array)", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Start with an empty map (array)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "VariableRemoveChild" }, "parameters": [ "__DungeonGenerator", "\"WalkerMap\"" ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Create walkers", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Initialize walker offsets (these are used to make the walker take up more than one tile)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerOffsetX", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerOffsetY", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create (WalkerSize^2) quantity of objects (1x1=1, 2x2=4, 3x3=9, etc0" }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "max(1,WalkerSize)", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "max(1,WalkerSize)", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create virtual walker objects. Walker objects are ONLY used to store variables and to perform ForEach() loops. Position, size, and appearance DO NOT matter. \nTODO: These could be replaced by structure variables." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "WalkerObject", "0", "0", "Layer" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Calculate the starting position (in the 2D array) and save it so it can be used for restarts" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Xpos", "=", "round(MapWidth/2 + Variable(__DungeonGenerator.WalkerOffsetX))" ] }, { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Ypos", "=", "round(MapHeight/2 + Variable(__DungeonGenerator.WalkerOffsetY))" ] }, { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.StartXpos", "=", "WalkerObject.Variable(__DungeonGenerator.Xpos)" ] }, { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.StartYpos", "=", "WalkerObject.Variable(__DungeonGenerator.Ypos)" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerOffsetX", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerOffsetX", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerOffsetY", "+", "1" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Process walker movements", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "infiniteLoopWarning": true, "type": "BuiltinCommonInstructions::While", "whileConditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.FloorCreated", "<", "Variable(__DungeonGenerator.FloorGoal)" ] } ], "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Reset variables" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetSceneVariableAsBoolean" }, "parameters": [ "__DungeonGenerator.InitiateRestart", "False" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Calculate chance to go in each direction based on the ratio of width to height" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ChanceToGoRight", "=", "0.5 * (MapWidth / (MapWidth + MapHeight))" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ChanceToGoLeft", "=", "Variable(__DungeonGenerator.ChanceToGoRight)" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ChanceToGoUp", "=", "0.5 * (MapHeight / (MapWidth + MapHeight))" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ChanceToGoDown", "=", "Variable(__DungeonGenerator.ChanceToGoUp)" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Generate a random number between 0 and 1" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", "=", "RandomFloatInRange(0,1)" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move LEFT" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", ">=", "0" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", "<", "Variable(__DungeonGenerator.ChanceToGoLeft)" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Xpos", "-", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move RIGHT" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", ">=", "Variable(__DungeonGenerator.ChanceToGoLeft)" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", "<", "Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight)" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Xpos", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move UP" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", ">=", "Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight)" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", "<", "Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight) + Variable(__DungeonGenerator.ChanceToGoUp)" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Ypos", "-", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move DOWN" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", ">=", "Variable(__DungeonGenerator.ChanceToGoLeft) + Variable(__DungeonGenerator.ChanceToGoRight) + Variable(__DungeonGenerator.ChanceToGoUp)" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.RandomNumber", "<=", "1" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Ypos", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "If ANY Walker is outside map boundries, reset ALL of them to their starting positions" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "VarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Xpos", "<", "MinBorder" ] }, { "type": { "value": "VarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Xpos", ">=", "MapWidth - MinBorder" ] }, { "type": { "value": "VarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Ypos", "<", "MinBorder" ] }, { "type": { "value": "VarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Ypos", ">=", "MapHeight - MinBorder" ] } ] } ], "actions": [ { "type": { "value": "SetSceneVariableAsBoolean" }, "parameters": [ "__DungeonGenerator.InitiateRestart", "True" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerRestarts", "+", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Check all Walkers if they are on top of terrain" }, { "type": "BuiltinCommonInstructions::ForEach", "object": "WalkerObject", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "SceneVariableAsBoolean" }, "parameters": [ "__DungeonGenerator.InitiateRestart", "True" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move back to starting position" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Xpos", "=", "WalkerObject.Variable(__DungeonGenerator.StartXpos)" ] }, { "type": { "value": "ModVarObjet" }, "parameters": [ "WalkerObject", "__DungeonGenerator.Ypos", "=", "WalkerObject.Variable(__DungeonGenerator.StartYpos)" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "If Walker is on Terrain, delete it" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.WalkerMap[WalkerObject.Variable(__DungeonGenerator.Xpos)][WalkerObject.Variable(__DungeonGenerator.Ypos)]", "=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.WalkerMap[WalkerObject.Variable(__DungeonGenerator.Xpos)][WalkerObject.Variable(__DungeonGenerator.Ypos)]", "=", "1" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.FloorCreated", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Track how many steps were taken" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.StepsTaken", "+", "1" ] } ] } ] } ], "parameters": [] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Draw map based on 2D array", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterX", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterY", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Loop through every tile in the map" }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "MapHeight", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "MapWidth", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create terrain objects when array value is 0" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.WalkerMap[Variable(__DungeonGenerator.CounterX)][Variable(__DungeonGenerator.CounterY)]", "=", "0" ] } ], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "TerrainObject", "Variable(__DungeonGenerator.CounterX) * TileSize", "Variable(__DungeonGenerator.CounterY) * TileSize", "Layer" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "TerrainObject", "=", "TileSize" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "TerrainObject", "=", "TileSize" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create floor objects when array value is 1" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.WalkerMap[Variable(__DungeonGenerator.CounterX)][Variable(__DungeonGenerator.CounterY)]", "=", "1" ] } ], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "FloorObject", "Variable(__DungeonGenerator.CounterX) * TileSize", "Variable(__DungeonGenerator.CounterY) * TileSize", "Layer" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "FloorObject", "=", "TileSize" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "FloorObject", "=", "TileSize" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterX", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterX", "=", "0" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CounterY", "+", "1" ] } ] } ] } ], "parameters": [] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Add walls", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Add walls" }, { "type": "BuiltinCommonInstructions::ForEach", "object": "TerrainObject", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create walls where terrain touches floor" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "TerrainObject", "FloorObject", "", "", "no" ] } ], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "WallObject", "TerrainObject.X()", "TerrainObject.Y()", "Layer" ] }, { "type": { "value": "Delete" }, "parameters": [ "TerrainObject", "" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "WallObject", "=", "TileSize" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "WallObject", "=", "TileSize" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Calculate neighbors", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "CalculateNeighbors", "True", "" ] } ], "actions": [ { "type": { "value": "DungeonGenerator::CalculateGridNeighbors" }, "parameters": [ "", "FloorObject", "WallObject", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Cleanup", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Delete walkers" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "WalkerObject", "" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Delete unused terrain (if desired)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "DeleteUnused", "True", "" ] }, { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "TerrainObject", "FloorObject", "", "", "no" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "TerrainObject", "" ] } ] } ], "parameters": [] } ], "parameters": [ { "description": "Tile size (pixels)", "longDescription": "All objects are based on this size", "name": "TileSize", "type": "expression" }, { "description": "Map width (tiles)", "name": "MapWidth", "type": "expression" }, { "description": "Map height (tiles)", "name": "MapHeight", "type": "expression" }, { "description": "Terrain object", "longDescription": "Terrain object is used to fill the map that is not covered by floors, hallways, or walls.", "name": "TerrainObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Floor object", "longDescription": "Floor objects are created on every tile that a walker has travelled to.", "name": "FloorObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Layer", "name": "Layer", "type": "layer" }, { "description": "Walker object", "longDescription": "Use a random walk algorithm to turn terrain objects into floor objects", "name": "WalkerObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Floor percentage (Range: 0-1)", "longDescription": "Percentage of map that will be convered by floor objects", "name": "FloorPercentage", "type": "expression" }, { "description": "Size of walker sides (tiles)", "longDescription": "The number of tiles for each side of the square walker object. For example, 2=2x2, 3=3x3, 4=4x4.", "name": "WalkerSize", "type": "expression" }, { "description": "Minimum border", "longDescription": "Can be used to provide a border of terrain around the map", "name": "MinBorder", "type": "expression" }, { "description": "Delete unused terrain objects", "name": "DeleteUnused", "type": "trueorfalse" }, { "description": "Wall object", "longDescription": "Wall objects are placed between floor and terrain objects.", "name": "WallObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Calculate neighbors", "longDescription": "May take a few seconds to calculate neighbors on a large map, so disable this if you are not using it.", "name": "CalculateNeighbors", "type": "yesorno" } ], "objectGroups": [] }, { "description": "Generate a dungeon by placing rooms in random locations and moving them if they collide with each other. Rooms are connected with hallways.", "fullName": "Generate a dungeon with room and hallways", "functionType": "Action", "name": "GenerateDungeonRooms", "sentence": "Generate a dungeon with rooms (Room Qty: _PARAM7_, Tile size: _PARAM1_ pixels, Map width: _PARAM2_ tiles, Map height: _PARAM3_ tiles, Terrain object: _PARAM4_, Room object: _PARAM5_, Wall object: _PARAM20_, Hallway object: _PARAM6_, Pathfinding object: _PARAM13_, Min room width: _PARAM9_ tiles, Max room width: _PARAM10_ tiles, Min room height: _PARAM11_ tiles, Max room height: _PARAM12_ tiles, Hallway width: _PARAM17_ tiles, Create objects on layer: _PARAM8_, Max separation attempts: _PARAM15_, Connect rooms in a loop: _PARAM16_, Additional paths: _PARAM18_, Delete unused terrain: _PARAM19_)", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Populate map with terrain objects everywhere", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DungeonGenerator::FillWorld" }, "parameters": [ "", "TileSize", "MapWidth", "MapHeight", "TerrainObject", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Create rooms at random locations", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "infiniteLoopWarning": true, "type": "BuiltinCommonInstructions::While", "whileConditions": [ { "type": { "value": "NbObjet" }, "parameters": [ "RoomObject", "<", "RoomQty" ] } ], "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create a new room in a random location on map" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "RoomObject", "RandomInRange(HallwayWidth, MapWidth - MaxRoomWidth - HallwayWidth) * TileSize", "RandomInRange(HallwayWidth, MapHeight - MaxRoomHeight - HallwayWidth) * TileSize", "Layer" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Change the room to a random size" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "RoomObject", "__DungeonGenerator.RoomWidth", "=", "RandomInRange(MinRoomWidth, MaxRoomWidth) * TileSize" ] }, { "type": { "value": "ModVarObjet" }, "parameters": [ "RoomObject", "__DungeonGenerator.RoomHeight", "=", "RandomInRange(MinRoomHeight, MaxRoomHeight) * TileSize" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "RoomObject", "=", "RoomObject.Variable(__DungeonGenerator.RoomWidth)" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "RoomObject", "=", "RoomObject.Variable(__DungeonGenerator.RoomHeight)" ] } ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Separate rooms", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Estimate starting distance between rooms" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.MinSeparationDistance", "=", "ceil((sqrt(pow(MaxRoomWidth,2) + pow(MaxRoomHeight,2)))) * TileSize" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.SeparationCounter", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Set a default value for separation attempts" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "MaxSeparationAttempts", "!=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.MaxSeparationAttempts", "=", "MaxSeparationAttempts" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "MaxSeparationAttempts", "=", "0" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.MaxSeparationAttempts", "=", "10000" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "If rooms are close to each other, move them to a new random location" }, { "infiniteLoopWarning": true, "type": "BuiltinCommonInstructions::While", "whileConditions": [ { "type": { "value": "Distance" }, "parameters": [ "RoomObject", "RoomObject", "Variable(__DungeonGenerator.MinSeparationDistance)", "" ] }, { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.SeparationCounter", "<", "Variable(__DungeonGenerator.MaxSeparationAttempts)" ] } ], "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.SeparationCounter", "+", "1" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move in a random direction the distance of a room" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetXY" }, "parameters": [ "RoomObject", "+", "RandomWithStep(-MaxRoomWidth/2,MaxRoomWidth/2,MaxRoomWidth) * TileSize", "+", "RandomWithStep(-MaxRoomHeight/2,MaxRoomHeight/2,MaxRoomHeight) * TileSize" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move object back into the usable part of map" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PosY" }, "parameters": [ "RoomObject", ">", "(MapHeight - MaxRoomWidth - HallwayWidth)*TileSize" ] } ], "actions": [ { "type": { "value": "SetY" }, "parameters": [ "RoomObject", "=", "(MapHeight - MaxRoomWidth - HallwayWidth)*TileSize" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PosX" }, "parameters": [ "RoomObject", ">", "(MapWidth - MaxRoomWidth - HallwayWidth)*TileSize" ] } ], "actions": [ { "type": { "value": "SetX" }, "parameters": [ "RoomObject", "=", "(MapWidth - MaxRoomWidth - HallwayWidth)*TileSize" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PosX" }, "parameters": [ "RoomObject", "<", "HallwayWidth*TileSize" ] } ], "actions": [ { "type": { "value": "SetX" }, "parameters": [ "RoomObject", "=", "HallwayWidth*TileSize" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PosY" }, "parameters": [ "RoomObject", "<", "HallwayWidth*TileSize" ] } ], "actions": [ { "type": { "value": "SetY" }, "parameters": [ "RoomObject", "=", "HallwayWidth*TileSize" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Draw paths between rooms", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create pathfinder object if one doesn't exist" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NbObjet" }, "parameters": [ "PathfinderObject", "<", "1" ] } ], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "PathfinderObject", "0", "0", "Layer" ] }, { "type": { "value": "PathfindingBehavior::AllowDiagonals" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "no" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "PathfinderObject", "=", "TileSize" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "PathfinderObject", "=", "TileSize" ] }, { "type": { "value": "SetZOrder" }, "parameters": [ "PathfinderObject", "=", "100" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Make sure pathfinding cell size matches tile size" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PathfindingBehavior::CellWidth" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "!=", "TileSize " ] } ], "actions": [ { "type": { "value": "PathfindingBehavior::CellWidth" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "=", "TileSize " ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PathfindingBehavior::CellHeight" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "!=", "TileSize " ] } ], "actions": [ { "type": { "value": "PathfindingBehavior::CellHeight" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "=", "TileSize " ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move the pathfinder object to a random starting room" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickRandomInstance" }, "parameters": [ "", "RoomObject" ] } ], "actions": [ { "type": { "value": "SetXY" }, "parameters": [ "PathfinderObject", "=", "RoomObject.CenterX()", "=", "RoomObject.CenterY()" ] }, { "type": { "value": "SetObjectVariableAsBoolean" }, "parameters": [ "RoomObject", "__DungeonGenerator.Visited", "True" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Reset counter (used to assign RoomID to rooms)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CurrentRoomID", "=", "1" ] }, { "type": { "value": "ModVarObjet" }, "parameters": [ "RoomObject", "__DungeonGenerator.RoomID", "=", "Variable(__DungeonGenerator.CurrentRoomID)" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CurrentRoomID", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Cycle through all rooms, always going to the nearest unvisited room" }, { "infiniteLoopWarning": true, "type": "BuiltinCommonInstructions::While", "whileConditions": [ { "type": { "value": "ObjectVariableAsBoolean" }, "parameters": [ "RoomObject", "__DungeonGenerator.Visited", "False" ] } ], "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickNearest" }, "parameters": [ "RoomObject", "PathfinderObject.X()", "PathfinderObject.Y()", "" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Assign path order if one does not exist" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarObjet" }, "parameters": [ "RoomObject", "__DungeonGenerator.RoomID", "=", "0" ] } ], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "RoomObject", "__DungeonGenerator.RoomID", "=", "Variable(__DungeonGenerator.CurrentRoomID)" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.CurrentRoomID", "+", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Set the destination of the pathfinder to the next room" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "PathfindingBehavior::SetDestination" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "", "RoomObject.CenterX()", "RoomObject.CenterY()" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.PathCounter", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create a hallway object at every cell along the path to the destination" }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "PathfinderObject.PathfindingBehavior::NodeCount()", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "HallwayObject", "PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))", "PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))", "Layer" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Adjust size of hallway objects" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DungeonGenerator::AdjustHallwaySizes" }, "parameters": [ "", "HallwayObject", "PathfinderObject", "PathfindingBehavior", "TileSize", "HallwayWidth", "" ] } ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move the pathfinder object to the room that was just connected with a hallway" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetXY" }, "parameters": [ "PathfinderObject", "=", "RoomObject.CenterX()", "=", "RoomObject.CenterY()" ] }, { "type": { "value": "SetObjectVariableAsBoolean" }, "parameters": [ "RoomObject", "__DungeonGenerator.Visited", "True" ] } ] } ] } ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Close loop", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "If desired, connect a hallway from the last room to the first room" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "CloseLoop", "True", "" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Set the destination of the pathfinder to the starting room" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "VarObjet" }, "parameters": [ "RoomObject", "__DungeonGenerator.RoomID", "=", "1" ] } ], "actions": [ { "type": { "value": "PathfindingBehavior::SetDestination" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "", "RoomObject.CenterX()", "RoomObject.CenterY()" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.PathCounter", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create a hallway object at every cell along the path to the destination" }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "PathfinderObject.PathfindingBehavior::NodeCount()", "conditions": [], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "HallwayObject", "PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))", "PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))", "Layer" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Adjust size of hallway objects" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DungeonGenerator::AdjustHallwaySizes" }, "parameters": [ "", "HallwayObject", "PathfinderObject", "PathfindingBehavior", "TileSize", "HallwayWidth", "" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move the pathfinder object to the room that was just connected with a hallway" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetXY" }, "parameters": [ "PathfinderObject", "=", "RoomObject.CenterX()", "=", "RoomObject.CenterY()" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Add additional paths between rooms", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "If desired, make additional random connections between rooms" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.AdditionalPathCounter", "=", "0" ] } ] }, { "infiniteLoopWarning": true, "type": "BuiltinCommonInstructions::While", "whileConditions": [ { "type": { "value": "VarScene" }, "parameters": [ "__DungeonGenerator.AdditionalPathCounter", "<", "AdditionalPaths" ] } ], "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Set the destination of the pathfinder to the next room (don't select the room that already has the pathfinder)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "PickRandomInstance" }, "parameters": [ "RoomObject", "RoomObject" ] }, { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "PathfinderObject", "RoomObject", "", "", "" ] } ], "actions": [ { "type": { "value": "PathfindingBehavior::SetDestination" }, "parameters": [ "PathfinderObject", "PathfindingBehavior", "", "RoomObject.CenterX()", "RoomObject.CenterY()" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.PathCounter", "=", "0" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create a hallway object at every cell along the path to the destination" }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "PathfinderObject.PathfindingBehavior::NodeCount()", "conditions": [], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "HallwayObject", "PathfinderObject.PathfindingBehavior::GetNodeX(Variable(__DungeonGenerator.PathCounter))", "PathfinderObject.PathfindingBehavior::GetNodeY(Variable(__DungeonGenerator.PathCounter))", "Layer" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Adjust size of hallway objects" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "DungeonGenerator::AdjustHallwaySizes" }, "parameters": [ "", "HallwayObject", "PathfinderObject", "PathfindingBehavior", "TileSize", "HallwayWidth", "" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move the pathfinder object to the room that was just connected with a hallway" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetXY" }, "parameters": [ "PathfinderObject", "=", "RoomObject.CenterX()", "=", "RoomObject.CenterY()" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.AdditionalPathCounter", "+", "1" ] } ] } ] } ] } ], "parameters": [] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Cleanup", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Remove terrain from rooms and hallways.", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Remove terrain from inside rooms and hallways." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "TerrainObject", "RoomObject", "", "", "yes" ] }, { "type": { "value": "CollisionNP" }, "parameters": [ "TerrainObject", "HallwayObject", "", "", "yes" ] } ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "TerrainObject", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Place walls", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::ForEach", "object": "TerrainObject", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create walls where terrain touches hallways but not rooms" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "ObjectVariableAsBoolean" }, "parameters": [ "HallwayObject", "Deleted", "False" ] }, { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "TerrainObject", "HallwayObject", "", "", "yes" ] }, { "type": { "value": "CollisionNP" }, "parameters": [ "TerrainObject", "HallwayObject", "", "", "no" ] }, { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "TerrainObject", "RoomObject", "", "", "yes" ] } ], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "WallObject", "TerrainObject.X()", "TerrainObject.Y()", "Layer" ] }, { "type": { "value": "Delete" }, "parameters": [ "TerrainObject", "" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "WallObject", "=", "TileSize" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "WallObject", "=", "TileSize" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create walls where terrain touches rooms but not hallways" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "TerrainObject", "RoomObject", "", "", "yes" ] }, { "type": { "value": "CollisionNP" }, "parameters": [ "TerrainObject", "RoomObject", "", "", "no" ] }, { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "TerrainObject", "HallwayObject", "", "", "yes" ] } ], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "WallObject", "TerrainObject.X()", "TerrainObject.Y()", "Layer" ] }, { "type": { "value": "Delete" }, "parameters": [ "TerrainObject", "" ] }, { "type": { "value": "ChangeWidth" }, "parameters": [ "WallObject", "=", "TileSize" ] }, { "type": { "value": "ChangeHeight" }, "parameters": [ "WallObject", "=", "TileSize" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Delete hallways that are at least partially inside of rooms " }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "HallwayObject", "RoomObject", "", "", "yes" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "HallwayObject", "" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Set boolean flag for hallways that are doorways (adjacent to room but not touching)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionNP" }, "parameters": [ "HallwayObject", "RoomObject", "", "", "no" ] } ], "actions": [ { "type": { "value": "SetObjectVariableAsBoolean" }, "parameters": [ "HallwayObject", "__DungeonGenerator.IsRoomEntrance", "True" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Cleanup", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Remove extra terrain, if needed" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "DeleteUnused", "True", "" ] }, { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "TerrainObject", "RoomObject", "", "", "no" ] }, { "type": { "inverted": true, "value": "CollisionNP" }, "parameters": [ "TerrainObject", "HallwayObject", "", "", "no" ] } ], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "TerrainObject", "" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Cleanup pathfinder object" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Delete" }, "parameters": [ "PathfinderObject", "" ] } ] } ], "parameters": [] } ], "parameters": [] } ], "parameters": [ { "description": "Tile size (pixels)", "longDescription": "All objects are based on this size", "name": "TileSize", "type": "expression" }, { "description": "Map width (number of colums)", "name": "MapWidth", "type": "expression" }, { "description": "Map height (number of rows)", "name": "MapHeight", "type": "expression" }, { "description": "Terrain object", "longDescription": "Used to fill the map that is not covered by floors, hallways, or walls.", "name": "TerrainObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Room object", "longDescription": "Rooms are placed in random locations and will try to not overlap with other rooms. ", "name": "RoomObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Hallway object", "longDescription": "Used to connect room objects. They follow the path made by the pathfinder object.", "name": "HallwayObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Number of rooms", "longDescription": "Rooms should take less than ~25% of map to ensure non-overlapping rooms. If there are too many rooms, they may end up overlapping each other.", "name": "RoomQty", "type": "expression" }, { "description": "Layer", "name": "Layer", "type": "layer" }, { "description": "Min room width (tiles)", "name": "MinRoomWidth", "type": "expression" }, { "description": "Max room width (tiles)", "name": "MaxRoomWidth", "type": "expression" }, { "description": "Min room height (tiles)", "name": "MinRoomHeight", "type": "expression" }, { "description": "Max room height (tiles)", "name": "MaxRoomHeight", "type": "expression" }, { "description": "Pathfinder object", "longDescription": "Used to identify where hallways are placed between rooms", "name": "PathfinderObject", "supplementaryInformation": "Sprite", "type": "objectList" }, { "description": "Pathfinding behavior (required)", "name": "PathfindingBehavior", "supplementaryInformation": "PathfindingBehavior::PathfindingBehavior", "type": "behavior" }, { "description": "Max separation attempts", "longDescription": "Number of attempts to separate overalapping rooms. When this number is reached, rooms are left in current position. (Default: 10,000)", "name": "MaxSeparationAttempts", "type": "expression" }, { "description": "Connect rooms in a loop", "name": "CloseLoop", "type": "yesorno" }, { "description": "Hallway width (tiles)", "name": "HallwayWidth", "type": "expression" }, { "description": "Additional paths between connect rooms", "name": "AdditionalPaths", "type": "expression" }, { "description": "Delete unused terrain", "name": "DeleteUnused", "type": "trueorfalse" }, { "description": "Wall object", "name": "WallObject", "supplementaryInformation": "Sprite", "type": "objectList" } ], "objectGroups": [] }, { "description": "Calculate the number of grid neighbors around an object. Use \"NeighborCount(Object)\" expression to retrieve this value.", "fullName": "Calculate the number of grid neighbors around an object", "functionType": "Action", "name": "CalculateGridNeighbors", "sentence": "Calculate the number of grid neighbors (_PARAM2_) around _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::ForEach", "object": "Object", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Save center point and size as scene variables (since we can't compare instances of the same object)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ThisCenterX", "=", "Object.CenterX()" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ThisCenterY", "=", "Object.CenterY()" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ThisObjectWidth", "=", "Object.Width()" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ThisNeighborCount", "=", "0" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Initiate offset to start looking for the top-left neighbor" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.NeighborOffsetX", "=", "-1" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.NeighborOffsetY", "=", "-1" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Search for neighbors (but don't consider the center object)" }, { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "3", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "3", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CollisionPoint" }, "parameters": [ "Neighbor", "Variable(__DungeonGenerator.ThisCenterX) + (Variable(__DungeonGenerator.NeighborOffsetX) * Variable(__DungeonGenerator.ThisObjectWidth))", "Variable(__DungeonGenerator.ThisCenterY) + (Variable(__DungeonGenerator.NeighborOffsetY) * Variable(__DungeonGenerator.ThisObjectWidth))" ] } ], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.ThisNeighborCount", "+", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.NeighborOffsetX", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.NeighborOffsetX", "=", "-1" ] }, { "type": { "value": "ModVarScene" }, "parameters": [ "__DungeonGenerator.NeighborOffsetY", "+", "1" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Save neighbor count in real object" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ModVarObjet" }, "parameters": [ "Object", "__DungeonGenerator.Neighbors", "=", "Variable(__DungeonGenerator.ThisNeighborCount)" ] } ] } ] } ], "parameters": [ { "description": "Primary object (or object group)", "name": "Object", "type": "objectList" }, { "description": "Neighbor object (or object group)", "name": "Neighbor", "type": "objectList" } ], "objectGroups": [] }, { "description": "The numerical order this room was created. (Range: 1 to total number of rooms).", "fullName": "Creation order of room", "functionType": "Expression", "name": "RoomID", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "RoomObject.Variable(__DungeonGenerator.RoomID)" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Room object", "name": "RoomObject", "type": "objectList" } ], "objectGroups": [] }, { "description": "Number of grid neighbors of an object. Requires running the \"CalculateGridNeighbors\" action before using this expression.", "fullName": "Number of grid neighbors of an object", "functionType": "Expression", "name": "NeighborCount", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "Object.Variable(__DungeonGenerator.Neighbors)" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "objectList" } ], "objectGroups": [] }, { "description": "Check if hallway is a room entrance.", "fullName": "Hallway is a room entrance", "functionType": "Condition", "name": "IsRoomEntrance", "sentence": "_PARAM1_ is a room entrance", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "ObjectVariableAsBoolean" }, "parameters": [ "Object", "__DungeonGenerator.IsRoomEntrance", "True" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Hallway object", "name": "Object", "type": "objectList" } ], "objectGroups": [] } ], "eventsFunctionsFolderStructure": { "folderName": "__ROOT", "children": [ { "functionName": "AdjustHallwaySizes" }, { "functionName": "FillWorld" }, { "functionName": "GenerateDungeonCave" }, { "functionName": "GenerateDungeonRooms" }, { "functionName": "CalculateGridNeighbors" }, { "functionName": "RoomID" }, { "functionName": "NeighborCount" }, { "functionName": "IsRoomEntrance" } ] }, "eventsBasedBehaviors": [], "eventsBasedObjects": [] }, { "author": "@4ian", "category": "Game mechanic", "dimension": "2D/3D", "extensionNamespace": "", "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets with ammo count, reload timer, and overheat management.", "version": "0.11.0", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", "The properties of the behavior can be used to customize:", "- Cooldown between shots", "- Firing multiple bullets at a time ([open the project online](https://editor.gdevelop.io/?project=example://fire-bullet))", "- Ammo management", "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", "", "A simple example shows how to make firing patterns ([open the project online](https://editor.gdevelop.io/?project=example://firing-patterns))." ], "origin": { "identifier": "FireBullet", "name": "gdevelop-extension-store" }, "tags": [ "fire", "bullet", "spawn", "firerate", "reload", "weapon", "ranged", "ammo", "overheat" ], "authorIds": [ "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", "xpwUwByyImTDcHEqDUqfyg0oRBt1", "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", "gqDaZjCfevOOxBYkK6zlhtZnXCg1" ], "dependencies": [], "globalVariables": [], "sceneVariables": [], "eventsFunctions": [ { "description": "Define helper classes JavaScript code.", "fullName": "Define helper classes", "functionType": "Action", "name": "DefineHelperClasses", "private": true, "sentence": "Define helper classes JavaScript code", "events": [ { "type": "BuiltinCommonInstructions::JsCode", "inlineCode": [ "//@ts-ignore", "if (gdjs.__fireBulletExtension) {", " //@ts-ignore", " return;", "}", "", "/**", " * It can be built the follow:", " * ", " * `objectDefaultRotation.setFromAxisAngle(new THREE.Vector3(1, 0, 0), Math.PI/2);`", " * ", " * `objectDefaultRotation.multiply(new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 0, 1), -Math.PI/2));`", " * ", " */", "const objectDefaultRotation = new THREE.Quaternion(0.5, 0.5, -0.5, 0.5);", "", "/**", " * @param {gdjs.RuntimeObject3D} object", " */", "function rotateObjectToFaceSameWayAsCamera(object) {", " const layer = object.getInstanceContainer().getLayer(object.getLayer());", " const threeCamera = layer.getRenderer().getThreeCamera();", " const threeObject = object.get3DRendererObject();", "", " threeObject.rotation.copy(threeCamera.rotation);", " threeObject.rotation.z = -threeObject.rotation.z;", " threeObject.rotation.x = -threeObject.rotation.x;", " threeObject.quaternion.multiply(objectDefaultRotation);", "", " const {x, y, z } = threeObject.rotation;", " object.setAngle(gdjs.toDegrees(z));", " object.setRotationY(gdjs.toDegrees(y));", " object.setRotationX(gdjs.toDegrees(x));", "}", "", "//@ts-ignore", "gdjs.__fireBulletExtension = {", " rotateObjectToFaceSameWayAsCamera", "};", "" ], "parameterObjects": "", "useStrict": true, "eventsSheetExpanded": true } ], "parameters": [], "objectGroups": [] }, { "fullName": "Rotate the same way as camera", "functionType": "Action", "name": "RotateObjectToFaceSameWayAsCamera", "private": true, "sentence": "Rotate _PARAM1_ to look the same way as the camera", "events": [ { "type": "BuiltinCommonInstructions::JsCode", "inlineCode": [ "const object = objects[0];", "", "const { rotateObjectToFaceSameWayAsCamera } = gdjs.__fireBulletExtension;", "", "rotateObjectToFaceSameWayAsCamera(object);" ], "parameterObjects": "Object", "useStrict": true, "eventsSheetExpanded": false } ], "parameters": [ { "description": "Object", "name": "Object", "type": "objectList" }, { "description": "3D capability", "name": "Object3D", "supplementaryInformation": "Scene3D::Base3DBehavior", "type": "behavior" } ], "objectGroups": [] } ], "eventsFunctionsFolderStructure": { "folderName": "__ROOT", "children": [ { "functionName": "DefineHelperClasses" }, { "functionName": "RotateObjectToFaceSameWayAsCamera" } ] }, "eventsBasedBehaviors": [ { "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "helpPath": "", "iconUrl": "", "name": "FireBullet", "objectType": "", "previewIconUrl": "", "eventsFunctions": [ { "fullName": "", "functionType": "Action", "name": "onCreated", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "ResetObjectTimer" }, "parameters": [ "Object", "\"__FireBullet.FiringCooldown\"" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "AmmoQuantity", "=", "StartingAmmo" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "ShotsBeforeNextReload", "=", "ShotsPerReload" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "Action", "name": "doStepPreEvents", "sentence": "", "events": [ { "colorB": 224, "colorG": 16, "colorR": 189, "creationTime": 0, "name": "Take a shot (if triggered)", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Creators can use the \"FireBullet\" action multiple times in a frame and it will be counted as a single \"shot\"." }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "HasJustFired", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "HasJustFired", "False", "" ] }, { "type": { "value": "ResetObjectTimer" }, "parameters": [ "Object", "\"__FireBullet.FiringCooldown\"" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "TotalShotsFired", "+", "1" ] } ], "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Ammo", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "BooleanVariable" }, "parameters": [ "UnlimitedAmmo", "True", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "AmmoQuantity", "=", "max(0, AmmoQuantity - 1)" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "ShotsPerReload", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ShotsBeforeNextReload", "-", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "AutomaticReloading", "True", "" ] }, { "type": { "value": "FireBullet::FireBullet::IsReloadNeeded" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsReloadInProgress" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "FireBullet::FireBullet::ReloadAmmo" }, "parameters": [ "Object", "Behavior", "" ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Overheat", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "HeatIncreasePerShot", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "HeatLevel", "+", "HeatIncreasePerShot" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "OverheatDuration", ">", "0" ] }, { "type": { "value": "FireBullet::FireBullet::IsOverheated" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "ResetObjectTimer" }, "parameters": [ "Object", "\"__FireBullet.OverheatDuration\"" ] } ] } ] } ], "parameters": [] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Reload", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Detect when reload is completed" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::IsReloadInProgress" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "CompareObjectTimer" }, "parameters": [ "Object", "\"__FireBullet.ReloadingTimer\"", ">=", "ReloadDuration" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "TotalReloadsCompleted", "+", "1" ] }, { "type": { "value": "SetBooleanVariable" }, "parameters": [ "ReloadInProgress", "False", "" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::IsUnlimitedAmmo" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ShotsBeforeNextReload", "=", "ShotsPerReload" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Only reload the amount of ammo available" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsUnlimitedAmmo" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ShotsBeforeNextReload", "=", "min(ShotsPerReload, AmmoQuantity)" ] } ] } ] } ], "parameters": [] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Cooling", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "HeatLevel", ">", "0" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "ExponentialCoolingRate", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "HeatLevel", "=", "max(0, HeatLevel - TimeDelta() * ExponentialCoolingRate * HeatLevel)" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "LinearCoolingRate", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "HeatLevel", "=", "max(0, HeatLevel - TimeDelta() * LinearCoolingRate)" ] } ] } ] } ], "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::Fire" }, "parameters": [ "Object", "Behavior", "XPosition", "YPosition", "Bullet", "Object.AngleToObject(TargetObject)", "Speed", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "X position, where to create the bullet", "name": "XPosition", "type": "expression" }, { "description": "Y position, where to create the bullet", "name": "YPosition", "type": "expression" }, { "description": "The bullet object", "name": "Bullet", "type": "objectListOrEmptyIfJustDeclared" }, { "description": "Target object", "name": "TargetObject", "type": "objectList" }, { "description": "Speed of the bullet, in pixels per second", "name": "Speed", "type": "expression" } ], "objectGroups": [] }, { "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::Fire" }, "parameters": [ "Object", "Behavior", "XPosition", "YPosition", "Bullet", "Object.AngleToPosition(TargetXPosition, TargetYPosition)", "Speed", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "X position, where to create the bullet", "name": "XPosition", "type": "expression" }, { "description": "Y position, where to create the bullet", "name": "YPosition", "type": "expression" }, { "description": "The bullet object", "name": "Bullet", "type": "objectListOrEmptyIfJustDeclared" }, { "description": "Target X position", "name": "TargetXPosition", "type": "expression" }, { "description": "Target Y position", "name": "TargetYPosition", "type": "expression" }, { "description": "Speed of the bullet, in pixels per second", "name": "Speed", "type": "expression" } ], "objectGroups": [] }, { "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::IsReadyToShoot" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "HasJustFired", "True", "" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "BulletQuantity", "=", "1" ] } ], "actions": [ { "type": { "value": "FireBullet::FireBullet::FireSingleBullet" }, "parameters": [ "Object", "Behavior", "XPosition", "YPosition", "Bullet", "Angle", "Speed", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "BulletQuantity", ">", "1" ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Repeat", "repeatExpression": "BulletQuantity", "conditions": [], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::FiringArc" }, "parameters": [ "Object", "Behavior", "!=", "360", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "MultiShotAngle", "=", "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / (BulletQuantity - 1)) " ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "When firing in a full circle, prevent first and last bullet from using the same angle" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::FiringArc" }, "parameters": [ "Object", "Behavior", "=", "360", "" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "MultiShotAngle", "=", "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / BulletQuantity) " ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::FireSingleBullet" }, "parameters": [ "Object", "Behavior", "XPosition", "YPosition", "Bullet", "MultiShotAngle", "Speed", "" ] }, { "type": { "value": "SetNumberVariable" }, "parameters": [ "BulletIndex", "+", "1" ] } ] } ] } ], "variables": [ { "folded": true, "name": "MultiShotAngle", "type": "number", "value": 0 }, { "name": "BulletIndex", "type": "number", "value": 0 } ] } ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "X position, where to create the bullet", "name": "XPosition", "type": "expression" }, { "description": "Y position, where to create the bullet", "name": "YPosition", "type": "expression" }, { "description": "The bullet object", "name": "Bullet", "type": "objectListOrEmptyIfJustDeclared" }, { "description": "Angle of the bullet, in degrees", "name": "Angle", "type": "expression" }, { "description": "Speed of the bullet, in pixels per second", "name": "Speed", "type": "expression" } ], "objectGroups": [] }, { "description": "Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.", "fullName": "Fire a single bullet", "functionType": "Action", "group": "Firing", "name": "FireSingleBullet", "private": true, "sentence": "Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, "name": "Fire a single bullet", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Create bullet" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "Create" }, "parameters": [ "", "Bullet", "XPosition", "YPosition", "BulletLayer" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Move bullet (apply angle and bullet speed variances)" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "RandomizedAngle", "=", "Angle + RandomInRange(-AngleVariance, AngleVariance)" ] }, { "type": { "value": "AddForceAL" }, "parameters": [ "Bullet", "RandomizedAngle", "Speed + RandomInRange(-BulletSpeedVariance, BulletSpeedVariance)", "1" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Rotate newly created bullet, if needed" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "RotateBullet", "True", "" ] } ], "actions": [ { "type": { "value": "SetAngle" }, "parameters": [ "Bullet", "=", "RandomizedAngle" ] } ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Update statistics" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "TotalBulletsCreated", "+", "1" ] } ] } ], "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "X position, where to create the bullet", "name": "XPosition", "type": "expression" }, { "description": "Y position, where to create the bullet", "name": "YPosition", "type": "expression" }, { "description": "The bullet object", "name": "Bullet", "type": "objectListOrEmptyIfJustDeclared" }, { "description": "Angle of the bullet, in degrees", "name": "Angle", "type": "expression" }, { "description": "Speed of the bullet, in pixels per second", "name": "Speed", "type": "expression" } ], "objectGroups": [] }, { "description": "Reload ammo.", "fullName": "Reload ammo", "functionType": "Action", "name": "ReloadAmmo", "sentence": "Reload ammo on _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsOutOfAmmo" }, "parameters": [ "Object", "Behavior", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "ReloadInProgress", "True", "" ] }, { "type": { "value": "ResetObjectTimer" }, "parameters": [ "Object", "\"__FireBullet.ReloadingTimer\"" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if the object has just fired something.", "fullName": "Has just fired", "functionType": "Condition", "group": "Firing", "name": "HasJustFired", "sentence": "_PARAM0_ has just fired", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "HasJustFired", "True", "" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if bullet rotates to match trajectory.", "fullName": "Is bullet rotation enabled", "functionType": "Condition", "group": "Firing", "name": "BulletRotationEnabled", "sentence": "Bullet rotation enabled on _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "RotateBullet", "True", "" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.", "fullName": "Firing arc", "functionType": "ExpressionAndCondition", "group": "Multi-Fire", "name": "FiringArc", "sentence": "the firing arc", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "FiringArc" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "FiringArc", "group": "Multi-Fire", "name": "SetFiringArcOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "FiringArc", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Firing arc (degrees) Range: 0 to 360", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.", "fullName": "Set firing arc (deprecated)", "functionType": "Action", "group": "Multi-Fire", "name": "SetFiringArc", "private": true, "sentence": "Set firing arc of _PARAM0_ to _PARAM2_ degrees", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetFiringArcOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Firing arc (degrees) Range: 0 to 360", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the angle variance (in degrees) applied to each bullet.", "fullName": "Angle variance", "functionType": "ExpressionAndCondition", "group": "Firing variance", "name": "AngleVariance", "sentence": "the angle variance", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "AngleVariance" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "AngleVariance", "group": "Firing variance", "name": "SetAngleVarianceOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "AngleVariance", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Angle variance (degrees) Range: 0 to 180", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the angle variance (in degrees) applied to each bullet.", "fullName": "Set angle variance (deprecated)", "functionType": "Action", "group": "Firing", "name": "SetAngleVariance", "private": true, "sentence": "Set angle variance of _PARAM0_ to _PARAM2_ degrees", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetAngleVarianceOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Angle variance (degrees) Range: 0 to 180", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the bullet speed variance (pixels per second) applied to each bullet.", "fullName": "Bullet speed variance", "functionType": "ExpressionAndCondition", "group": "Firing variance", "name": "BulletSpeedVariance", "sentence": "the bullet speed variance", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "BulletSpeedVariance" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "BulletSpeedVariance", "group": "Firing variance", "name": "SetBulletSpeedVarianceOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "BulletSpeedVariance", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Angle variance (degrees) Range: 0 to 180", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the speed variance (pixels per second) applied to each bullet.", "fullName": "Set bullet speed variance (deprecated)", "functionType": "Action", "group": "Multi-Fire", "name": "SetBulletSpeedVariance", "private": true, "sentence": "Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetBulletSpeedVarianceOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Angle variance (degrees) Range: 0 to 180", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the number of bullets shot every time the \"fire bullet\" action is used.", "fullName": "Bullets per shot", "functionType": "ExpressionAndCondition", "group": "Multi-Fire", "name": "BulletQuantity", "sentence": "the number of bullets per shot", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "BulletQuantity" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "BulletQuantity", "group": "Multi-Fire", "name": "SetBulletQuantityOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "BulletQuantity", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Bullets", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the number of bullets shot every time the \"fire bullet\" action is used.", "fullName": "Set number of bullets per shot (deprecated)", "functionType": "Action", "group": "Multi-Fire", "name": "SetBulletQuantity", "private": true, "sentence": "Set number of bullets per shot of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetBulletQuantityOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Bullets", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the layer that bullets are created on.", "fullName": "Set bullet layer", "functionType": "Action", "group": "Firing", "name": "SetBulletLayer", "sentence": "Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetStringVariable" }, "parameters": [ "BulletLayer", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Layer", "name": "Value", "type": "layer" } ], "objectGroups": [] }, { "description": "Enable bullet rotation.", "fullName": "Enable (or disable) bullet rotation", "functionType": "Action", "group": "Firing", "name": "SetRotateBullet", "sentence": "Enable bullet rotation on _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "BooleanVariable" }, "parameters": [ "Value", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "RotateBullet", "False", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "Value", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "RotateBullet", "True", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "defaultValue": "yes", "description": "Rotate bullet to match trajetory", "name": "Value", "optional": true, "type": "yesorno" } ], "objectGroups": [] }, { "description": "Enable unlimited ammo.", "fullName": "Enable (or disable) unlimited ammo", "functionType": "Action", "group": "Ammo", "name": "SetUnlimitedAmmo", "sentence": "Enable unlimited ammo on _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "BooleanVariable" }, "parameters": [ "Value", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "UnlimitedAmmo", "False", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "Value", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "UnlimitedAmmo", "True", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "defaultValue": "yes", "description": "Unlimited ammo", "name": "Value", "optional": true, "type": "yesorno" } ], "objectGroups": [] }, { "description": "the firing cooldown (in seconds) also known as rate of fire.", "fullName": "Firing cooldown", "functionType": "ExpressionAndCondition", "group": "Firing", "name": "Cooldown", "sentence": "the firing cooldown", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "FireCooldown" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "Cooldown", "group": "Firing", "name": "SetCooldownOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "FireCooldown", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Cooldown in seconds", "name": "NewCooldown", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the firing cooldown, which changes the rate of fire.", "fullName": "Set firing cooldown (deprecated)", "functionType": "Action", "group": "Firing", "name": "SetCooldown", "private": true, "sentence": "Set the fire rate of _PARAM0_ to _PARAM2_ seconds", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetCooldownOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Cooldown in seconds", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the reload duration (in seconds).", "fullName": "Reload duration", "functionType": "ExpressionAndCondition", "group": "Reload", "name": "ReloadDuration", "sentence": "the reload duration", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ReloadDuration" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "ReloadDuration", "group": "Reload", "name": "SetReloadDurationOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ReloadDuration", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Reload duration (seconds)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the duration to reload ammo.", "fullName": "Set reload duration (deprecated)", "functionType": "Action", "group": "Reload", "name": "SetReloadDuration", "private": true, "sentence": "Set the reload duration of _PARAM0_ to _PARAM2_ seconds", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetReloadDurationOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Reload duration (seconds)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.", "fullName": "Overheat duration", "functionType": "ExpressionAndCondition", "group": "Overheat", "name": "OverheatDuration", "sentence": "the overheat duration", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "OverheatDuration" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "OverheatDuration", "group": "Overheat", "name": "SetOverheatDurationOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "OverheatDuration", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Overheat duration (seconds)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the duration after becoming overheated.", "fullName": "Set overheat duration (deprecated)", "functionType": "Action", "group": "Overheat", "name": "SetOverheatDuration", "private": true, "sentence": "Set the overheat duration of _PARAM0_ to _PARAM2_ seconds", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetOverheatDurationOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Overheat duration (seconds)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the ammo quantity.", "fullName": "Ammo quantity", "functionType": "ExpressionAndCondition", "group": "Ammo", "name": "AmmoQuantity", "sentence": "the ammo quantity", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "AmmoQuantity" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "AmmoQuantity", "group": "Ammo", "name": "SetAmmoQuantityOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "AmmoQuantity", "=", "max(0, Value)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Ammo", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the quantity of ammo.", "fullName": "Set ammo quantity (deprecated)", "functionType": "Action", "group": "Ammo", "name": "SetAmmoQuantity", "private": true, "sentence": "Set the ammo quantity of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetAmmoQuantityOp" }, "parameters": [ "Object", "Behavior", "=", "max(0, Value)", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Ammo", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the heat increase per shot.", "fullName": "Heat increase per shot", "functionType": "ExpressionAndCondition", "group": "Overheat", "name": "HeatIncreasePerShot", "sentence": "the heat increase per shot", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "HeatIncreasePerShot" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "HeatIncreasePerShot", "group": "Overheat", "name": "SetHeatPerShotOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "HeatIncreasePerShot", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Heat increase per shot (Range: 0 to 1)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the heat increase per shot.", "fullName": "Set heat increase per shot (deprecated)", "functionType": "Action", "group": "Overheat", "name": "SetHeatPerShot", "private": true, "sentence": "Set the heat increase of _PARAM0_ to _PARAM2_ per shot", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetHeatPerShotOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Heat increase per shot (Range: 0 to 1)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the max ammo.", "fullName": "Max ammo", "functionType": "ExpressionAndCondition", "group": "Ammo", "name": "MaxAmmo", "sentence": "the max ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "MaxAmmo" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "MaxAmmo", "group": "Ammo", "name": "SetMaxAmmoOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "MaxAmmo", "=", "Value" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "MaxAmmo", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "AmmoQuantity", "=", "min(MaxAmmo, AmmoQuantity)" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Max ammo", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the max ammo.", "fullName": "Set max ammo (deprecated)", "functionType": "Action", "group": "Ammo", "name": "SetMaxAmmo", "private": true, "sentence": "Set the max ammo of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetMaxAmmoOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Max ammo", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Reset total shots fired.", "fullName": "Reset total shots fired", "functionType": "Action", "group": "Stats", "name": "ResetTotalShotsFired", "sentence": "Reset total shots fired by _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "TotalShotsFired", "=", "0" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Reset total bullets created.", "fullName": "Reset total bullets created", "functionType": "Action", "group": "Stats", "name": "ResetTotalBulletsCreated", "sentence": "Reset total bullets created by _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "TotalBulletsCreated", "=", "0" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Reset total reloads completed.", "fullName": "Reset total reloads completed", "functionType": "Action", "group": "Stats", "name": "ResetTotalReloadsCompleted", "sentence": "Reset total reloads completed by _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "TotalReloadsCompleted", "=", "0" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "the number of shots per reload.", "fullName": "Shots per reload", "functionType": "ExpressionAndCondition", "group": "Reload", "name": "ShotsPerReload", "sentence": "the shots per reload", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ShotsPerReload" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "ShotsPerReload", "group": "Reload", "name": "SetShotsPerReloadOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ShotsPerReload", "=", "Value" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "ShotsBeforeNextReload", ">", "ShotsPerReload" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ShotsBeforeNextReload", "=", "ShotsPerReload" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Shots per reload", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the number of shots per reload.", "fullName": "Set shots per reload (deprecated)", "functionType": "Action", "group": "Reload", "name": "SetShotsPerReload", "private": true, "sentence": "Set the shots per reload of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetShotsPerReloadOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Shots per reload", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Enable (or disable) automatic reloading.", "fullName": "Enable (or disable) automatic reloading", "functionType": "Action", "group": "Reload", "name": "SetAutomaticReload", "sentence": "Enable automatic reloading on _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "AutomaticReloading", "False", "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "Value", "True", "" ] } ], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "AutomaticReloading", "True", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "defaultValue": "yes", "description": "Enable automatic reloading", "name": "Value", "optional": true, "type": "yesorno" } ], "objectGroups": [] }, { "description": "the linear cooling rate (per second).", "fullName": "Linear cooling rate", "functionType": "ExpressionAndCondition", "group": "Overheat", "name": "LinearCoolingRate", "sentence": "the linear cooling rate", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "LinearCoolingRate" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "LinearCoolingRate", "group": "Overheat", "name": "SetLinearCoolingRateOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "LinearCoolingRate", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Heat cooling rate (per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the linear rate of cooling.", "fullName": "Set linear cooling rate (deprecated)", "functionType": "Action", "group": "Overheat", "name": "SetLinearCoolingRate", "private": true, "sentence": "Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetLinearCoolingRateOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Heat cooling rate (per second)", "name": "Value", "type": "expression" } ], "objectGroups": [] }, { "description": "the exponential cooling rate, per second.", "fullName": "Exponential cooling rate", "functionType": "ExpressionAndCondition", "group": "Overheat", "name": "ExponentialCoolingRate", "sentence": "the exponential cooling rate", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ExponentialCoolingRate" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", "functionType": "ActionWithOperator", "getterName": "ExponentialCoolingRate", "group": "Overheat", "name": "SetExponentialCoolingRateOp", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "ExponentialCoolingRate", "=", "Value" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Exponential cooling rate", "name": "Value", "supplementaryInformation": "[\"Exponential\",\"Linear\"]", "type": "expression" } ], "objectGroups": [] }, { "description": "Change the exponential rate of cooling.", "fullName": "Set exponential cooling rate (deprecated)", "functionType": "Action", "group": "Overheat", "name": "SetExponentialCoolingRate", "private": true, "sentence": "Set the exponential cooling rate of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::FireBullet::SetExponentialCoolingRateOp" }, "parameters": [ "Object", "Behavior", "=", "Value", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Exponential cooling rate", "name": "Value", "supplementaryInformation": "[\"Exponential\",\"Linear\"]", "type": "expression" } ], "objectGroups": [] }, { "description": "Increase ammo quantity.", "fullName": "Increase ammo", "functionType": "Action", "name": "IncreaseAmmo", "sentence": "Increase ammo of _PARAM0_ by _PARAM2_ shots", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "AmmoQuantity", "+", "AmmoGained" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "If Max Ammo is set, do not exceed the value" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "MaxAmmo", ">", "0" ] } ], "actions": [ { "type": { "value": "SetNumberVariable" }, "parameters": [ "AmmoQuantity", "=", "min(MaxAmmo, AmmoQuantity)" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::IsReloadNeeded" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "BooleanVariable" }, "parameters": [ "AutomaticReloading", "True", "" ] } ], "actions": [ { "type": { "value": "FireBullet::FireBullet::ReloadAmmo" }, "parameters": [ "Object", "Behavior", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { "description": "Ammo gained", "name": "AmmoGained", "type": "expression" } ], "objectGroups": [] }, { "description": "Layer that bullets are created on.", "fullName": "Bullet layer", "functionType": "StringExpression", "group": "Multi-Fire", "name": "BulletLayer", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnString" }, "parameters": [ "BulletLayer" ] } ] } ], "expressionType": { "type": "layer" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "the heat level (range: 0 to 1).", "fullName": "Heat level", "functionType": "ExpressionAndCondition", "group": "Overheat", "name": "HeatLevel", "sentence": "the heat level", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "min(1, HeatLevel)" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Total shots fired (multi-bullet shots are considered one shot).", "fullName": "Shots fired", "functionType": "Expression", "group": "Stats", "name": "TotalShotsFired", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "TotalShotsFired" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Total bullets created.", "fullName": "Bullets created", "functionType": "Expression", "group": "Stats", "name": "TotalBulletsCreated", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "TotalBulletsCreated" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Reloads completed.", "fullName": "Reloads completed", "functionType": "Expression", "group": "Stats", "name": "TotalReloadsCompleted", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "TotalReloadsCompleted" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "the remaining shots before the next reload is required.", "fullName": "Shots before next reload", "functionType": "ExpressionAndCondition", "group": "Reload", "name": "ShotsBeforeNextReload", "sentence": "the remaining shots (before the next reload)", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "ShotsBeforeNextReload" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "the remaining duration before the cooldown will permit a bullet to be fired, in seconds.", "fullName": "Duration before cooldown end", "functionType": "ExpressionAndCondition", "group": "Firing", "name": "CooldownTimeLeft", "sentence": "the remaining duration before the cooldown end", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "max(0, FireCooldown - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "the remaining duration before the overheat penalty ends, in seconds.", "fullName": "Duration before overheat end", "functionType": "ExpressionAndCondition", "group": "Overheat", "name": "OverheatTimeLeft", "sentence": "the remaining duration before the overheat end", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CompareObjectTimer" }, "parameters": [ "Object", "\"__FireBullet.OverheatDuration\"", ">", "0" ] } ], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "max(0, OverheatDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "the remaining duration before the reload finishes, in seconds.", "fullName": "Duration before the reload finishes", "functionType": "ExpressionAndCondition", "group": "Reload", "name": "ReloadTimeLeft", "sentence": "the remaining duration before the reload finishes", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "CompareObjectTimer" }, "parameters": [ "Object", "\"__FireBullet.ReloadingTimer\"", ">", "0" ] } ], "actions": [ { "type": { "value": "SetReturnNumber" }, "parameters": [ "max(0, ReloadDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.ReloadingTimer\"))" ] } ] } ], "expressionType": { "type": "expression" }, "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if object is currently performing an ammo reload.", "fullName": "Is ammo reloading in progress", "functionType": "Condition", "group": "Reload", "name": "IsReloadInProgress", "sentence": "_PARAM0_ is reloading ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "ReloadInProgress", "True", "" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if object is ready to shoot.", "fullName": "Is ready to shoot", "functionType": "Condition", "group": "Firing", "name": "IsReadyToShoot", "sentence": "_PARAM0_ is ready to shoot", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "HasJustFired", "True", "" ] }, { "type": { "value": "BuiltinCommonInstructions::And" }, "parameters": [], "subInstructions": [ { "type": { "value": "BehaviorActivated" }, "parameters": [ "Object", "Behavior" ] }, { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsOutOfAmmo" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsReloadNeeded" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsReloadInProgress" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsFiringCooldownActive" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsOverheated" }, "parameters": [ "Object", "Behavior", "" ] } ] } ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if automatic reloading is enabled.", "fullName": "Is automatic reloading enabled", "functionType": "Condition", "group": "Reload", "name": "IsAutomaticReloadingEnabled", "sentence": "Automatic reloading is enabled on_PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "AutomaticReloading", "True", "" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if ammo is unlimited.", "fullName": "Is ammo unlimited", "functionType": "Condition", "group": "Ammo", "name": "IsUnlimitedAmmo", "sentence": "_PARAM0_ has unlimited ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BooleanVariable" }, "parameters": [ "UnlimitedAmmo", "True", "" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if object has no ammo available.", "fullName": "Is out of ammo", "functionType": "Condition", "group": "Ammo", "name": "IsOutOfAmmo", "sentence": "_PARAM0_ is out of ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, "value": "FireBullet::FireBullet::IsUnlimitedAmmo" }, "parameters": [ "Object", "Behavior", "" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "AmmoQuantity", "<=", "0" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if object needs to reload ammo.", "fullName": "Is a reload needed", "functionType": "Condition", "group": "Reload", "name": "IsReloadNeeded", "sentence": "_PARAM0_ needs to reload ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, "g": 230, "r": 255, "textB": 0, "textG": 0, "textR": 0 }, "comment": "Shots per reload must not be \"0\"" }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "ShotsPerReload", ">", "0" ] }, { "type": { "value": "NumberVariable" }, "parameters": [ "ShotsBeforeNextReload", "=", "0" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if object is overheated.", "fullName": "Is overheated", "functionType": "Condition", "group": "Overheat", "name": "IsOverheated", "sentence": "_PARAM0_ is overheated", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::Or" }, "parameters": [], "subInstructions": [ { "type": { "value": "NumberVariable" }, "parameters": [ "HeatLevel", ">=", "1" ] }, { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.Behavior::OverheatTimeLeft()", ">", "0" ] } ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Check if firing cooldown is active.", "fullName": "Is firing cooldown active", "functionType": "Condition", "group": "Firing", "name": "IsFiringCooldownActive", "sentence": "Firing cooldown is active on _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "False" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ "Object.Behavior::CooldownTimeLeft()", ">", "0" ] } ], "actions": [ { "type": { "value": "SetReturnBoolean" }, "parameters": [ "True" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { "description": "Notify that the object has just fired something. This is used by the 3D fire actions.", "fullName": "Notify has just fired", "functionType": "Action", "group": "Firing", "name": "NotifyHasJustFired", "private": true, "sentence": "Notify _PARAM0_ has just fired", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "SetBooleanVariable" }, "parameters": [ "HasJustFired", "True", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] } ], "eventsFunctionsFolderStructure": { "folderName": "__ROOT", "children": [ { "functionName": "onCreated" }, { "functionName": "doStepPreEvents" }, { "functionName": "FireTowardObject" }, { "functionName": "FireTowardPosition" }, { "functionName": "Fire" }, { "folderName": "Firing", "children": [ { "functionName": "FireSingleBullet" }, { "functionName": "HasJustFired" }, { "functionName": "NotifyHasJustFired" }, { "functionName": "BulletRotationEnabled" }, { "functionName": "SetAngleVariance" }, { "functionName": "SetBulletLayer" }, { "functionName": "SetRotateBullet" }, { "functionName": "Cooldown" }, { "functionName": "SetCooldownOp" }, { "functionName": "SetCooldown" }, { "functionName": "CooldownTimeLeft" }, { "functionName": "IsReadyToShoot" }, { "functionName": "IsFiringCooldownActive" } ] }, { "functionName": "ReloadAmmo" }, { "folderName": "Multi-Fire", "children": [ { "functionName": "FiringArc" }, { "functionName": "SetFiringArcOp" }, { "functionName": "SetFiringArc" }, { "functionName": "SetBulletSpeedVariance" }, { "functionName": "BulletQuantity" }, { "functionName": "SetBulletQuantityOp" }, { "functionName": "SetBulletQuantity" }, { "functionName": "BulletLayer" } ] }, { "folderName": "Firing variance", "children": [ { "functionName": "AngleVariance" }, { "functionName": "SetAngleVarianceOp" }, { "functionName": "BulletSpeedVariance" }, { "functionName": "SetBulletSpeedVarianceOp" } ] }, { "folderName": "Ammo", "children": [ { "functionName": "SetUnlimitedAmmo" }, { "functionName": "AmmoQuantity" }, { "functionName": "SetAmmoQuantityOp" }, { "functionName": "SetAmmoQuantity" }, { "functionName": "MaxAmmo" }, { "functionName": "SetMaxAmmoOp" }, { "functionName": "SetMaxAmmo" }, { "functionName": "IsUnlimitedAmmo" }, { "functionName": "IsOutOfAmmo" } ] }, { "folderName": "Reload", "children": [ { "functionName": "ReloadDuration" }, { "functionName": "SetReloadDurationOp" }, { "functionName": "SetReloadDuration" }, { "functionName": "ShotsPerReload" }, { "functionName": "SetShotsPerReloadOp" }, { "functionName": "SetShotsPerReload" }, { "functionName": "SetAutomaticReload" }, { "functionName": "ShotsBeforeNextReload" }, { "functionName": "ReloadTimeLeft" }, { "functionName": "IsReloadInProgress" }, { "functionName": "IsAutomaticReloadingEnabled" }, { "functionName": "IsReloadNeeded" } ] }, { "folderName": "Overheat", "children": [ { "functionName": "OverheatDuration" }, { "functionName": "SetOverheatDurationOp" }, { "functionName": "SetOverheatDuration" }, { "functionName": "HeatIncreasePerShot" }, { "functionName": "SetHeatPerShotOp" }, { "functionName": "SetHeatPerShot" }, { "functionName": "LinearCoolingRate" }, { "functionName": "SetLinearCoolingRateOp" }, { "functionName": "SetLinearCoolingRate" }, { "functionName": "ExponentialCoolingRate" }, { "functionName": "SetExponentialCoolingRateOp" }, { "functionName": "SetExponentialCoolingRate" }, { "functionName": "HeatLevel" }, { "functionName": "OverheatTimeLeft" }, { "functionName": "IsOverheated" } ] }, { "folderName": "Stats", "children": [ { "functionName": "ResetTotalShotsFired" }, { "functionName": "ResetTotalBulletsCreated" }, { "functionName": "ResetTotalReloadsCompleted" }, { "functionName": "TotalShotsFired" }, { "functionName": "TotalBulletsCreated" }, { "functionName": "TotalReloadsCompleted" } ] }, { "functionName": "IncreaseAmmo" } ] }, "propertyDescriptors": [ { "value": "0.1", "type": "Number", "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", "hidden": true, "name": "HasJustFired" }, { "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", "name": "RotateBullet" }, { "value": "45", "type": "Number", "unit": "DegreeAngle", "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", "name": "FiringArc" }, { "value": "1", "type": "Number", "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", "name": "BulletQuantity" }, { "value": "0", "type": "Number", "unit": "DegreeAngle", "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", "advanced": true, "name": "AngleVariance" }, { "value": "0", "type": "Number", "unit": "PixelSpeed", "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", "advanced": true, "name": "BulletSpeedVariance" }, { "value": "0", "type": "Number", "label": "Ammo quantity (current)", "hidden": true, "name": "AmmoQuantity" }, { "value": "0", "type": "Number", "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", "advanced": true, "name": "ShotsPerReload" }, { "value": "1", "type": "Number", "unit": "Second", "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", "advanced": true, "name": "ReloadDuration" }, { "value": "0", "type": "Number", "label": "Max ammo ", "group": "Ammo", "advanced": true, "name": "MaxAmmo" }, { "value": "0", "type": "Number", "label": "Shots before next reload", "hidden": true, "name": "ShotsBeforeNextReload" }, { "value": "0", "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", "hidden": true, "name": "TotalShotsFired" }, { "value": "0", "type": "Number", "label": "Total bullets created", "hidden": true, "name": "TotalBulletsCreated" }, { "value": "0", "type": "Number", "label": "Starting ammo", "group": "Ammo", "advanced": true, "name": "StartingAmmo" }, { "value": "0", "type": "Number", "label": "Total reloads completed", "hidden": true, "name": "TotalReloadsCompleted" }, { "value": "true", "type": "Boolean", "label": "Unlimited ammo", "group": "Ammo", "advanced": true, "name": "UnlimitedAmmo" }, { "value": "", "type": "Boolean", "label": "", "hidden": true, "name": "ReloadInProgress" }, { "value": "0", "type": "Number", "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", "advanced": true, "name": "HeatIncreasePerShot" }, { "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", "hidden": true, "name": "HeatLevel" }, { "value": "true", "type": "Boolean", "label": "Reload automatically", "group": "Reload", "advanced": true, "name": "AutomaticReloading" }, { "value": "0", "type": "Number", "unit": "Second", "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", "advanced": true, "name": "OverheatDuration" }, { "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", "group": "Overheat", "advanced": true, "name": "LinearCoolingRate" }, { "value": "0.3", "type": "Number", "label": "Exponential cooling rate (per second)", "description": "Happens faster when heat is high and slower when heat is low.", "group": "Overheat", "extraInformation": [ "Linear", "Exponential" ], "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, { "value": "", "type": "String", "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", "hidden": true, "name": "BulletLayer" }, { "value": "0", "type": "Number", "label": "", "hidden": true, "name": "RandomizedAngle" } ], "propertiesFolderStructure": { "folderName": "__ROOT", "children": [ { "propertyName": "FireCooldown" }, { "propertyName": "HasJustFired" }, { "propertyName": "RotateBullet" }, { "folderName": "Multi-Fire", "children": [ { "propertyName": "FiringArc" }, { "propertyName": "BulletQuantity" } ] }, { "folderName": "Firing variance", "children": [ { "propertyName": "AngleVariance" }, { "propertyName": "BulletSpeedVariance" } ] }, { "propertyName": "AmmoQuantity" }, { "folderName": "Reload", "children": [ { "propertyName": "ShotsPerReload" }, { "propertyName": "ReloadDuration" }, { "propertyName": "AutomaticReloading" } ] }, { "folderName": "Ammo", "children": [ { "propertyName": "MaxAmmo" }, { "propertyName": "StartingAmmo" }, { "propertyName": "UnlimitedAmmo" } ] }, { "propertyName": "ShotsBeforeNextReload" }, { "propertyName": "TotalShotsFired" }, { "propertyName": "TotalBulletsCreated" }, { "propertyName": "TotalReloadsCompleted" }, { "propertyName": "ReloadInProgress" }, { "folderName": "Overheat", "children": [ { "propertyName": "HeatIncreasePerShot" }, { "propertyName": "OverheatDuration" }, { "propertyName": "LinearCoolingRate" }, { "propertyName": "ExponentialCoolingRate" } ] }, { "propertyName": "HeatLevel" }, { "folderName": "Shooting configuration", "children": [ { "propertyName": "BulletLayer" } ] }, { "propertyName": "RandomizedAngle" } ] } }, { "description": "Fire bullets using 3D physics.", "fullName": "3D fire bullet", "helpPath": "", "iconUrl": "", "name": "FireBullet3D", "objectType": "", "previewIconUrl": "", "eventsFunctions": [ { "description": "Fire bullets from the object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets from 3D object", "functionType": "Action", "name": "FireForwardObject3D", "sentence": "Fire _PARAM5_ from _PARAM0_ (if ready) with offset _PARAM2_ ; _PARAM3_ ; _PARAM4_ at speed _PARAM8_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::IsReadyToShoot" }, "parameters": [ "Object", "FireBullet", "" ] } ], "actions": [ { "type": { "value": "FireBullet::FireBullet::NotifyHasJustFired" }, "parameters": [ "Object", "FireBullet", "" ] }, { "type": { "value": "Create" }, "parameters": [ "", "Bullet", "0", "0", "Object.Layer()" ] }, { "type": { "value": "SetCenter" }, "parameters": [ "Bullet", "=", "Object.CenterX()", "=", "Object.CenterY()" ] }, { "type": { "value": "Scene3D::Base3DBehavior::SetCenterZ" }, "parameters": [ "Bullet", "Object3D", "=", "Object.Object3D::CenterZ()" ] }, { "type": { "value": "SetX" }, "parameters": [ "Bullet", "+", "OffsetX * Object.Object3D::ForwardX() + OffsetY * Object.Object3D::RightX() + OffsetZ * Object.Object3D::UpX()" ] }, { "type": { "value": "SetY" }, "parameters": [ "Bullet", "+", "OffsetX * Object.Object3D::ForwardY() + OffsetY * Object.Object3D::RightY() + OffsetZ * Object.Object3D::UpY()" ] }, { "type": { "value": "Scene3D::Base3DBehavior::SetZ" }, "parameters": [ "Bullet", "Object3D", "+", "OffsetX * Object.Object3D::ForwardZ() + OffsetY * Object.Object3D::RightZ() + OffsetZ * Object.Object3D::UpZ()" ] }, { "type": { "value": "Physics3D::Physics3DBehavior::SetLinearVelocityX" }, "parameters": [ "Bullet", "Physics3D", "=", "Speed * Object.Object3D::ForwardX()" ] }, { "type": { "value": "Physics3D::Physics3DBehavior::SetLinearVelocityY" }, "parameters": [ "Bullet", "Physics3D", "=", "Speed * Object.Object3D::ForwardY()" ] }, { "type": { "value": "Physics3D::Physics3DBehavior::SetLinearVelocityZ" }, "parameters": [ "Bullet", "Physics3D", "=", "Speed * Object.Object3D::ForwardZ()" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::BulletRotationEnabled" }, "parameters": [ "Object", "FireBullet", "" ] } ], "actions": [ { "type": { "value": "SetAngle" }, "parameters": [ "Bullet", "=", "Object.Angle()" ] }, { "type": { "value": "Scene3D::Base3DBehavior::SetRotationY" }, "parameters": [ "Bullet", "Object3D", "=", "Object.Object3D::RotationY()" ] }, { "type": { "value": "Scene3D::Base3DBehavior::SetRotationX" }, "parameters": [ "Bullet", "Object3D", "=", "Object.Object3D::RotationX()" ] } ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet3D", "type": "behavior" }, { "description": "Forward offset", "longDescription": "Offset on local X axis of the object.", "name": "OffsetX", "type": "expression" }, { "description": "Offset to the right", "longDescription": "Offset on local Y axis of the object.", "name": "OffsetY", "type": "expression" }, { "description": "Upward offset", "longDescription": "Offset on local Z axis of the object.", "name": "OffsetZ", "type": "expression" }, { "description": "The bullet object", "name": "Bullet", "type": "objectListOrEmptyIfJustDeclared" }, { "description": "3D capability", "name": "Object3D", "supplementaryInformation": "Scene3D::Base3DBehavior", "type": "behavior" }, { "description": "3D physics engine", "name": "Physics3D", "supplementaryInformation": "Physics3D::Physics3DBehavior", "type": "behavior" }, { "description": "Speed of the bullet, in pixels per second", "name": "Speed", "type": "expression" } ], "objectGroups": [] }, { "description": "Fire bullets from the camera at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets from 3D camera", "functionType": "Action", "name": "FireForwardCamera3D", "sentence": "Fire _PARAM5_ from the camera of _PARAM0_ (if ready) with offset _PARAM2_ ; _PARAM3_ ; _PARAM4_ at speed _PARAM8_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::IsReadyToShoot" }, "parameters": [ "Object", "FireBullet", "" ] } ], "actions": [ { "type": { "value": "FireBullet::FireBullet::NotifyHasJustFired" }, "parameters": [ "Object", "FireBullet", "" ] }, { "type": { "value": "Create" }, "parameters": [ "", "Bullet", "0", "0", "Object.Layer()" ] }, { "type": { "value": "SetCenter" }, "parameters": [ "Bullet", "=", "CameraCenterX(Object.Layer())", "=", "CameraCenterY(Object.Layer())" ] }, { "type": { "value": "Scene3D::Base3DBehavior::SetCenterZ" }, "parameters": [ "Bullet", "Object3D", "=", "Scene3D::CameraZ(Object.Layer())" ] }, { "type": { "value": "SetX" }, "parameters": [ "Bullet", "+", "OffsetX * Scene3D::CameraForwardX(Object.Layer()) + OffsetY * Scene3D::CameraRightX(Object.Layer()) + OffsetZ * Scene3D::CameraUpX(Object.Layer())" ] }, { "type": { "value": "SetY" }, "parameters": [ "Bullet", "+", "OffsetX * Scene3D::CameraForwardY(Object.Layer()) + OffsetY * Scene3D::CameraRightY(Object.Layer()) + OffsetZ * Scene3D::CameraUpY(Object.Layer())" ] }, { "type": { "value": "Scene3D::Base3DBehavior::SetZ" }, "parameters": [ "Bullet", "Object3D", "+", "OffsetX * Scene3D::CameraForwardZ(Object.Layer()) + OffsetY * Scene3D::CameraRightZ(Object.Layer()) + OffsetZ * Scene3D::CameraUpZ(Object.Layer())" ] }, { "type": { "value": "Physics3D::Physics3DBehavior::SetLinearVelocityX" }, "parameters": [ "Bullet", "Physics3D", "=", "Speed * Scene3D::CameraForwardX()" ] }, { "type": { "value": "Physics3D::Physics3DBehavior::SetLinearVelocityY" }, "parameters": [ "Bullet", "Physics3D", "=", "Speed * Scene3D::CameraForwardY()" ] }, { "type": { "value": "Physics3D::Physics3DBehavior::SetLinearVelocityZ" }, "parameters": [ "Bullet", "Physics3D", "=", "Speed * Scene3D::CameraForwardZ()" ] } ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "value": "FireBullet::FireBullet::BulletRotationEnabled" }, "parameters": [ "Object", "FireBullet", "" ] } ], "actions": [ { "type": { "value": "FireBullet::RotateObjectToFaceSameWayAsCamera" }, "parameters": [ "", "Bullet", "Object3D", "" ] } ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet3D", "type": "behavior" }, { "description": "Forward offset", "longDescription": "Offset on local X axis of the camera.", "name": "OffsetX", "type": "expression" }, { "description": "Offset to the right", "longDescription": "Offset on local Y axis of the camera.", "name": "OffsetY", "type": "expression" }, { "description": "Upward offset", "longDescription": "Offset on local Z axis of the camera.", "name": "OffsetZ", "type": "expression" }, { "description": "The bullet object", "name": "Bullet", "type": "objectListOrEmptyIfJustDeclared" }, { "description": "3D capability", "name": "Object3D", "supplementaryInformation": "Scene3D::Base3DBehavior", "type": "behavior" }, { "description": "3D physics engine", "name": "Physics3D", "supplementaryInformation": "Physics3D::Physics3DBehavior", "type": "behavior" }, { "description": "Speed of the bullet, in pixels per second", "name": "Speed", "type": "expression" } ], "objectGroups": [] }, { "fullName": "", "functionType": "Action", "name": "onCreated", "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { "value": "FireBullet::DefineHelperClasses" }, "parameters": [ "", "" ] } ] } ], "parameters": [ { "description": "Object", "name": "Object", "type": "object" }, { "description": "Behavior", "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet3D", "type": "behavior" } ], "objectGroups": [] } ], "eventsFunctionsFolderStructure": { "folderName": "__ROOT", "children": [ { "functionName": "onCreated" }, { "functionName": "FireForwardObject3D" }, { "functionName": "FireForwardCamera3D" } ] }, "propertyDescriptors": [ { "value": "", "type": "Behavior", "label": "3D capability", "extraInformation": [ "Scene3D::Base3DBehavior" ], "choices": [], "name": "Object3D" }, { "value": "", "type": "Behavior", "label": "Fire bullets", "extraInformation": [ "FireBullet::FireBullet" ], "choices": [], "name": "FireBullet" } ], "propertiesFolderStructure": { "folderName": "__ROOT", "children": [ { "propertyName": "FireBullet" }, { "propertyName": "Object3D" } ] } } ], "eventsBasedObjects": [] } ], "externalLayouts": [ { "associatedLayout": "Game", "name": "4Way", "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_4Way", "persistentUuid": "f7878de8-d621-4629-afc8-5fcbb25d688d", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_right", "persistentUuid": "c6ec3658-b64e-4cab-8a8b-98903a65fd27", "width": 0, "x": 640, "y": 0, "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_left", "persistentUuid": "5a72b7c8-fd61-40c0-884e-b69731807160", "width": 0, "x": -640, "y": 0, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_up", "persistentUuid": "60748f83-5456-40c3-b8d2-4c527981e015", "width": 0, "x": 0, "y": -480, "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_down", "persistentUuid": "e779ea46-1b9a-4892-8196-1c9d194e2c41", "width": 0, "x": 0, "y": 480, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "93ca46b9-87ee-4e70-850c-38e9617605a3", "width": 0, "x": 352, "y": 0, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "bea3a627-abec-44dc-89d3-5df9fbeab374", "width": 0, "x": 256, "y": 0, "zOrder": 7, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "d8c9f7bf-925d-4217-a90b-1d9ebe41031d", "width": 0, "x": 352, "y": 448, "zOrder": 8, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "1994f7b8-51f5-4ee0-b488-0209937688f9", "width": 0, "x": 256, "y": 448, "zOrder": 9, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "b4d80a60-fece-437d-b347-dc1fbc953eff", "width": 32, "x": 608, "y": 288, "zOrder": 10, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "1366481c-9a22-4235-8166-8b8e93a5ed57", "width": 32, "x": 608, "y": 64, "zOrder": 10, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "f6c9c4e5-1083-4ef9-a17d-f3cba6d22d4d", "width": 32, "x": 0, "y": 64, "zOrder": 10, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "27fae954-5c19-4172-9b74-c529557aaa45", "width": 32, "x": 0, "y": 288, "zOrder": 10, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "1c9a1e75-a0c5-4ab1-9d7c-c1da725434f9", "width": 256, "x": 352, "y": 32, "zOrder": 11, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "ea088ace-7e31-460c-9f3c-93de2deca165", "width": 256, "x": 32, "y": 32, "zOrder": 11, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "50fbe774-75cd-48e4-bff7-970e897cd1ac", "width": 256, "x": 32, "y": 416, "zOrder": 11, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "98289955-8a5a-41b3-b107-7279e92d3174", "width": 256, "x": 352, "y": 416, "zOrder": 11, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "ded424ca-7e23-4ad8-9e2d-05265de4971e", "width": 0, "x": 480, "y": 128, "zOrder": 12, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "9911815b-bae7-4020-b670-94365454b262", "width": 0, "x": 96, "y": 160, "zOrder": 13, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "843ef5be-b714-45e9-95e2-87776163332b", "width": 0, "x": 416, "y": 320, "zOrder": 14, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "editionSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 1.168756882148187, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" } }, { "associatedLayout": "Game", "name": "LR", "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_LR", "persistentUuid": "f69d2e29-2b65-4e41-93b2-56269c88fba4", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_right", "persistentUuid": "e1e1e2da-9a5f-4db8-a33a-e6478e381d46", "width": 0, "x": 640, "y": 0, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_left", "persistentUuid": "114e4509-29d9-4811-b71f-45fa7072dbef", "width": 0, "x": -640, "y": 0, "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "9464a17e-8582-4fa0-96cb-21fe7416dbcf", "width": 32, "x": 608, "y": 64, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "534a854e-870e-405a-aafe-90e4ea34ac6d", "width": 32, "x": 608, "y": 288, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "1c1ed84d-fabc-4b62-aa04-aa2404bf37e5", "width": 32, "x": 0, "y": 288, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "365e571f-966b-4c50-b2dc-41a460ea4f81", "width": 32, "x": 0, "y": 64, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "8a32e300-81a4-4b6e-974a-f543901f3266", "width": 576, "x": 32, "y": 32, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "2ac92215-360c-4c46-a49c-13b82240fd2a", "width": 576, "x": 32, "y": 416, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "980ffd6e-3fb8-4431-a874-899f551324f2", "width": 0, "x": 384, "y": 96, "zOrder": 7, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "96e23562-477f-42ed-bb41-abdf6d27ea7b", "width": 0, "x": 128, "y": 352, "zOrder": 8, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "editionSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 0.9578683769070498, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" } }, { "associatedLayout": "Game", "name": "UD", "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_UD", "persistentUuid": "5e458a16-7f67-4530-87d5-c46cf1c70a3a", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_up", "persistentUuid": "3b375ba4-cfd5-4918-9c40-366331322c8f", "width": 0, "x": 0, "y": -480, "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_down", "persistentUuid": "a2d2d1ca-ef1a-402a-92ab-4658aaf19d79", "width": 0, "x": 0, "y": 480, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 352, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "92301df8-aa43-4b2f-bb7c-3d6cfc821c47", "width": 32, "x": 608, "y": 64, "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 352, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "f7c82eb1-5746-41fe-a9cc-3bac809230d3", "width": 32, "x": 0, "y": 64, "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "6ba432e4-a0cd-47f5-965a-612871f65f40", "width": 256, "x": 352, "y": 416, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "c1e0e2e3-b4d4-4ca7-969b-0ba68078cd0a", "width": 256, "x": 32, "y": 416, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "c0a51d16-e7fa-482a-a6da-6540113cf26a", "width": 256, "x": 32, "y": 32, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "82302b03-5c21-401c-b809-15fc60d1ca98", "width": 256, "x": 352, "y": 32, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "f77e09f4-055b-4a15-ad4b-c6b165b86153", "width": 0, "x": 352, "y": 0, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "95d8477e-82f7-431f-925b-2083fc7e501b", "width": 0, "x": 256, "y": 0, "zOrder": 7, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "9bf2e926-e0a5-43a3-9d5f-39f90ba7dca8", "width": 0, "x": 352, "y": 448, "zOrder": 8, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "06ceaa29-1c7a-49b4-9142-48b979d23440", "width": 0, "x": 256, "y": 448, "zOrder": 9, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "821104c8-03ad-4205-98bb-dc43a9f6dd77", "width": 0, "x": 512, "y": 128, "zOrder": 10, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "258caddb-e723-4d56-9693-8a39fb124d66", "width": 0, "x": 64, "y": 352, "zOrder": 11, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "editionSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 0.926622364902796, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" } }, { "associatedLayout": "Game", "name": "DeadL", "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_DeadL", "persistentUuid": "37237183-4a66-4f3a-a60d-0c54a8ca4d90", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_right", "persistentUuid": "7030b988-29fe-410d-989a-7d0c936f4c11", "width": 0, "x": 640, "y": 0, "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "e1b91469-3e8b-4eef-99e3-0434499e2e54", "width": 32, "x": 608, "y": 64, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "8476a995-bde7-4d1c-ac6e-57160597b043", "width": 32, "x": 608, "y": 288, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "5cd7cfb8-cb14-423e-818d-2276aab60696", "width": 576, "x": 32, "y": 416, "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "a60a2c5d-3577-4aee-a1de-114c71f2abef", "width": 576, "x": 32, "y": 32, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 352, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "73cc79a0-9706-4cba-bcec-c8f3221c849f", "width": 32, "x": 0, "y": 64, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "74f0b9f7-b0f3-4d47-947f-d1bddf03c5e5", "width": 0, "x": 96, "y": 128, "zOrder": 7, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "c8718631-7ce8-4e7f-b894-15b7df766728", "width": 0, "x": 128, "y": 224, "zOrder": 8, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "7103f4fa-c527-49d0-985d-91f0c27b01cb", "width": 0, "x": 224, "y": 352, "zOrder": 9, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "editionSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 0.9578683769070498, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" } }, { "associatedLayout": "Game", "name": "DeadR", "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_DeadR", "persistentUuid": "d251265b-16fb-4e8b-8721-1a08ff078396", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_left", "persistentUuid": "bd898bf7-4f86-492c-ba74-098d55f1d43e", "width": 0, "x": -640, "y": 0, "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "12a0189a-4e93-4750-a313-4598eb2edfa9", "width": 0, "x": 445, "y": 158, "zOrder": 20, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 352, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "6aba8a3b-2776-464b-bc9a-3e012acb894b", "width": 32, "x": 608, "y": 64, "zOrder": 21, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "adb9f59f-d690-4bba-846a-1dec7956fa73", "width": 32, "x": 0, "y": 64, "zOrder": 21, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 128, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "1549b163-c089-44e8-aa7a-a84c7e810524", "width": 32, "x": 0, "y": 288, "zOrder": 21, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "4ec087d5-64e4-4f69-b032-60113e3be4f5", "width": 576, "x": 32, "y": 32, "zOrder": 22, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "1d2ee646-a75d-4d0f-83a6-4e34cfcfb84e", "width": 576, "x": 32, "y": 416, "zOrder": 22, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "509eb0db-802a-4581-ad86-8f5d7394a9d3", "width": 0, "x": 544, "y": 288, "zOrder": 23, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "7447f8e5-6f10-44a4-9b96-f2b2c6def54f", "width": 0, "x": 384, "y": 352, "zOrder": 24, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "editionSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 1.058071480431368, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" } }, { "associatedLayout": "Game", "name": "DeadUp", "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_DeadUp", "persistentUuid": "d1a66cb2-ae2e-4f1d-8766-d9992d6d18ad", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_down", "persistentUuid": "eddf7615-92c4-4b04-940b-6515e299e940", "width": 0, "x": 0, "y": 480, "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 352, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "11cc0725-6ebc-44e5-a90a-0259be053c45", "width": 32, "x": 608, "y": 64, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 352, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "3c206b90-e596-4938-93c9-4f65f7fbe377", "width": 32, "x": 0, "y": 64, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "ce6f4701-3ae8-4050-9e7c-9172fb9e5800", "width": 576, "x": 32, "y": 32, "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "b83cb5df-bc17-49f1-ac0b-3518becffbba", "width": 256, "x": 352, "y": 416, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "fce2158f-0f90-46a7-8dca-4bbc529a6cad", "width": 256, "x": 32, "y": 416, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "b7f850a5-0c39-4367-b7ed-80cd697d9f78", "width": 0, "x": 352, "y": 448, "zOrder": 7, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "f0fb7690-c7aa-45aa-aeef-c7dc178fb6f4", "width": 0, "x": 256, "y": 448, "zOrder": 8, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "c68ef008-9395-47b4-9b43-8b979cb91a84", "width": 0, "x": 480, "y": 160, "zOrder": 9, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "557ba486-01b9-465b-994e-3f0d3a8a7ed2", "width": 0, "x": 288, "y": 96, "zOrder": 10, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "0ad3bcc5-f552-4076-8c47-b8e5625b11d4", "width": 0, "x": 96, "y": 192, "zOrder": 11, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "editionSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 0.9578683769070498, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" } }, { "associatedLayout": "Game", "name": "DeadDown", "instances": [ { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_DeadDown", "persistentUuid": "552c6a78-2267-41c0-9d12-e4d0e1da2ef8", "width": 0, "x": 0, "y": 0, "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_up", "persistentUuid": "1635740f-8b55-4918-afdf-bfd9de2db35d", "width": 0, "x": 0, "y": -480, "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 384, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "3794d543-64de-4d10-933d-8fca25ef70ff", "width": 32, "x": 608, "y": 32, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 384, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "84b9b04c-8e2f-4a8f-9295-2ea3fcc98da0", "width": 32, "x": 0, "y": 32, "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "d70088b3-6953-4e77-b220-6862298fc7f8", "width": 576, "x": 32, "y": 416, "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "4c47fd50-16f6-4865-a12c-f9a3ca90ffa5", "width": 256, "x": 352, "y": 32, "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": true, "depth": 1, "height": 32, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "675e179d-f323-489c-b7df-d6986db1c80f", "width": 256, "x": 32, "y": 32, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "3c942658-08bb-455d-a15a-4e1961a4dc92", "width": 0, "x": 352, "y": 0, "zOrder": 7, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_wall", "persistentUuid": "5f2795e3-6b64-49cd-956e-5d3da83e41e7", "width": 0, "x": 256, "y": 0, "zOrder": 8, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "862b7333-da35-488b-8f88-7f5e673a8ea4", "width": 0, "x": 512, "y": 320, "zOrder": 9, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "62dee7a0-fb85-465f-bd71-6c4ff354c261", "width": 0, "x": 288, "y": 352, "zOrder": 10, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, "customSize": false, "height": 0, "keepRatio": true, "layer": "", "name": "spr_skelly01", "persistentUuid": "18c0b2ac-9887-4a99-b82d-70df524f0ce6", "width": 0, "x": 96, "y": 256, "zOrder": 11, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "editionSettings": { "grid": true, "gridType": "rectangular", "gridWidth": 32, "gridHeight": 32, "gridDepth": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridOffsetZ": 0, "gridColor": 10401023, "gridAlpha": 0.8, "snap": true, "zoomFactor": 0.9901680147497778, "windowMask": false, "selectedLayer": "", "gameEditorMode": "instances-editor" } } ] }