Initial commit

This commit is contained in:
2025-12-17 16:47:48 +00:00
commit 13813f3363
4964 changed files with 1079753 additions and 0 deletions

View File

@@ -0,0 +1,852 @@
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4">
<External>null</External>
<External>nil</External>
<Item class="Model" referent="RBX3F9EDB07622E42D797B3F001F3E09746">
<Properties>
<CoordinateFrame name="ModelInPrimary">
<X>0</X>
<Y>0</Y>
<Z>0</Z>
<R00>1</R00>
<R01>0</R01>
<R02>0</R02>
<R10>0</R10>
<R11>1</R11>
<R12>0</R12>
<R20>0</R20>
<R21>0</R21>
<R22>1</R22>
</CoordinateFrame>
<string name="Name">PhysicsAnalyzerPlugin</string>
<Ref name="PrimaryPart">null</Ref>
</Properties>
<Item class="Script" referent="RBXB4C77FAE3AAF45D291F682F80C833828">
<Properties>
<bool name="Disabled">false</bool>
<Content name="LinkedSource">
<null></null>
</Content>
<string name="Name">PhysicsAnalyzerScript</string>
<ProtectedString name="Source"><![CDATA[-- Detector will send a signal with an int parameter, this is the number of problems detected
-- This script can query for a list of parts for each problem
-- The plugin is responsible for:
-- 1) Pausing the game
-- 2) Highlighting the parts
-- 3) Selecting the parts in the Explorer
-- 4) Focus on the parts in a group
-- 5) Providing an interface for skipping to next issue
-----------
--MODULES--
-----------
local Extent = require(script.Parent.Extent)
local Camera = require(script.Parent.Camera)
-------
--GUI--
-------
local PhysicsAnalyzerGui = script.Parent.PhysicsAnalyzerGui
local MainFrame = PhysicsAnalyzerGui.MainFrame
local NumberFound = MainFrame.NumberFound
local CurrentStatus = MainFrame.CurrentStatus
local RunButton = MainFrame.RunButton
local ScrollingFrame = MainFrame.ScrollingFrame
local Canvas = ScrollingFrame.Canvas
local ItemTemplate = MainFrame.ItemTemplate
local HelpButton = MainFrame.HelpButton
------------
--SERVICES--
------------
local SelectionService = game:GetService("Selection")
local RunService = game:GetService("RunService")
PhysicsAnalyzerGui.Parent = game:GetService("CoreGui")
-----------
--SIGNALS--
-----------
local PhysicsAnalyzerIssuesSignal = nil
local RunServiceSteppedSignal = nil
local RunButtonInputSignal = nil
local HelpButtonSignal = nil
-------------
--VARIABLES--
-------------
local previousIssueCount = 0;
local issues = {}
-------------
--FUNCTIONS--
-------------
local function clearAllIssues()
for i = 1, #issues do
issues[i][3]:disconnect()
issues[i][2]:Destroy()
end
issues = {}
NumberFound.Text = ""
end
local function addIssue(issue)
-- local label = "Issue " .. #issues .. (issue[1] and (": " .. issue[1].Name ..
-- (issue[2] and " / " .. issue[2].Name or "")) or (""))
local label = "Issue " .. #issues .. ": "
for j=1, #issue do
if( j > 1 ) then
label = label .. " / "
end
label = label .. issue[j].Name
end
local item = ItemTemplate:Clone()
item.Parent = Canvas
item.Position = UDim2.new(0, 0, 0, 21 * #issues)
item.Text = label
local itemConnection = item.InputBegan:connect(function(evt)
if evt.UserInputType == Enum.UserInputType.MouseButton1 then
moveAndSelectParts(issue)
end
end)
item.Visible = true
issues[#issues + 1] = {issue, item, itemConnection}
ScrollingFrame.CanvasSize = UDim2.new(0, 0, 0, #issues * 21)
if (ScrollingFrame.CanvasSize.Y.Offset > ScrollingFrame.AbsoluteSize.Y) then
Canvas.Size = UDim2.new(1, -16, 1, 0)
else
Canvas.Size = UDim2.new(1, 0, 1, 0)
end
previousIssueCount = #issues;
end
function moveAndSelectParts(parts)
game.Selection:Set(parts)
local extents = Extent.getExtents(parts)
Camera.zoomToExtents(extents)
end
local function gotIssues(count)
MainFrame.Size = UDim2.new(0, 200, 0, 200)
ScrollingFrame.Visible = true
if (count == previousIssueCount) then
return
end
clearAllIssues()
RunService:Pause()
game.Workspace:SetPhysicsAnalyzerBreakOnIssue(true)
--Updating GUI
NumberFound.Text = count .. " overconstraints detected"
RunButton.Visible = true
CurrentStatus.Text = "Paused"
for i = 0, count - 1 do
local issue = game.Workspace:GetPhysicsAnalyzerIssue(i)
addIssue(issue)
end
game.Workspace:SetPhysicsAnalyzerBreakOnIssue(false)
end
local function connectEvents()
RunServiceSteppedSignal = RunService.Stepped:connect(function()
clearAllIssues()
CurrentStatus.Text = "Running"
end)
RunButtonInputSignal = RunButton.InputBegan:connect(function(evt)
if (evt.UserInputType == Enum.UserInputType.MouseButton1) then
RunService:Run()
RunButton.Visible = false
end
end)
HelpButtonSignal = HelpButton.InputBegan:connect(function(evt)
if (evt.UserInputType == Enum.UserInputType.MouseButton1) then
plugin:OpenWikiPage("Physics_Analyzer")
end
end)
PhysicsAnalyzerIssuesSignal = game.Workspace.PhysicsAnalyzerIssuesFound:connect(gotIssues)
end
local function disconnectEvents()
if PhysicsAnalyzerIssuesSignal then
PhysicsAnalyzerIssuesSignal:disconnect()
end
if RunServiceSteppedSignal then
RunServiceSteppedSignal:disconnect()
end
if RunButtonInputSignal then
RunButtonInputSignal:disconnect()
end
if HelpButtonSignal then
HelpButtonSignal:disconnect()
end
end
local function physicsAnalyzerEnabled(enabled)
MainFrame.Visible = enabled
if enabled then
connectEvents()
else
disconnectEvents()
end
end
----------
--EVENTS--
----------
settings().Physics.Changed:connect(function(itemChanged)
if itemChanged == "PhysicsAnalyzerEnabled" then
physicsAnalyzerEnabled(settings().Physics.PhysicsAnalyzerEnabled)
end
end)
physicsAnalyzerEnabled(settings().Physics.PhysicsAnalyzerEnabled)
]]> </ProtectedString>
</Properties>
</Item>
<Item class="ModuleScript" referent="RBXDB111B99CBE14ED8A5E9B4B20FA6CCA3">
<Properties>
<Content name="LinkedSource">
<null></null>
</Content>
<string name="Name">Extent</string>
<ProtectedString name="Source"><![CDATA[------------------
--MODULE EXTENTS--
------------------
--[[
This modulescript is used for calculating the extents of a group of parts
--]]
-------------
--FUNCTIONS--
-------------
local function createExtents()
local extents = {}
extents.mt = {}
setmetatable(extents, extents.mt)
extents.min = Vector3.new(1,1,1) * math.huge
extents.max = Vector3.new(1,1,1) * -math.huge
extents.mt.__index = function (t, k)
if k == "center" then
return (extents.min + extents.max) * 0.5
end
if k == "addPoint" then
return function (point)
if point.x < extents.min.x then extents.min = Vector3.new(point.x, extents.min.y, extents.min.z) end
if point.y < extents.min.y then extents.min = Vector3.new(extents.min.x, point.y, extents.min.z) end
if point.z < extents.min.z then extents.min = Vector3.new(extents.min.x, extents.min.y, point.z) end
if point.x > extents.max.x then extents.max = Vector3.new(point.x, extents.max.y, extents.max.z) end
if point.y > extents.max.y then extents.max = Vector3.new(extents.max.x, point.y, extents.max.z) end
if point.z > extents.max.z then extents.max = Vector3.new(extents.max.x, extents.max.y, point.z) end
end
end
end
return extents
end
local function addToExtents(extents, part)
for i = 0, 7 do
local corner = (Vector3.new(math.floor(i / 4), math.floor(i / 2) % 2, i % 2) * 2) - Vector3.new(1, 1, 1)
local worldPosition = part.CFrame:pointToWorldSpace(corner * part.Size)
extents.addPoint(worldPosition)
end
return extents
end
local function getExtents(parts)
local extents = createExtents()
for i = 1, #parts do
if parts[i]:IsA("BasePart") then
extents = addToExtents(extents, parts[i])
end
end
return extents
end
-----------------
--ENCAPSULATION--
-----------------
local module = {}
module.getExtents = getExtents
return module
]]> </ProtectedString>
</Properties>
</Item>
<Item class="ModuleScript" referent="RBXF7D9C89485434B36B2422E149374F5DF">
<Properties>
<Content name="LinkedSource">
<null></null>
</Content>
<string name="Name">Camera</string>
<ProtectedString name="Source"><![CDATA[-----------------
--MODULE CAMERA--
-----------------
--[[
This modulescript is used for zooming the camera to given extents
--]]
-------------
--FUNCTIONS--
-------------
local distanceFromRadius = 3
local function zoomToExtents(extents)
local camera = game.Workspace.CurrentCamera
local center = extents.center
local radius = (extents.min - center).magnitude
camera.CameraType = Enum.CameraType.Fixed
local rotation = camera.CoordinateFrame - camera.CoordinateFrame.p
local position = center - (rotation.lookVector * (radius + distanceFromRadius))
camera.CoordinateFrame = rotation + position
camera.Focus = CFrame.new(center)
end
-----------------
--ENCAPSULATION--
-----------------
local module = {}
module.zoomToExtents = zoomToExtents
return module
]]> </ProtectedString>
</Properties>
</Item>
<Item class="ScreenGui" referent="RBXC61727E732814E20A690ED394899F571">
<Properties>
<string name="Name">PhysicsAnalyzerGui</string>
</Properties>
<Item class="Frame" referent="RBX9C1A115B17C64C2DA4C550472FC4C2FC">
<Properties>
<bool name="Active">true</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">0</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">1</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<string name="Name">MainFrame</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>0</YO>
</UDim2>
<float name="Rotation">0</float>
<bool name="Selectable">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>0</XS>
<XO>200</XO>
<YS>0</YS>
<YO>70</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<token name="Style">6</token>
<bool name="Visible">true</bool>
<int name="ZIndex">1</int>
</Properties>
<Item class="TextLabel" referent="RBX21D1D53505FA4E5EA81BC1E4FEE93833">
<Properties>
<bool name="Active">false</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">0.75</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<token name="Font">4</token>
<token name="FontSize">6</token>
<string name="Name">TitleLabel</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>0</YO>
</UDim2>
<float name="Rotation">0</float>
<bool name="Selectable">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>1</XS>
<XO>0</XO>
<YS>0</YS>
<YO>25</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<string name="Text">Physics Analyzer</string>
<Color3 name="TextColor3">4294967295</Color3>
<bool name="TextScaled">false</bool>
<Color3 name="TextStrokeColor3">4278190080</Color3>
<float name="TextStrokeTransparency">1</float>
<float name="TextTransparency">0</float>
<bool name="TextWrapped">false</bool>
<token name="TextXAlignment">2</token>
<token name="TextYAlignment">1</token>
<bool name="Visible">true</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
<Item class="ScrollingFrame" referent="RBX903E924BF45441B8948310D28BDE9938">
<Properties>
<bool name="Active">false</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">1</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<Content name="BottomImage">
<url>ayaasset://textures/ui/studs.png</url>
</Content>
<Vector2 name="CanvasPosition">
<X>0</X>
<Y>0</Y>
</Vector2>
<UDim2 name="CanvasSize">
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>100</YO>
</UDim2>
<bool name="ClipsDescendants">true</bool>
<bool name="Draggable">false</bool>
<Content name="MidImage">
<url>ayaasset://textures/ui/smooth.png</url>
</Content>
<string name="Name">ScrollingFrame</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>75</YO>
</UDim2>
<float name="Rotation">0</float>
<int name="ScrollBarThickness">12</int>
<bool name="ScrollingEnabled">true</bool>
<bool name="Selectable">true</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>1</XS>
<XO>0</XO>
<YS>1</YS>
<YO>-75</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<Content name="TopImage">
<url>ayaasset://textures/ui/studs.png</url>
</Content>
<bool name="Visible">false</bool>
<int name="ZIndex">1</int>
</Properties>
<Item class="Frame" referent="RBX0748620B01764D05897BE23D03333C45">
<Properties>
<bool name="Active">false</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">1</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">true</bool>
<bool name="Draggable">false</bool>
<string name="Name">Canvas</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>0</YO>
</UDim2>
<float name="Rotation">0</float>
<bool name="Selectable">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>1</XS>
<XO>-16</XO>
<YS>1</YS>
<YO>0</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<token name="Style">0</token>
<bool name="Visible">true</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
</Item>
<Item class="TextButton" referent="RBX5909EC7335A24E6E8BD4123F5940CB4A">
<Properties>
<bool name="Active">true</bool>
<bool name="AutoButtonColor">true</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">0.899999976</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<token name="Font">3</token>
<token name="FontSize">5</token>
<bool name="Modal">false</bool>
<string name="Name">ItemTemplate</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>0</YO>
</UDim2>
<float name="Rotation">0</float>
<bool name="Selectable">true</bool>
<bool name="Selected">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>1</XS>
<XO>0</XO>
<YS>0</YS>
<YO>20</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<token name="Style">0</token>
<string name="Text">Problem 0</string>
<Color3 name="TextColor3">4294967295</Color3>
<bool name="TextScaled">false</bool>
<Color3 name="TextStrokeColor3">4278190080</Color3>
<float name="TextStrokeTransparency">1</float>
<float name="TextTransparency">0</float>
<bool name="TextWrapped">false</bool>
<token name="TextXAlignment">2</token>
<token name="TextYAlignment">1</token>
<bool name="Visible">false</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
<Item class="TextLabel" referent="RBXCDD1A7B9C4994E1B9948AF615DD254A1">
<Properties>
<bool name="Active">false</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">1</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<token name="Font">4</token>
<token name="FontSize">5</token>
<string name="Name">Status</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>0</XO>
<YS>0</YS>
<YO>30</YO>
</UDim2>
<float name="Rotation">0</float>
<bool name="Selectable">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>0</XS>
<XO>50</XO>
<YS>0</YS>
<YO>20</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<string name="Text">Status:</string>
<Color3 name="TextColor3">4294967295</Color3>
<bool name="TextScaled">false</bool>
<Color3 name="TextStrokeColor3">4278190080</Color3>
<float name="TextStrokeTransparency">1</float>
<float name="TextTransparency">0</float>
<bool name="TextWrapped">false</bool>
<token name="TextXAlignment">2</token>
<token name="TextYAlignment">1</token>
<bool name="Visible">true</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
<Item class="TextLabel" referent="RBX9B7E5EB7F2C64FF4AEE9FD0D4EFACF49">
<Properties>
<bool name="Active">false</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">1</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<token name="Font">3</token>
<token name="FontSize">5</token>
<string name="Name">CurrentStatus</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>47</XO>
<YS>0</YS>
<YO>31</YO>
</UDim2>
<float name="Rotation">0</float>
<bool name="Selectable">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>0</XS>
<XO>50</XO>
<YS>0</YS>
<YO>20</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<string name="Text">Ready</string>
<Color3 name="TextColor3">4294967295</Color3>
<bool name="TextScaled">false</bool>
<Color3 name="TextStrokeColor3">4278190080</Color3>
<float name="TextStrokeTransparency">1</float>
<float name="TextTransparency">0</float>
<bool name="TextWrapped">false</bool>
<token name="TextXAlignment">0</token>
<token name="TextYAlignment">1</token>
<bool name="Visible">true</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
<Item class="TextLabel" referent="RBXB4BD17ABC60E45D2A4F98110C999CEA9">
<Properties>
<bool name="Active">false</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">1</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<token name="Font">4</token>
<token name="FontSize">5</token>
<string name="Name">NumberFound</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>0</XS>
<XO>5</XO>
<YS>0</YS>
<YO>55</YO>
</UDim2>
<float name="Rotation">0</float>
<bool name="Selectable">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>1</XS>
<XO>-5</XO>
<YS>0</YS>
<YO>20</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<string name="Text"></string>
<Color3 name="TextColor3">4294924122</Color3>
<bool name="TextScaled">false</bool>
<Color3 name="TextStrokeColor3">4278190080</Color3>
<float name="TextStrokeTransparency">1</float>
<float name="TextTransparency">0</float>
<bool name="TextWrapped">false</bool>
<token name="TextXAlignment">0</token>
<token name="TextYAlignment">1</token>
<bool name="Visible">true</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
<Item class="ImageButton" referent="RBXB619D19972004CB3992613F98E612BD0">
<Properties>
<bool name="Active">true</bool>
<bool name="AutoButtonColor">true</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">1</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<Content name="Image">
<url>roblox.com/asset?id=358274726</url>
</Content>
<Color3 name="ImageColor3">4294967295</Color3>
<Vector2 name="ImageRectOffset">
<X>0</X>
<Y>0</Y>
</Vector2>
<Vector2 name="ImageRectSize">
<X>0</X>
<Y>0</Y>
</Vector2>
<float name="ImageTransparency">0</float>
<bool name="Modal">false</bool>
<string name="Name">RunButton</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>1</XS>
<XO>-25</XO>
<YS>0</YS>
<YO>30</YO>
</UDim2>
<float name="Rotation">0</float>
<token name="ScaleType">0</token>
<bool name="Selectable">true</bool>
<bool name="Selected">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>0</XS>
<XO>20</XO>
<YS>0</YS>
<YO>20</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<Rect2D name="SliceCenter">
<min>
<X>0</X>
<Y>0</Y>
</min>
<max>
<X>0</X>
<Y>0</Y>
</max>
</Rect2D>
<token name="Style">0</token>
<bool name="Visible">false</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
<Item class="ImageButton" referent="RBX18E6EA46987C449D9CA4697F8E7FC57B">
<Properties>
<bool name="Active">true</bool>
<bool name="AutoButtonColor">true</bool>
<Color3 name="BackgroundColor3">4294967295</Color3>
<float name="BackgroundTransparency">1</float>
<Color3 name="BorderColor3">4279970357</Color3>
<int name="BorderSizePixel">0</int>
<bool name="ClipsDescendants">false</bool>
<bool name="Draggable">false</bool>
<Content name="Image">
<url>roblox.com/asset?id=320903644</url>
</Content>
<Color3 name="ImageColor3">4294967295</Color3>
<Vector2 name="ImageRectOffset">
<X>0</X>
<Y>0</Y>
</Vector2>
<Vector2 name="ImageRectSize">
<X>0</X>
<Y>0</Y>
</Vector2>
<float name="ImageTransparency">0</float>
<bool name="Modal">false</bool>
<string name="Name">HelpButton</string>
<Ref name="NextSelectionDown">null</Ref>
<Ref name="NextSelectionLeft">null</Ref>
<Ref name="NextSelectionRight">null</Ref>
<Ref name="NextSelectionUp">null</Ref>
<UDim2 name="Position">
<XS>1</XS>
<XO>-19</XO>
<YS>0</YS>
<YO>4</YO>
</UDim2>
<float name="Rotation">0</float>
<token name="ScaleType">0</token>
<bool name="Selectable">true</bool>
<bool name="Selected">false</bool>
<Ref name="SelectionImageObject">null</Ref>
<UDim2 name="Size">
<XS>0</XS>
<XO>16</XO>
<YS>0</YS>
<YO>16</YO>
</UDim2>
<token name="SizeConstraint">0</token>
<Rect2D name="SliceCenter">
<min>
<X>0</X>
<Y>0</Y>
</min>
<max>
<X>0</X>
<Y>0</Y>
</max>
</Rect2D>
<token name="Style">0</token>
<bool name="Visible">true</bool>
<int name="ZIndex">1</int>
</Properties>
</Item>
</Item>
</Item>
</Item>
</roblox>