
KeylessUniversal

Local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local playerGui = player:WaitForChild("PlayerGui")
-- ================== MANUAL SPELL CONFIG ==================
local spell1 = "Fireball" -- Left button
local spell2 = "Freeze" -- Middle button
local spell3 = "Thunderbolt" -- Right button
local cooldownTime = 3 -- seconds (you can change per spell later)
-- ========================================================
-- Only for mobile
if not (UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled) then
return
end
-- Create GUI (same as before, but bigger & nicer)
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "MobileSpellGUI"
screenGui.ResetOnSpawn = false
screenGui.Parent = playerGui
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0.96, 0, 0.20, 0)
mainFrame.Position = UDim2.new(0.02, 0, 0.73, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 45)
mainFrame.BackgroundTransparency = 0.15
mainFrame.BorderSizePixel = 0
mainFrame.Parent = screenGui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 22)
corner.Parent = mainFrame
local listLayout = Instance.new("UIListLayout")
listLayout.FillDirection = Enum.FillDirection.Horizontal
listLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
listLayout.Padding = UDim.new(0, 15)
listLayout.Parent = mainFrame
local cooldowns = {}
-- Simple client-side spell casting function
local function castSpell(spellName)
if not character or not humanoidRootPart then return end
print("Casting: " .. spellName .. " (client-side)")
if spellName == "Fireball" then
-- Example: Spawn a red fireball projectile forward
local fireball = Instance.new("Part")
fireball.Name = "FireballProjectile"
fireball.Shape = Enum.PartType.Ball
fireball.Size = Vector3.new(3, 3, 3)
fireball.Color = Color3.fromRGB(255, 80, 0)
fireball.Material = Enum.Material.Neon
fireball.CFrame = humanoidRootPart.CFrame * CFrame.new(0, 2, -6)
fireball.CanCollide = false
fireball.Anchored = false
fireball.Parent = workspace
local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
bv.Velocity = humanoidRootPart.CFrame.LookVector * 80
bv.Parent = fireball
-- Simple explosion on touch or after time
task.delay(2, function()
if fireball then
local explosion = Instance.new("Explosion")
explosion.Position = fireball.Position
explosion.Parent = workspace
fireball:Destroy()
end
end)
elseif spellName == "Freeze" then
-- Example: Freeze effect (slow particles + visual)
for i = 1, 15 do
local ice = Instance.new("Part")
ice.Size = Vector3.new(1, 1, 1)
ice.Color = Color3.fromRGB(100, 200, 255)
ice.Material = Enum.Material.Ice
ice.CFrame = humanoidRootPart.CFrame * CFrame.new(math.random(-8,8), 1, -10)
ice.CanCollide = false
ice.Anchored = true
ice.Parent = workspace
task.delay(1.5, function() ice:Destroy() end)
end
elseif spellName == "Thunderbolt" then
-- Example: Lightning strike forward
local lightning = Instance.new("Part")
lightning.Size = Vector3.new(1, 20, 1)
lightning.Color = Color3.fromRGB(200, 220, 255)
lightning.Material = Enum.Material.Neon
lightning.CFrame = humanoidRootPart.CFrame * CFrame.new(0, 10, -15)
lightning.CanCollide = false
lightning.Anchored = true
lightning.Parent = workspace
task.delay(0.6, function()
if lightning then lightning:Destroy() end
end)
-- Add a quick flash
local flash = Instance.new("PointLight")
flash.Brightness = 5
flash.Range = 50
flash.Color = Color3.fromRGB(200, 220, 255)
flash.Parent = humanoidRootPart
task.delay(0.3, function() flash:Destroy() end)
end
-- You can add more spells here easily
end
-- Create button function
local function createButton(spellName, color)
local button = Instance.new("TextButton")
button.Size = UDim2.new(0.3, 0, 1, 0)
button.BackgroundColor3 = color
button.Text = spellName:upper()
button.TextColor3 = Color3.new(1, 1, 1)
button.TextScaled = true
button.Font = Enum.Font.GothamBold
button.Parent = mainFrame
local btnCorner = Instance.new("UICorner")
btnCorner.CornerRadius = UDim.new(0, 18)
btnCorner.Parent = button
button.MouseButton1Click:Connect(function()
if cooldowns[spellName] then return end
castSpell(spellName) -- This actually does the spell!
cooldowns[spellName] = true
button.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
button.Text = "⏳"
task.delay(cooldownTime, function()
cooldowns[spellName] = nil
button.BackgroundColor3 = color
button.Text = spellName:upper()
end)
end)
end
-- Create the 3 buttons
createButton(spell1, Color3.fromRGB(200, 50, 50)) -- Fire = red/orange
createButton(spell2, Color3.fromRGB(50, 120, 200)) -- Freeze = blue
createButton(spell3, Color3.fromRGB(200, 180, 50)) -- Thunder = yellow
print("✅ Mobile spell GUI with client-side casting loaded!")



Is 999999999999% made by IA lol, but still is a work in progress ; il use the telekinesis technique for this next time
@MECHATRON sherlock holmes
@1413 lol that's a nice one🤣🤣