Magic spells client by mechatron
Key RequiredUniversal

Magic spells client by mechatron

Universal ScriptMECHATRONMECHATRON 665 views 112 executesUpdated Apr 13, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•164 lines (5362 chars)
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!")

Features & Information

Il make Better,but I'm lazy
#Macig#Magic#SPELLS#Peak

Community Comments (3)

MECHATRONMECHATRONApr 13, 2026

Is 999999999999% made by IA lol, but still is a work in progress ; il use the telekinesis technique for this next time

Replying to @MECHATRON
14131413Apr 13, 2026

@MECHATRON sherlock holmes

Replying to @1413
MECHATRONMECHATRONApr 19, 2026

@1413 lol that's a nice one🤣🤣

More Scripts for Universal Scripts