local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local char = player.Character or player.CharacterAdded:Wait() local hum = char:WaitForChild("Humanoid") local root = char:WaitForChild("HumanoidRootPart") local animator = hum:WaitForChild("Animator") local animateScript = char:WaitForChild("Animate") if animateScript then animateScript.Disabled = true end for _, track in pairs(animator:GetPlayingAnimationTracks()) do track:Stop() end hum.WalkSpeed = 0 hum.JumpPower = 0 hum.AutoRotate = false local flingEnabled = true local function loadAnim(id) local a = Instance.new("Animation") a.AnimationId = id return animator:LoadAnimation(a) end local introTrack = loadAnim("rbxassetid://101421264927228") local walkTrack = loadAnim("rbxassetid://138992096476836") local idleTrack = loadAnim("rbxassetid://126098522622859") local jumpTrack = loadAnim("rbxassetid://88608327916498") local flingTrack = loadAnim("rbxassetid://137181141349617") UserInputService.InputBegan:Connect(function(input, gameProcessed) if not gameProcessed and input.KeyCode == Enum.KeyCode.T then flingEnabled = not flingEnabled end end) introTrack:Play() task.wait(5) introTrack:Stop() hum.WalkSpeed = 50 hum.JumpPower = 50 local isMoving = false local currentFlingTarget = nil local flingEndTime = 0 local preFlingPosition = nil local noclipConnection = nil local rayParams = RaycastParams.new() rayParams.FilterDescendantsInstances = {char} rayParams.FilterType = Enum.RaycastFilterType.Exclude local function enableNoclip(enable) if enable then if not noclipConnection then noclipConnection = RunService.Stepped:Connect(function() for _, part in pairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end) end else if noclipConnection then noclipConnection:Disconnect() noclipConnection = nil for _, part in pairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = true end end end end end root.Touched:Connect(function(hit) if not flingEnabled then return end if currentFlingTarget then return end local targetChar = hit.Parent local targetHum = targetChar:FindFirstChild("Humanoid") local targetRoot = targetChar:FindFirstChild("HumanoidRootPart") if targetHum and targetRoot and targetChar ~= char and targetHum.Health > 0 then preFlingPosition = root.Position currentFlingTarget = targetRoot flingEndTime = tick() + 2 end end) RunService.Heartbeat:Connect(function(dt) if root.Position.Y < -50 then root.AssemblyLinearVelocity = Vector3.zero root.Velocity = Vector3.zero if preFlingPosition then root.CFrame = CFrame.new(preFlingPosition + Vector3.new(0, 5, 0)) else root.CFrame = CFrame.new(0, 50, 0) end end if currentFlingTarget and not flingEnabled then currentFlingTarget = nil flingTrack:Stop() enableNoclip(false) root.AssemblyAngularVelocity = Vector3.zero root.AssemblyLinearVelocity = Vector3.zero if preFlingPosition then root.CFrame = CFrame.new(preFlingPosition + Vector3.new(0, 2, 0)) preFlingPosition = nil end end if currentFlingTarget then enableNoclip(true) if tick() >= flingEndTime or not currentFlingTarget.Parent then enableNoclip(false) currentFlingTarget = nil flingTrack:Stop() root.AssemblyAngularVelocity = Vector3.zero root.AssemblyLinearVelocity = Vector3.zero if preFlingPosition then root.CFrame = CFrame.new(preFlingPosition + Vector3.new(0, 2, 0)) preFlingPosition = nil end return end if not flingTrack.IsPlaying then walkTrack:Stop() idleTrack:Stop() jumpTrack:Stop() flingTrack:Play() end local chaoticRotation = CFrame.Angles(math.random()*10, math.random()*10, math.random()*10) root.CFrame = currentFlingTarget.CFrame * chaoticRotation root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.new(100000, 100000, 100000) else enableNoclip(false) if flingTrack.IsPlaying then flingTrack:Stop() end root.AssemblyAngularVelocity = Vector3.zero local moveDir = hum.MoveDirection local groundRay = Workspace:Raycast(root.Position, Vector3.new(0, -10, 0), rayParams) local onGround = false local targetY = root.Position.Y if groundRay then local dist = (root.Position - groundRay.Position).Magnitude if dist < (hum.HipHeight + 2) and not jumpTrack.IsPlaying then onGround = true targetY = groundRay.Position.Y + hum.HipHeight + (root.Size.Y / 2) end end if moveDir.Magnitude > 0 then local newPos = root.Position + (moveDir * 50 * dt) if onGround then root.CFrame = CFrame.lookAt(Vector3.new(newPos.X, targetY, newPos.Z), Vector3.new(newPos.X, targetY, newPos.Z) + moveDir) root.Velocity = Vector3.zero else root.CFrame = CFrame.lookAt(newPos, newPos + moveDir) end if not isMoving and onGround then isMoving = true idleTrack:Stop() walkTrack:Play() end else if onGround then root.CFrame = CFrame.new(root.Position.X, targetY, root.Position.Z) * root.CFrame.Rotation root.Velocity = Vector3.zero end if isMoving then isMoving = false walkTrack:Stop() idleTrack:Play() end if not idleTrack.IsPlaying and not walkTrack.IsPlaying and not jumpTrack.IsPlaying then idleTrack:Play() end end end end) RunService.RenderStepped:Connect(function() if walkTrack.IsPlaying then walkTrack:AdjustSpeed(10) end if idleTrack.IsPlaying then idleTrack:AdjustSpeed(2) end if flingTrack.IsPlaying then flingTrack:AdjustSpeed(10) end if jumpTrack.IsPlaying then jumpTrack:AdjustSpeed(5) end end) hum.StateChanged:Connect(function(_, new) if currentFlingTarget then return end if new == Enum.HumanoidStateType.Jumping or new == Enum.HumanoidStateType.Freefall then walkTrack:Stop() idleTrack:Stop() jumpTrack:Play() elseif new == Enum.HumanoidStateType.Landed then jumpTrack:Stop() if hum.MoveDirection.Magnitude > 0 then walkTrack:Play() else idleTrack:Play() end end end)