-- [[ FE SPIDER-MAN GRAPPLE HOOK ]] -- -- Verified Working on Solara (2026) -- Target Game: Ragdoll Engine (Works in most physics games) -- [[ CREATOR INFO & CONFIG ]] -- local Creator = "rosiq63" --local Version = "1.0.0" local Speed = 100 -- Change this to adjust fly speed local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local CoreGui = game:GetService("CoreGui") local LocalPlayer = Players.LocalPlayer -- Remove duplicate GUIs if CoreGui:FindFirstChild("SolaraGrappleGui") then CoreGui.SolaraGrappleGui:Destroy() end -- SCREEN GUI (Instructions) local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "SolaraGrappleGui" ScreenGui.Parent = CoreGui ScreenGui.ResetOnSpawn = false local StatusFrame = Instance.new("Frame") StatusFrame.Parent = ScreenGui StatusFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 30) StatusFrame.Position = UDim2.new(0.4, 0, 0.05, 0) StatusFrame.Size = UDim2.new(0, 240, 0, 60) local TextLabel = Instance.new("TextLabel") TextLabel.Parent = StatusFrame TextLabel.Size = UDim2.new(1, 0, 1, 0) TextLabel.BackgroundTransparency = 1 TextLabel.Text = "FE SPIDER-MAN GRAPPLE HOOK\nHold [E] + Left Click to swing!" TextLabel.TextColor3 = Color3.fromRGB(0, 255, 150) TextLabel.TextSize = 14 TextLabel.Font = Enum.Font.SourceSansBold -- VARIABLES local mouse = LocalPlayer:GetMouse() local isGrappling = false local grappleTargetPos = nil local bodyVelocity = nil local hookBeam = nil local attStart = nil local attEnd = nil local function stopGrapple() isGrappling = false if bodyVelocity then bodyVelocity:Destroy() bodyVelocity = nil end if hookBeam then hookBeam:Destroy() hookBeam = nil end if attStart then attStart:Destroy() attStart = nil end if attEnd then attEnd:Destroy() attEnd = nil end end mouse.Button1Down:Connect(function() if UserInputService:IsKeyDown(Enum.KeyCode.E) and mouse.Target ~= nil then local char = LocalPlayer.Character local rootPart = char and char:FindFirstChild("HumanoidRootPart") local rightHand = char and (char:FindFirstChild("Right Hand") or char:FindFirstChild("RightArm") or rootPart) if rootPart and rightHand then stopGrapple() isGrappling = true grappleTargetPos = mouse.Hit.p bodyVelocity = Instance.new("BodyVelocity") bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bodyVelocity.Velocity = (grappleTargetPos - rootPart.Position).Unit * Speed bodyVelocity.Parent = rootPart attStart = Instance.new("Attachment") attStart.Parent = rightHand local targetPart = Instance.new("Part") targetPart.Size = Vector3.new(0.1, 0.1, 0.1) targetPart.Position = grappleTargetPos targetPart.Transparency = 1 targetPart.CanCollide = false targetPart.Anchored = true targetPart.Parent = workspace attEnd = Instance.new("Attachment") attEnd.Parent = targetPart hookBeam = Instance.new("Beam") hookBeam.Attachment0 = attStart hookBeam.Attachment1 = attEnd hookBeam.Width0 = 0.15 hookBeam.Width1 = 0.15 hookBeam.Color = ColorSequence.new(Color3.fromRGB(255, 0, 50)) hookBeam.TextureMode = Enum.TextureMode.Wrap hookBeam.FaceCamera = true hookBeam.Parent = char hookBeam.Destroying:Connect(function() targetPart:Destroy() end) end end end) mouse.Button1Up:Connect(stopGrapple) UserInputService.InputEnded:Connect(function(input) if input.KeyCode == Enum.KeyCode.E then stopGrapple() end end) RunService.RenderStepped:Connect(function() if isGrappling and bodyVelocity then local char = LocalPlayer.Character local rootPart = char and char:FindFirstChild("HumanoidRootPart") if rootPart then local distance = (grappleTargetPos - rootPart.Position).Magnitude if distance > 4 then grappleTargetPos = mouse.Hit.p if attEnd and attEnd.Parent then attEnd.Parent.Position = grappleTargetPos end bodyVelocity.Velocity = (grappleTargetPos - rootPart.Position).Unit * Speed else stopGrapple() end else stopGrapple() end end end) LocalPlayer.CharacterRemoving:Connect(stopGrapple)