Best SpiderMan Script
Key RequiredUniversal

Best SpiderMan Script

Universal ScriptMoggerKentMoggerKent 1.9K views 47.5K executesUpdated Jun 19, 2026
2.5/ 5(2 votes)
1150% Positive
Lua Script•790 lines (22100 chars)
-- SPIDER SYSTEM v23.4 — CASULO GROSSO + BALANÇO NORMAL
-- Web Swing + Web Zip + Wall Climb + Ceiling Web + Slingshot
-- TEIA BRANCA + ANIMAÇÕES + SONS + MÃOS
-- Mobile / Delta / R15

local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local Debris = game:GetService("Debris")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")

local player = Players.LocalPlayer
local backpack = player:WaitForChild("Backpack")
local gui = player:WaitForChild("PlayerGui")

------------------------------------------------
-- TOOL
------------------------------------------------
local tool = Instance.new("Tool")
tool.Name = "SpiderPowers"
tool.RequiresHandle = false
tool.Parent = backpack

------------------------------------------------
-- GUI
------------------------------------------------
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "SpiderUI"
screenGui.ResetOnSpawn = false
screenGui.Enabled = false
screenGui.Parent = gui

local function btn(name, size, pos, color, text)
	local b = Instance.new("TextButton")
	b.Name = name
	b.Size = size
	b.Position = pos
	b.BackgroundColor3 = color
	b.Text = text or ""
	b.TextScaled = true
	b.ZIndex = 5
	b.Parent = screenGui
	return b
end

local btnSwing = btn("Swing", UDim2.new(0.22,0,0.12,0), UDim2.new(0.72,0,0.75,0), Color3.fromRGB(220,40,40), "BALANÇAR")
local btnZip   = btn("Zip",   UDim2.new(0.22,0,0.12,0), UDim2.new(0.72,0,0.60,0), Color3.fromRGB(30,130,220), "WEB ZIP")
local btnSling = btn("Sling", UDim2.new(0.22,0,0.12,0), UDim2.new(0.72,0,0.45,0), Color3.fromRGB(255,140,0), "ESTILINGUE")
local btnWall  = btn("Wall",  UDim2.new(0.13,0,0.13,0), UDim2.new(0.06,0,0.75,0), Color3.fromRGB(180,0,0), "")
local btnTeto  = btn("Teto",  UDim2.new(0.13,0,0.13,0), UDim2.new(0.06,0,0.60,0), Color3.fromRGB(140,0,200), "")

Instance.new("UICorner", btnWall).CornerRadius = UDim.new(1,0)
Instance.new("UICorner", btnTeto).CornerRadius = UDim.new(1,0)

local btnSubir = btn("Subir", UDim2.new(0.25,0,0.08,0), UDim2.new(0.375,0,0.04,0), Color3.fromRGB(0,180,0), "SUBIR")
btnSubir.Visible = false

------------------------------------------------
-- SETAS
------------------------------------------------
local arrows = Instance.new("Frame", screenGui)
arrows.Size = UDim2.new(1,0,1,0)
arrows.BackgroundTransparency = 1
arrows.Visible = false

local function arrow(pos, txt)
	local b = Instance.new("TextButton")
	b.Size = UDim2.new(0.14,0,0.1,0)
	b.Position = pos
	b.Text = txt
	b.TextScaled = true
	b.BackgroundColor3 = Color3.fromRGB(40,40,40)
	b.TextColor3 = Color3.new(1,1,1)
	b.Parent = arrows
	return b
end

local up    = arrow(UDim2.new(0.43,0,0.75,0), "↑")
local down  = arrow(UDim2.new(0.43,0,0.87,0), "↓")
local left  = arrow(UDim2.new(0.30,0,0.81,0), "←")
local right = arrow(UDim2.new(0.56,0,0.81,0), "→")

------------------------------------------------
-- CHAR + ANIMAÇÕES
------------------------------------------------
local function getChar()
	local c = player.Character or player.CharacterAdded:Wait()
	return c, c:WaitForChild("HumanoidRootPart"), c:WaitForChild("Humanoid")
