
Keyless

-- 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)No comments yet for this script.