-- for beginners i made public local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer -- Safe ScreenGui Parent local function getSafeParent() local success, result = pcall(function() return gethui and gethui() or game:GetService("CoreGui") end) if success and result then return result end return LocalPlayer:WaitForChild("PlayerGui") end local ParentContainer = getSafeParent() -- Cleanup Old Instances if ParentContainer:FindFirstChild("SpinDashSelectionGui") then ParentContainer.SpinDashSelectionGui:Destroy() end if ParentContainer:FindFirstChild("SpinDashMainGui") then ParentContainer.SpinDashMainGui:Destroy() end -- ======================================================== -- 1. DEVICE SELECTION GUI -- ======================================================== local SelectionGui = Instance.new("ScreenGui") SelectionGui.Name = "SpinDashSelectionGui" SelectionGui.ResetOnSpawn = false SelectionGui.DisplayOrder = 999999 SelectionGui.Parent = ParentContainer local Overlay = Instance.new("Frame") Overlay.Size = UDim2.new(1, 0, 1, 0) Overlay.BackgroundColor3 = Color3.fromRGB(0, 0, 0) Overlay.BackgroundTransparency = 0.5 Overlay.Parent = SelectionGui local Modal = Instance.new("Frame") Modal.Size = UDim2.new(0, 260, 0, 130) Modal.Position = UDim2.new(0.5, -130, 0.5, -65) Modal.BackgroundColor3 = Color3.fromRGB(25, 25, 25) Modal.Parent = Overlay local ModalCorner = Instance.new("UICorner") ModalCorner.CornerRadius = UDim.new(0, 10) ModalCorner.Parent = Modal local Title = Instance.new("TextLabel") Title.Size = UDim2.new(1, 0, 0, 40) Title.BackgroundTransparency = 1 Title.Text = "Select Device Mode" Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.TextSize = 16 Title.Font = Enum.Font.SourceSansBold Title.Parent = Modal local PhoneBtn = Instance.new("TextButton") PhoneBtn.Size = UDim2.new(0, 100, 0, 38) PhoneBtn.Position = UDim2.new(0, 18, 0, 65) PhoneBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 40) PhoneBtn.Text = "Phone Mode" PhoneBtn.TextColor3 = Color3.fromRGB(255, 255, 255) PhoneBtn.Font = Enum.Font.SourceSansBold PhoneBtn.TextSize = 13 PhoneBtn.Parent = Modal local TabletBtn = Instance.new("TextButton") TabletBtn.Size = UDim2.new(0, 100, 0, 38) TabletBtn.Position = UDim2.new(1, -118, 0, 65) TabletBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 40) TabletBtn.Text = "Tablet Mode" TabletBtn.TextColor3 = Color3.fromRGB(255, 255, 255) TabletBtn.Font = Enum.Font.SourceSansBold TabletBtn.TextSize = 13 TabletBtn.Parent = Modal for _, btn in ipairs({PhoneBtn, TabletBtn}) do local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 8) corner.Parent = btn local stroke = Instance.new("UIStroke") stroke.Thickness = 1.5 stroke.Color = Color3.fromRGB(0, 170, 255) stroke.Parent = btn end -- ======================================================== -- 2. MAIN DASH BUTTON GUI -- ======================================================== local MainGui = Instance.new("ScreenGui") MainGui.Name = "SpinDashMainGui" MainGui.ResetOnSpawn = false MainGui.Enabled = false MainGui.DisplayOrder = 999999 MainGui.Parent = ParentContainer local DashButton = Instance.new("TextButton") DashButton.Name = "DashButton" DashButton.BackgroundColor3 = Color3.fromRGB(25, 25, 25) DashButton.TextColor3 = Color3.fromRGB(255, 255, 255) DashButton.Text = "SPIN DASH" DashButton.Font = Enum.Font.SourceSansBold DashButton.Parent = MainGui local DashCorner = Instance.new("UICorner") DashCorner.CornerRadius = UDim.new(0, 10) DashCorner.Parent = DashButton local DashStroke = Instance.new("UIStroke") DashStroke.Thickness = 2 DashStroke.Color = Color3.fromRGB(0, 170, 255) DashStroke.Parent = DashButton -- Mode Handler local function applyMode(isPhone) if isPhone then DashButton.Size = UDim2.new(0, 80, 0, 35) DashButton.TextSize = 12 DashButton.Position = UDim2.new(0.5, -40, 0.75, -17) else DashButton.Size = UDim2.new(0, 130, 0, 48) DashButton.TextSize = 16 DashButton.Position = UDim2.new(0.5, -65, 0.75, -24) end SelectionGui:Destroy() MainGui.Enabled = true end PhoneBtn.Activated:Connect(function() applyMode(true) end) TabletBtn.Activated:Connect(function() applyMode(false) end) -- Mobile & PC Draggable Logic local dragging, dragInput, dragStart, startPos DashButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = DashButton.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) DashButton.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart DashButton.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) -- ======================================================== -- 3. SPIN DASH MECHANIC -- ======================================================== local isDashing = false local animR6 = Instance.new("Animation") animR6.AnimationId = "rbxassetid://278828913" local animR15 = Instance.new("Animation") animR15.AnimationId = "rbxassetid://582855105" local function performSpinDash() if isDashing then return end local char = LocalPlayer.Character if not char then return end local humanoid = char:FindFirstChildOfClass("Humanoid") local root = char:FindFirstChild("HumanoidRootPart") if not humanoid or not root then return end isDashing = true -- Load Animation safely local animTrack pcall(function() local animToPlay = (humanoid.RigType == Enum.HumanoidRigType.R6) and animR6 or animR15 local animator = humanoid:FindFirstChildOfClass("Animator") or Instance.new("Animator", humanoid) animTrack = animator:LoadAnimation(animToPlay) animTrack:Play() end) -- Physics Setup local attachment = Instance.new("Attachment") attachment.Parent = root local linearVel = Instance.new("LinearVelocity") linearVel.Attachment0 = attachment linearVel.MaxForce = 999999 linearVel.VectorVelocity = root.CFrame.LookVector * 60 linearVel.RelativeTo = Enum.ActuatorRelativeTo.World linearVel.Parent = root local angularVel = Instance.new("AngularVelocity") angularVel.Attachment0 = attachment angularVel.MaxTorque = 999999 angularVel.AngularVelocity = Vector3.new(0, 40, 0) angularVel.RelativeTo = Enum.ActuatorRelativeTo.World angularVel.Parent = root task.wait(0.5) linearVel:Destroy() angularVel:Destroy() attachment:Destroy() if animTrack then pcall(function() animTrack:Stop() animTrack:Destroy() end) end isDashing = false end DashButton.Activated:Connect(performSpinDash)