end

local SWING_ANIM_ID = "rbxassetid://507767968"
local CLIMB_ANIM_ID = "rbxassetid://507765644"

local swingTrack, climbTrack

local function loadAnimations(hum)
	local animator = hum:FindFirstChildOfClass("Animator")
	if not animator then
		animator = Instance.new("Animator")
		animator.Parent = hum
	end

	local swingAnim = Instance.new("Animation")
	swingAnim.AnimationId = SWING_ANIM_ID
	swingTrack = animator:LoadAnimation(swingAnim)
	swingTrack.Priority = Enum.AnimationPriority.Action
	swingTrack.Looped = true

	local climbAnim = Instance.new("Animation")
	climbAnim.AnimationId = CLIMB_ANIM_ID
	climbTrack = animator:LoadAnimation(climbAnim)
	climbTrack.Priority = Enum.AnimationPriority.Action
	climbTrack.Looped = true
end

------------------------------------------------
-- LANÇADORES NOS PULSOS
------------------------------------------------
local wristShooters = {}

local function clearWristShooters()
	for _, s in pairs(wristShooters) do
		if s then s:Destroy() end
	end
	wristShooters = {}
end

local function createWristShooter(hand, offset)
	if not hand then return end

	local shooter = Instance.new("Part")
	shooter.Name = "WebShooter"
	shooter.Size = Vector3.new(0.38, 0.26, 0.48)
	shooter.Color = Color3.fromRGB(20, 20, 20)
	shooter.Material = Enum.Material.Metal
	shooter.CanCollide = false
	shooter.Massless = true
	shooter.Parent = hand

	local weld = Instance.new("Weld")
	weld.Part0 = hand
	weld.Part1 = shooter
	weld.C0 = offset
	weld.Parent = shooter

	local detail = Instance.new("Part")
	detail.Size = Vector3.new(0.14, 0.11, 0.14)
	detail.Color = Color3.fromRGB(200, 0, 0)
	detail.Material = Enum.Material.Neon
	detail.CanCollide = false
	detail.Massless = true
	detail.Parent = shooter

	local detailWeld = Instance.new("Weld")
	detailWeld.Part0 = shooter
	detailWeld.Part1 = detail
	detailWeld.C0 = CFrame.new(0, 0, -0.25)
	detailWeld.Parent = detail

	table.insert(wristShooters, shooter)
	table.insert(wristShooters, detail)
end

local function equipWristShooters(char)
	clearWristShooters()

	local rightHand = char:FindFirstChild("RightHand") or char:FindFirstChild("Right Arm")
	local leftHand  = char:FindFirstChild("LeftHand")  or char:FindFirstChild("Left Arm")

	createWristShooter(rightHand, CFrame.new(0.05, -0.18, 0.22) * CFrame.Angles(math.rad(-8), math.rad(12), 0))
	createWristShooter(leftHand,  CFrame.new(-0.05, -0.18, 0.22) * CFrame.Angles(math.rad(-8), math.rad(-12), 0))
end

