All content on our site is free and will always be free.

Please consider supporting us with disabling your AdBlock software and to gain access to thousands of free content!

Not sure how to disable AdBLock? Follow this tutorial: How to disable AdBlock

Get the Emptyness GUI

The Emptyness GUI code is below. Copy & inject it into the game. Enjoy!

local ImpostorGui = Instance.new("ScreenGui")
local Background = Instance.new("Frame")
local DeleteGui = Instance.new("TextButton")
local DeleteGuiCorners = Instance.new("UICorner")
local HideGui = Instance.new("TextButton")
local HideGuiCorners = Instance.new("UICorner")
local Title = Instance.new("Frame")
local EmptynessGui = Instance.new("TextLabel")
local Line = Instance.new("Frame")
local NextPage = Instance.new("TextButton")
local PrevPage = Instance.new("TextButton")
local Pages = Instance.new("Frame")
local Page1 = Instance.new("Frame")
local ClickTPCTRL = Instance.new("TextButton")
local ClickTPINV = Instance.new("TextButton")
local CustomConsole = Instance.new("TextButton")
local Fly = Instance.new("TextButton")
local GodMode = Instance.new("TextButton")
local NoClip = Instance.new("TextButton")
local RemoveArms = Instance.new("TextButton")
local RemoveLegs = Instance.new("TextButton")
local TargetTP = Instance.new("TextButton")
local UnlockBuilds = Instance.new("TextButton")
local targetNameInput = Instance.new("TextBox")
local Page1Text = Instance.new("TextLabel")
local BTools = Instance.new("TextButton")
local Page2 = Instance.new("Frame")
local InfJump = Instance.new("TextButton")
local FPSBoost = Instance.new("TextButton")
local SetJumpPower = Instance.new("TextButton")
local RemoteSpy = Instance.new("TextButton")
local ShiftSprint = Instance.new("TextButton")
local Explorer = Instance.new("TextButton")
local HitboxExpander = Instance.new("TextButton")
local AutoClick = Instance.new("TextButton")
local SetWalkSpeed = Instance.new("TextButton")
local AntiAFK = Instance.new("TextButton")
local NumberInput = Instance.new("TextBox")
local Page2Text = Instance.new("TextLabel")
local GodMode2 = Instance.new("TextButton")
local UIPageLayout = Instance.new("UIPageLayout")
local CustomConsoleBG = Instance.new("Frame")
local LogsText = Instance.new("TextBox")
local ClearLogs = Instance.new("TextButton")
local CopyLogs = Instance.new("TextButton")

local Page3 = Instance.new("Frame")
local uno = Instance.new("TextButton")
local dos = Instance.new("TextButton")
local tres = Instance.new("TextButton")
local cuatro = Instance.new("TextButton")
local cinco = Instance.new("TextButton")
local seis = Instance.new("TextButton")
local siete = Instance.new("TextButton")
local ocho = Instance.new("TextButton")
local nueve = Instance.new("TextButton")
local diez = Instance.new("TextButton")
local onceInput = Instance.new("TextBox")
local Page3Text = Instance.new("TextLabel")
local doce = Instance.new("TextButton")

local top = 130
local timer = 0.05

function randomString(leng, seed)

	local array = {}

	for i = 0, leng do
		local leNumberPlus = (math.floor((i*6)*(256^2)))
		math.randomseed(seed+leNumberPlus)
		array[i] = string.char(math.random(33, 126))

	end

	return table.concat(array)

end

ImpostorGui.Name = randomString(12, 0)
ImpostorGui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui")

Background.Name = randomString(12, 1)
Background.Parent = ImpostorGui
Background.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Background.BorderSizePixel = 2
Background.Position = UDim2.new(0.0606601238, 0, 0.0904204398, 0)
Background.Size = UDim2.new(0, 520, 0, 350)
Background.ZIndex = -1

DeleteGui.Name = randomString(12, 2)
DeleteGui.Parent = Background
DeleteGui.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
DeleteGui.BackgroundTransparency = 0.850
DeleteGui.BorderColor3 = Color3.fromRGB(0, 0, 0)
DeleteGui.BorderSizePixel = 0
DeleteGui.Position = UDim2.new(0.917784631, 0, 0.0457142852, 0)
DeleteGui.Selectable = false
DeleteGui.Size = UDim2.new(0, 22, 0, 22)
DeleteGui.Font = Enum.Font.Ubuntu
DeleteGui.Text = ""
DeleteGui.TextColor3 = Color3.fromRGB(255, 255, 255)
DeleteGui.TextSize = 50.000
DeleteGui.TextWrapped = true

DeleteGuiCorners.CornerRadius = UDim.new(2, 8)
DeleteGuiCorners.Name = randomString(12, 3)
DeleteGuiCorners.Parent = DeleteGui

HideGui.Name = randomString(12, 4)
HideGui.Parent = Background
HideGui.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
HideGui.BackgroundTransparency = 0.850
HideGui.BorderColor3 = Color3.fromRGB(0, 0, 0)
HideGui.BorderSizePixel = 0
HideGui.Position = UDim2.new(0.859846115, 0, 0.0454285741, 0)
HideGui.Size = UDim2.new(0, 22, 0, 22)
HideGui.Font = Enum.Font.Ubuntu
HideGui.Text = ""
HideGui.TextColor3 = Color3.fromRGB(255, 255, 255)
HideGui.TextSize = 35.000
HideGui.TextWrapped = true

HideGuiCorners.CornerRadius = UDim.new(2, 8)
HideGuiCorners.Name = randomString(12, 5)
HideGuiCorners.Parent = HideGui

Title.Name = randomString(12, 6)
Title.Parent = Background
Title.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
Title.BackgroundTransparency = 0.850
Title.BorderColor3 = Color3.fromRGB(255, 0, 0)
Title.BorderSizePixel = 0
Title.Size = UDim2.new(0, 520, 0, 55)

EmptynessGui.Name = randomString(12, 7)
EmptynessGui.Parent = Title
EmptynessGui.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
EmptynessGui.BackgroundTransparency = 1.000
EmptynessGui.BorderColor3 = Color3.fromRGB(0, 0, 0)
EmptynessGui.BorderSizePixel = 0
EmptynessGui.Size = UDim2.new(0, 419, 0, 55)
EmptynessGui.Font = Enum.Font.Ubuntu
EmptynessGui.Text = "Emptyness Gui"
EmptynessGui.TextSize = 40.000
EmptynessGui.TextWrapped = true

Line.Name = randomString(12, 8)
Line.Parent = Title
Line.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Line.BorderSizePixel = 2
Line.Position = UDim2.new(0, 0, -0.00285705575, 0)
Line.Size = UDim2.new(0, 520, 0, 55)
Line.ZIndex = 0

NextPage.Name = randomString(12, 9)
NextPage.Parent = Background
NextPage.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
NextPage.BackgroundTransparency = 0.850
NextPage.BorderColor3 = Color3.fromRGB(255, 255, 255)
NextPage.Position = UDim2.new(0.655846179, 0, 0.885285676, 0)
NextPage.Selectable = false
NextPage.Size = UDim2.new(0, 22, 0, 22)
NextPage.Font = Enum.Font.Ubuntu
NextPage.Text = ">"
NextPage.TextColor3 = Color3.fromRGB(255, 255, 0)
NextPage.TextSize = 16.000
NextPage.TextWrapped = true

