Files
MiniDungeonMultiplayerDev/MiniDungeonMultiplayerDev.json.autosave
T
2026-08-05 14:41:01 -04:00

1 line
371 KiB
Plaintext

{"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.0,"minDuration":1.5,"progressBarColor":16777215,"progressBarHeight":20.0,"progressBarMaxWidth":200.0,"progressBarMinWidth":40.0,"progressBarWidthPercent":30.0,"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.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"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.0}],"instances":[{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_player","persistentUuid":"168f7870-38ea-449a-b480-8a38e037e176","width":0.0,"x":288.0,"y":256.0,"zOrder":30,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_4Way","persistentUuid":"346c6f81-2757-45a8-a096-c776d3ab76bc","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_right","persistentUuid":"e34ef6cd-0335-48e6-8d19-d84d325b8591","width":0.0,"x":640.0,"y":0.0,"zOrder":31,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_left","persistentUuid":"a02511d0-68fd-4f90-afe7-4326ed28fd87","width":0.0,"x":-640.0,"y":0.0,"zOrder":32,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_up","persistentUuid":"bfc88395-d3c8-47c3-bb4e-c2a8d1950bb8","width":0.0,"x":0.0,"y":-480.0,"zOrder":33,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_down","persistentUuid":"03b1aa00-32fd-48b7-aaea-14d1e7e1196b","width":0.0,"x":0.0,"y":480.0,"zOrder":34,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"b49413c4-39f9-41f9-9c64-b4ae76cd2ad9","width":0.0,"x":352.0,"y":0.0,"zOrder":35,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"baf49daf-10df-4608-b6e4-359b0f395cac","width":0.0,"x":256.0,"y":0.0,"zOrder":36,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"95fcb59f-88a5-4137-ade0-1788226b3252","width":0.0,"x":352.0,"y":448.0,"zOrder":37,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"2a116ece-9265-456a-b2aa-6399354e0b4b","width":0.0,"x":256.0,"y":448.0,"zOrder":38,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"3a816cd3-f87f-47d4-98e0-2943a9dcaaa4","width":256.0,"x":352.0,"y":32.0,"zOrder":39,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"390c640e-d2ae-494e-b3ba-eaa7a737d262","width":256.0,"x":32.0,"y":32.0,"zOrder":39,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"94ab7ace-3ea6-4466-a8bb-ab408aaf2656","width":256.0,"x":32.0,"y":416.0,"zOrder":39,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"1b5b4a92-a874-4ce0-99d5-fb066071eb17","width":256.0,"x":352.0,"y":416.0,"zOrder":39,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"915cea7d-00dc-48e6-b658-1a679dabb35a","width":32.0,"x":608.0,"y":64.0,"zOrder":40,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"7e61f02d-9158-4a01-a137-a7a4a12678da","width":32.0,"x":608.0,"y":288.0,"zOrder":40,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"c333414c-b787-464f-b406-46358a49f085","width":32.0,"x":0.0,"y":288.0,"zOrder":40,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"c5ae41a4-8993-4917-ab04-e7db150e2d14","width":32.0,"x":0.0,"y":64.0,"zOrder":40,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_playerShooter","persistentUuid":"86ffa407-b37d-4387-b3ff-89a254b3fef2","width":0.0,"x":704.0,"y":160.0,"zOrder":41,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"txt_instructions","persistentUuid":"714bcdca-20b0-4d8e-96ff-fc857b5bacf0","width":0.0,"x":64.0,"y":320.0,"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.0,"allowDiagonals":true,"angleOffset":0.0,"angularMaxSpeed":180.0,"customIsometryAngle":30.0,"deceleration":9999.0,"ignoreDefaultControls":false,"maxSpeed":200.0,"movementAngleOffset":0.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.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle26","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle27","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle28","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle29","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle30","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle31","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle32","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle33","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle34","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle35","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Idle36","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"03Walk","useMultipleDirections":false,"directions":[{"looping":true,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"03Walk","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk2","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk3","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk4","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk5","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk6","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk7","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk8","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk9","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Walk10","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"03Attack","useMultipleDirections":false,"directions":[{"looping":false,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"03Attack","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Attack2","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Attack3","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Attack4","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Attack5","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"03Attack6","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"01Idle","useMultipleDirections":false,"directions":[{"looping":true,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"01Idle","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle2","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle3","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle4","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle5","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle6","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle7","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle8","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle9","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle10","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle11","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"01Idle12","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"01Walk","useMultipleDirections":false,"directions":[{"looping":true,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"02Walk","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk2","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk3","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk4","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk5","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"01Attack","useMultipleDirections":false,"directions":[{"looping":true,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"02Attack","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack2","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack3","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack4","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack5","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack6","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack7","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack8","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack9","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack10","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack11","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack12","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"02Idle","useMultipleDirections":false,"directions":[{"looping":true,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"02Idle","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle2","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle3","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle4","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle5","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle6","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle7","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle8","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle9","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle10","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle11","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Idle12","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"02Walk","useMultipleDirections":false,"directions":[{"looping":true,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"02Walk6","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk7","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk8","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk9","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk10","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk11","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk12","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk13","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk14","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Walk15","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]},{"name":"02Attack","useMultipleDirections":false,"directions":[{"looping":false,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"02Attack13","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack14","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack15","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack16","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack17","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack18","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack19","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack20","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack21","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]},{"hasCustomCollisionMask":true,"image":"02Attack22","points":[{"name":"Fire","x":38.0,"y":20.5}],"originPoint":{"name":"origine","x":0.0,"y":40.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":28.0},{"x":32.0,"y":28.0},{"x":32.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":640.0,"y":0.0},{"x":640.0,"y":480.0},{"x":0.0,"y":480.0}]]}]}]}]},{"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.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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":640.0,"y":0.0},{"x":640.0,"y":480.0},{"x":0.0,"y":480.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":640.0,"y":0.0},{"x":640.0,"y":480.0},{"x":0.0,"y":480.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":640.0,"y":0.0},{"x":640.0,"y":480.0},{"x":0.0,"y":480.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":640.0,"y":0.0},{"x":640.0,"y":480.0},{"x":0.0,"y":480.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":640.0,"y":0.0},{"x":640.0,"y":480.0},{"x":0.0,"y":480.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":640.0,"y":0.0},{"x":640.0,"y":480.0},{"x":0.0,"y":480.0}]]}]}]}]},{"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.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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"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.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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"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.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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite2","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite3","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite8","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite9","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite10","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite11","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite12","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite13","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite14","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite15","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite16","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]}]}]},{"name":"skel_die","useMultipleDirections":false,"directions":[{"looping":false,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"NewSprite17","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite18","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite19","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite20","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite21","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite22","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite23","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite24","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite25","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite26","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite27","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite28","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite29","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite30","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]}]}]},{"name":"skel_attack","useMultipleDirections":false,"directions":[{"looping":false,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"NewSprite31","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite32","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite33","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite34","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite35","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite36","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite37","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]},{"hasCustomCollisionMask":true,"image":"NewSprite38","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":4.0,"y":4.0},{"x":36.0,"y":4.0},{"x":36.0,"y":34.0},{"x":4.0,"y":34.0}]]}]}]}]},{"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.0,"blue":1.0,"brightness":1.0,"contrast":1.0,"gamma":1.0,"green":1.0,"red":1.0,"saturation":1.0},"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.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"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.0,"unseenGraceDistance":10000.0}],"animations":[{"name":"01","useMultipleDirections":false,"directions":[{"looping":true,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"01","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"02","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"03","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"04","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"05","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"06","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"07","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"08","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"09","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"010","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"011","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]},{"hasCustomCollisionMask":true,"image":"012","points":[],"originPoint":{"name":"origine","x":16.0,"y":16.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":10.0},{"x":30.0,"y":10.0},{"x":30.0,"y":22.0},{"x":2.0,"y":22.0}]]}]}]}]},{"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.0},{"name":"var_firepointY","persistentUuid":"b68aad65-9bb8-4f74-a4a9-2cbe5fd0d5bc","type":"number","value":0.0}],"effects":[{"effectType":"Adjustment","name":"Effect","doubleParameters":{"alpha":0.0,"blue":1.0,"brightness":1.0,"contrast":1.0,"gamma":1.0,"green":1.0,"red":1.0,"saturation":1.0},"stringParameters":{},"booleanParameters":{}}],"behaviors":[{"name":"FireBullet","type":"FireBullet::FireBullet","FireCooldown":0.2,"HasJustFired":false,"RotateBullet":true,"FiringArc":0.0,"BulletQuantity":1.0,"AngleVariance":0.0,"BulletSpeedVariance":0.0,"AmmoQuantity":0.0,"ShotsPerReload":0.0,"ReloadDuration":1.0,"MaxAmmo":0.0,"ShotsBeforeNextReload":0.0,"TotalShotsFired":0.0,"TotalBulletsCreated":0.0,"StartingAmmo":0.0,"TotalReloadsCompleted":0.0,"UnlimitedAmmo":true,"ReloadInProgress":false,"HeatIncreasePerShot":0.0,"HeatLevel":0.0,"AutomaticReloading":true,"OverheatDuration":0.0,"LinearCoolingRate":0.1,"ExponentialCoolingRate":0.3,"BulletLayer":"","RandomizedAngle":0.0}],"animations":[{"name":"NewSprite","useMultipleDirections":false,"directions":[{"looping":false,"metadata":"{\"pskl\":{}}","timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"NewSprite41","points":[{"name":"Fire","x":40.0,"y":19.5}],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":40.0,"y":0.0},{"x":40.0,"y":40.0},{"x":0.0,"y":40.0}]]}]}]}]},{"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.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Arrows to move\nClick to shoot\nSpace to restart","font":"","textAlignment":"left","verticalTextAlignment":"top","characterSize":20.0,"lineHeight":0.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.0,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"","renderingType":"","visibility":true,"cameras":[{"defaultSize":true,"defaultViewport":true,"height":0.0,"viewportBottom":1.0,"viewportLeft":0.0,"viewportRight":1.0,"viewportTop":0.0,"width":0.0}],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Ambient Hemisphere Light","doubleParameters":{"elevation":40.0,"intensity":0.33,"rotation":300.0},"stringParameters":{"groundColor":"127;127;127","skyColor":"255;255;255","top":"Z+"},"booleanParameters":{}},{"effectType":"Scene3D::DirectionalLight","name":"3D Sun Light","doubleParameters":{"distanceFromCamera":1500.0,"elevation":40.0,"frustumSize":4000.0,"intensity":0.75,"minimumShadowBias":0.0,"rotation":300.0},"stringParameters":{"color":"255;255;255","shadowQuality":"medium","top":"Z+"},"booleanParameters":{"isCastingShadow":true}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera2DPlaneMaxDrawingDistance":5000.0,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"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.0,"intensity":0.33,"rotation":300.0},"stringParameters":{"groundColor":"127;127;127","skyColor":"255;255;255","top":"Z+"},"booleanParameters":{}},{"effectType":"Scene3D::DirectionalLight","name":"3D Sun Light","doubleParameters":{"distanceFromCamera":1500.0,"elevation":40.0,"frustumSize":4000.0,"intensity":0.75,"minimumShadowBias":0.0,"rotation":300.0},"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.0},{"name":"BulletIndex","type":"number","value":0.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.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_4Way","persistentUuid":"f7878de8-d621-4629-afc8-5fcbb25d688d","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_right","persistentUuid":"c6ec3658-b64e-4cab-8a8b-98903a65fd27","width":0.0,"x":640.0,"y":0.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_left","persistentUuid":"5a72b7c8-fd61-40c0-884e-b69731807160","width":0.0,"x":-640.0,"y":0.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_up","persistentUuid":"60748f83-5456-40c3-b8d2-4c527981e015","width":0.0,"x":0.0,"y":-480.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_down","persistentUuid":"e779ea46-1b9a-4892-8196-1c9d194e2c41","width":0.0,"x":0.0,"y":480.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"93ca46b9-87ee-4e70-850c-38e9617605a3","width":0.0,"x":352.0,"y":0.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"bea3a627-abec-44dc-89d3-5df9fbeab374","width":0.0,"x":256.0,"y":0.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"d8c9f7bf-925d-4217-a90b-1d9ebe41031d","width":0.0,"x":352.0,"y":448.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"1994f7b8-51f5-4ee0-b488-0209937688f9","width":0.0,"x":256.0,"y":448.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"b4d80a60-fece-437d-b347-dc1fbc953eff","width":32.0,"x":608.0,"y":288.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"1366481c-9a22-4235-8166-8b8e93a5ed57","width":32.0,"x":608.0,"y":64.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"f6c9c4e5-1083-4ef9-a17d-f3cba6d22d4d","width":32.0,"x":0.0,"y":64.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"27fae954-5c19-4172-9b74-c529557aaa45","width":32.0,"x":0.0,"y":288.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"1c9a1e75-a0c5-4ab1-9d7c-c1da725434f9","width":256.0,"x":352.0,"y":32.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"ea088ace-7e31-460c-9f3c-93de2deca165","width":256.0,"x":32.0,"y":32.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"50fbe774-75cd-48e4-bff7-970e897cd1ac","width":256.0,"x":32.0,"y":416.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"98289955-8a5a-41b3-b107-7279e92d3174","width":256.0,"x":352.0,"y":416.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"ded424ca-7e23-4ad8-9e2d-05265de4971e","width":0.0,"x":480.0,"y":128.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"9911815b-bae7-4020-b670-94365454b262","width":0.0,"x":96.0,"y":160.0,"zOrder":13,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"843ef5be-b714-45e9-95e2-87776163332b","width":0.0,"x":416.0,"y":320.0,"zOrder":14,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":true,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":true,"zoomFactor":1.168756882148187,"windowMask":false,"selectedLayer":"","gameEditorMode":"instances-editor"}},{"associatedLayout":"Game","name":"LR","instances":[{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_LR","persistentUuid":"f69d2e29-2b65-4e41-93b2-56269c88fba4","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_right","persistentUuid":"e1e1e2da-9a5f-4db8-a33a-e6478e381d46","width":0.0,"x":640.0,"y":0.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_left","persistentUuid":"114e4509-29d9-4811-b71f-45fa7072dbef","width":0.0,"x":-640.0,"y":0.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"9464a17e-8582-4fa0-96cb-21fe7416dbcf","width":32.0,"x":608.0,"y":64.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"534a854e-870e-405a-aafe-90e4ea34ac6d","width":32.0,"x":608.0,"y":288.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"1c1ed84d-fabc-4b62-aa04-aa2404bf37e5","width":32.0,"x":0.0,"y":288.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"365e571f-966b-4c50-b2dc-41a460ea4f81","width":32.0,"x":0.0,"y":64.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"8a32e300-81a4-4b6e-974a-f543901f3266","width":576.0,"x":32.0,"y":32.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"2ac92215-360c-4c46-a49c-13b82240fd2a","width":576.0,"x":32.0,"y":416.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"980ffd6e-3fb8-4431-a874-899f551324f2","width":0.0,"x":384.0,"y":96.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"96e23562-477f-42ed-bb41-abdf6d27ea7b","width":0.0,"x":128.0,"y":352.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":true,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":true,"zoomFactor":0.9578683769070499,"windowMask":false,"selectedLayer":"","gameEditorMode":"instances-editor"}},{"associatedLayout":"Game","name":"UD","instances":[{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_UD","persistentUuid":"5e458a16-7f67-4530-87d5-c46cf1c70a3a","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_up","persistentUuid":"3b375ba4-cfd5-4918-9c40-366331322c8f","width":0.0,"x":0.0,"y":-480.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_down","persistentUuid":"a2d2d1ca-ef1a-402a-92ab-4658aaf19d79","width":0.0,"x":0.0,"y":480.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":352.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"92301df8-aa43-4b2f-bb7c-3d6cfc821c47","width":32.0,"x":608.0,"y":64.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":352.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"f7c82eb1-5746-41fe-a9cc-3bac809230d3","width":32.0,"x":0.0,"y":64.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"6ba432e4-a0cd-47f5-965a-612871f65f40","width":256.0,"x":352.0,"y":416.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"c1e0e2e3-b4d4-4ca7-969b-0ba68078cd0a","width":256.0,"x":32.0,"y":416.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"c0a51d16-e7fa-482a-a6da-6540113cf26a","width":256.0,"x":32.0,"y":32.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"82302b03-5c21-401c-b809-15fc60d1ca98","width":256.0,"x":352.0,"y":32.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"f77e09f4-055b-4a15-ad4b-c6b165b86153","width":0.0,"x":352.0,"y":0.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"95d8477e-82f7-431f-925b-2083fc7e501b","width":0.0,"x":256.0,"y":0.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"9bf2e926-e0a5-43a3-9d5f-39f90ba7dca8","width":0.0,"x":352.0,"y":448.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"06ceaa29-1c7a-49b4-9142-48b979d23440","width":0.0,"x":256.0,"y":448.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"821104c8-03ad-4205-98bb-dc43a9f6dd77","width":0.0,"x":512.0,"y":128.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"258caddb-e723-4d56-9693-8a39fb124d66","width":0.0,"x":64.0,"y":352.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":true,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":true,"zoomFactor":0.926622364902796,"windowMask":false,"selectedLayer":"","gameEditorMode":"instances-editor"}},{"associatedLayout":"Game","name":"DeadL","instances":[{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_DeadL","persistentUuid":"37237183-4a66-4f3a-a60d-0c54a8ca4d90","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_right","persistentUuid":"7030b988-29fe-410d-989a-7d0c936f4c11","width":0.0,"x":640.0,"y":0.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"e1b91469-3e8b-4eef-99e3-0434499e2e54","width":32.0,"x":608.0,"y":64.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"8476a995-bde7-4d1c-ac6e-57160597b043","width":32.0,"x":608.0,"y":288.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"5cd7cfb8-cb14-423e-818d-2276aab60696","width":576.0,"x":32.0,"y":416.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"a60a2c5d-3577-4aee-a1de-114c71f2abef","width":576.0,"x":32.0,"y":32.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":352.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"73cc79a0-9706-4cba-bcec-c8f3221c849f","width":32.0,"x":0.0,"y":64.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"74f0b9f7-b0f3-4d47-947f-d1bddf03c5e5","width":0.0,"x":96.0,"y":128.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"c8718631-7ce8-4e7f-b894-15b7df766728","width":0.0,"x":128.0,"y":224.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"7103f4fa-c527-49d0-985d-91f0c27b01cb","width":0.0,"x":224.0,"y":352.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":true,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":true,"zoomFactor":0.9578683769070499,"windowMask":false,"selectedLayer":"","gameEditorMode":"instances-editor"}},{"associatedLayout":"Game","name":"DeadR","instances":[{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_DeadR","persistentUuid":"d251265b-16fb-4e8b-8721-1a08ff078396","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_left","persistentUuid":"bd898bf7-4f86-492c-ba74-098d55f1d43e","width":0.0,"x":-640.0,"y":0.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"12a0189a-4e93-4750-a313-4598eb2edfa9","width":0.0,"x":445.0,"y":158.0,"zOrder":20,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":352.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"6aba8a3b-2776-464b-bc9a-3e012acb894b","width":32.0,"x":608.0,"y":64.0,"zOrder":21,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"adb9f59f-d690-4bba-846a-1dec7956fa73","width":32.0,"x":0.0,"y":64.0,"zOrder":21,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"1549b163-c089-44e8-aa7a-a84c7e810524","width":32.0,"x":0.0,"y":288.0,"zOrder":21,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"4ec087d5-64e4-4f69-b032-60113e3be4f5","width":576.0,"x":32.0,"y":32.0,"zOrder":22,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"1d2ee646-a75d-4d0f-83a6-4e34cfcfb84e","width":576.0,"x":32.0,"y":416.0,"zOrder":22,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"509eb0db-802a-4581-ad86-8f5d7394a9d3","width":0.0,"x":544.0,"y":288.0,"zOrder":23,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"7447f8e5-6f10-44a4-9b96-f2b2c6def54f","width":0.0,"x":384.0,"y":352.0,"zOrder":24,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":true,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":true,"zoomFactor":1.058071480431368,"windowMask":false,"selectedLayer":"","gameEditorMode":"instances-editor"}},{"associatedLayout":"Game","name":"DeadUp","instances":[{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_DeadUp","persistentUuid":"d1a66cb2-ae2e-4f1d-8766-d9992d6d18ad","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_down","persistentUuid":"eddf7615-92c4-4b04-940b-6515e299e940","width":0.0,"x":0.0,"y":480.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":352.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"11cc0725-6ebc-44e5-a90a-0259be053c45","width":32.0,"x":608.0,"y":64.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":352.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"3c206b90-e596-4938-93c9-4f65f7fbe377","width":32.0,"x":0.0,"y":64.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"ce6f4701-3ae8-4050-9e7c-9172fb9e5800","width":576.0,"x":32.0,"y":32.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"b83cb5df-bc17-49f1-ac0b-3518becffbba","width":256.0,"x":352.0,"y":416.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"fce2158f-0f90-46a7-8dca-4bbc529a6cad","width":256.0,"x":32.0,"y":416.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"b7f850a5-0c39-4367-b7ed-80cd697d9f78","width":0.0,"x":352.0,"y":448.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"f0fb7690-c7aa-45aa-aeef-c7dc178fb6f4","width":0.0,"x":256.0,"y":448.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"c68ef008-9395-47b4-9b43-8b979cb91a84","width":0.0,"x":480.0,"y":160.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"557ba486-01b9-465b-994e-3f0d3a8a7ed2","width":0.0,"x":288.0,"y":96.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"0ad3bcc5-f552-4076-8c47-b8e5625b11d4","width":0.0,"x":96.0,"y":192.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":true,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":true,"zoomFactor":0.9578683769070499,"windowMask":false,"selectedLayer":"","gameEditorMode":"instances-editor"}},{"associatedLayout":"Game","name":"DeadDown","instances":[{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_DeadDown","persistentUuid":"552c6a78-2267-41c0-9d12-e4d0e1da2ef8","width":0.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_up","persistentUuid":"1635740f-8b55-4918-afdf-bfd9de2db35d","width":0.0,"x":0.0,"y":-480.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":384.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"3794d543-64de-4d10-933d-8fca25ef70ff","width":32.0,"x":608.0,"y":32.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":384.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"84b9b04c-8e2f-4a8f-9295-2ea3fcc98da0","width":32.0,"x":0.0,"y":32.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"d70088b3-6953-4e77-b220-6862298fc7f8","width":576.0,"x":32.0,"y":416.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"4c47fd50-16f6-4865-a12c-f9a3ca90ffa5","width":256.0,"x":352.0,"y":32.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":32.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"675e179d-f323-489c-b7df-d6986db1c80f","width":256.0,"x":32.0,"y":32.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"3c942658-08bb-455d-a15a-4e1961a4dc92","width":0.0,"x":352.0,"y":0.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_wall","persistentUuid":"5f2795e3-6b64-49cd-956e-5d3da83e41e7","width":0.0,"x":256.0,"y":0.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"862b7333-da35-488b-8f88-7f5e673a8ea4","width":0.0,"x":512.0,"y":320.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"62dee7a0-fb85-465f-bd71-6c4ff354c261","width":0.0,"x":288.0,"y":352.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"spr_skelly01","persistentUuid":"18c0b2ac-9887-4a99-b82d-70df524f0ce6","width":0.0,"x":96.0,"y":256.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":true,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridDepth":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridOffsetZ":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":true,"zoomFactor":0.9901680147497778,"windowMask":false,"selectedLayer":"","gameEditorMode":"instances-editor"}}]}