local Plugin = { ["PluginName"] = "Marble", ["PluginDescription"] = "Turn into a marble lmao", ["Commands"] = { ["marble"] = { ["ListName"] = "marble [size]", ["Description"] = "Turns you into a marble", ["Aliases"] = {}, ["Function"] = function(args, speaker) local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local Camera = workspace.CurrentCamera local SPEED_MULTIPLIER = 30 local JUMP_POWER = 60 local JUMP_GAP = 0.3 local character = game.Players.LocalPlayer.Character for i, v in ipairs(character:GetDescendants()) do if v:IsA("BasePart") then v.CanCollide = false end end local ball = character.HumanoidRootPart ball.Shape = Enum.PartType.Ball local size = tonumber(args[1]) ball.Size = Vector3.new(size, size, size) local humanoid = character:WaitForChild("Humanoid") local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Blacklist params.FilterDescendantsInstances = { character } local tc = RunService.RenderStepped:Connect(function(delta) ball.CanCollide = true humanoid.PlatformStand = true if UserInputService:GetFocusedTextBox() then return end if UserInputService:IsKeyDown("W") then ball.RotVelocity -= Camera.CFrame.RightVector * delta * SPEED_MULTIPLIER end if UserInputService:IsKeyDown("A") then ball.RotVelocity -= Camera.CFrame.LookVector * delta * SPEED_MULTIPLIER end if UserInputService:IsKeyDown("S") then ball.RotVelocity += Camera.CFrame.RightVector * delta * SPEED_MULTIPLIER end if UserInputService:IsKeyDown("D") then ball.RotVelocity += Camera.CFrame.LookVector * delta * SPEED_MULTIPLIER end --ball.RotVelocity = ball.RotVelocity - Vector3.new(0,ball.RotVelocity.Y/50,0) end) UserInputService.JumpRequest:Connect(function() local result = workspace:Raycast(ball.Position, Vector3.new(0, -((ball.Size.Y / 2) + JUMP_GAP), 0), params) if result then ball.Velocity = ball.Velocity + Vector3.new(0, JUMP_POWER, 0) end end) Camera.CameraSubject = ball humanoid.Died:Connect(function() tc:Disconnect() end) end, }, }, } return Plugin