PrevPage.Name = randomString(12, 10)
PrevPage.Parent = Background
PrevPage.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
PrevPage.BackgroundTransparency = 0.850
PrevPage.BorderColor3 = Color3.fromRGB(255, 255, 255)
PrevPage.Position = UDim2.new(0.301076919, 0, 0.885285676, 0)
PrevPage.Selectable = false
PrevPage.Size = UDim2.new(0, 22, 0, 22)
PrevPage.Font = Enum.Font.Ubuntu
PrevPage.Text = "= 0 and less than the size of the layout, acts like JumpTo. If it's out of bounds and circular is set, it will animate the full distance between the in-bounds index of CurrentPage and the new index.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PageEnter","Summary":"Fires when a page comes into view, and is going to be rendered.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PageLeave","Summary":"Fires when a page leaves view, and will not be rendered.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Stopped","Summary":"Fires when an animation to CurrentPage is completed without being cancelled, and the view stops scrolling.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UITableLayout","Summary":"Provides a layout of rows and columns that are sized based on the cells in them.","ExplorerOrder":3,"ExplorerImageIndex":26,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Padding","Summary":"The amount of padding to insert in between the cells of the table.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FillEmptySpaceRows","Summary":"Whether the table should expand to fill the available space of its container, row-wise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FillEmptySpaceColumns","Summary":"Whether the table should expand to fill the available space of its container, column-wise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MajorAxis","Summary":"Whether the direct siblings are considered the rows or the columns. The children of the direct siblings are the columns or rows, respectively.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UISizeConstraint","Summary":"Ensures a GuiObject does not become smaller or larger than the min and max size. If an element with a constraint is under the control of a layout, the constraint takes precedence in determining the element�s size, but not position. You can use a Constraint by parenting it to the element you wish to constrain.","ExplorerOrder":3,"ExplorerImageIndex":26,"Browsable":true,"PreferredParent":"","Members":[{"Name":"MinSize","Summary":"The smallest size the GuiObject is allowed to be.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MaxSize","Summary":"The biggest size the GuiObject is allowed to be.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UITextSizeConstraint","Summary":"Ensures a GuiObject with text does not allow the font size to become larger or smaller than min and max text sizes. If an element with a constraint is under the control of a layout, the constraint takes precedence in determining the element�s size, but not position. You can use a Constraint by parenting it to the element you wish to constrain.","ExplorerOrder":3,"ExplorerImageIndex":26,"Browsable":true,"PreferredParent":"","Members":[{"Name":"MinTextSize","Summary":"The smallest size the font is allowed to be.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MaxTextSize","Summary":"The biggest size the font is allowed to be.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UIAspectRatioConstraint","Summary":"Ensures a GuiObject will always have a particular aspect ratio. If an element with a constraint is under the control of a layout, the constraint takes precedence in determining the element�s size, but not position. You can use a Constraint by parenting it to the element you wish to constrain.","ExplorerOrder":3,"ExplorerImageIndex":26,"Browsable":true,"PreferredParent":"","Members":[{"Name":"AspectRatio","Summary":"The aspect ratio to maintain. This is the width/height. Only positive numbers allowed.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AspectType","Summary":"Describes how the aspect ratio will determine its size. Options are FitWithinMaxSize, ScaleWithParentSize. FitWithinMaxSize will make the element the maximum size it can be within the current possible AbsoluteSize of the element while maintaining the AspectRatio. ScaleWithParentSize will make the element the closest to the parent element�s maximum size while maintaining aspect ratio.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DominantAxis","Summary":"Describes which axis to use when determining the new size of the element, while keeping respect to the aspect ratio.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UIScale","Summary":"Uniformly scales a GUI object and all its children.","ExplorerOrder":3,"ExplorerImageIndex":26,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Scale","Summary":"The scale factor to apply.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UIPadding","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":26,"Browsable":true,"PreferredParent":"","Members":[{"Name":"PaddingLeft","Summary":"The padding to apply on the left side relative to the parent's normal size.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PaddingRight","Summary":"The padding to apply on the right side relative to the parent's normal size.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PaddingTop","Summary":"The padding to apply on the top side relative to the parent's normal size.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PaddingBottom","Summary":"The padding to apply on the bottom side relative to the parent's normal size.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TweenBase","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"PlaybackState","Summary":"The current state of how the tween is animating. Possible values are Begin, Playing, Paused, Completed and Cancelled. This property is modified by using functions such as Tween:Play(), Tween:Pause(), and Tween:Cancel(). Read-only.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Play","Summary":"Starts or resumes (if Tween.PlaybackState is Paused) the tween animation. If current PlaybackState is Cancelled, this property will reset the tween to the beginning properties and play the animations from the beginning.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Pause","Summary":"Temporarily stops the tween animation. Animation can be resumed by calling Play().","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Cancel","Summary":"Stops the tween animation. Animation can be restarted by calling Play(). Animation will start from the beginning values.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Completed","Summary":"Fires when the tween either reaches PlaybackState Completed or Cancelled. PlaybackState of one of these types is passed as the first arg to the function listening to this event.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Tween","Summary":"An object linked to an instance that animates properties on the instance over a specified period of time. Useful for easily moving UI objects around, rotating objects, etc. without having to write a lot of code. To create a new tween, please use TweenService:Create.","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Instance","Summary":"The object this tween is operating on. Read-only.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TweenInfo","Summary":"Specifies how the tween animates. Read-only.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TweenService","Summary":"Service responsible for creating tweens on instances.","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"StarterGui","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":46,"Browsable":true,"PreferredParent":"","Members":[{"Name":"SetCoreGuiEnabled","Summary":"Will stop/begin certain core gui elements being rendered. See CoreGuiType for core guis that can be modified.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetCoreGuiEnabled","Summary":"Returns a boolean describing whether a CoreGuiType is currently being rendered.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GuiService","Summary":"The GuiService is a special service, which currently allows developers to control what GuiObject is currently being selected by the Gamepad Gui navigator, and allows clients to check if Roblox's main menu is currently open. This service has a lot of hidden members, which are mainly used internally by Roblox's CoreScripts.","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"GetGuiInset","Summary":"Returns a Tuple containing two Vector2 values representing the offset of user GUIs in pixels from the top right corner of the screen and the bottom right corner of the screen respectively.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ContextActionService","Summary":"A service used to bind input to various lua functions.","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"BindAction","Summary":"Binds 'functionToBind' to fire when any 'inputTypes' happen. InputTypes can be variable in number and type. Types can be Enum.KeyCode, single character strings corresponding to keys, or Enum.UserInputType. 'actionName' is a key used by many other ContextActionService functions to query state. 'createTouchButton' if true will create a button on screen on touch devices.  This button will fire 'functionToBind' with three arguments: first argument is the actionName, second argument is the UserInputState of the input, and the third is the InputObject that fired this function. If 'functionToBind' yields or returns nil or Enum.ContextActionResult.Sink, the input will be sunk. If it returns Enum.ContextActionResult.Pass, the next bound action in the stack will be invoked.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetTitle","Summary":"If 'actionName' key contains a bound action, then 'title' is set as the title of the touch button. Does nothing if a touch button was not created. No guarantees are made whether title will be set when button is manipulated.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetDescription","Summary":"If 'actionName' key contains a bound action, then 'description' is set as the description of the bound action. This description will appear for users in a listing of current actions availables.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetImage","Summary":"If 'actionName' key contains a bound action, then 'image' is set as the image of the touch button. Does nothing if a touch button was not created. No guarantees are made whether image will be set when button is manipulated.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetPosition","Summary":"If 'actionName' key contains a bound action, then 'position' is set as the position of the touch button. Does nothing if a touch button was not created. No guarantees are made whether position will be set when button is manipulated.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UnbindAction","Summary":"If 'actionName' key contains a bound action, removes function from being called by all input that it was bound by (if function was also bound by a different action name as well, those bound input are still active). Will also remove any touch button created (if button was manipulated manually there is no guarantee it will be cleaned up).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UnbindAllActions","Summary":"Removes all functions bound. No actionNames will remain. All touch buttons will be removed. If button was manipulated manually there is no guarantee it will be cleaned up.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetBoundActionInfo","Summary":"Returns a table with info regarding the function bound with 'actionName'. Table has the keys 'title' (current title that was set with SetTitle) 'image' (image set with SetImage) 'description' (description set with SetDescription) 'inputTypes' (tuple containing all input bound for this 'actionName') 'createTouchButton' (whether or not we created a touch button for this 'actionName').","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetAllBoundActionInfo","Summary":"Returns a table with all bound action info. Each entry is a key with 'actionName' and value being the same table you would get from ContextActionService:GetBoundActionInfo('actionName').","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetButton","Summary":"If 'actionName' key contains a bound action, then this will return the touch button (if was created). Returns nil if a touch button was not created. No guarantees are made whether button will be retrievable when button is manipulated.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PointsService","Summary":"A service used to query and award points for Roblox users using the universal point system.","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"PointsAwarded","Summary":"Fired when points are successfully awarded 'userId'. Also returns the updated balance of points for usedId in universe via 'userBalanceInUniverse', total points via 'userTotalBalance', and the amount points that were awarded via 'pointsAwarded'. This event fires on the server and also all clients in the game that awarded the points.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AwardPoints","Summary":"Will attempt to award the 'amount' points to 'userId', returns 'userId' awarded to, the number of points awarded, the new point total the user has in the game, and the total number of points the user now has. Will also fire PointsService.PointsAwarded. Works with server scripts ONLY.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetPointBalance","Summary":"Returns the overall balance of points that player with userId has (the sum of all points across all games). Works with server scripts ONLY.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetGamePointBalance","Summary":"Returns the balance of points that player with userId has in the current game (all placeID points combined within the game). Works with server scripts ONLY.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetAwardablePoints","Summary":"Returns the number of points the current universe can award to players. Works with server scripts ONLY.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Chat","Summary":"","ExplorerOrder":51,"ExplorerImageIndex":33,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ChatService","Summary":"","ExplorerOrder":51,"ExplorerImageIndex":33,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"LocalizationService","Summary":"","ExplorerOrder":-1,"ExplorerImageIndex":92,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MarketplaceService","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":46,"Browsable":true,"PreferredParent":"","Members":[{"Name":"PromptPurchase","Summary":"Will prompt 'player' to purchase the item associated with 'assetId'.  'equipIfPurchased' is an optional argument that will give the item to the player immediately if they buy it (only applies to gear).  'currencyType' is also optional and will attempt to prompt the user with a specified currency if the product can be purchased with this currency, otherwise we use the default currency of the product.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetProductInfo","Summary":"Takes one argument \"assetId\" which should be a number of an asset on www.roblox.com.  Returns a table containing the product information (if this process fails, returns an empty table).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PlayerOwnsAsset","Summary":"Checks to see if 'Player' owns the product associated with 'assetId'. Returns true if the player owns it, false otherwise. This call will produce a warning if called on a guest player.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ProcessReceipt","Summary":"Callback that is executed for pending Developer Product receipts.\n            \n            If this function does not return Enum.ProductPurchaseDecision.PurchaseGranted, then you will not be granted the money for the purchase!\n            \n            The callback will be invoked with a table, containing the following informational fields:\n            PlayerId - the id of the player making the purchase.\n            PlaceIdWherePurchased - the specific place where the purchase was made.\n            PurchaseId - a unique identifier for the purchase, should be used to prevent granting an item multiple times for one purchase.\n            ProductId - the id of the purchased product.\n            CurrencyType - the type of currency used (Tix, Robux).\n            CurrencySpent - the amount of currency spent on the product for this purchase.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PromptPurchaseFinished","Summary":"Fired when a 'player' dismisses a purchase dialog for 'assetId'.  If the player purchased the item 'isPurchased' will be true, otherwise it will be false. This call will produce a warning if called on a guest player.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UserInputService","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"TouchEnabled","Summary":"Returns true if the local device accepts touch input, false otherwise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"KeyboardEnabled","Summary":"Returns true if the local device accepts keyboard input, false otherwise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseEnabled","Summary":"Returns true if the local device accepts mouse input, false otherwise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AccelerometerEnabled","Summary":"Returns true if the local device has an accelerometer, false otherwise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GyroscopeEnabled","Summary":"Returns true if the local device has an gyroscope, false otherwise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchTap","Summary":"Fired when a user taps their finger on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the tap gesture. This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchPinch","Summary":"Fired when a user pinches their fingers on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the pinch gesture. 'scale' is a float that indicates the difference from the beginning of the pinch gesture. 'velocity' is a float indicating how quickly the pinch gesture is happening. 'state' indicates the Enum.UserInputState of the gesture.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchSwipe","Summary":"Fired when a user swipes their fingers on a TouchEnabled device. 'swipeDirection' is an Enum.SwipeDirection, indicating the direction the user swiped. 'numberOfTouches' is an int that indicates how many touches were involved with the gesture.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchLongPress","Summary":"Fired when a user holds at least one finger for a short amount of time on the same screen position on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the gesture. 'state' indicates the Enum.UserInputState of the gesture.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchRotate","Summary":"Fired when a user rotates two fingers on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the gesture. 'rotation' is a float indicating how much the rotation has gone from the start of the gesture. 'velocity' is a float that indicates how quickly the gesture is being performed. 'state' indicates the Enum.UserInputState of the gesture.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchPan","Summary":"Fired when a user drags at least one finger on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the gesture. 'totalTranslation' is a Vector2, indicating how far the pan gesture has gone from its starting point. 'velocity' is a Vector2 that indicates how quickly the gesture is being performed in each dimension. 'state' indicates the Enum.UserInputState of the gesture.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchStarted","Summary":"Fired when a user places their finger on a TouchEnabled device. 'touch' is an InputObject, which contains useful data for querying user input.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchMoved","Summary":"Fired when a user moves their finger on a TouchEnabled device. 'touch' is an InputObject, which contains useful data for querying user input.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchEnded","Summary":"Fired when a user moves their finger on a TouchEnabled device. 'touch' is an InputObject, which contains useful data for querying user input.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InputBegan","Summary":"Fired when a user begins interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc.). 'inputObject' is an InputObject, which contains useful data for querying user input.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InputChanged","Summary":"Fired when a user changes interacting via a Human-Computer Interface device (Mouse move, touch move, mouse wheel, etc.). 'inputObject' is an InputObject, which contains useful data for querying user input.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InputEnded","Summary":"Fired when a user stops interacting via a Human-Computer Interface device (Mouse button up, touch end, keyboard button up, etc.). 'inputObject' is an InputObject, which contains useful data for querying user input.  This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TextBoxFocused","Summary":"Fired when a user clicks/taps on a textbox to begin text entry. Argument is the textbox that was put in focus. This also fires if a textbox forces focus on the user. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TextBoxFocusReleased","Summary":"Fired when a user stops text entry into a textbox (usually by pressing return or clicking/tapping somewhere else on the screen). Argument is the textbox that was taken out of focus. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DeviceAccelerationChanged","Summary":"Fired when a user moves a device that has an accelerometer. This is fired with an InputObject, which has type Enum.InputType.Accelerometer, and position that shows the g force in each local device axis. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DeviceGravityChanged","Summary":"Fired when the force of gravity changes on a device that has an accelerometer. This is fired with an InputObject, which has type Enum.InputType.Accelerometer, and position that shows the g force in each local device axis. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DeviceRotationChanged","Summary":"Fired when a user rotates a device that has an gyroscope. This is fired with an InputObject, which has type Enum.InputType.Gyroscope, and position that shows total rotation in each local device axis.  The delta property describes the amount of rotation that last happened. A second argument of Vector4 is the device's current quaternion rotation in reference to it's default reference frame. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetDeviceAcceleration","Summary":"Returns an InputObject that describes the device's current acceleration. This is fired with an InputObject, which has type Enum.InputType.Accelerometer, and position that shows the g force in each local device axis.  The delta property describes the amount of rotation that last happened. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetDeviceGravity","Summary":"Returns an InputObject that describes the device's current gravity vector. This is fired with an InputObject, which has type Enum.InputType.Accelerometer, and position that shows the g force in each local device axis. The delta property describes the amount of rotation that last happened. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetDeviceRotation","Summary":"Returns an InputObject and a Vector4 that describes the device's current rotation vector. This is fired with an InputObject, which has type Enum.InputType.Gyroscope, and position that shows total rotation in each local device axis. The delta property describes the amount of rotation that last happened. The Vector4 is the device's current quaternion rotation in reference to it's default reference frame. This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Sky","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":28,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ColorCorrectionEffect","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":83,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Brightness","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Contrast","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Saturation","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BloomEffect","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":83,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Intensity","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Threshold","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Size","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BlurEffect","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":83,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Size","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SunRaysEffect","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":83,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Intensity","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Spread","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Motor","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Humanoid","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":9,"Browsable":true,"PreferredParent":"","Members":[{"Name":"MoveTo","Summary":"Attempts to move the Humanoid and it's associated character to 'part'. 'location' is used as an offset from part's origin.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Jump","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Sit","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TakeDamage","Summary":"Decreases health by the amount.  Use this instead of changing health directly to make sure weapons are filtered for things such as ForceField(s).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UnequipTools","Summary":"Takes any active gear/tools that the Humanoid is using and puts them into the backpack.  This function only works on Humanoids with a corresponding Player.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"EquipTool","Summary":"Takes a specified tool and equips it to the Humanoid's Character.  Tool argument should be of type 'Tool'.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NameOcclusion","Summary":"Sets how to display other humanoid names to this humanoid's player. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BodyColors","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Shirt","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":43,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Pants","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":44,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ShirtGraphic","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":40,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Skin","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"DebugSettings","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FaceInstance","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GameSettings","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GlobalSettings","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Item","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NetworkPeer","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NetworkSettings","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PVInstance","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"CoordinateFrame","Summary":"Deprecated. Use CFrame instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"RenderSettings","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"RootInstance","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ServiceProvider","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"service","Summary":"Use GetService() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ProfilingItem","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NetworkMarker","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Hopper","Summary":"Use StarterPack instead","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"Instance","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"Archivable","Summary":"Determines whether or not an Instance can be saved when the game closes/attempts to save the game. Note: this only applies to games that use Data Persistence, or SavePlaceAsync.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ClassName","Summary":"The string name of this Instance's most derived class.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Parent","Summary":"The Instance that is directly above this Instance in the tree.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetDebugId","Summary":"This function is for internal testing. Don't use in production code","Browsable":"false","Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Clone","Summary":"Returns a copy of this Object and all its children. The copy's Parent is nil","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"clone","Summary":"Use Clone() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"isA","Summary":"Use IsA() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"IsA","Summary":"Returns a boolean if this Instance is of type 'className' or a is a subclass of type 'className'.  If 'className' is not a valid class type in ROBLOX, this function will always return false.  More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindFirstChild","Summary":"Returns the first child of this Instance that matches the first argument 'name'.  The second argument 'recursive' is an optional boolean (defaults to false) that will force the call to traverse down thru all of this Instance's descendants until it finds an object with a name that matches the 'name' argument.  The function will return nil if no Instance is found.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindFirstChildOfClass","Summary":"Returns the first child of this Instance that with a ClassName equal to 'className'.  The function will return nil if no Instance is found.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindFirstChildWhichIsA","Summary":"Returns the first child of this Instance that :IsA(className).  The second argument 'recursive' is an optional boolean (defaults to false) that will force the call to traverse down thru all of this Instance's descendants until it finds an object with a name that matches the 'className' argument.  The function will return nil if no Instance is found.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindFirstAncestor","Summary":"Returns the first ancestor of this Instance that matches the first argument 'name'.  The function will return nil if no Instance is found.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindFirstAncestorOfClass","Summary":"Returns the first ancestor of this Instance with a ClassName equal to 'className'.  The function will return nil if no Instance is found.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindFirstAncestorWhichIsA","Summary":"Returns the first ancestor of this Instance that :IsA(className).  The function will return nil if no Instance is found.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetFullName","Summary":"Returns a string that shows the path from the root node (DataModel) to this Instance.  This string does not include the root node (DataModel).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"children","Summary":"Use GetChildren() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"getChildren","Summary":"Use GetChildren() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"GetChildren","Summary":"Returns a read-only table of this Object's children","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetDescendants","Summary":"Returns an array containing all of the descendants of the instance. Returns in preorder traversal, or in other words, where the parents come before their children, depth first.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Remove","Summary":"Deprecated. Use ClearAllChildren() to get rid of all child objects, or Destroy() to invalidate this object and its descendants","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"remove","Summary":"Use Remove() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"ClearAllChildren","Summary":"Removes all children (but not this object) from the workspace.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Destroy","Summary":"Removes object and all of its children from the workspace. Disconnects object and all children from open connections. Object and children may not be usable after calling Destroy.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"findFirstChild","Summary":"Use FindFirstChild() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"AncestryChanged","Summary":"Fired when any of this object's ancestors change.  First argument 'child' is the object whose parent changed.  Second argument 'parent' is the first argument's new parent.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DescendantAdded","Summary":"Fired after an Instance is parented to this object, or any of this object's descendants.  The 'descendant' argument is the Instance that is being added.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DescendantRemoving","Summary":"Fired after an Instance is unparented from this object, or any of this object's descendants.  The 'descendant' argument is the Instance that is being added.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Changed","Summary":"Fired after a property changes value.  The property argument is the name of the property","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BodyGyro","Summary":"Attempts to maintain a fixed orientation of its parent Part","ExplorerOrder":14,"ExplorerImageIndex":14,"Browsable":true,"PreferredParent":"","Members":[{"Name":"MaxTorque","Summary":"The maximum torque that will be exerted on the Part","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"maxTorque","Summary":"Use MaxTorque instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"D","Summary":"The dampening factor applied to this force","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"P","Summary":"The power continually applied to this force","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CFrame","Summary":"The cframe that this force is trying to orient its parent Part to.  Note: this force only uses the rotation of the cframe, not the position.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"cframe","Summary":"Use CFrame instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BodyPosition","Summary":"","ExplorerOrder":14,"ExplorerImageIndex":14,"Browsable":true,"PreferredParent":"","Members":[{"Name":"MaxForce","Summary":"The maximum force that will be exerted on the Part","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"maxForce","Summary":"Use MaxForce instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"D","Summary":"The dampening factor applied to this force","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"P","Summary":"The power factor continually applied to this force","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Position","Summary":"The Vector3 that this force is trying to position its parent Part to.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"position","Summary":"Use position instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"RocketPropulsion","Summary":"A propulsion system that mimics a rocket","ExplorerOrder":14,"ExplorerImageIndex":14,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BodyVelocity","Summary":"","ExplorerOrder":14,"ExplorerImageIndex":14,"Browsable":true,"PreferredParent":"","Members":[{"Name":"MaxForce","Summary":"The maximum force that will be exerted on the Part in each axis","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"maxForce","Summary":"Use MaxForce instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"P","Summary":"The amount of power we add to the system.  The higher the power, the quicker the force will achieve its goal.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Velocity","Summary":"The velocity this system tries to achieve.  How quickly the system reaches this velocity (if ever) is defined by P.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"velocity","Summary":"Use Velocity instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BodyAngularVelocity","Summary":"","ExplorerOrder":14,"ExplorerImageIndex":14,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BodyForce","Summary":"When parented to a physical part, BodyForce will continually exert a force upon its parent object.","ExplorerOrder":14,"ExplorerImageIndex":14,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BodyThrust","Summary":"","ExplorerOrder":14,"ExplorerImageIndex":14,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Force","Summary":"The power continually applied to this force","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"force","Summary":"Use Force instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"Location","Summary":"The Vector3 location of where to apply the force to.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"location","Summary":"Use Location instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Hole","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"Feature","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Teams","Summary":"This Service-level object is the container for all Team objects in a level. A map that supports team games must have a Teams service. More info","ExplorerOrder":14,"ExplorerImageIndex":23,"Browsable":true,"PreferredParent":"","Members":[{"Name":"GetPlayers","Summary":"Returns a read-only table of players which are on this team.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Team","Summary":"The Team class is used to represent a faction in a team game. The only valid location for a Team object is under the Teams service. More info","ExplorerOrder":1,"ExplorerImageIndex":24,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SpawnLocation","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":25,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NetworkClient","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":16,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NetworkServer","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":15,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"LuaSourceContainer","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"CurrentEditor","Summary":"The name of the player who is currently editing the script in Team Create.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Script","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":6,"Browsable":true,"PreferredParent":"","Members":[{"Name":"LinkedScript","Summary":"This property is under development. Do not use","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"LocalScript","Summary":"A script that runs on clients, NOT servers.  LocalScripts can only run when parented under the PlayerGui currently.","ExplorerOrder":4,"ExplorerImageIndex":18,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NetworkReplicator","Summary":"","ExplorerOrder":3,"ExplorerImageIndex":29,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Model","Summary":"A construct used to group Parts and other objects together, also allows manipulation of multiple objects.","ExplorerOrder":10,"ExplorerImageIndex":2,"Browsable":true,"PreferredParent":"","Members":[{"Name":"BreakJoints","Summary":"Breaks all surface joints contained within","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetModelCFrame","Summary":"Returns a CFrame that has position of the centroid of all Parts in the Model.  The rotation matrix is either the rotation matrix of the user-defined PrimaryPart, or if not specified then  a part in the Model chosen by the engine.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetModelSize","Summary":"Returns a Vector3 that is union of the extents of all Parts in the model.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MakeJoints","Summary":"Creates the appropriate SurfaceJoints between all touching Parts contrained within the model. Technically, this function calls MakeJoints() on all Parts inside the model.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MoveTo","Summary":"Moves the centroid of the Model to the specified location, respecting all relative distances between parts in the model.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ResetOrientationToIdentity","Summary":"Rotates all parts in the model to the orientation that was set using SetIdentityOrientation().  If this function has never been called, rotation is reset to GetModelCFrame()'s rotation.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetIdentityOrientation","Summary":"Takes the current rotation matrix of the model and stores it as the model's identity matrix. The rotation is applied when ResetOrientationToIdentity() is called.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TranslateBy","Summary":"Similar to MoveTo(), except instead of moving to an explicit location, we use the model's current CFrame location and offset it.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetPrimaryPartCFrame","Summary":"Returns the cframe of the Model.PrimaryPart. If PrimaryPart is nil, then this function will throw an error.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetPrimaryPartCFrame","Summary":"Sets the cframe of the Model.PrimaryPart. If PrimaryPart is nil, then this function will throw an error. This also sets the cframe of all descendant Parts relative to the cframe change to PrimaryPart.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"makeJoints","Summary":"Use MakeJoints() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"move","Summary":"Use MoveTo() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"PrimaryPart","Summary":"A Part that serves as a reference for the Model's CFrame. Used in conjunction with GetModelPrimaryPartCFrame and SetModelPrimaryPartCFrame. Use this to rotate/translate all Parts relative to the PrimaryPart.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Status","Summary":"","ExplorerOrder":10,"ExplorerImageIndex":2,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[{"Name":"move","Summary":"Use MoveTo() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Preliminary":false,"IsBackend":false},{"Name":"DataModel","Summary":"The root of ROBLOX's parent-child hierarchy (commonly known as game after the global variable used to access it)","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"OnClose","Summary":"Deprecated. Use DataModel.BindToClose","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"Workspace","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"workspace","Summary":"Deprecated. Use Workspace","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"ShowMouse","Summary":"Deprecated. Use Workspace.IsMouseCursorVisible","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"IsLoaded","Summary":"Returns true if the game has finished loading, false otherwise.  Check this before listening to the Loaded signal to ensure a script knows when a game finishes loading.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Loaded","Summary":"Fires when the game finishes loading.  Use this to know when to remove your custom loading gui.  It is best to check IsLoaded() before connecting to this event, as the game may load before the event is connected to.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetPlaceID","Summary":"Use SetPlaceId() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SetCreatorID","Summary":"Use SetCreatorId() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DataStoreService","Summary":"Responsible for storing data across multiple user created places","ExplorerOrder":-1,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"GetDataStore","Summary":"Returns a data store with the given name and scope","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetGlobalDataStore","Summary":"Returns the default data store","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetOrderedDataStore","Summary":"Returns an ordered data store with the given name and scope","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GlobalDataStore","Summary":"Exposes functions for saving and loading data for the DataStoreService","ExplorerOrder":-1,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"OnUpdate","Summary":"Sets callback as a function to be executed any time the value associated with key is changed. It is important to disconnect the connection when the subscription to the key is no longer needed.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetAsync","Summary":"Returns the value of the entry in the DataStore with the given key","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"IncrementAsync","Summary":"Increments the value of a particular key amd returns the incremented value","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetAsync","Summary":"Sets the value of the key. This overwrites any existing data stored in the key","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UpdateAsync","Summary":"Retrieves the value of the key from the website, and updates it with a new value. The callback until the value fetched matches the value on the web. Returning nil means it will not save.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"OrderedDataStore","Summary":"A type of DataStore where values must be positive integers. This makes OrderedDataStore suitable for leaderboard related scripting where you are required to order large amounts of data efficiently.","ExplorerOrder":-1,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"GetSortedAsync","Summary":"Returns a DataStorePages object. The length of each page is determined by pageSize, and the order is determined by isAscending. minValue and maxValue are optional parameters which will filter the result.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"HopperBin","Summary":"","ExplorerOrder":24,"ExplorerImageIndex":22,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"Camera","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":5,"Browsable":true,"PreferredParent":"","Members":[{"Name":"CameraSubject","Summary":"Where the Camera's focus is.  Any rotation of the camera will be about this subject.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CameraType","Summary":"Defines how the camera will behave. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CoordinateFrame","Summary":"The current position and rotation of the Camera.  For most CameraTypes, the rotation is set such that the CoordinateFrame lookVector is pointing at the Focus.","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"CFrame","Summary":"The current position and rotation of the Camera.  For most CameraTypes, the rotation is set such that the CoordinateFrame lookVector is pointing at the Focus.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FieldOfView","Summary":"The current angle, or width, of what the camera can see.  Current acceptable values are from 20 degrees to 80.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Focus","Summary":"The current CoordinateFrame that the camera is looking at.  Note: it is not always guaranteed that the camera is always looking here.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ViewportSize","Summary":"Holds the x,y screen resolution of the viewport the camera is presenting (note: this can differ from the AbsoluteSize property of a full screen gui).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetRoll","Summary":"Returns the camera's current roll. Roll is defined in radians, and is stored as the delta from the camera's y axis default normal vector.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"WorldToScreenPoint","Summary":"Takes a 3D position in the world and projects it onto x,y coordinates of screen space. Returns two values, first is a Vector3 that has x,y position and z position which is distance from camera (negative if behind camera, positive if in front). Second return value is a boolean indicating if the first argument is an on-screen coordinate.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ScreenPointToRay","Summary":"Takes a 2D screen position and produces a Ray object to be used for 3D raycasting. Input is x,y screen coordinates, and a (optional, defaults to 0) z position which sets how far in the camera look vector to start the ray origin.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ViewportPointToRay","Summary":"Same as ScreenPointToRay, except no GUI offsets are taken into account. Useful for things like casting a ray from the middle of the Camera.ViewportSize","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"WorldToViewportPoint","Summary":"Same as WorldToScreenPoint, except no GUI offsets are taken into account.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetRoll","Summary":"Sets the camera's current roll. Roll is defined in radians, and is stored as the delta from the camera's y axis default normal vector.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Players","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":21,"Browsable":true,"PreferredParent":"","Members":[{"Name":"CharacterAutoLoads","Summary":"Set to true, when a player joins a game, they get a character automatically, as well as when they die.  When set to false, characters do not auto load and will only load in using Player:LoadCharacter().","Browsable":"true","Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"players","Summary":"Use GetPlayers() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ReplicatedStorage","Summary":"A container whose contents are replicated to all clients and the server.","ExplorerOrder":3,"ExplorerImageIndex":70,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"RobloxReplicatedStorage","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ReplicatedFirst","Summary":"A container whose contents are replicated to all clients (but not back to the server) first before anything else. Useful for creating loading guis, tutorials, etc.","ExplorerOrder":3,"ExplorerImageIndex":70,"Browsable":true,"PreferredParent":"","Members":[{"Name":"RemoveRobloxLoadingScreen","Summary":"Removes the default Roblox loading screen from view. Call this when you are ready to either show your own loading gui, or when the game is ready to play.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ServerStorage","Summary":"A container whose contents are only on the server.","ExplorerOrder":3,"ExplorerImageIndex":69,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ServerScriptService","Summary":"A container whose contents should be scripts. Scripts that are added to the container are run on the server.","ExplorerOrder":3,"ExplorerImageIndex":71,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Lighting","Summary":"Responsible for all lighting aspects of the world (affects how things are rendered).","ExplorerOrder":3,"ExplorerImageIndex":13,"Browsable":true,"PreferredParent":"","Members":[{"Name":"GetMinutesAfterMidnight","Summary":"The number of minutes that the current time is past midnight.  If currently at midnight, returns 0.  Will return decimal values if not at an exact minute.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetMoonDirection","Summary":"Returns the lookVector (Vector3) of the moon. If this lookVector was used in a CFrame, the Part would face the moon.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetMoonPhase","Summary":"Currently always returns 0.75. MoonPhase cannot be edited.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetSunDirection","Summary":"Returns the lookVector (Vector3) of the sun. If this lookVector was used in a CFrame, the Part would face the sun.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetMinutesAfterMidnight","Summary":"Sets the time to be a certain number of minutes after midnight.  This works with integer and decimal values.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Ambient","Summary":"The hue of the global lighting.  Changing this changes the color tint of all objects in the Workspace.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Brightness","Summary":"How much global light each Part in the Workspace receives. Standard range is 0 to 1 (0 being little light), but can be increased all the way to 5 (colors start to be appear very different at this value).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ColorShift_Bottom","Summary":"The hue of global lighting on the bottom surfaces of an object.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ColorShift_Top","Summary":"The hue of global lighting on the top surfaces of an object.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FogColor","Summary":"A Color3 value that changes the hue of distance fog.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FogEnd","Summary":"The distance at which fog completely blocks your vision. This distance is relative to the camera position. Units are in studs","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FogStart","Summary":"The distance at which the fog gradient begins. This distance is relative to the camera position. Units are in studs.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GeographicLatitude","Summary":"The latitude position the level is placed at.  This affects sun position. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GlobalShadows","Summary":"Flag enabling shadows from sun and moon in the place","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"OutdoorAmbient","Summary":"Effective ambient value for outdoors, effectively shadow color outdoors (requires GlobalShadows enabled)","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Outlines","Summary":"Flag enabling or disabling outlines on parts and terrain","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ShadowColor","Summary":"Color the shadows appear as. Shadows are drawn mostly for characters, but depending on the lighting will also show for Parts in the Workspace.  Rendering settings can also affect if shadows are drawn.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TimeOfDay","Summary":"A string that represent the current time of day. Time is in 24-hour clock format \"XX::YY:ZZ\", where X is hour, Y is minute, and Z is seconds.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ClockTime","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"LightingChanged","Summary":"Fired whenever a property of Lighting is changed, or a skybox is added or removed. Skyboxes are of type 'Sky' and should be parented directly to lighting.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TestService","Summary":"","ExplorerOrder":100,"ExplorerImageIndex":68,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DebuggerManager","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ScriptDebugger","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DebuggerBreakpoint","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DebuggerWatch","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Debris","Summary":"A service that provides utility in cleaning up objects","ExplorerOrder":-1,"ExplorerImageIndex":30,"Browsable":true,"PreferredParent":"","Members":[{"Name":"addItem","Summary":"Use AddItem() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"AddItem","Summary":"Adds an Instance into the debris service that will later be destroyed.  Second argument 'lifetime' is optional and specifies how long (in seconds) to wait before destroying the item. If no time is specified then the item added will automatically be destroyed in 10 seconds.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MaxItems","Summary":"Deprecated. No replacement","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Accoutrement","Summary":"","ExplorerOrder":2,"ExplorerImageIndex":32,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Player","Summary":"","ExplorerOrder":1,"ExplorerImageIndex":12,"Browsable":true,"PreferredParent":"","Members":[{"Name":"CharacterAppearance","Summary":"","Browsable":"false","Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CameraMode","Summary":"An enum that describes how a Player's camera is allowed to behave. More info.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DataReady","Summary":"Read-only. If true, this Player's persistent data can be loaded, false otherwise. Info on Data Persistence.","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"DataComplexity","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"LoadCharacter","Summary":"Loads in a new character for this player.  This will replace the player's current character, if they have one. This should be used in conjunction with Players.CharacterAutoLoads to control spawning of characters. This function only works from a server-side script (NOT a LocalScript).","Browsable":"true","Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"LoadData","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SaveData","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SaveBoolean","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SaveInstance","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SaveString","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"LoadBoolean","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"LoadNumber","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"LoadString","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"LoadInstance","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SaveNumber","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"playerFromCharacter","Summary":"Use GetPlayerFromCharacter() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SetUnder13","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"WaitForDataReady","Summary":"Yields until the persistent data for this Player is ready to be loaded. Info on Data Persistence.","Browsable":"true","Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"Idled","Summary":"Fired periodically after the user has been AFK for a while.  Currently this event is only fired for the *local* Player.  \"time\" is the time in seconds that the user has been idle.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Workspace","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":19,"Browsable":true,"PreferredParent":"","Members":[{"Name":"FindPartsInRegion3","Summary":"Returns parts in the area defined by the Region3, up to specified maxCount or 100, whichever is less","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindPartsInRegion3WithIgnoreList","Summary":"Returns parts in the area defined by the Region3, up to specified maxCount or 100, whichever is less","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindPartOnRay","Summary":"Return type is (BasePart, Vector3) if the ray hits.  If it misses it will return (nil, PointAtEndOfRay)","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FindPartOnRayWithIgnoreList","Summary":"Return type is (BasePart, Vector3) if the ray hits.  If it misses it will return (nil, PointAtEndOfRay)","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PGSPhysicsSolverEnabled","Summary":"Boolean used to enable the experimental physics solver","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FallenPartsDestroyHeight","Summary":"Sets the height at which falling characters and parts are destroyed. This property is not scriptable and can only be set in Studio","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BasePart","Summary":"A structural class, not creatable","ExplorerOrder":-1,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"Color","Summary":"Color3 of the part.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CFrame","Summary":"Contains information regarding the Part's position and a matrix that defines the Part's rotation.  Can read/write. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CanCollide","Summary":"Determines whether physical interactions with other Parts are respected.  If true, will collide and react with physics to other Parts.  If false, other parts will pass thru instead of colliding","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Anchored","Summary":"Determines whether or not physics acts upon the Part.  If true, part stays 'Anchored' in space, not moving regardless of any collision/forces acting upon it.  If false, physics works normally on the part.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Elasticity","Summary":"A float value ranging from 0.0f to 1.0f. Sets how much the Part will rebound against another. a value of 1 is like a superball, and 0 is like a lead block.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Friction","Summary":"A float value ranging from 0.0f to 1.0f. Sets how much the Part will be able to slide. a value of 1 is no sliding, and 0 is no friction, so infinite sliding.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Locked","Summary":"Determines whether building tools (in-game and studio) can manipulate this Part.  If true, no editing allowed.  If false, editing is allowed.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Material","Summary":"Specifies the look and feel the Part should have.  Note: this does not define the color the Part is, see BrickColor for that. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Reflectance","Summary":"Specifies how shiny the Part is. A value of 1 is completely reflective (chrome), while a value of 0 is no reflectance (concrete wall)","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ResizeIncrement","Summary":"Sets the value for the smallest change in size allowable by the Resize(NormalId, int) function.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ResizeableFaces","Summary":"Sets the value for the faces allowed to be resized by the Resize(NormalId, int) function.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Transparency","Summary":"Sets how visible an object is. A value of 1 makes the object invisible, while a value of 0 makes the object opaque.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Velocity","Summary":"How fast the Part is traveling in studs/second. This property is NOT recommended to be modified directly, unless there is good reason.  Otherwise, try using a BodyForce to move a Part.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PositionLocal","Summary":"Position relative to parent part, or global space if there is no parent.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"OrientationLocal","Summary":"Orientation relative to parent part, or global space if there is no parent.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Orientation","Summary":"Rotation around X, Y, and Z axis.  Rotations applied in YXZ order.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Rotation","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CenterOfMass","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"makeJoints","Summary":"Use MakeJoints() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"MakeJoints","Summary":"Creates the appropriate SurfaceJoints with all parts that are touching this Instance (including internal joints in the Instance, as in a Model).  This uses the SurfaceTypes defined on the surfaces of parts to create the appropriate welds. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BreakJoints","Summary":"Destroys SurfaceJoints with all parts that are touching this Instance (including internal joints in the Instance, as in a Model).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetMass","Summary":"Returns a number that is the mass of this Instance.  Mass of a Part is immutable, and is changed only by the size of the Part.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Resize","Summary":"Resizes a Part in the direction of the face defined by 'NormalId', by the amount specified by 'deltaAmount'. If the operation will expand the part to intersect another Instance, the part will not resize at all.  Return true if the call is successful, false otherwise.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"getMass","Summary":"Use GetMass() instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"OutfitChanged","Summary":"","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"LocalSimulationTouched","Summary":"Deprecated. Use Touched instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"StoppedTouching","Summary":"Deprecated. Use TouchEnded instead","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchEnded","Summary":"Fired when the part stops touching another part","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Part","Summary":"A plastic building block - the fundamental component of ROBLOX","ExplorerOrder":11,"ExplorerImageIndex":1,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TrussPart","Summary":"An extendable building truss","ExplorerOrder":12,"ExplorerImageIndex":1,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"WedgePart","Summary":"A Wedge Part","ExplorerOrder":12,"ExplorerImageIndex":1,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PrismPart","Summary":"A Prism Part","ExplorerOrder":12,"ExplorerImageIndex":1,"Browsable":"false","Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"PyramidPart","Summary":"A Pyramid Part","ExplorerOrder":12,"ExplorerImageIndex":1,"Browsable":"false","Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"ParallelRampPart","Summary":"A ParallelRamp Part","ExplorerOrder":12,"ExplorerImageIndex":1,"Browsable":"false","Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"RightAngleRampPart","Summary":"A RightAngleRamp Part","ExplorerOrder":12,"ExplorerImageIndex":1,"Browsable":"false","Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"CornerWedgePart","Summary":"A CornerWedge Part","ExplorerOrder":12,"ExplorerImageIndex":1,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PlayerGui","Summary":"A container instance that syncs data between a single player and the server.  ScreenGui objects that are placed in this container will be shown to the Player parent only","ExplorerOrder":13,"ExplorerImageIndex":46,"Browsable":true,"PreferredParent":"","Members":[{"Name":"SelectionImageObject","Summary":"Overrides the default selection adornment (used for gamepads). For best results, this should point to a GuiObject.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PlayerScripts","Summary":"A container instance that contains LocalScripts.  LocalScript objects that are placed in this container will be exectue only when a Player is the parent.","ExplorerOrder":13,"ExplorerImageIndex":78,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"StarterPlayerScripts","Summary":"A container instance that contains LocalScripts.  LocalScript objects that are placed in this container will be copied to new Players on startup.","ExplorerOrder":13,"ExplorerImageIndex":78,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"StarterCharacterScripts","Summary":"A container instance that contains LocalScripts.  LocalScript objects that are placed in this container will be copied to new characters on startup.","ExplorerOrder":13,"ExplorerImageIndex":78,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GuiMain","Summary":"Deprecated, please use ScreenGui","ExplorerOrder":14,"ExplorerImageIndex":47,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"LayerCollector","Summary":"The base class of ScreenGui, BillboardGui, and SurfaceGui.","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ScreenGui","Summary":"The core GUI object on which tools are built.  Add Frames/Labels/Buttons to this object to have them rendered as a 2D overlay","ExplorerOrder":14,"ExplorerImageIndex":47,"Browsable":true,"PreferredParent":"StarterGui","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"FunctionalTest","Summary":"Deprecated. Use TestService instead","ExplorerOrder":1,"ExplorerImageIndex":0,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"BillboardGui","Summary":"A GUI that adorns an object in the 3D world.  Add Frames/Labels/Buttons to this object to have them rendered while attached to a 3D object","ExplorerOrder":14,"ExplorerImageIndex":64,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"Adornee","Summary":"The Object the billboard gui uses as its base to render from.  Currently, the only way to set this property is thru a script, and must exist in the workspace.  This will only render if the object assigned derives from BasePart.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AbsolutePosition","Summary":"A read-only Vector2 value that is the GuiObject's current position (x,y) in pixel space, from the top left corner of the GuiObject.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AbsoluteSize","Summary":"A read-only Vector2 value that is the GuiObject's current size (width, height) in pixel space.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Active","Summary":"If true, this GuiObject can fire mouse events and will pass them to any GuiObjects layered underneath, while false will do neither.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AlwaysOnTop","Summary":"If true, billboard gui does not get occluded by 3D objects, but always renders on the screen.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Enabled","Summary":"If true, billboard gui will render, otherwise rendering will be skipped.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ExtentsOffset","Summary":"A Vector3 (x,y,z) defined in studs that will offset the gui from the extents of the 3d object it is rendering from.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PlayerToHideFrom","Summary":"Specifies a Player that the BillboardGui will not render to.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"StudsOffset","Summary":"A Vector3 (x,y,z) defined in studs that will offset the gui from the centroid of the 3d object it is rendering from","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SizeOffset","Summary":"A Vector2 (x,y) defined in studs that will offset the gui size from it's current size.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Size","Summary":"A UDim2 value describing the size of the BillboardGui. More information on UDim2 is available here. Relative values are defined as one-to-one with studs.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"LightInfluence","Summary":"Specifies the amount of influence lighting has on the billboard gui. A value of 0 is unlit, 1 is fully lit. Fractional values blend from unlit to lit.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SurfaceGui","Summary":"Renders its contained GuiObjects flat against the face of a part.","ExplorerOrder":14,"ExplorerImageIndex":64,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"Adornee","Summary":"The Object the surface gui uses as its base to render from.  Currently, the only way to set this property is thru a script, and must exist in the workspace.  This will only render if the object assigned derives from BasePart.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Active","Summary":"If true, this GuiObject can fire mouse events and will pass them to any GuiObjects layered underneath, while false will do neither.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Enabled","Summary":"If true, surface gui will render, otherwise rendering will be skipped.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"LightInfluence","Summary":"Specifies the amount of influence lighting has on the surface gui. A value of 0 is unlit, 1 is fully lit. Fractional values blend from unlit to lit.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GuiBase2d","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"AbsolutePosition","Summary":"A read-only Vector2 value that is the GuiObject's current position (x,y) in pixel space, from the top left corner of the GuiObject.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AbsoluteSize","Summary":"A read-only Vector2 value that is the GuiObject's current size (width, height) in pixel space.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InputObject","Summary":"An object that describes a particular user input, such as mouse movement, touches, keyboard, and more.","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":true,"PreferredParent":"","Members":[{"Name":"UserInputType","Summary":"An enum that describes what kind of input this object is describing (mousebutton, touch, etc.).  See Enum.UserInputType for more info.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UserInputState","Summary":"An enum that describes what state of a particular input (touch began, touch moved, touch ended, etc.). See Enum.UserInputState for more info.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Position","Summary":"A Vector3 value that describes a positional value of this input. For mouse and touch input, this is the screen position of the mouse/touch, described in the x and y components. For mouse wheel input, the z component describes whether the wheel was moved forward or backward.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"KeyCode","Summary":"An enum that describes what kind of input is being pressed. For types of input like Keyboard, this describes what key was pressed. For input like mousebutton, this provides no additional information.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GuiObject","Summary":"","ExplorerOrder":0,"ExplorerImageIndex":0,"Browsable":"false","PreferredParent":"","Members":[{"Name":"TweenPosition","Summary":"Smoothly moves a GuiObject from its current position to 'endPosition'. The only required argument is 'endPosition'. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TweenSize","Summary":"Smoothly translates a GuiObject's current size to 'endSize'. The only required argument is 'endSize'. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TweenSizeAndPosition","Summary":"Smoothly translates a GuiObject's current size to 'endSize', and also smoothly translates the GuiObject's current position to 'endPosition'. The only required arguments are 'endSize' and 'endPosition'. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Active","Summary":"If true, this GuiObject can fire mouse events and will pass them to any GuiObjects layered underneath, while false will do neither.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BackgroundColor3","Summary":"A Color3 value that specifies the background color for the GuiObject. This value is ignored if the Style property (not found on all GuiObjects) is set to something besides custom.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BackgroundTransparency","Summary":"A number value that specifies how transparent the background of the GuiObject is. This value is ignored if the Style property (not found on all GuiObjects) is set to something besides custom.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BorderColor3","Summary":"A Color3 value that specifies the color of the outline of the GuiObject. This value is ignored if the Style property (not found on all GuiObjects) is set to something besides custom.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BorderSizePixel","Summary":"A number value that specifies the thickness (in pixels) of the outline of the GuiObject. Currently this value can only be set to either 0 or 1, any other number has no effect. This value is ignored if the Style property (not found on all GuiObjects) is set to something besides custom.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ClipsDescendants","Summary":"If set to true, any descendants of this GuiObject will only render if contained within it's borders. If set to false, all descendants will render regardless of position.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Draggable","Summary":"If true, allows a GuiObject to be dragged by the user's mouse. The events 'DragBegin' and 'DragStopped' are fired when the appropriate action happens, and only will fire on Draggable=true GuiObjects.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Size","Summary":"A UDim2 value describing the size of the GuiObject on screen in both absolute and relative coordinates. More information on UDim2 is available here.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Position","Summary":"A UDim2 value describing the position of the top-left corner of the GuiObject on screen. More information on UDim2 is available here.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SizeConstraint","Summary":"The direction(s) that an object can be resized in. More info.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ZIndex","Summary":"Describes the ordering in which overlapping GuiObjects will be drawn. A value of 1 is drawn first, while higher values are drawn in ascending order (each value draws over the last).","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BackgroundColor","Summary":"Deprecated. Use BackgroundColor3 instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"BorderColor","Summary":"Deprecated. Use BorderColor3 instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false},{"Name":"SelectionImageObject","Summary":"Overrides the default selection adornment (used for gamepads). For best results, this should point to a GuiObject.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DragBegin","Summary":"Fired when a GuiObject with Draggable set to true starts to be dragged. 'InitialPosition' is a UDim2 value of the position of the GuiObject before any drag operation began.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DragStopped","Summary":"Always fired after a DragBegin event, DragStopped is fired when the user releases the mouse button causing a drag operation on the GuiObject. Arguments 'x', and 'y' specify the top-left absolute position of the GuiObject when the event is fired.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseEnter","Summary":"Fired when the mouse enters a GuiObject, as long as the GuiObject is active (see active property for more detail). Arguments 'x', and 'y' specify the absolute pixel position of the mouse.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseLeave","Summary":"Fired when the mouse leaves a GuiObject, as long as the GuiObject is active (see active property for more detail). Arguments 'x', and 'y' specify the absolute pixel position of the mouse.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseMoved","Summary":"Fired when the mouse is inside a GuiObject and moves, as long as the GuiObject is active (see active property for more detail). Arguments 'x', and 'y' specify the absolute pixel position of the mouse.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchTap","Summary":"Fired when a user taps their finger on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the tap gesture. This event only fires locally.  This event will always fire regardless of game state.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchPinch","Summary":"Fired when a user pinches their fingers on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the pinch gesture. 'scale' is a float that indicates the difference from the beginning of the pinch gesture. 'velocity' is a float indicating how quickly the pinch gesture is happening. 'state' indicates the Enum.UserInputState of the gesture.  This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchSwipe","Summary":"Fired when a user swipes their fingers on a TouchEnabled device. 'swipeDirection' is an Enum.SwipeDirection, indicating the direction the user swiped. 'numberOfTouches' is an int that indicates how many touches were involved with the gesture.  This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchLongPress","Summary":"Fired when a user holds at least one finger for a short amount of time on the same screen position on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the gesture. 'state' indicates the Enum.UserInputState of the gesture.  This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchRotate","Summary":"Fired when a user rotates two fingers on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the gesture. 'rotation' is a float indicating how much the rotation has gone from the start of the gesture. 'velocity' is a float that indicates how quickly the gesture is being performed. 'state' indicates the Enum.UserInputState of the gesture.  This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TouchPan","Summary":"Fired when a user drags at least one finger on a TouchEnabled device. 'touchPositions' is a Lua array of Vector2, each indicating the position of all the fingers involved in the gesture. 'totalTranslation' is a Vector2, indicating how far the pan gesture has gone from its starting point. 'velocity' is a Vector2 that indicates how quickly the gesture is being performed in each dimension. 'state' indicates the Enum.UserInputState of the gesture.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InputBegan","Summary":"Fired when a user begins interacting via a Human-Computer Interface device (Mouse button down, touch begin, keyboard button down, etc.). 'inputObject' is an InputObject, which contains useful data for querying user input.  This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InputChanged","Summary":"Fired when a user changes interacting via a Human-Computer Interface device (Mouse move, touch move, mouse wheel, etc.). 'inputObject' is an InputObject, which contains useful data for querying user input.  This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InputEnded","Summary":"Fired when a user stops interacting via a Human-Computer Interface device (Mouse button up, touch end, keyboard button up, etc.). 'inputObject' is an InputObject, which contains useful data for querying user input.  This event only fires locally.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Frame","Summary":"A container object used to layout other GUI objects","ExplorerOrder":15,"ExplorerImageIndex":48,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"Style","Summary":"Determines how a frame will look. Uses Enum.FrameStyle. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ScrollingFrame","Summary":"A container object used to layout other GUI objects, and allows for scrolling.","ExplorerOrder":15,"ExplorerImageIndex":48,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"ScrollingEnabled","Summary":"Determines whether or not scrolling is allowed on this frame. If turned off, no scroll bars will be rendered.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CanvasSize","Summary":"Determines the size of the area that is scrollable. The UDim2 is calculated using the parent gui's size, similar to the regular Size property on gui objects.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CanvasPosition","Summary":"The absolute position the scroll frame is in respect to the canvas size. The minimum this can be set to is (0,0), while the max is the absolute canvas size - AbsoluteWindowSize.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AbsoluteWindowSize","Summary":"The size in pixels of the frame, without the scrollbars.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ScrollBarThickness","Summary":"How thick the scroll bar appears. This applies to both the horizontal and vertical scroll bars. Can be set to 0 for no bars render.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TopImage","Summary":"The \"Up\" image on the vertical scrollbar. Size of this is always ScrollBarThickness by ScrollBarThickness. This is also used as the \"left\" image on the horizontal scroll bar.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MidImage","Summary":"The \"Middle\" image on the vertical scrollbar. Size of this can vary in the y direction, but is always set at ScrollBarThickness in x direction. This is also used as the \"mid\" image on the horizontal scroll bar.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BottomImage","Summary":"The \"Down\" image on the vertical scrollbar. Size of this is always ScrollBarThickness by ScrollBarThickness. This is also used as the \"right\" image on the horizontal scroll bar.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ImageLabel","Summary":"A GUI object containing an Image","ExplorerOrder":18,"ExplorerImageIndex":49,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"Image","Summary":"Specifies the id of the texture to display. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ScaleType","Summary":"Specifies how an image should be displayed. See ScaleType for more info.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SliceCenter","Summary":"If ScaleType is set to Slice, this Rect is used to specify the central part of the image. Everything outside of this is considered to be the border.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TileSize","Summary":"If ScaleType is set to Tile, this sets the size of the tile.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TextLabel","Summary":"A GUI object containing text","ExplorerOrder":19,"ExplorerImageIndex":50,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"TextColor","Summary":"Deprecated. Use TextColor3 instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TextButton","Summary":"A GUI button containing text","ExplorerOrder":17,"ExplorerImageIndex":51,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"TextColor","Summary":"Deprecated. Use TextColor3 instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TextBox","Summary":"A text entry box","ExplorerOrder":17,"ExplorerImageIndex":51,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"TextColor","Summary":"Deprecated. Use TextColor3 instead","Browsable":true,"Deprecated":"true","Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GuiButton","Summary":"A GUI button containing an Image","ExplorerOrder":16,"ExplorerImageIndex":52,"Browsable":"false","PreferredParent":"","Members":[{"Name":"AutoButtonColor","Summary":"Determines whether a button changes color automatically when reacting to mouse events.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Modal","Summary":"Allows the mouse to be free in first person mode. If a button with this property set to true is visible, the mouse is 'free' in first person mode.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Style","Summary":"Determines how a button will look, including mouse event states. Uses Enum.ButtonStyle. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseButton1Click","Summary":"Fired when the mouse is over the button, and the mouse down and up events fire without the mouse leaving the button.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseButton1Down","Summary":"Fired when the mouse button is pushed down on a button.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseButton1Up","Summary":"Fired when the mouse button is released on a button.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseButton2Click","Summary":"This function currently does not work :(","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseButton2Down","Summary":"This function currently does not work :(","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MouseButton2Up","Summary":"This function currently does not work :(","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ImageButton","Summary":"A GUI button containing an Image","ExplorerOrder":16,"ExplorerImageIndex":52,"Browsable":true,"PreferredParent":"StarterGui","Members":[{"Name":"Image","Summary":"Specifies the asset id of the texture to display. More info","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ScaleType","Summary":"Specifies how an image should be displayed. See ScaleType for more info.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SliceCenter","Summary":"If ScaleType is set to Slice, this Rect is used to specify the central part of the image. Everything outside of this is considered to be the border.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TileSize","Summary":"If ScaleType is set to Tile, this sets the size of the tile.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Handles","Summary":"A 3D GUI object to represent draggable handles","ExplorerOrder":19,"ExplorerImageIndex":53,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ArcHandles","Summary":"A 3D GUI object to represent draggable arc handles","ExplorerOrder":20,"ExplorerImageIndex":56,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SelectionBox","Summary":"A 3D GUI object to represent the visible selection around an object","ExplorerOrder":21,"ExplorerImageIndex":54,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SelectionSphere","Summary":"A 3D GUI object to represent the visible selection around an object","ExplorerOrder":21,"ExplorerImageIndex":54,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SurfaceSelection","Summary":"A 3D GUI object to represent the visible selection around a face of an object","ExplorerOrder":21,"ExplorerImageIndex":55,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Configuration","Summary":"An object that can be placed under parts to hold Value objects that represent that part's configuration","ExplorerOrder":22,"ExplorerImageIndex":58,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Folder","Summary":"An object that can be created to hold and organize objects","ExplorerOrder":1,"ExplorerImageIndex":77,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SelectionPartLasso","Summary":"A visual line drawn representation between two part objects","ExplorerOrder":22,"ExplorerImageIndex":57,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"SelectionPointLasso","Summary":"A visual line drawn representation between two positions","ExplorerOrder":22,"ExplorerImageIndex":57,"Browsable":true,"Deprecated":"true","PreferredParent":"","Members":[],"Preliminary":false,"IsBackend":false},{"Name":"PartPairLasso","Summary":"A visual line drawn representation between two parts.","ExplorerOrder":22,"ExplorerImageIndex":57,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Pose","Summary":"The pose of a joint relative to it's parent part in a keyframe","ExplorerOrder":22,"ExplorerImageIndex":60,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Keyframe","Summary":"One keyframe of an animation","ExplorerOrder":22,"ExplorerImageIndex":60,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Animation","Summary":"Represents a linked animation object, containing keyframes and poses.","ExplorerOrder":22,"ExplorerImageIndex":60,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AnimationTrack","Summary":"Returned by a call to LoadAnimation. Controls the playback of an animation on a Humanoid.","ExplorerOrder":22,"ExplorerImageIndex":60,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"AnimationController","Summary":"Allows animations to be played on joints of the parent object.","ExplorerOrder":22,"ExplorerImageIndex":60,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"CharacterMesh","Summary":"Modifies the appearance of a body part.","ExplorerOrder":22,"ExplorerImageIndex":60,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Dialog","Summary":"An object used to make dialog trees to converse with players","ExplorerOrder":22,"ExplorerImageIndex":62,"Browsable":true,"PreferredParent":"","Members":[{"Name":"ConversationDistance","Summary":"The maximum distance that the player's character can be from the dialog's parent in order to use the dialog.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GoodbyeChoiceActive","Summary":"Indicates whether or not an extra choice is available for the player to exit the dialog tree at this node.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GoodbyeDialog","Summary":"The prompt text for an extra choice that allows the player to exit the dialog tree at this node.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InUse","Summary":"Indicates whether or not the dialog is currently being used by one or more players.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"InitialPrompt","Summary":"The chat message that is displayed to the player when they first activate the dialog.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Purpose","Summary":"Describes the purpose of the dialog, which is used to display a relevant icon on the dialog's activation button.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Tone","Summary":"Describes the tone of the dialog, which is used to display a relevant color in the dialog interface.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"BehaviorType","Summary":"Indicates how the dialog may be used by players. Use Enum.DialogBehaviorType.SinglePlayer if only one player should interact with the dialog at a time, otherwise use Enum.DialogBehaviorType.MultiplePlayers.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetCurrentPlayers","Summary":"Returns an array of the players currently conversing with this dialog.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"DialogChoice","Summary":"An object used to make dialog trees to converse with players","ExplorerOrder":22,"ExplorerImageIndex":63,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"UnionOperation","Summary":"A UnionOperation is a union of multiple parts","ExplorerOrder":2,"ExplorerImageIndex":73,"Browsable":"true","PreferredParent":"","Members":[{"Name":"UsePartColor","Summary":"Override the colors of the mesh with the part color.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"NegateOperation","Summary":"A NegateOperation can be used to create holes in other parts","ExplorerOrder":2,"ExplorerImageIndex":72,"Browsable":"true","PreferredParent":"","Members":[{"Name":"UsePartColor","Summary":"Override the colors of the mesh with the part color.","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"MeshPart","Summary":"A MeshPart is a physically simulatable mesh","ExplorerOrder":2,"ExplorerImageIndex":73,"Browsable":"true","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Terrain","Summary":"Object representing a high performance bounded grid of static 4x4 parts","ExplorerOrder":0,"ExplorerImageIndex":65,"Browsable":"true","PreferredParent":"","Members":[{"Name":"WaterTransparency","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"WaterWaveSize","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"WaterWaveSpeed","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"WaterReflectance","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetCell","Summary":"Returns CellMaterial, CellBlock, CellOrientation","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"GetWaterCell","Summary":"Returns hasAnyWater, WaterForce, WaterDirection","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SetWaterCell","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Light","Summary":"Parent of all light objects","ExplorerOrder":3,"ExplorerImageIndex":13,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Brightness","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"PointLight","Summary":"Makes the parent part emit light in a spherical shape","ExplorerOrder":3,"ExplorerImageIndex":13,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Range","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SpotLight","Summary":"Makes the parent part emit light in a conical shape","ExplorerOrder":3,"ExplorerImageIndex":13,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Range","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Angle","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"SurfaceLight","Summary":"Makes the parent part emit light in a frustum shape from rectangle defined by part","ExplorerOrder":3,"ExplorerImageIndex":13,"Browsable":true,"PreferredParent":"","Members":[{"Name":"Range","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Brightness","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"Angle","Summary":"","Browsable":true,"Deprecated":false,"Preliminary":false,"IsBackend":false}],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"RemoteFunction","Summary":"Allow functions defined in one script to be called by another script across client/server boundary","ExplorerOrder":4,"ExplorerImageIndex":74,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"RemoteEvent","Summary":"Allow events defined in one script to be subscribed to by another script across client/server boundary","ExplorerOrder":5,"ExplorerImageIndex":75,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"TerrainRegion","Summary":"Object representing a snapshot of the region of terrain","ExplorerOrder":2,"ExplorerImageIndex":65,"Browsable":"true","PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false},{"Name":"ModuleScript","Summary":"A script fragment. Only runs when another script uses require() on it.","ExplorerOrder":5,"ExplorerImageIndex":76,"Browsable":true,"PreferredParent":"","Members":[],"Deprecated":false,"Preliminary":false,"IsBackend":false}]]==]
				-- TODO: Show critical error
			end
			rawRMD = Services.HttpService:JSONDecode(rawRMD)

			local RMD = {}
			for _,v in pairs(rawRMD) do
				RMD[v.Name] = v
			end

			return RMD
		end

		function f.checkInPane(window)
			local inPane = false
			for i,v in pairs(LPaneItems) do if v.Window == window then inPane = true end end
			for i,v in pairs(RPaneItems) do if v.Window == window then inPane = true end end
			return inPane
		end

		function f.transGui(gui,num)
			if gui:IsA("GuiObject") then gui.BackgroundTransparency = num end
			if gui:IsA("TextBox") or gui:IsA("TextLabel") then gui.TextTransparency = num
			elseif gui:IsA("ImageButton") or gui:IsA("ImageLabel") then gui.ImageTransparency = num end
			for i,v in pairs(gui:GetChildren()) do
				f.transGui(v,num)
			end
		end

		function f.hookWindowListener(window)
			local selected = false
			local user = Services.UserInputService

			window.TopBar.InputBegan:connect(function(input)
				if input.UserInputType == Enum.UserInputType.MouseButton1 then
					selected = true
					local selectedInit = false
					local initPos = {mouse.X,mouse.Y}
					local dragOffX,dragOffY = mouse.X-window.TopBar.AbsolutePosition.X,mouse.Y-window.TopBar.AbsolutePosition.Y
					local inPane = false
					local releaseEvent
					local mouseEvent

					for i,v in pairs(LPaneItems) do if v.Window == window then inPane = true end end
					for i,v in pairs(RPaneItems) do if v.Window == window then inPane = true end end

					releaseEvent = user.InputEnded:Connect(function(input)
						if input.UserInputType ~= Enum.UserInputType.MouseButton1 then return end
						releaseEvent:Disconnect()
						if mouseEvent then mouseEvent:Disconnect() end
						selected = false
						if setPane ~= "None" then window.Position = window.Position - UDim2.new(0,gui.AbsoluteSize.X-300,0,0) f.addToPane(window,setPane) end
						mouseWindow = nil
					end)

					mouseEvent = user.InputChanged:Connect(function(input)
						if input.UserInputType == Enum.UserInputType.MouseMovement and (selectedInit or f.distance(initPos[1],initPos[2],mouse.X,mouse.Y) >= (inPane and 20 or 5)) then
							if not selectedInit then selectedInit = true window.Position = UDim2.new(0,mouse.X-dragOffX,0,mouse.Y-dragOffY) window.Parent = nil end
							for i,v in pairs(LPaneItems) do if v.Window == window then f.removeFromPane(window,"Left") break end end
							for i,v in pairs(RPaneItems) do if v.Window == window then f.removeFromPane(window,"Right") break end end

							mouseWindow = window

							window.Parent = gui
							window.Position = UDim2.new(0,mouse.X-dragOffX,0,mouse.Y-dragOffY)
							window.Size = UDim2.new(0,window.Size.X.Offset,0,300)
						end
					end)
				end
			end)

			--window.TopBar.InputEnded:connect(function(input)
			--	if input.UserInputType == Enum.UserInputType.MouseButton1 then
			--		print("OH")
			--	end
			--end)

			window.InputBegan:connect(function(input)
				if input.UserInputType == Enum.UserInputType.MouseButton1 then
					local inPane = f.checkInPane(window)

					if inPane then return end

					for i,v in pairs(activeWindows) do
						if v ~= window then
							if f.checkMouseInGui(v) and not f.checkInPane(v) then return end
						end
					end			

					window.Parent = nil
					window.Parent = gui
				end
			end)

			window.TopBar.Close.MouseEnter:connect(function()
				window.TopBar.Close.BackgroundTransparency = 0.5
			end)

			window.TopBar.Close.MouseLeave:connect(function()
				window.TopBar.Close.BackgroundTransparency = 1
			end)

			window.TopBar.Close.MouseButton1Click:connect(function()
				if f.checkInPane(window) then f.removeFromPane(window) window.Visible = false return end
				window.Content:TweenSize(UDim2.new(1,-4,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,0.4,true)
				wait(0.4)
				window.Visible = false
			end)
		end

		-- Explorer Functions

		function f.tabIsA(tab,class)
			for i,v in pairs(tab) do
				if v:IsA(class) then
					return true
				end
			end
			return false
		end

		function f.hasChildren(tab)
			for i,v in pairs(tab) do
				if #v:GetChildren() > 0 then
					return true
				end
			end
			return false
		end

		function f.tabHasChar(tab)
			local players = Services.Players
			for i,v in pairs(tab) do
				if players:GetPlayerFromCharacter(v) then
					return true
				end
			end
			return false
		end

		function f.expandAll(obj)
			local node = nodes[obj]
			while node do
				explorerTree.Expanded[node] = true
				node = node.Parent
			end
		end

		function f.rightClick()
			rightClickContext:Clear()

			local selection = explorerTree.Selection	

			-- Cut
			rightClickContext:Add({Name = "Cut", Icon = f.icon(nil,iconIndex.CUT_ICON), DisabledIcon = f.icon(nil,iconIndex.CUT_D_ICON), Shortcut = "Ctrl+X", Disabled = #selection.List == 0, OnClick = function()
				print("CUT")
				pcall(function()
					clipboard = {}
					for i,v in pairs(selection.List) do
						table.insert(clipboard,v:Clone())
						v:Destroy()
					end
				end)
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Copy", Icon = f.icon(nil,iconIndex.COPY_ICON), DisabledIcon = f.icon(nil,iconIndex.COPY_D_ICON), Shortcut = "Ctrl+C", Disabled = #selection.List == 0, OnClick = function()
				print("COPY")
				pcall(function()
					clipboard = {}
					for i,v in pairs(selection.List) do
						table.insert(clipboard,v:Clone())
					end
				end)
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Paste Into", Icon = f.icon(nil,iconIndex.PASTE_ICON), DisabledIcon = f.icon(nil,iconIndex.PASTE_D_ICON), Shortcut = "Ctrl+B", Disabled = #clipboard == 0, OnClick = function()
				print("PASTE")
				pcall(function()
					for i,v in pairs(selection.List) do
						for _,copy in pairs(clipboard) do
							copy:Clone().Parent = v
						end
					end
				end)
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Duplicate", Icon = f.icon(nil,iconIndex.COPY_ICON), DisabledIcon = f.icon(nil,iconIndex.COPY_D_ICON), Shortcut = "Ctrl+D", Disabled = #selection.List == 0, OnClick = function()
				print("DUPLICATE")
				pcall(function()
					for i,v in pairs(selection.List) do
						v:Clone().Parent = v.Parent
					end
				end)
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Delete", Icon = f.icon(nil,iconIndex.DELETE_ICON), DisabledIcon = f.icon(nil,iconIndex.DELETE_D_ICON), Shortcut = "Del", Disabled = #selection.List == 0, OnClick = function()
				print("DELETE")
				pcall(function()
					for i,v in pairs(selection.List) do
						v:Destroy()
					end
				end)
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Rename", Icon = "", DisabledIcon = "", Shortcut = "Ctrl+R", Disabled = #selection.List == 0, OnClick = function()
				print("RENAME")
			end})

			rightClickContext:AddDivider()

			rightClickContext:Add({Name = "Group", Icon = f.icon(nil,iconIndex.GROUP_ICON), DisabledIcon = f.icon(nil,iconIndex.GROUP_D_ICON), Shortcut = "Ctrl+G", Disabled = #selection.List == 0, OnClick = function()
				print("GROUP")
				local base = selection.List[1]
				local model = Instance.new("Model",base.Parent)
				for i,v in pairs(selection.List) do
					v.Parent = model
				end
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Ungroup", Icon = f.icon(nil,iconIndex.UNGROUP_ICON), DisabledIcon = f.icon(nil,iconIndex.UNGROUP_D_ICON), Shortcut = "Ctrl+U", Disabled = not f.tabIsA(selection.List,"Model"), OnClick = function()
				print("UNGROUP")
				for i,v in pairs(selection.List) do
					if v:IsA("Model") then
						for _,child in pairs(v:GetChildren()) do
							child.Parent = v.Parent
						end
						v:Destroy()
					end
				end
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Select Children", Icon = f.icon(nil,iconIndex.SELECTCHILDREN_ICON), DisabledIcon = f.icon(nil,iconIndex.SELECTCHILDREN_D_ICON), Shortcut = "", Disabled = not f.hasChildren(selection.List), OnClick = function()
				print("SELECT CHILDREN")
				local oldSel = selection.List
				selection.List = {}
				selection.Selected = {}
				for i,v in pairs(oldSel) do
					for _,child in pairs(v:GetChildren()) do
						explorerTree.Selection:Add(child)
						f.expandAll(child.Parent)
					end
				end
				explorerTree:TreeUpdate()
				explorerTree:Refresh()
				rightClickContext:Hide()
			end})

			rightClickContext:Add({Name = "Jump To Parent", Icon = "", DisabledIcon = "", Shortcut = "", Disabled = #selection.List == 0, OnClick = function()
				print("JUMP TO PARENT")
				local oldSel = selection.List
				selection.List = {}
				selection.Selected = {}
				for i,v in pairs(oldSel) do
					if v.Parent ~= nil then
						selection:Add(v.Parent)
					end
				end
				explorerTree:Refresh()
				rightClickContext:Hide()
			end})

			-- Parts
			if f.tabIsA(selection.List, "BasePart") or f.tabIsA(selection.List, "Model") then
				rightClickContext:AddDivider()

				rightClickContext:Add({Name = "Teleport To", Icon = "", DisabledIcon = "", Shortcut = "", Disabled = #selection.List == 0, OnClick = function()
					print("TELEPORT TO")
					for i,v in pairs(selection.List) do
						if v:IsA("BasePart") then
							Services.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = v.CFrame
							break;
						end
					end
					rightClickContext:Hide()
				end})

				rightClickContext:Add({Name = "Teleport Here", Icon = "", DisabledIcon = "", Shortcut = "", Disabled = #selection.List == 0, OnClick = function()
					print("TELEPORT HERE")
					rightClickContext:Hide()
				end})
			end

			-- Player
			local hasPlayer = false	

			if f.tabIsA(selection.List, "Player") then
				hasPlayer = true
				rightClickContext:AddDivider()

				rightClickContext:Add({Name = "Jump To Character", Icon = "", DisabledIcon = "", Shortcut = "", Disabled = #selection.List == 0, OnClick = function()
					print("JUMP TO CHARACTER")
					rightClickContext:Hide()
				end})
			end

			if f.tabHasChar(selection.List) then
				if not hasPlayer then rightClickContext:AddDivider() end

				rightClickContext:Add({Name = "Jump To Player", Icon = "", DisabledIcon = "", Shortcut = "", Disabled = #selection.List == 0, OnClick = function()
					print("JUMP TO PLAYER")
					rightClickContext:Hide()
				end})
			end

			rightClickContext:Refresh()
			rightClickContext:Show(gui,mouse.X,mouse.Y)
		end

		function f.newExplorer()
			local newgui = getResource("ExplorerPanel")
			local explorerScroll = ScrollBar.new()
			local explorerScrollH = ScrollBar.new(true)
			local newTree = TreeView.new()
			newTree.Scroll = explorerScroll
			newTree.DisplayFrame = newgui.Content.List
			newTree.TreeUpdate = f.updateTree
			newTree.SearchText = ""
			newTree.SearchExpanded = {}

			local nameEvents = {}

			newTree.PreUpdate = function(self)
				for i,v in pairs(nameEvents) do v:Disconnect() nameEvents[i] = nil end
			end

			newTree.NodeCreate = function(self,entry,i)
				entry.Indent.IconFrame.Icon.Image = iconMap

				entry.MouseEnter:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if self.Selection.Selected[node.Obj] then return end
						if rightClickContext.Frame.Parent ~= nil and f.checkMouseInGui(rightClickContext.Frame) then return end
						entry.BackgroundTransparency = 0.7
					end
				end)
				entry.MouseLeave:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if self.Selection.Selected[node.Obj] then return end
						entry.BackgroundTransparency = 1
					end
				end)						
				entry.MouseButton1Down:Connect(function()
					local node = self.Tree[i + self.Index]
					if Services.UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then
						self.Selection:Add(node.Obj)
					else
						self.Selection:Set({node.Obj})
					end
					self:Refresh()
					propertiesTree:TreeUpdate()
					propertiesTree:Refresh()
				end)
				entry.MouseButton2Down:Connect(function()
					local node = self.Tree[i + self.Index]
					rightEntry = entry
					rightClickContext.Frame.Parent = nil
					if not self.Selection.Selected[node.Obj] then
						self.Selection:Set({node.Obj})
					end
					self:Refresh()
				end)
				entry.MouseButton2Up:Connect(function()
					if rightEntry and f.checkMouseInGui(rightEntry) then
						f.rightClick()
					end
				end)

				entry.Indent.Expand.MouseEnter:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if (not self.SearchResults and self.Expanded[node]) or (self.SearchResults and self.SearchExpanded[node.Obj]) then
							f.icon(entry.Indent.Expand,iconIndex.NodeExpandedOver)
						else
							f.icon(entry.Indent.Expand,iconIndex.NodeCollapsedOver)
						end
					end
				end)
				entry.Indent.Expand.MouseLeave:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if (not self.SearchResults and self.Expanded[node]) or (self.SearchResults and self.SearchExpanded[node.Obj]) then
							f.icon(entry.Indent.Expand,iconIndex.NodeExpanded)
						else
							f.icon(entry.Indent.Expand,iconIndex.NodeCollapsed)
						end
					end
				end)
				entry.Indent.Expand.MouseButton1Down:Connect(function()
					local node = self.Tree[i + self.Index]
					if node and not self.SearchResults then
						self:Expand(node)
					else
						if self.SearchExpanded[node.Obj] then
							self.SearchExpanded[node.Obj] = nil
						else
							self.SearchExpanded[node.Obj] = 2
						end
						if self.TreeUpdate then self:TreeUpdate() end
						self:Refresh()
					end
				end)
			end

			newTree.NodeDraw = function(self,entry,node)
				f.icon(entry.Indent.IconFrame,iconIndex[node.Obj.ClassName] or 0)
				entry.Indent.EntryName.Text = node.Obj.Name									
				if #node > 0 then
					entry.Indent.Expand.Visible = true
					if (not self.SearchResults and self.Expanded[node]) or (self.SearchResults and self.SearchExpanded[node.Obj] == 2) then
						f.icon(entry.Indent.Expand,iconIndex.NodeExpanded)
					else
						f.icon(entry.Indent.Expand,iconIndex.NodeCollapsed)
					end
					if self.SearchExpanded[node.Obj] == 1 then
						entry.Indent.Expand.Visible = false
					end
				else
					entry.Indent.Expand.Visible = false
				end

				if node.Obj.Parent ~= node.Parent.Obj then
					spawn(function() f.moveObject(node.Obj,node.Obj.Parent) end)
				end

				if self.Selection.Selected[node.Obj] then
					entry.Indent.EntryName.TextColor3 = Color3.new(1,1,1)
					entry.BackgroundTransparency = 0
				else
					entry.Indent.EntryName.TextColor3 = Color3.new(220/255, 220/255, 220/255)
					entry.BackgroundTransparency = 1
				end

				nameEvents[node.Obj] = node.Obj:GetPropertyChangedSignal("Name"):Connect(function()
					entry.Indent.EntryName.Text = node.Obj.Name
				end)

				entry.Indent.Position = UDim2.new(0,18*node.Depth,0,0)
				entry.Size = UDim2.new(0,nodeWidth+10,0,18)
			end

			explorerScroll.Gui.Parent = newgui.Content
			explorerScroll:Texture({
				FrameColor = Color3.new(80/255,80/255,80/255),
				ThumbColor = Color3.new(120/255,120/255,120/255),
				ThumbSelectColor = Color3.new(140/255,140/255,140/255),
				ButtonColor = Color3.new(163/255,162/255,165/255),
				ArrowColor = Color3.new(220/255,220/255,220/255)
			})
			explorerScroll:SetScrollFrame(newgui.Content,3)

			explorerScrollH.Gui.Visible = false
			explorerScrollH.Gui.Parent = newgui.Content
			explorerScrollH:Texture({
				FrameColor = Color3.new(80/255,80/255,80/255),
				ThumbColor = Color3.new(120/255,120/255,120/255),
				ThumbSelectColor = Color3.new(140/255,140/255,140/255),
				ButtonColor = Color3.new(163/255,162/255,165/255),
				ArrowColor = Color3.new(220/255,220/255,220/255)
			})
			explorerScrollH.Gui.Position = UDim2.new(0,0,1,-16)
			explorerScrollH.Gui.Size = UDim2.new(1,-16,0,16)

			newTree.OnUpdate = function(self)
				local guiX = explorerPanel.Content.AbsoluteSize.X-16
				explorerScrollH.VisibleSpace = guiX
				explorerScrollH.TotalSpace = nodeWidth+10
				if nodeWidth > guiX then
					explorerScrollH.Gui.Visible = true
					explorerScroll.Gui.Size = UDim2.new(0,16,1,-16)
					self.DisplayFrame.Size = UDim2.new(1,-16,1,-16)
				else
					explorerScrollH.Gui.Visible = false
					explorerScroll.Gui.Size = UDim2.new(0,16,1,0)
					self.DisplayFrame.Size = UDim2.new(1,-16,1,0)
				end
				explorerScroll.TotalSpace = #self.Tree + 1
				explorerScroll.VisibleSpace = math.ceil(self.DisplayFrame.AbsoluteSize.Y / 19)
				explorerScrollH:Update()		
				explorerScroll:Update()
			end
			explorerScroll.OnUpdate = function(self) if newTree.Index == self.Index then return end newTree.Index = self.Index newTree:Refresh() end
			explorerScrollH.OnUpdate = function(self)
				for i,v in pairs(explorerTree.Entries) do
					v.Position = UDim2.new(0,1-self.Index,0,v.Position.Y.Offset)
				end
			end
			--explorerData = {Window = newgui, NodeData = {}, Scroll = explorerScroll, Entries = {}}

			explorerTree = newTree

			table.insert(activeWindows,newgui)
			f.hookWindowListener(newgui)
			newgui.Changed:connect(function(prop) if prop == "AbsoluteSize" or prop == "AbsolutePosition" then newTree:Refresh() end end)

			local searchBox = newgui.TopBar.SearchFrame.Search
			local searchAnim = searchBox.Parent.Entering
			searchBox:GetPropertyChangedSignal("Text"):Connect(function()
				local searchTime = tick()
				lastSearch = searchTime
				wait()
				if lastSearch ~= searchTime then return end
				newTree.SearchText = searchBox.Text
				f.updateSearch(newTree)
				explorerTree:TreeUpdate()
				explorerTree:Refresh()
			end)

			searchBox.Focused:Connect(function()
				searchBox.Empty.Visible = false
				searchAnim:TweenSizeAndPosition(UDim2.new(1,0,0,2),UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
			end)

			searchBox.FocusLost:Connect(function()
				if searchBox.Text == "" then searchBox.Empty.Visible = true else searchBox.Empty.Visible = false end
				searchAnim:TweenSizeAndPosition(UDim2.new(0,0,0,2),UDim2.new(0.5,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
			end)

			return newgui
		end

		function f.refreshExplorer()
			--if updateDebounce then return end
			--updateDebounce = true
			--Services.RunService.RenderStepped:wait()
			--updateDebounce = false
			explorerTree:Refresh()
		end

		function f.makeWindow(name)
			local newWindow = getResource(name)

			table.insert(activeWindows,newWindow)
			f.hookWindowListener(newWindow)

			return newWindow
		end

		function f.getRMDOrder(class)
			local currentClass = API.Classes[class]
			while currentClass do
				if RMD[currentClass.Name] and RMD[currentClass.Name].ExplorerOrder then return RMD[currentClass.Name].ExplorerOrder end
				currentClass = API.Classes[currentClass.Superclass]
			end
			return 999
		end

		function f.reDepth(node,depth)
			for i,v in ipairs(node) do
				v.Depth = depth + 1
				f.reDepth(node[i], depth + 1)
			end
		end

		function f.moveObject(obj,par)
			ypcall(function()
				if obj.Parent == nil then return end
				local node = nodes[obj]
				local newNode = nodes[par]
				if node and newNode then
					local parNode = node.Parent
					for i,v in ipairs(parNode) do
						if v == node then
							table.remove(parNode,i)
							break
						end
					end

					node.Depth = f.depth(par) + 1
					f.reDepth(node,node.Depth)

					node.Parent = newNode
					newNode.Sorted = nil
					table.insert(newNode,node)

					if not updateDebounce then
						updateDebounce = true
						wait()
						updateDebounce = false
						explorerTree:TreeUpdate()
						f.refreshExplorer()
					end
				end
			end)
		end

		function f.addObject(obj,noupdate,recurse)
			ypcall(function()
				local access = obj.Changed
				if not nodes[obj.Parent] then return end
				local newNode = {
					Obj = obj,
					Parent = nodes[obj.Parent],
					--Ind = #nodes[obj.Parent] + 1,
					ExplorerOrder = f.getRMDOrder(obj.ClassName),
					Depth = f.depth(obj),
					UID = tick()--RMD[v.ClassName] and (RMD[v.ClassName].ExplorerOrder or 999) or 999
				}
				if newNode.ExplorerOrder  nodeWidth and textWidth or nodeWidth
						table.insert(tree,node[i])
						if (not isSearching and explorerTree.Expanded[node[i]]) or (isSearching and searchExpanded[node[i].Obj] == 2) then
							fillTree(node[i],tree)
						end
					end
				end
			end

			self.Tree = {}
			fillTree(nodes[game],self.Tree)
			--self.Scroll:Update()
		end

		function f.icon(frame,index)
			local row,col = math.floor(index/14%14),math.floor(index%14)
			local pad,border = 2,1
			if not frame then
				frame = Instance.new("Frame")
				frame.BackgroundTransparency = 1
				frame.Size = UDim2.new(0,16,0,16)
				frame.ClipsDescendants = true
				local newMap = Instance.new("ImageLabel",frame)
				newMap.Name = "Icon"
				newMap.BackgroundTransparency = 1
				newMap.Size = UDim2.new(16,0,16,0)
				newMap.Image = iconMap
			end
			local icon = frame.Icon
			icon.Position = UDim2.new(-col - (pad*(col+1) + border)/16,0,-row - (pad*(row+1) + border)/16,0)
			return frame
		end

		function f.depth(obj)
			local depth = 0
			local curPar = obj.Parent
			while curPar ~= nil do
				curPar = curPar.Parent
				depth = depth + 1
			end
			return depth
		end

		local Selection do
			Selection = {
				List = {},
				Selected = {}
			}

			function Selection:Add(obj)
				if Selection.Selected[obj] then return end

				Selection.Selected[obj] = true
				table.insert(Selection.List,obj)
			end

			function Selection:Set(objs)
				for i,v in pairs(Selection.List) do
					Selection.Selected[v] = nil
				end
				Selection.List = {}

				for i,v in pairs(objs) do
					if not Selection.Selected[v] then
						Selection.Selected[v] = true
						table.insert(Selection.List,v)
					end
				end
			end

			function Selection:Remove(obj)
				if not Selection.Selected[obj] then return end

				Selection.Selected[obj] = false
				for i,v in pairs(Selection.List) do
					if v == obj then table.remove(Selection.List,i) break end
				end
			end
		end

		function f.refreshExplorers(id)
			--wait()
			local e = explorerData
			local window = e.Window
			local scroll = e.Scroll
			local entrySpace = math.floor(window.Content.List.AbsoluteSize.Y / 19) + 1

			scroll.TotalSpace = #e.Tree
			scroll.VisibleSpace = entrySpace - 1		

			for i = 1,entrySpace do
				local node = e.Tree[i + scroll.Index]
				if node then
					local nodeData = e.NodeData[node.Obj]
					local cEntry = e.Entries[i]
					if not cEntry then
						cEntry = entryTemplate:Clone()
						cEntry.Position = UDim2.new(0,1,0,2 + 19 * #window.Content.List:GetChildren())
						cEntry.Parent = window.Content.List
						e.Entries[i] = cEntry

						cEntry.MouseEnter:connect(function()
							local node = e.Tree[i + scroll.Index]
							if node then
								if Selection.Selected[node.Obj] then return end
								cEntry.BackgroundTransparency = 0.7
							end
						end)
						cEntry.MouseLeave:connect(function()
							local node = e.Tree[i + scroll.Index]
							if node then
								if Selection.Selected[node.Obj] then return end
								cEntry.BackgroundTransparency = 1
							end
						end)						
						cEntry.MouseButton1Down:connect(function()
							local node = e.Tree[i + scroll.Index]
							if Services.UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) then
								Selection:Add(node.Obj)
							else
								Selection:Set({node.Obj})
							end
							f.refreshExplorer()
						end)

						cEntry.Indent.Expand.MouseEnter:connect(function()
							local node = e.Tree[i + scroll.Index]
							if node then
								if not e.NodeData[node.Obj] then e.NodeData[node.Obj] = {} end
								if e.NodeData[node.Obj].Expanded then
									f.icon(cEntry.Indent.Expand,iconIndex.NodeExpandedOver)
								else
									f.icon(cEntry.Indent.Expand,iconIndex.NodeCollapsedOver)
								end
							end
						end)
						cEntry.Indent.Expand.MouseLeave:connect(function()
							local node = e.Tree[i + scroll.Index]
							if node then
								if not e.NodeData[node.Obj] then e.NodeData[node.Obj] = {} end
								if e.NodeData[node.Obj].Expanded then
									f.icon(cEntry.Indent.Expand,iconIndex.NodeExpanded)
								else
									f.icon(cEntry.Indent.Expand,iconIndex.NodeCollapsed)
								end
							end
						end)
						cEntry.Indent.Expand.MouseButton1Down:connect(function()
							local node = e.Tree[i + scroll.Index]
							if node then
								if not e.NodeData[node.Obj] then e.NodeData[node.Obj] = {} end
								if e.NodeData[node.Obj].Expanded then
									e.NodeData[node.Obj].Expanded = false
								else
									e.NodeData[node.Obj].Expanded = true
								end
								f.updateTree()
								f.refreshExplorer()
							end
						end)
					end

					cEntry.Visible = true
					f.icon(cEntry.Indent.IconFrame,iconIndex[node.Obj.ClassName] or 0)
					cEntry.Indent.EntryName.Text = node.Obj.Name									
					if #node.Obj:GetChildren() > 0 then
						cEntry.Indent.Expand.Visible = true
						if nodeData and nodeData.Expanded then
							f.icon(cEntry.Indent.Expand,iconIndex.NodeExpanded)
						else
							f.icon(cEntry.Indent.Expand,iconIndex.NodeCollapsed)
						end
					else
						cEntry.Indent.Expand.Visible = false
					end

					if Selection.Selected[node.Obj] then
						cEntry.Indent.EntryName.TextColor3 = Color3.new(1,1,1)
						cEntry.BackgroundTransparency = 0
					else
						cEntry.Indent.EntryName.TextColor3 = Color3.new(220/255, 220/255, 220/255)
						cEntry.BackgroundTransparency = 1
					end

					cEntry.Indent.Position = UDim2.new(0,18*node.Depth,0,0)
				else
					local cEntry = e.Entries[i]
					if cEntry then
						cEntry.Visible = false
					end
				end
			end

			-- Outliers
			for i = entrySpace+1, #e.Entries do
				if e.Entries[i] then
					e.Entries[i]:Destroy()
					e.Entries[i] = nil
				end
			end
		end

		-- Properties Functions

		function f.toValue(str,valueType)
			if valueType == "int" or valueType == "float" or valueType == "double" then
				return tonumber(str)
			end
		end

		function f.childValue(prop,value,obj)
			local propName = prop.Name
			local parentPropName = prop.ParentProp.Name
			local parentPropType = prop.ParentProp.ValueType
			local objProp = obj[parentPropName]

			if parentPropType == "Vector3" then
				return Vector3.new(
					propName == "X" and value or objProp.X,
					propName == "Y" and value or objProp.Y,
					propName == "Z" and value or objProp.Z
				)
			elseif parentPropType == "Rect2D" then
				return Rect.new(
					propName == "X0" and value or objProp.Min.X,
					propName == "Y0" and value or objProp.Min.Y,
					propName == "X1" and value or objProp.Max.X,
					propName == "Y1" and value or objProp.Max.Y
				)
			end
		end

		function f.setProp(prop,str,child)
			local value = f.toValue(str,prop.ValueType)
			if value then
				for i,v in pairs(explorerTree.Selection.List) do
					pcall(function()
						if v:IsA(prop.Class) then
							if #child == 0 then
								v[prop.Name] = value
							else
								v[prop.ParentProp.Name] = f.childValue(prop,value,v)
							end
						end
					end)
				end
			end
		end

		local propControls = {
			["Default"] = function(prop,child)
				local newMt = setmetatable({},{})

				local controlGui,readOnlyText,lastValue

				local function setup(self,frame)
					controlGui = resources.PropControls.String:Clone()
					readOnlyText = controlGui.ReadOnly		

					if prop.Tags["readonly"] then
						if lastValue then readOnlyText.Text = tostring(lastValue) end
						readOnlyText.Visible = true
						readOnlyText.Parent = frame
					else
						if lastValue then controlGui.Text = tostring(lastValue) end
						controlGui.FocusLost:Connect(function()
							f.setProp(prop,controlGui.Text,child or {})
						end)
						controlGui.Parent = frame
					end	
				end
				newMt.Setup = setup

				local function update(self,value)
					lastValue = value
					if not controlGui then return end
					if not prop.Tags["readonly"] then
						controlGui.Text = tostring(value)
					else
						readOnlyText.Text = tostring(value)
					end
				end	
				newMt.Update = update

				local function focus(self)
					controlGui:CaptureFocus()
				end
				newMt.Focus = focus
				return newMt
			end,
			["Vector3"] = function(prop,child)
				local newMt = setmetatable({},{})

				local controlGui,readOnlyText

				local function setup(self,frame)
					controlGui = resources.PropControls.String:Clone()
					readOnlyText = controlGui.ReadOnly		

					if prop.Tags["readonly"] then
						readOnlyText.Visible = true
						readOnlyText.Parent = frame
					else
						controlGui.FocusLost:Connect(function()
							f.setProp(prop,controlGui.Text,child or {})
						end)
						controlGui.Parent = frame
					end	
				end
				newMt.Setup = setup

				local function update(self,value)
					if not prop.Tags["readonly"] then
						controlGui.Text = tostring(value)
						self.Children[1].Control:Update(value.X)
						self.Children[2].Control:Update(value.Y)
						self.Children[3].Control:Update(value.Z)
					else
						readOnlyText.Text = tostring(value)
						self.Children[1].Control:Update(value.X)
						self.Children[2].Control:Update(value.Y)
						self.Children[3].Control:Update(value.Z)
					end
				end	
				newMt.Update = update

				local function focus(self)
					controlGui:CaptureFocus()
				end
				newMt.Focus = focus

				newMt.Children = {
					f.getChildProp(prop,{Name = "X",ValueType = "double",Depth = 2}),
					f.getChildProp(prop,{Name = "Y",ValueType = "double",Depth = 2}),
					f.getChildProp(prop,{Name = "Z",ValueType = "double",Depth = 2})
				}

				return newMt
			end,
			["Rect2D"] = function(prop,child)
				local newMt = setmetatable({},{})

				local controlGui,readOnlyText

				local function setup(self,frame)
					controlGui = resources.PropControls.String:Clone()
					readOnlyText = controlGui.ReadOnly		

					if prop.Tags["readonly"] then
						readOnlyText.Visible = true
						readOnlyText.Parent = frame
					else
						controlGui.FocusLost:Connect(function()
							f.setProp(prop,controlGui.Text,child or {})
						end)
						controlGui.Parent = frame
					end	
				end
				newMt.Setup = setup

				local function update(self,value)
					if not prop.Tags["readonly"] then
						controlGui.Text = tostring(value)
						self.Children[1].Control:Update(value.Min.X)
						self.Children[2].Control:Update(value.Min.Y)
						self.Children[3].Control:Update(value.Max.X)
						self.Children[4].Control:Update(value.Max.Y)
					else
						readOnlyText.Text = tostring(value)
						self.Children[1].Control:Update(value.Min.X)
						self.Children[2].Control:Update(value.Min.Y)
						self.Children[3].Control:Update(value.Max.X)
						self.Children[4].Control:Update(value.Max.Y)
					end
				end	
				newMt.Update = update

				local function focus(self)
					controlGui:CaptureFocus()
				end
				newMt.Focus = focus

				newMt.Children = {
					f.getChildProp(prop,{Name = "X0",ValueType = "double",Depth = 2}),
					f.getChildProp(prop,{Name = "Y0",ValueType = "double",Depth = 2}),
					f.getChildProp(prop,{Name = "X1",ValueType = "double",Depth = 2}),
					f.getChildProp(prop,{Name = "Y1",ValueType = "double",Depth = 2})
				}

				return newMt
			end
		}

		function f.getPropControl(prop,child)
			local control = propControls[prop.ValueType] or propControls["Default"]
			return control(prop,child)
		end

	--[[
	local propExpandable = {
		["Vector3"] = true
	}
	--]]

	--[[
	function f.getChildrenControls(obj,prop)
		local children = {}
		if prop.ValueType == "Vector3" then
			local newProp = {}
			for i,v in pairs(prop) do newProp[i] = v end
			newProp.ValueType = "double"
			newProp.Name = "X"
			newProp.ParentName = prop.Name
			newProp.ParentType = prop.ValueType
			local newNode = {
				Prop = newProp,
				RefName = prop.Class.."|"..prop.Name.."|X",
				Control = f.getPropControl(newProp,{"X"}),
				Depth = 2,
				Obj = obj,
				Children = {}
			}
			table.insert(children,newNode)
		end
		return children
	end
	--]]

		function f.getChildProp(prop,data)
			local newProp = {
				Name = data.Name,
				ValueType = data.ValueType,
				ParentProp = prop,
				Tags = prop.Tags,
				Class = prop.Class
			}
			local childNode = {
				Prop = newProp,
				RefName = prop.Class.."|"..prop.Name.."|"..data.Name,
				Control = f.getPropControl(newProp,{data.Name}),
				Depth = data.Depth,
				Children = {}
			}
			return childNode
		end

		function f.updatePropTree(self)
			self.Tree = {}

			propWidth = 0
			local gotProps = {}
			local props = {}
			local newTree = {}	

			for i,v in pairs(explorerTree.Selection.List) do
				local class = API.Classes[v.ClassName]
				while class ~= nil and not gotProps[class.Name] do
					for _,prop in pairs(class.Properties) do
						pcall(function()
							local check = v[prop.Name]
							local categoryList = propCategories[class.Name] or {}
							local newNode = {
								Prop = prop,
								RefName = class.Name.."|"..prop.Name,
								Obj = v,
								Control = f.getPropControl(prop),
								Depth = 1,
								--Children = f.getChildrenControls(v,prop)
							}
							--f.setupControls(newNode)
							--newNode.Control.Children = newNode.Children
							local textWidth = f.textWidth(prop.Name) + newNode.Depth * 18 + 5
							propWidth = textWidth > propWidth and textWidth or propWidth
							table.insert(props,newNode)
						end)
					end
					gotProps[class.Name] = true
					class = API.Classes[class.Superclass]
				end
			end

			table.sort(props,function(a,b)
				local o1 = categoryOrder[a.Prop.Category] or 0
				local o2 = categoryOrder[b.Prop.Category] or 0
				if o1 ~= o2 then
					return o1 < o2
				else
					return a.Prop.Name < b.Prop.Name
				end
			end)

			local nextCategory = ""
			local categoryNode
			for i,v in pairs(props) do
				if nextCategory ~= v.Prop.Category then
					nextCategory = v.Prop.Category
					categoryNode = {
						Category = true,
						RefName = "CAT:"..nextCategory,
						Prop = {Name=nextCategory},
						Depth = 1
					}
					table.insert(newTree,categoryNode)
				end
				if self.Expanded["CAT:"..nextCategory] then
					table.insert(newTree,v)
					if v.Control.Children and self.Expanded[v.RefName] then
						for _,child in pairs(v.Control.Children) do
							table.insert(newTree,child)
						end
					end
				end
			end

			self.Tree = newTree
		end

		function f.newProperties()
			local newgui = getResource("PropertiesPanel")
			local propertiesScroll = ScrollBar.new()
			local propertiesScrollH = ScrollBar.new(true)
			local newTree = TreeView.new()
			newTree.NodeTemplate = getResource("PEntry")
			newTree.Height = 22
			newTree.OffY = 0
			newTree.Scroll = propertiesScroll
			newTree.DisplayFrame = newgui.Content.List
			newTree.TreeUpdate = f.updatePropTree
			newTree.SearchText = ""

			local changeEvents = {}
			local drawOrder = 0

			newTree.PreUpdate = function(self)
				drawOrder = 0
				for i,v in pairs(changeEvents) do v:Disconnect() changeEvents[i] = nil end
			end

			newTree.NodeCreate = function(self,entry,i)	
				entry.MouseEnter:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if self.Selection.Selected[node.RefName] then return end
						entry.Indent.BackgroundTransparency = 0.7
					end
				end)
				entry.MouseLeave:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if self.Selection.Selected[node.RefName] then return end
						entry.Indent.BackgroundTransparency = 1
					end
				end)						
				entry.MouseButton1Down:Connect(function()
					local node = self.Tree[i + self.Index]
					--node.Control:Focus()
				end)
				entry.MouseButton2Down:Connect(function()
					local node = self.Tree[i + self.Index]
					--node.Control:Focus()
				end)

				entry.Indent.Expand.MouseEnter:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if (not self.SearchResults and self.Expanded[node]) or (self.SearchResults and self.SearchExpanded[node.Obj]) then
							f.icon(entry.Indent.Expand,iconIndex.NodeExpandedOver)
						else
							f.icon(entry.Indent.Expand,iconIndex.NodeCollapsedOver)
						end
					end
				end)
				entry.Indent.Expand.MouseLeave:Connect(function()
					local node = self.Tree[i + self.Index]
					if node then
						if (not self.SearchResults and self.Expanded[node]) or (self.SearchResults and self.SearchExpanded[node.Obj]) then
							f.icon(entry.Indent.Expand,iconIndex.NodeExpanded)
						else
							f.icon(entry.Indent.Expand,iconIndex.NodeCollapsed)
						end
					end
				end)
				entry.Indent.Expand.MouseButton1Down:Connect(function()
					local node = self.Tree[i + self.Index]
					self:Expand(node.RefName)
				end)
			end

			newTree.NodeDraw = function(self,entry,node)
				entry.Indent.EntryName.Text = node.Prop.Name
				entry.Indent.Control:ClearAllChildren()

				if not node.Category then
					-- Update property controls
					node.Control:Setup(entry.Indent.Control)
					if node.Depth > 1 then
						--node.Control:Update(node.Obj[node.Prop.ParentName][node.Prop.Name])
					else
						node.Control:Update(node.Obj[node.Prop.Name])
					end

					-- Color switching
					--if drawOrder % 2 == 0 and not node.Category then
					--	entry.BackgroundColor3 = Color3.new(96/255,96/255,96/255)
					--else
					entry.BackgroundColor3 = Color3.new(80/255,80/255,80/255)
					--end
				else
					entry.BackgroundColor3 = Color3.new(64/255,64/255,64/255)
				end
				drawOrder = drawOrder + 1

				-- Fonts for category nodes and property nodes
				if node.Category then
					entry.Indent.Sep.Visible = false
					entry.Indent.EntryName.Font = Enum.Font.SourceSansBold
					entry.Indent.EntryName.TextColor3 = Color3.new(220/255,220/255,220/255)
				else
					entry.Indent.Sep.Visible = true
					entry.Indent.EntryName.Font = Enum.Font.SourceSans
					if node.Prop.Tags["readonly"] then
						entry.Indent.EntryName.TextColor3 = Color3.new(144/255,144/255,144/255)
					else
						entry.Indent.EntryName.TextColor3 = Color3.new(220/255,220/255,220/255)
					end
				end

				if node.Category or node.Control.Children then
					entry.Indent.Expand.Visible = true
					if self.Expanded[node.RefName] then
						f.icon(entry.Indent.Expand,iconIndex.NodeExpanded)
					else
						f.icon(entry.Indent.Expand,iconIndex.NodeCollapsed)
					end
				else
					entry.Indent.Expand.Visible = false
				end

				if self.Selection.Selected[node.Obj] then
					entry.Indent.EntryName.TextColor3 = Color3.new(1,1,1)
					entry.Indent.BackgroundTransparency = 0
				else
					--entry.Indent.EntryName.TextColor3 = Color3.new(220/255, 220/255, 220/255)
					entry.Indent.BackgroundTransparency = 1
				end

				if not node.Category and node.Depth == 1 then
					changeEvents[node.Obj] = node.Obj:GetPropertyChangedSignal(node.Prop.Name):Connect(function()
						node.Control:Update(node.Obj[node.Prop.Name])
					end)
				end

				entry.Indent.Position = UDim2.new(0,18*node.Depth,0,0)

				local newPropWidth = propWidth - node.Depth*18
				entry.Indent.EntryName.Size = UDim2.new(0,newPropWidth,0,22)
				entry.Indent.Control.Position = UDim2.new(0,newPropWidth+2,0,0)
				entry.Indent.Control.Size = UDim2.new(1,-newPropWidth-2,0,22)
				entry.Indent.Sep.Position = UDim2.new(0,newPropWidth+1,0,0)
				entry.Size = UDim2.new(0,281,0,22)
			end

			propertiesScroll.Gui.Parent = newgui.Content
			propertiesScroll:Texture({
				FrameColor = Color3.new(80/255,80/255,80/255),
				ThumbColor = Color3.new(120/255,120/255,120/255),
				ThumbSelectColor = Color3.new(140/255,140/255,140/255),
				ButtonColor = Color3.new(163/255,162/255,165/255),
				ArrowColor = Color3.new(220/255,220/255,220/255)
			})
			propertiesScroll:SetScrollFrame(newgui.Content,3)

			propertiesScrollH.Gui.Visible = false
			propertiesScrollH.Gui.Parent = newgui.Content
			propertiesScrollH:Texture({
				FrameColor = Color3.new(80/255,80/255,80/255),
				ThumbColor = Color3.new(120/255,120/255,120/255),
				ThumbSelectColor = Color3.new(140/255,140/255,140/255),
				ButtonColor = Color3.new(163/255,162/255,165/255),
				ArrowColor = Color3.new(220/255,220/255,220/255)
			})
			propertiesScrollH.Gui.Position = UDim2.new(0,0,1,-16)
			propertiesScrollH.Gui.Size = UDim2.new(1,-16,0,16)

			newTree.OnUpdate = function(self)
				local guiX = propertiesPanel.Content.AbsoluteSize.X-16
			--[[
			propertiesScrollH.VisibleSpace = guiX
			propertiesScrollH.TotalSpace = nodeWidth+10
			if nodeWidth > guiX then
				explorerScrollH.Gui.Visible = true
				explorerScroll.Gui.Size = UDim2.new(0,16,1,-16)
				self.DisplayFrame.Size = UDim2.new(1,-16,1,-16)
			else
				explorerScrollH.Gui.Visible = false
				explorerScroll.Gui.Size = UDim2.new(0,16,1,0)
				self.DisplayFrame.Size = UDim2.new(1,-16,1,0)
			end
			--]]
				propertiesScroll.TotalSpace = #self.Tree + 1
				propertiesScroll.VisibleSpace = math.ceil(self.DisplayFrame.AbsoluteSize.Y / 23)
				propertiesScrollH:Update()		
				propertiesScroll:Update()
			end
			propertiesScroll.OnUpdate = function(self) if newTree.Index == self.Index then return end newTree.Index = self.Index newTree:Refresh() end
			propertiesScrollH.OnUpdate = function(self)
				for i,v in pairs(propertiesTree.Entries) do
					v.Position = UDim2.new(0,-self.Index,0,v.Position.Y.Offset)
				end
			end
			--explorerData = {Window = newgui, NodeData = {}, Scroll = explorerScroll, Entries = {}}

			propertiesTree = newTree

			table.insert(activeWindows,newgui)
			f.hookWindowListener(newgui)
			newgui.Changed:connect(function(prop) if prop == "AbsoluteSize" or prop == "AbsolutePosition" then newTree:Refresh() end end)

			local searchBox = newgui.TopBar.SearchFrame.Search
			local searchAnim = searchBox.Parent.Entering
			searchBox:GetPropertyChangedSignal("Text"):Connect(function()
			--[[
			local searchTime = tick()
			lastSearch = searchTime
			wait()
			if lastSearch ~= searchTime then return end
			newTree.SearchText = searchBox.Text
			f.updateSearch(newTree)
			explorerTree:TreeUpdate()
			explorerTree:Refresh()
			--]]
			end)

			searchBox.Focused:Connect(function()
				searchBox.Empty.Visible = false
				searchAnim:TweenSizeAndPosition(UDim2.new(1,0,0,2),UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
			end)

			searchBox.FocusLost:Connect(function()
				if searchBox.Text == "" then searchBox.Empty.Visible = true else searchBox.Empty.Visible = false end
				searchAnim:TweenSizeAndPosition(UDim2.new(0,0,0,2),UDim2.new(0.5,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
			end)

			return newgui
		end

		local function welcomePlayer()
			welcomeFrame.Visible = true
			welcomeMain.Position = UDim2.new(-0.6,0,0,0)
			welcomeChangelog.Position = UDim2.new(1,5,0,20)
			welcomeBottom.Position = UDim2.new(0.6,0,1,0)

			welcomeFrame.BackgroundTransparency = 1
			welcomeOutline.ImageTransparency = 1

			wait(2)

			for i = 1,0,-0.1 do
				welcomeFrame.BackgroundTransparency = i
				welcomeOutline.ImageTransparency = i
				wait()
			end

			welcomeMain:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
			welcomeChangelog:TweenPosition(UDim2.new(0.6,5,0,20),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
			welcomeBottom:TweenPosition(UDim2.new(0.6,0,1,-50),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)

			wait(0.5)

			welcomeProgress:WaitForChild("Progress1").TextColor3 = Color3.new(1,1,1)	
			API = f.fetchAPI()
			welcomeProgress:WaitForChild("Progress2").TextColor3 = Color3.new(1,1,1)
			RMD = f.fetchRMD()
			welcomeProgress:WaitForChild("Progress3").TextColor3 = Color3.new(1,1,1)
			wait(0.25)
			welcomeProgress:WaitForChild("Progress4").TextColor3 = Color3.new(1,1,1)
			rightClickContext = ContextMenu.new()
			f.indexNodes()
			explorerTree:TreeUpdate()
			wait(0.25)
			welcomeProgress:WaitForChild("Progress5").TextColor3 = Color3.new(1,1,1)


			-- Attach explorer and properties to right content pane then launch
			explorerTree:Refresh()
			f.addToPane(explorerPanel,"Right")
			f.addToPane(propertiesPanel,"Right")
			f.resizePaneItem(propertiesPanel,"Right",0.5)

			contentL:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
			contentR:TweenPosition(UDim2.new(1,-explorerSettings.RPaneWidth,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)

			wait(2)

			welcomeFrame:TweenPosition(UDim2.new(0.5,-250,0,-350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true)
		end

		mouse.Move:connect(function()
			--if mouseWindow == nil then return end
			local x,y = mouse.X,mouse.Y

			if x = gui.AbsoluteSize.X - 50 then
				setPane = "Right"
			else
				setPane = "None"
			end
		end)

		explorerPanel = f.newExplorer()
		propertiesPanel = f.newProperties()

		for category,_ in pairs(categoryOrder) do
			propertiesTree.Expanded["CAT:"..category] = true
		end

		propertiesTree.Expanded["CAT:Surface Inputs"] = false
		propertiesTree.Expanded["CAT:Surface"] = false

		welcomePlayer()

		for i,v in pairs(nodes[workspace]) do
			print(type(i))
		end
	end
)

-- function TitleWeird()
	-- spawn(
		-- function()
			-- while true do
				-- wait(timer)
				-- for i = 39, 41, 1 do
					-- EmptynessGui.TextSize = i
					-- wait(timer)
				-- end
				-- for i = 41, 39, -1 do
					-- EmptynessGui.TextSize = i
					-- wait(timer)
				-- end
			-- end
		-- end
	-- )
-- end

function TypingTitle()
    spawn(
        function()
            while true do
                i = 0
                wait(timer)
				while i == 0 do
                    EmptynessGui.Text = ""
                    wait(timer*10)
                    i = i + 1
                end
                while i == 1 do
                    EmptynessGui.Text = "E"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 2 do
                    EmptynessGui.Text = "Em"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 3 do
                    EmptynessGui.Text = "Emp"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 4 do
                    EmptynessGui.Text = "Empt"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 5 do
                    EmptynessGui.Text = "Empty"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 6 do
                    EmptynessGui.Text = "Emptyn"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 7 do
                    EmptynessGui.Text = "Emptyne"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 8 do
                    EmptynessGui.Text = "Emptynes"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 9 do
                    EmptynessGui.Text = "Emptyness"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 10 do
                    EmptynessGui.Text = "Emptyness G"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 11 do
                    EmptynessGui.Text = "Emptyness Gu"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 12 do
                    EmptynessGui.Text = "Emptyness Gui"
                    wait(timer*100)
                    i = i + 1
                end
                while i == 13 do
                    EmptynessGui.Text = "Emptyness Gu"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 14 do
                    EmptynessGui.Text = "Emptyness G"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 15 do
                    EmptynessGui.Text = "Emptyness"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 16 do
                    EmptynessGui.Text = "Emptynes"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 17 do
                    EmptynessGui.Text = "Emptyne"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 18 do
                    EmptynessGui.Text = "Emptyn"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 19 do
                    EmptynessGui.Text = "Empty"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 20 do
                    EmptynessGui.Text = "Empt"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 21 do
                    EmptynessGui.Text = "Emp"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 22 do
                    EmptynessGui.Text = "Em"
                    wait(timer*10)
                    i = i + 1
                end
                while i == 23 do
                    EmptynessGui.Text = "E"
                    wait(timer*10)
                    i = i + 1
                end
				while i == 24 do
                    EmptynessGui.Text = ""
                    wait(timer*10)
                    i = i + 1
                end
                if i == 25 then
                    i = 0
                end
            end
        end
    )
end



function SuperRGB()
	spawn(
		function()
			while true do
				wait(timer)

				for i = 30, top, 1 do
					local aShauShinBlisikt69 = Color3.new(i / top, 0 / top, 0 / top)
					EmptynessGui.TextColor3 = aShauShinBlisikt69
					Line.BorderColor3 = aShauShinBlisikt69
					Background.BorderColor3 = aShauShinBlisikt69
					targetNameInput.TextColor3 = aShauShinBlisikt69
					targetNameInput.BorderColor3 = aShauShinBlisikt69
					NumberInput.BorderColor3 = aShauShinBlisikt69
					NumberInput.TextColor3 = aShauShinBlisikt69
					onceInput.BorderColor3 = aShauShinBlisikt69
					onceInput.TextColor3 = aShauShinBlisikt69
					wait(timer)
				end

				for i = 30, top, 1 do
					local bShauShinBlisikt69 = Color3.new(top / top, i / top, 0 / top)
					EmptynessGui.TextColor3 = bShauShinBlisikt69
					Line.BorderColor3 = bShauShinBlisikt69
					Background.BorderColor3 = bShauShinBlisikt69
					targetNameInput.TextColor3 = bShauShinBlisikt69
					targetNameInput.BorderColor3 = bShauShinBlisikt69
					NumberInput.BorderColor3 = bShauShinBlisikt69
					NumberInput.TextColor3 = bShauShinBlisikt69
					onceInput.BorderColor3 = bShauShinBlisikt69
					onceInput.TextColor3 = bShauShinBlisikt69
					wait(timer)
				end

				for i = 30, top, 1 do
					local cShauShinBlisikt69 = Color3.new(top / top, top / top, i / top)
					EmptynessGui.TextColor3 = cShauShinBlisikt69
					Line.BorderColor3 = cShauShinBlisikt69
					Background.BorderColor3 = cShauShinBlisikt69
					targetNameInput.TextColor3 = cShauShinBlisikt69
					targetNameInput.BorderColor3 = cShauShinBlisikt69
					NumberInput.BorderColor3 = cShauShinBlisikt69
					NumberInput.TextColor3 = cShauShinBlisikt69
					onceInput.BorderColor3 = cShauShinBlisikt69
					onceInput.TextColor3 = cShauShinBlisikt69
					wait(timer)
				end

				for i = top, 30, -1 do
					local dShauShinBlisikt69 = Color3.new(i / top, top / top, top / top)
					EmptynessGui.TextColor3 = dShauShinBlisikt69
					Line.BorderColor3 = dShauShinBlisikt69
					Background.BorderColor3 = dShauShinBlisikt69
					targetNameInput.TextColor3 = dShauShinBlisikt69
					targetNameInput.BorderColor3 = dShauShinBlisikt69
					NumberInput.BorderColor3 = dShauShinBlisikt69
					NumberInput.TextColor3 = dShauShinBlisikt69
					onceInput.BorderColor3 = dShauShinBlisikt69
					onceInput.TextColor3 = dShauShinBlisikt69
					wait(timer)
				end

				for i = top, 30, -1 do
					local eShauShinBlisikt69 = Color3.new(0 / top, i / top, top / top)
					EmptynessGui.TextColor3 = eShauShinBlisikt69
					Line.BorderColor3 = eShauShinBlisikt69
					Background.BorderColor3 = eShauShinBlisikt69
					targetNameInput.TextColor3 = eShauShinBlisikt69
					targetNameInput.BorderColor3 = eShauShinBlisikt69
					NumberInput.BorderColor3 = eShauShinBlisikt69
					NumberInput.TextColor3 = eShauShinBlisikt69
					onceInput.BorderColor3 = eShauShinBlisikt69
					onceInput.TextColor3 = eShauShinBlisikt69
					wait(timer)
				end

				for i = top, 30, -1 do
					local fShauShinBlisikt69 = Color3.new(0 / top, 0 / top, i / top)
					EmptynessGui.TextColor3 = fShauShinBlisikt69
					Line.BorderColor3 = fShauShinBlisikt69
					Background.BorderColor3 = fShauShinBlisikt69
					targetNameInput.TextColor3 = fShauShinBlisikt69
					targetNameInput.BorderColor3 = fShauShinBlisikt69
					NumberInput.BorderColor3 = fShauShinBlisikt69
					NumberInput.TextColor3 = fShauShinBlisikt69
					onceInput.BorderColor3 = fShauShinBlisikt69
					onceInput.TextColor3 = fShauShinBlisikt69
					wait(timer)
				end
			end
		end
	)
end

SuperRGB()
TypingTitle()