------------------------------------------------
-- CASULO DE TEIA (MAIS GROSSO)
------------------------------------------------
local function playCocoonTransformation(char, hrp)
	local hum = char:FindFirstChildOfClass("Humanoid")
	if hum then
		hum.PlatformStand = true
	end

	local webSound = Instance.new("Sound")
	webSound.SoundId = "rbxassetid://9084017080"
	webSound.Volume = 2
	webSound.Parent = hrp
	webSound:Play()
	Debris:AddItem(webSound, 2)

	local cocoonParts = {}
	local numParts = 105 -- bem mais pedaços

	for i = 1, numParts do
		local part = Instance.new("Part")
		part.Name = "CocoonPiece"
		part.Size = Vector3.new(0.7, 0.7, 0.7)
		part.Color = Color3.fromRGB(245, 245, 245)
		part.Material = Enum.Material.SmoothPlastic
		part.CanCollide = false
		part.Anchored = true
		part.CastShadow = false
		part.Parent = Workspace

		local theta = math.rad(math.random(0, 360))
		local phi = math.rad(math.random(0, 180))
		local radius = 2.8 -- casulo maior
		local offset = Vector3.new(
			radius * math.sin(phi) * math.cos(theta),
			radius * math.cos(phi) * 1.1,
			radius * math.sin(phi) * math.sin(theta)
		)

		part.CFrame = CFrame.new(hrp.Position + offset)
		table.insert(cocoonParts, part)

		local tween = TweenService:Create(part, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
			Size = Vector3.new(1.8, 1.8, 1.8)
		})
		tween:Play()
	end

	task.wait(0.75)

	-- Explosão
	local explodeSound = Instance.new("Sound")
	explodeSound.SoundId = "rbxassetid://9084017080"
	explodeSound.Volume = 2.3
	explodeSound.Pitch = 1.25
	explodeSound.Parent = hrp
	explodeSound:Play()
	Debris:AddItem(explodeSound, 2)

	for _, part in ipairs(cocoonParts) do
		if part and part.Parent then
			part.Anchored = false
			local dir = (part.Position - hrp.Position).Unit
			local bv = Instance.new("BodyVelocity")
			bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
			bv.Velocity = dir * math.random(40, 65) + Vector3.new(0, math.random(12, 28), 0)
			bv.Parent = part
			Debris:AddItem(bv, 0.45)
			Debris:AddItem(part, 0.8)
		end
	end

	task.wait(0.15)
	if hum then
		hum.PlatformStand = false
	end
end

------------------------------------------------
-- WEB SWING (NORMAL - SEM MIRA)
------------------------------------------------
local swinging = false
local rope, anchor, att0, att1, align
local handBeams = {}
local swingConn
local lastSwingVelocity = Vector3.zero
local swingHandCycle = 0

local function clearHandBeams()
	for _, b in pairs(handBeams) do
		if b then b:Destroy() end
	end
	handBeams = {}
end

local function createHandWebs(char, targetAttachment, mode)
	clearHandBeams()

	local leftHand = char:FindFirstChild("LeftHand") or char:FindFirstChild("Left Arm")
	local rightHand = char:FindFirstChild("RightHand") or char:FindFirstChild("Right Arm")

	local function addBeam(hand)
		if not hand then return end
		local a1 = Instance.new("Attachment", hand)
		local hb = Instance.new("Beam")
		hb.Attachment0 = targetAttachment
		hb.Attachment1 = a1
		hb.Width0 = 0.09
		hb.Width1 = 0.09
		hb.Color = ColorSequence.new(Color3.new(1,1,1))
		hb.FaceCamera = true
		hb.LightEmission = 1
		hb.Parent = hand
		table.insert(handBeams, hb)
		table.insert(handBeams, a1)
	end

	if mode == 0 then
		addBeam(rightHand)
	elseif mode == 1 then
		addBeam(leftHand)
	else
		addBeam(leftHand)
		addBeam(rightHand)
	end
end

local function startSwing()
	if swinging then return end
	swinging = true

	local char, hrp, hum = getChar()
	hum.PlatformStand = true

	if not swingTrack then loadAnimations(hum) end
	if swingTrack then swingTrack:Play(0.2) end

	local webSound = Instance.new("Sound")
	webSound.SoundId = "rbxassetid://9084017080"
	webSound.Volume = 1.8
	webSound.Parent = hrp
	webSound:Play()
	Debris:AddItem(webSound, 2)

	-- Balanço normal (posição à frente)
	anchor = Instance.new("Part", Workspace)
	anchor.Anchored = true
	anchor.Transparency = 1
	anchor.CanCollide = false
	anchor.Size = Vector3.new(0.3,0.3,0.3)
	anchor.Position = hrp.Position + hrp.CFrame.LookVector * 45 + Vector3.new(0, 14, 0)

	att0 = Instance.new("Attachment", anchor)
	att1 = Instance.new("Attachment", hrp)

	rope = Instance.new("RopeConstraint", hrp)
	rope.Attachment0 = att0
	rope.Attachment1 = att1
	rope.Length = (anchor.Position - hrp.Position).Magnitude
	rope.Thickness = 0.4
	rope.Visible = false

	local mode = swingHandCycle % 3
	createHandWebs(char, att0, mode)
	swingHandCycle = swingHandCycle + 1

	align = Instance.new("AlignOrientation", hrp)
	align.Attachment0 = att1
	align.Responsiveness = 8
	align.MaxTorque = 8000

	hrp.AssemblyLinearVelocity = hrp.AssemblyLinearVelocity + hrp.CFrame.LookVector * 55

	swingConn = RunService.Heartbeat:Connect(function()
		if not hrp or not hrp.Parent then return end

		lastSwingVelocity = hrp.AssemblyLinearVelocity

		local dir = (anchor.Position - hrp.Position).Unit
		local vel = hrp.AssemblyLinearVelocity
		local radial = dir * vel:Dot(dir)
		local tangential = vel - radial
		hrp.AssemblyLinearVelocity = tangential + Vector3.new(0, -workspace.Gravity * 0.03, 0)
	end)
end

local function stopSwing()
	if not swinging then return end
	swinging = false
	if swingConn then swingConn:Disconnect() end
	if swingTrack and swingTrack.IsPlaying then swingTrack:Stop(0.2) end

	local _, hrp, hum = getChar()
	hum.PlatformStand = false

	if hrp and lastSwingVelocity.Magnitude > 5 then
		local boostDirection = lastSwingVelocity.Unit
		local finalDir = (boostDirection + hrp.CFrame.LookVector * 0.4).Unit
		hrp.AssemblyLinearVelocity = hrp.AssemblyLinearVelocity + finalDir * 65 + Vector3.new(0, 25, 0)
	end

	clearHandBeams()
	if rope then rope:Destroy() end
	if anchor then anchor:Destroy() end
	if align then align:Destroy() end

	lastSwingVelocity = Vector3.zero
end

------------------------------------------------
-- WEB ZIP
------------------------------------------------
btnZip.MouseButton1Down:Connect(function()
	stopSwing()
	local char, hrp = getChar()

	local zipAnchor = Instance.new("Part")
	zipAnchor.Anchored = true
	zipAnchor.CanCollide = false
	zipAnchor.Transparency = 1
	zipAnchor.Size = Vector3.new(0.2,0.2,0.2)
	zipAnchor.Position = hrp.Position + hrp.CFrame.LookVector * 35 + Vector3.new(0,12,0)
	zipAnchor.Parent = Workspace

	local att0 = Instance.new("Attachment", zipAnchor)
	local att1 = Instance.new("Attachment", hrp)

	local leftHand = char:FindFirstChild("LeftHand") or char:FindFirstChild("Left Arm")
	local rightHand = char:FindFirstChild("RightHand") or char:FindFirstChild("Right Arm")
	local extra = {}
	for _, hand in ipairs({leftHand, rightHand}) do
		if hand then
			local a1 = Instance.new("Attachment", hand)
			local hb = Instance.new("Beam")
			hb.Attachment0 = att0
			hb.Attachment1 = a1
			hb.Width0 = 0.09
			hb.Width1 = 0.09
			hb.Color = ColorSequence.new(Color3.new(1,1,1))
			hb.FaceCamera = true
			hb.LightEmission = 1
			hb.Parent = hand
			table.insert(extra, hb)
			table.insert(extra, a1)
		end
	end

	Debris:AddItem(zipAnchor, 0.35)
	Debris:AddItem(att1, 0.35)
	for _, v in ipairs(extra) do Debris:AddItem(v, 0.35) end

	local webSound = Instance.new("Sound")
	webSound.SoundId = "rbxassetid://9084017080"
	webSound.Volume = 1.8
	webSound.Parent = hrp
	webSound:Play()
	Debris:AddItem(webSound, 2)

	local bv = Instance.new("BodyVelocity", hrp)
	bv.MaxForce = Vector3.new(1e7,1e7,1e7)
	bv.Velocity = hrp.CFrame.LookVector * 120 + Vector3.new(0,60,0)
	Debris:AddItem(bv, 0.3)
end)

------------------------------------------------
-- WALL CLIMB
------------------------------------------------
local climbing = false
local moveDir = Vector3.zero
local vel, gyro

local function getWall(char, hrp)
	local params = RaycastParams.new()
	params.FilterDescendantsInstances = {char}
	params.FilterType = Enum.RaycastFilterType.Blacklist

	for _, dir in ipairs({
		hrp.CFrame.LookVector,
		-hrp.CFrame.LookVector,
		hrp.CFrame.RightVector,
		-hrp.CFrame.RightVector
	}) do
		local hit = Workspace:Raycast(hrp.Position, dir * 3, params)
		if hit then return hit end
	end
end

local function startClimb()
	if climbing then return end
	stopSwing()
	climbing = true
	btnWall.BackgroundColor3 = Color3.fromRGB(0,200,0)
	arrows.Visible = true
	btnSubir.Visible = true

	local char, hrp, hum = getChar()
	hum.PlatformStand = true

	if not climbTrack then loadAnimations(hum) end
	if climbTrack then climbTrack:Play(0.2) end

	vel = Instance.new("BodyVelocity", hrp)
	vel.MaxForce = Vector3.new(1e7,1e7,1e7)

	gyro = Instance.new("BodyGyro", hrp)
	gyro.MaxTorque = Vector3.new(1e7,1e7,1e7)
	gyro.P = 60000

	task.spawn(function()
		while climbing do
			task.wait(0.03)
			local hit = getWall(char, hrp)
			if hit then
				local face = -hit.Normal
				local rightVec = face:Cross(Vector3.new(0,1,0)).Unit
				local upVec = rightVec:Cross(face).Unit
				vel.Velocity = (rightVec * moveDir.X + upVec * moveDir.Y) * 18 + face * 30
				gyro.CFrame = CFrame.lookAt(hrp.Position, hrp.Position + face)
			else
				vel.Velocity = Vector3.zero
			end
		end
	end)
end

local function stopClimb()
	if not climbing then return end
	climbing = false
	arrows.Visible = false
	btnSubir.Visible = false
	btnWall.BackgroundColor3 = Color3.fromRGB(180,0,0)

	if climbTrack and climbTrack.IsPlaying then climbTrack:Stop(0.2) end

	local _, _, hum = getChar()
	hum.PlatformStand = false

	if vel then vel:Destroy() end
	if gyro then gyro:Destroy() end
	moveDir = Vector3.zero
end

------------------------------------------------
-- TETO
------------------------------------------------
local ceilingMode = false
local ceilingRope, ceilingAnchor, ceilingAtt0, ceilingAtt1
local ceilingConn

local function stopCeiling()
	if not ceilingMode then return end
	ceilingMode = false

	if ceilingConn then ceilingConn:Disconnect() end
	if climbTrack and climbTrack.IsPlaying then climbTrack:Stop(0.2) end

	local _, _, hum = getChar()
	hum.PlatformStand = false

	clearHandBeams()
	if ceilingRope then ceilingRope:Destroy() end
	if ceilingAnchor then ceilingAnchor:Destroy() end

	arrows.Visible = false
	btnTeto.BackgroundColor3 = Color3.fromRGB(140,0,200)
	moveDir = Vector3.zero
end

local function startCeiling()
	if ceilingMode then return end
	stopSwing()
	stopClimb()

	local char, hrp, hum = getChar()

	local params = RaycastParams.new()
	params.FilterDescendantsInstances = {char}
	params.FilterType = Enum.RaycastFilterType.Blacklist

	local hit = Workspace:Raycast(hrp.Position, Vector3.new(0, 60, 0), params)
	if not hit then return end

	ceilingMode = true
	btnTeto.BackgroundColor3 = Color3.fromRGB(0,200,0)
	arrows.Visible = true

	hum.PlatformStand = true

	if not climbTrack then loadAnimations(hum) end
	if climbTrack then climbTrack:Play(0.2) end

	local webSound = Instance.new("Sound")
	webSound.SoundId = "rbxassetid://9084017080"
	webSound.Volume = 1.8
	webSound.Parent = hrp
	webSound:Play()
	Debris:AddItem(webSound, 2)

	ceilingAnchor = Instance.new("Part", Workspace)
	ceilingAnchor.Anchored = true
	ceilingAnchor.Transparency = 1
	ceilingAnchor.CanCollide = false
	ceilingAnchor.Size = Vector3.new(0.3,0.3,0.3)
	ceilingAnchor.Position = hit.Position

	ceilingAtt0 = Instance.new("Attachment", ceilingAnchor)
	ceilingAtt1 = Instance.new("Attachment", hrp)

	ceilingRope = Instance.new("RopeConstraint", hrp)
	ceilingRope.Attachment0 = ceilingAtt0
	ceilingRope.Attachment1 = ceilingAtt1
	ceilingRope.Length = (hit.Position - hrp.Position).Magnitude
	ceilingRope.Thickness = 0.4
	ceilingRope.Visible = false

	createHandWebs(char, ceilingAtt0, 0)

	ceilingConn = RunService.Heartbeat:Connect(function()
		if not ceilingMode or not hrp or not hrp.Parent then return end

		if moveDir.Y > 0 then
			ceilingRope.Length = math.max(1, ceilingRope.Length - 0.65)
		elseif moveDir.Y < 0 then
			ceilingRope.Length = math.min(80, ceilingRope.Length + 0.65)
		end
	end)
end

------------------------------------------------
-- ESTILINGUE
------------------------------------------------
local slingActive = false
local slingAnchor
local slingBeams = {}

local function clearSlingBeams()
	for _, v in pairs(slingBeams) do
		if v then v:Destroy() end
	end
	slingBeams = {}
end

local function stopSling()
	if not slingActive then return end
	slingActive = false
	btnSling.BackgroundColor3 = Color3.fromRGB(255,140,0)
	clearSlingBeams()
	if slingAnchor then slingAnchor:Destroy() end
	slingAnchor = nil
end

local function startSling()
	stopSwing()
	stopClimb()
	stopCeiling()
	stopSling()

	local char, hrp = getChar()

	slingActive = true
	btnSling.BackgroundColor3 = Color3.fromRGB(0,220,0)

	slingAnchor = Instance.new("Part")
	slingAnchor.Anchored = true
	slingAnchor.CanCollide = false
	slingAnchor.Transparency = 1
	slingAnchor.Size = Vector3.new(0.3,0.3,0.3)
	slingAnchor.Position = hrp.Position + hrp.CFrame.LookVector * 28 + Vector3.new(0, 10, 0)
	slingAnchor.Parent = Workspace

	local att0 = Instance.new("Attachment", slingAnchor)

	local leftHand = char:FindFirstChild("LeftHand") or char:FindFirstChild("Left Arm")
	local rightHand = char:FindFirstChild("RightHand") or char:FindFirstChild("Right Arm")

	for _, hand in ipairs({leftHand, rightHand}) do
		if hand then
			local a1 = Instance.new("Attachment", hand)
			local hb = Instance.new("Beam")
			hb.Attachment0 = att0
			hb.Attachment1 = a1
			hb.Width0 = 0.11
			hb.Width1 = 0.11
			hb.Color = ColorSequence.new(Color3.new(1,1,1))
			hb.FaceCamera = true
			hb.LightEmission = 1
			hb.Parent = hand
			table.insert(slingBeams, hb)
			table.insert(slingBeams, a1)
		end
	end

	local webSound = Instance.new("Sound")
	webSound.SoundId = "rbxassetid://9084017080"
	webSound.Volume = 2
	webSound.Parent = hrp
	webSound:Play()
	Debris:AddItem(webSound, 2)

	hrp.AssemblyLinearVelocity = hrp.AssemblyLinearVelocity * 0.35 + (-hrp.CFrame.LookVector * 32 + Vector3.new(0, 8, 0))
end

local function launchSling()
	if not slingActive then return end

	local _, hrp = getChar()

	local bv = Instance.new("BodyVelocity", hrp)
	bv.MaxForce = Vector3.new(1e7, 1e7, 1e7)
	bv.Velocity = hrp.CFrame.LookVector * 165 + Vector3.new(0, 95, 0)
	Debris:AddItem(bv, 0.35)

	local webSound = Instance.new("Sound")
	webSound.SoundId = "rbxassetid://9084017080"
	webSound.Volume = 1.6
	webSound.Parent = hrp
	webSound:Play()
	Debris:AddItem(webSound, 2)

	stopSling()
end

btnSling.MouseButton1Click:Connect(function()
	if not slingActive then
		startSling()
	else
		launchSling()
	end
end)

------------------------------------------------
-- SUBIR
------------------------------------------------
btnSubir.MouseButton1Down:Connect(function()
	if not climbing then return end
	stopClimb()
	local _, hrp = getChar()
	local bv = Instance.new("BodyVelocity", hrp)
	bv.MaxForce = Vector3.new(1e7,1e7,1e7)
	bv.Velocity = Vector3.new(0,40,0) + hrp.CFrame.LookVector * 20
	Debris:AddItem(bv, 0.25)
end)

------------------------------------------------
-- SETAS
------------------------------------------------
local function bind(b, d)
	b.MouseButton1Down:Connect(function() moveDir = d end)
	b.MouseButton1Up:Connect(function() moveDir = Vector3.zero end)
	b.MouseLeave:Connect(function() moveDir = Vector3.zero end)
end

bind(up, Vector3.new(0,1,0))
bind(down, Vector3.new(0,-1,0))
bind(left, Vector3.new(-1,0,0))
bind(right, Vector3.new(1,0,0))

------------------------------------------------
-- BOTÕES + EQUIPAR
------------------------------------------------
btnSwing.MouseButton1Down:Connect(startSwing)
btnSwing.MouseButton1Up:Connect(stopSwing)
btnSwing.MouseLeave:Connect(stopSwing)

btnWall.MouseButton1Click:Connect(function()
	if climbing then stopClimb() else startClimb() end
end)

btnTeto.MouseButton1Click:Connect(function()
	if ceilingMode then
		stopCeiling()
	else
		startCeiling()
	end
end)

tool.Equipped:Connect(function()
	local char, hrp = getChar()

	task.spawn(function()
		playCocoonTransformation(char, hrp)
		screenGui.Enabled = true
		equipWristShooters(char)
	end)
end)

tool.Unequipped:Connect(function()
	screenGui.Enabled = false
	stopSwing()
	stopClimb()
	stopCeiling()
	stopSling()
	clearWristShooters()
	clearHandBeams()
end)

UserInputService.JumpRequest:Connect(function()
	if climbing then stopClimb() end
	if ceilingMode then stopCeiling() end
	if slingActive then stopSling() end
end)

player.CharacterAdded:Connect(function()
	stopSwing()
	stopClimb()
	stopCeiling()
	stopSling()
	clearHandBeams()
	clearWristShooters()
	swingTrack = nil
	climbTrack = nil
	swingHandCycle = 0
	screenGui.Enabled = false
end)

print("🕷️ SPIDER SYSTEM v23.4 — CASULO GROSSO + BALANÇO NORMAL")

Features & Information

Spider-Man Powers: Web Zip, Web Swing, SlingShot, Ceiling Web and Wall Crawl

Community Comments (4)

Good but need more improvement. especially in animation and Ui.

Replying to @JRSGamingOfficial
MoggerKentMoggerKentOct 4, 2026

@JRSGamingOfficial check my prof.

Chainsaww099Chainsaww099Sep 5, 2026

I dont like AI generated codes. But de swing is not cool. But the physics is Okay. Great physics of the web. Pls make a update

Replying to @Chainsaww099
MoggerKentMoggerKentOct 3, 2026

@Chainsaww099 new version is out, bro, check my profile.

More Scripts for Universal Scripts