The *og horror
Key Required

The *og horror

[UP] Just a baseplate.Little_pancakeLittle_pancake 1K views 5.1K executesUpdated Sep 27, 2026
Unrated
00
Lua Script•1771 lines (30524 chars)
--========================================================--
-- DISTORCER MAN HUB
-- ENGLISH EDITION + REALISTIC LAUGH ANIMATION
--========================================================--

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TextChatService = game:GetService("TextChatService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Debris = game:GetService("Debris")

local player = Players.LocalPlayer
local camera = workspace.CurrentCamera

--========================================================--
-- STATES
--========================================================--

local running = false
local isLaughing = false
local handCoveringFace = true
local isTotalGlitch = false
local isSprinting = false
local isAttacking = false

local character = player.Character or player.CharacterAdded:Wait()

local humanoid
local rootPart
local rootJoint
local neckJoint
local originalRootC0
local originalNeckC0

local rightArm
local leftArm
local rightLeg
local leftLeg

local fakeLimbs = {}

local hubGui
local introGui
local mainPanel
local keybindsGui

local wasRunningBeforeRespawn = false
local RENDER_NAME = "DISTORCER_MAN_RENDER"
local glitchSound = nil

--========================================================--
-- INTERPOLATION
--========================================================--

local currTorso = CFrame.new()
local currRArm = CFrame.new()
local currLArm = CFrame.new()
local currRLeg = CFrame.new()
local currLLeg = CFrame.new()
local currNeck = CFrame.new()

local NORMAL_SPEED = 10
local SPRINT_SPEED = 24

local isTrembling = false
local tremorStartTime = 0
local nextTremorTrigger = 0

--========================================================--
-- HELPERS
--========================================================--

local function safeDestroy(obj)
	if obj then
		pcall(function()
			obj:Destroy()
		end)
	end
end

local function cf(x, y, z, rx, ry, rz)
	return CFrame.new(x, y, z)
		* CFrame.Angles(
			math.rad(rx or 0),
			math.rad(ry or 0),
			math.rad(rz or 0)
		)
end

--========================================================--
-- R15 / LIMB SETUP
--========================================================--

local function bindR15Part(fakeLimb, partName, yOffset)
	local part = character:FindFirstChild(partName)
	if not part then return end

	for _, obj in ipairs(part:GetChildren()) do
		if obj:IsA("Motor6D")
			or obj:IsA("Weld")
			or obj:IsA("WeldConstraint") then
			obj:Destroy()
		end
	end

	part.CFrame = fakeLimb.CFrame * CFrame.new(0, yOffset, 0)

	local weld = Instance.new("WeldConstraint")
	weld.Part0 = fakeLimb
	weld.Part1 = part
	weld.Parent = fakeLimb
end

local function createFakeLimb(name, p1, p2, p3)
	local fake = Instance.new("Part")
	fake.Name = name
	fake.Size = Vector3.new(1, 2, 1)
	fake.Transparency = 1
	fake.CanCollide = false
	fake.CanTouch = false
	fake.CanQuery = false
	fake.Massless = true
	fake.CFrame = rootPart.CFrame
	fake.Parent = character

	table.insert(fakeLimbs, fake)

	if humanoid.RigType == Enum.HumanoidRigType.R15 then
		bindR15Part(fake, p1, 0.4)
		bindR15Part(fake, p2, -0.2)
		bindR15Part(fake, p3, -0.85)
	else
		bindR15Part(fake, p1, 0)
	end

	return fake
end

--========================================================--
-- REALISTIC LAUGH ANIMATION
--========================================================--

local function getLaughAnimation(time)
	-- Main laugh rhythm
	local laughCycle = math.sin(time * 8)
	local laughFast = math.sin(time * 17)
	local laughSoft = math.sin(time * 4)

	-- Stronger movement during the laugh
	local bounce = math.abs(math.sin(time * 8)) * 0.10

	-- Body naturally leans forward while laughing
	local torso =
		CFrame.new(
			0,
			bounce,
			0
		)
		* CFrame.Angles(
			math.rad(-8 + laughCycle * 5),
			math.rad(laughSoft * 2),
			math.rad(laughCycle * 3)
		)

	-- Hands move toward the mouth/chin instead of staying frozen
	local rightArm =
		cf(
			0.65,
			1.05 + math.abs(laughCycle) * 0.08,
			-0.55,
			-105 + laughCycle * 12,
			-18 + laughFast * 4,
			28 + laughCycle * 10
		)

	local leftArm =
		cf(
			-0.65,
			1.05 + math.abs(laughCycle) * 0.08,
			-0.55,
			-105 - laughCycle * 12,
			18 - laughFast * 4,
			-28 - laughCycle * 10
		)

	-- Slight leg movement makes the laugh feel less robotic
	local rightLeg =
		cf(
			0.5,
			-1.9 + math.abs(laughCycle) * 0.04,
			0,
			laughCycle * 4,
			0,
			0
		)

	local leftLeg =
		cf(
			-0.5,
			-1.9 + math.abs(laughCycle) * 0.04,
			0,
			-laughCycle * 4,
			0,
			0
		)

	-- Head movement follows the laugh rhythm
	local neck =
		CFrame.Angles(
			math.rad(-8 + math.abs(laughCycle) * 4),
			math.rad(laughSoft * 4),
			math.rad(laughCycle * 3)
		)

	return torso, rightArm, leftArm, rightLeg, leftLeg, neck
end

--========================================================--
-- NORMAL ANIMATION SYSTEM
--========================================================--

local function getAnimation(time, moving, state)
	local torsoTilt = CFrame.new()
	local rArm = cf(1.45, 0.1, 0)
	local lArm = cf(-1.45, 0.1, 0)
	local rLeg = cf(0.5, -1.9, 0)
	local lLeg = cf(-0.5, -1.9, 0)
	local neck = CFrame.new()

	local isJumping = state == Enum.HumanoidStateType.Jumping
	local isFreefall = state == Enum.HumanoidStateType.Freefall

	--====================================================--
	-- REALISTIC LAUGH
	--====================================================--

	if isLaughing then
		return getLaughAnimation(time)

	--====================================================--
	-- ATTACK
	--====================================================--

	elseif isAttacking then
		torsoTilt = CFrame.Angles(math.rad(30), 0, 0)

		rArm = cf(
			1.2,
			0.5,
			-0.5,
			-90,
			0,
			30
		)

		lArm = cf(
			-1.2,
			0.5,
			-0.5,
			-90,
			0,
			-30
		)

	--====================================================--
	-- JUMP
	--====================================================--

	elseif isJumping or isFreefall then
		torsoTilt = CFrame.Angles(math.rad(-10), 0, 0)

		rArm = cf(
			1.4,
			1.0,
			0,
			-110,
			0,
			20
		)

		lArm = cf(
			-1.4,
			1.0,
			0,
			-110,
			0,
			-20
		)

		rLeg = cf(
			0.5,
			-1.5,
			-0.3,
			20,
			0,
			0
		)

		lLeg = cf(
			-0.5,
			-1.5,
			0.3,
			-20,
			0,
			0
		)

	--====================================================--
	-- RUN
	--====================================================--

	elseif moving then
		if isSprinting then
			local runCycle = math.sin(time * 10)
			local bob = math.abs(math.sin(time * 10)) * 0.3

			torsoTilt =
				CFrame.new(0, bob, 0)
				* CFrame.Angles(
					0,
					0,
					math.rad(runCycle * 6)
				)

			rArm = cf(
				1.4,
				-0.3,
				0.6,
				45 - runCycle * 40,
				0,
				15
			)

			lArm = cf(
				-1.4,
				-0.3,
				0.6,
				45 + runCycle * 40,
				0,
				-15
			)

			local rLegY = runCycle > 0 and runCycle * 0.5 or 0
			local lLegY = runCycle < 0 and -runCycle * 0.5 or 0

			rLeg = cf(
				0.5,
				-1.9 + rLegY,
				-runCycle * 0.9,
				runCycle * 70,
				0,
				0
			)

			lLeg = cf(
				-0.5,
				-1.9 + lLegY,
				runCycle * 0.9,
				-runCycle * 70,
				0,
				0
			)

		else
			local walkCycle = math.sin(time * 6)

			torsoTilt =
				CFrame.Angles(
					math.rad(-3),
					0,
					math.rad(walkCycle * 3)
				)

			rArm = cf(
				1.4,
				0.1,
				0,
				-walkCycle * 25,
				0,
				10
			)

			lArm = cf(
				-1.4,
				0.1,
				0,
				walkCycle * 25,
				0,
				-10
			)

			local rLegY = walkCycle > 0 and walkCycle * 0.3 or 0
			local lLegY = walkCycle < 0 and -walkCycle * 0.3 or 0

			rLeg = cf(
				0.5,
				-1.9 + rLegY,
				-walkCycle * 0.4,
				walkCycle * 30,
				0,
				0
			)

			lLeg = cf(
				-0.5,
				-1.9 + lLegY,
				walkCycle * 0.4,
				-walkCycle * 30,
				0,
				0
			)
		end

	--====================================================--
	-- IDLE
	--====================================================--

	else
		local breathe = math.sin(time * 3) * 0.03

		torsoTilt =
			CFrame.new(
				0,
				breathe,
				0
			)

		if handCoveringFace then
			rArm = cf(
				0.25,
				1.35,
				-0.35,
				-135,
				25,
				-15
			)

			lArm = cf(
				-0.25,
				1.35,
				-0.35,
				-135,
				-25,
				15
			)
		else
			rArm = cf(
				1.3,
				-0.05,
				0,
				5,
				0,
				10
			)

			lArm = cf(
				-1.3,
				-0.05,
				0,
				5,
				0,
				-10
			)
		end
	end

	return torsoTilt, rArm, lArm, rLeg, lLeg, neck
end

--========================================================--
-- FLOATING CHAT TEXT
--========================================================--

local function showFloatingChatText(msg)
	local head = character and character:FindFirstChild("Head")
	if not head then return end

	local oldBg = head:FindFirstChild("FloatingChatText")

	if oldBg then
		oldBg:Destroy()
	end

	local bg = Instance.new("BillboardGui")
	bg.Name = "FloatingChatText"
	bg.Size = UDim2.new(0, 350, 0, 80)
	bg.StudsOffset = Vector3.new(0, 3.2, 0)
	bg.AlwaysOnTop = true
	bg.Parent = head

	local label = Instance.new("TextLabel")
	label.Size = UDim2.new(1, 0, 1, 0)
	label.BackgroundTransparency = 1
	label.TextColor3 = Color3.fromRGB(180, 0, 255)
	label.TextStrokeTransparency = 0.2
	label.Font = Enum.Font.GothamBold
	label.TextSize = 20
	label.TextWrapped = true
	label.Text = ""
	label.Parent = bg

	task.spawn(function()
		for i = 1, #msg do
			if not bg.Parent then
				break
			end

			label.Text = string.sub(msg, 1, i)

			local sfx = Instance.new("Sound")
			sfx.SoundId = "rbxassetid://6467449877"
			sfx.Volume = 0.6
			sfx.Pitch = math.random(90, 110) / 100
			sfx.Parent = head
			sfx:Play()

			Debris:AddItem(sfx, 1)

			task.wait(0.04)
		end

		task.wait(4)

		if bg.Parent then
			bg:Destroy()
		end
	end)

	task.spawn(function()
		while bg.Parent do
			label.Position = UDim2.new(
				0,
				math.random(-3, 3),
				0,
				math.random(-3, 3)
			)

			task.wait(0.04)
		end
	end)
end

--========================================================--
-- CHAT
--========================================================--

local function sendChatMessage(msg)
	showFloatingChatText(msg)

	if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
		local channel =
			TextChatService.TextChannels:FindFirstChild("RBXGeneral")

		if channel then
			channel:SendAsync(msg)
		end
	else
		local events =
			ReplicatedStorage:FindFirstChild(
				"DefaultChatSystemChatEvents"
			)

		if events then
			local remote =
				events:FindFirstChild("SayMessageRequest")

			if remote then
				remote:FireServer(msg, "All")
			end
		end
	end
end

player.Chatted:Connect(function(msg)
	showFloatingChatText(msg)
end)

local randomPhrases = {
	"DISTORCER MAN IS HERE.",
	"SYSTEM OVERLOAD - GLITCH ACTIVE.",
	"REALITY IS SHAKING APART.",
	"THE SYSTEM IS LOSING CONTROL.",
	"ERROR DETECTED.",
	"REALITY DISTORTION ACTIVE."
}

local function sendRandomChat()
	local phrase =
		randomPhrases[
			math.random(1, #randomPhrases)
		]

	sendChatMessage(phrase)
end

--========================================================--
-- REALISTIC LAUGH TRIGGER
--========================================================--

local function triggerLaugh()
	if not running or isLaughing then
		return
	end

	isLaughing = true

	-- Laugh sound
	local sfx = Instance.new("Sound")
	sfx.Name = "RealisticLaugh"
	sfx.SoundId = "rbxassetid://109263303377273"
	sfx.Volume = 2.5
	sfx.PlaybackSpeed = 1
	sfx.Parent = rootPart
	sfx:Play()

	local connection

	connection = sfx.Ended:Connect(function()
		isLaughing = false

		if connection then
			connection:Disconnect()
			connection = nil
		end
	end)

	-- Safety timeout
	task.delay(5, function()
		if isLaughing then
			isLaughing = false

			if connection then
				connection:Disconnect()
				connection = nil
			end
		end
	end)

	Debris:AddItem(sfx, 6)
end

--========================================================--
-- ATTACK
--========================================================--

local function triggerAttack()
	if not running or isAttacking then
		return
	end

	isAttacking = true

	local attackSound = Instance.new("Sound")
	attackSound.SoundId = "rbxassetid://9114221375"
	attackSound.Volume = 3
	attackSound.PlaybackSpeed = 0.75
	attackSound.Parent = rootPart
	attackSound:Play()

	Debris:AddItem(attackSound, 3)

	if humanoid and rootPart then
		local bv = Instance.new("BodyVelocity")
		bv.MaxForce = Vector3.new(50000, 0, 50000)
		bv.Velocity =
			rootPart.CFrame.LookVector * 65
		bv.Parent = rootPart

		Debris:AddItem(bv, 0.3)
	end

	task.delay(0.5, function()
		isAttacking = false
	end)
end

--========================================================--
-- KEYBINDS DISPLAY
--========================================================--

local function showKeybindsDisplay()
	safeDestroy(keybindsGui)

	keybindsGui =
		Instance.new(
			"ScreenGui",
			player:WaitForChild("PlayerGui")
		)

	keybindsGui.Name = "KeybindsDisplay"
	keybindsGui.ResetOnSpawn = false

	local container = Instance.new("Frame")
	container.Size = UDim2.new(0, 270, 0, 250)
	container.Position = UDim2.new(0.02, 0, 0.35, 0)
	container.BackgroundTransparency = 1
	container.Parent = keybindsGui

	local keys = {
		"[C] - Random Chat",
		"[E] - Realistic Laugh",
		"[F] - Toggle Face Cover",
		"[G] - Toggle Sprint",
		"[R] - Glitch Attack",
		"[T] - Toggle Total Glitch"
	}

	for i, text in ipairs(keys) do
		local label = Instance.new("TextLabel")
		label.Size = UDim2.new(1, 0, 0, 30)
		label.Position =
			UDim2.new(
				0,
				0,
				0,
				(i - 1) * 35
			)

		label.BackgroundTransparency = 1
		label.Text = ""
		label.TextColor3 =
			Color3.fromRGB(180, 0, 255)
		label.TextStrokeTransparency = 0.4
		label.Font = Enum.Font.GothamBold
		label.TextSize = 16
		label.TextXAlignment =
			Enum.TextXAlignment.Left
		label.Parent = container

		task.spawn(function()
			task.wait(i * 1.5)

			if not running then
				return
			end

			label.Text = text

			local conn

			conn =
				RunService.RenderStepped:Connect(function()
					if not running or not label.Parent then
						if conn then
							conn:Disconnect()
						end

						return
					end

					label.Position =
						UDim2.new(
							0,
							math.random(-2, 2),
							0,
							(i - 1) * 35
								+ math.random(-2, 2)
						)
				end)
		end)
	end
end

--========================================================--
-- INPUT
--========================================================--

UserInputService.InputBegan:Connect(function(
	input,
	gameProcessed
)
	if gameProcessed or not running then
		return
	end

	if input.KeyCode == Enum.KeyCode.C then

		sendRandomChat()

	elseif input.KeyCode == Enum.KeyCode.E then

		triggerLaugh()

	elseif input.KeyCode == Enum.KeyCode.F then

		handCoveringFace =
			not handCoveringFace

	elseif input.KeyCode == Enum.KeyCode.G then

		isSprinting = not isSprinting

		if humanoid then
			humanoid.WalkSpeed =
				isSprinting
				and SPRINT_SPEED
				or NORMAL_SPEED
		end

	elseif input.KeyCode == Enum.KeyCode.R then

		triggerAttack()

	elseif input.KeyCode == Enum.KeyCode.T then

		isTotalGlitch =
			not isTotalGlitch

		if isTotalGlitch then

			if not glitchSound and rootPart then
				glitchSound =
					Instance.new("Sound")

				glitchSound.SoundId =
					"rbxassetid://97749286438268"

				glitchSound.Volume = 3
				glitchSound.Looped = true
				glitchSound.Parent = rootPart
				glitchSound:Play()
			end

		else

			if glitchSound then
				glitchSound:Stop()
				glitchSound:Destroy()
				glitchSound = nil
			end
		end
	end
end)

--========================================================--
-- DRAGGABLE GUI
--========================================================--

local function makeDraggable(gui)
	local dragToggle = false
	local dragStart
	local startPos

	gui.InputBegan:Connect(function(input)
		if input.UserInputType ==
				Enum.UserInputType.MouseButton1
			or input.UserInputType ==
				Enum.UserInputType.Touch then

			dragToggle = true
			dragStart = input.Position
			startPos = gui.Position

			input.Changed:Connect(function()
				if input.UserInputState ==
					Enum.UserInputState.End then

					dragToggle = false
				end
			end)
		end
	end)

	UserInputService.InputChanged:Connect(function(input)
		if dragToggle and
			(
				input.UserInputType ==
					Enum.UserInputType.MouseMovement
				or
				input.UserInputType ==
					Enum.UserInputType.Touch
			) then

			local delta =
				input.Position - dragStart

			gui.Position =
				UDim2.new(
					startPos.X.Scale,
					startPos.X.Offset + delta.X,
					startPos.Y.Scale,
					startPos.Y.Offset + delta.Y
				)
		end
	end)
end

--========================================================--
-- START SYSTEM
--========================================================--

local function startAnimation()
	if running then
		return
	end

	if not character then
		character = player.Character
	end

	humanoid =
		character:FindFirstChildOfClass(
			"Humanoid"
		)

	rootPart =
		character:FindFirstChild(
			"HumanoidRootPart"
		)

	if not humanoid or not rootPart then
		return
	end

	pcall(function()
		RunService:UnbindFromRenderStep(
			RENDER_NAME
		)
	end)

	local head =
		character:FindFirstChild("Head")

	if head then
		camera.CameraSubject = head
	end

	local isR15 =
		humanoid.RigType ==
		Enum.HumanoidRigType.R15

	--====================================================--
	-- JOINTS
	--====================================================--

	if isR15 then

		rootJoint =
			character:FindFirstChild(
				"LowerTorso"
			)
			and character.LowerTorso:FindFirstChild(
				"Root"
			)
			or rootPart:FindFirstChild(
				"RootJoint"
			)

		local upperTorso =
			character:FindFirstChild(
				"UpperTorso"
			)

		if upperTorso then
			neckJoint =
				upperTorso:FindFirstChild(
					"Neck"
				)
		end

		rightArm =
			createFakeLimb(
				"RightArm",
				"RightUpperArm",
				"RightLowerArm",
				"RightHand"
			)

		leftArm =
			createFakeLimb(
				"LeftArm",
				"LeftUpperArm",
				"LeftLowerArm",
				"LeftHand"
			)

		rightLeg =
			createFakeLimb(
				"RightLeg",
				"RightUpperLeg",
				"RightLowerLeg",
				"RightFoot"
			)

		leftLeg =
			createFakeLimb(
				"LeftLeg",
				"LeftUpperLeg",
				"LeftLowerLeg",
				"LeftFoot"
			)

	else

		rootJoint =
			rootPart:FindFirstChild(
				"RootJoint"
			)

		local torsoPart =
			character:FindFirstChild(
				"Torso"
			)

		if torsoPart then
			neckJoint =
				torsoPart:FindFirstChild(
					"Neck"
				)

			for _, name in ipairs({
				"Right Shoulder",
				"Left Shoulder",
				"Right Hip",
				"Left Hip"
			}) do

				local joint =
					torsoPart:FindFirstChild(
						name
					)

				if joint then
					joint:Destroy()
				end
			end
		end

		rightArm =
			createFakeLimb(
				"RightArm",
				"Right Arm"
			)

		leftArm =
			createFakeLimb(
				"LeftArm",
				"Left Arm"
			)

		rightLeg =
			createFakeLimb(
				"RightLeg",
				"Right Leg"
			)

		leftLeg =
			createFakeLimb(
				"LeftLeg",
				"Left Leg"
			)
	end

	-- Save original joints
	if rootJoint then
		originalRootC0 = rootJoint.C0
	end

	if neckJoint then
		originalNeckC0 = neckJoint.C0
	end

	humanoid.WalkSpeed =
		isSprinting
		and SPRINT_SPEED
		or NORMAL_SPEED

	humanoid.AutoRotate = true

	currTorso = CFrame.new()

	currRArm =
		cf(1.45, 0.1, 0)

	currLArm =
		cf(-1.45, 0.1, 0)

	currRLeg =
		cf(0.5, -1.9, 0)

	currLLeg =
		cf(-0.5, -1.9, 0)

	currNeck = CFrame.new()

	running = true
	isTrembling = false

	nextTremorTrigger =
		os.clock()
		+ math.random(10, 30) / 10

	showKeybindsDisplay()

	--====================================================--
	-- RENDER LOOP
	--====================================================--

	RunService:BindToRenderStep(
		RENDER_NAME,
		Enum.RenderPriority.Character.Value + 1,
		function(dt)

			if not running
				or not humanoid
				or humanoid.Health <= 0
				or not rootPart then
				return
			end

			local now = os.clock()

			local moving =
				humanoid.MoveDirection.Magnitude
				> 0.05

			local state =
				humanoid:GetState()

			-- Random tremor
			if not isTrembling then

				if now >= nextTremorTrigger then
					isTrembling = true
					tremorStartTime = now
				end

			else

				if now - tremorStartTime >= 0.4 then
					isTrembling = false

					nextTremorTrigger =
						now
						+ math.random(10, 30) / 10
				end
			end

			local torsoTilt
			local targetRight
			local targetLeft
			local targetRLeg
			local targetLLeg
			local targetNeck

			torsoTilt,
			targetRight,
			targetLeft,
			targetRLeg,
			targetLLeg,
			targetNeck =
				getAnimation(
					now,
					moving,
					state
				)

			-- Laugh animation gets a smoother blend
			local animSmooth =
				isLaughing
				and 0.18
				or 0.25

			currTorso =
				currTorso:Lerp(
					torsoTilt,
					animSmooth
				)

			currRArm =
				currRArm:Lerp(
					targetRight,
					animSmooth
				)

			currLArm =
				currLArm:Lerp(
					targetLeft,
					animSmooth
				)

			currRLeg =
				currRLeg:Lerp(
					targetRLeg,
					animSmooth
				)

			currLLeg =
				currLLeg:Lerp(
					targetLLeg,
					animSmooth
				)

			currNeck =
				currNeck:Lerp(
					targetNeck,
					animSmooth
				)

			-- Apply torso
			if rootJoint
				and originalRootC0 then

				rootJoint.C0 =
					originalRootC0
					* currTorso
			end

			-- Apply head movement during laugh
			if neckJoint
				and originalNeckC0 then

				neckJoint.C0 =
					originalNeckC0
					* currNeck
			end

			local bodyBase =
				rootPart.CFrame
				* currTorso

			local tremorRA =
				Vector3.new()

			local tremorLA =
				Vector3.new()

			local tremorRL =
				Vector3.new()

			local tremorLL =
				Vector3.new()

			--================================================--
			-- TOTAL GLITCH
			--================================================--

			if isTotalGlitch then

				local glitchX =
					math.random(-40, 40) / 10

				local glitchY =
					math.random(-30, 30) / 10

				local glitchZ =
					math.random(-40, 40) / 10

				tremorRA =
					Vector3.new(
						glitchX,
						glitchY,
						glitchZ
					)

				tremorLA =
					Vector3.new(
						-glitchX,
						glitchY,
						-glitchZ
					)

				tremorRL =
					Vector3.new(
						glitchX,
						-glitchY,
						glitchZ
					)

				tremorLL =
					Vector3.new(
						-glitchX,
						-glitchY,
						-glitchZ
					)

			--================================================--
			-- RANDOM TREMOR
			--================================================--

			elseif isTrembling then

				local t = now * 25
				local amp = 0.4

				tremorRA =
					Vector3.new(
						math.noise(t, 1, 1) * amp,
						math.noise(1, t, 1) * amp,
						math.noise(1, 1, t) * amp
					)

				tremorLA =
					Vector3.new(
						math.noise(t, 2, 2) * amp,
						math.noise(2, t, 2) * amp,
						math.noise(2, 2, t) * amp
					)

				tremorRL =
					Vector3.new(
						math.noise(t, 3, 3) * amp,
						math.noise(3, t, 3) * amp,
						math.noise(3, 3, t) * amp
					)

				tremorLL =
					Vector3.new(
						math.noise(t, 4, 4) * amp,
						math.noise(4, t, 4) * amp,
						math.noise(4, 4, t) * amp
					)
			end

			--================================================--
			-- APPLY LIMBS
			--================================================--

			if rightArm then
				rightArm.CFrame =
					bodyBase
					* currRArm
					+ tremorRA

				rightArm.AssemblyLinearVelocity =
					Vector3.zero
			end

			if leftArm then
				leftArm.CFrame =
					bodyBase
					* currLArm
					+ tremorLA

				leftArm.AssemblyLinearVelocity =
					Vector3.zero
			end

			if rightLeg then
				rightLeg.CFrame =
					bodyBase
					* currRLeg
					+ tremorRL

				rightLeg.AssemblyLinearVelocity =
					Vector3.zero
			end

			if leftLeg then
				leftLeg.CFrame =
					bodyBase
					* currLLeg
					+ tremorLL

				leftLeg.AssemblyLinearVelocity =
					Vector3.zero
			end
		end
	)
end

--========================================================--
-- STOP SYSTEM
--========================================================--

local function stopAnimation()
	wasRunningBeforeRespawn = running

	running = false
	isLaughing = false
	isTotalGlitch = false
	isSprinting = false
	isAttacking = false

	safeDestroy(keybindsGui)

	if glitchSound then
		glitchSound:Stop()
		glitchSound:Destroy()
		glitchSound = nil
	end

	pcall(function()
		RunService:UnbindFromRenderStep(
			RENDER_NAME
		)
	end)

	if rootJoint
		and originalRootC0 then

		rootJoint.C0 =
			originalRootC0
	end

	if neckJoint
		and originalNeckC0 then

		neckJoint.C0 =
			originalNeckC0
	end

	for _, obj in ipairs(fakeLimbs) do
		safeDestroy(obj)
	end

	fakeLimbs = {}

	if humanoid then
		humanoid.AutoRotate = true
		humanoid.WalkSpeed = 16
		camera.CameraSubject = humanoid
	end
end

--========================================================--
-- HUB UI
--========================================================--

local function createHub()
	safeDestroy(hubGui)

	hubGui =
		Instance.new(
			"ScreenGui",
			player:WaitForChild("PlayerGui")
		)

	hubGui.Name = "DistorcerManHub"
	hubGui.ResetOnSpawn = false

	local openBtn =
		Instance.new("TextButton")

	openBtn.Size =
		UDim2.new(0, 44, 0, 44)

	openBtn.Position =
		UDim2.new(0, 18, 0, 18)

	openBtn.BackgroundColor3 =
		Color3.fromRGB(20, 20, 25)

	openBtn.Text = "D"

	openBtn.TextColor3 =
		Color3.fromRGB(180, 0, 255)

	openBtn.TextScaled = true
	openBtn.Font = Enum.Font.GothamBlack
	openBtn.Parent = hubGui

	Instance.new("UICorner", openBtn)
		.CornerRadius =
		UDim.new(0, 12)

	local openStroke =
		Instance.new("UIStroke", openBtn)

	openStroke.Thickness = 2

	makeDraggable(openBtn)

	-- Main panel
	mainPanel =
		Instance.new("Frame")

	mainPanel.Size =
		UDim2.new(0, 340, 0, 130)

	mainPanel.Position =
		UDim2.new(
			0.5,
			-170,
			0.5,
			-65
		)

	mainPanel.BackgroundColor3 =
		Color3.fromRGB(15, 15, 20)

	mainPanel.BackgroundTransparency = 0.08
	mainPanel.Parent = hubGui

	Instance.new("UICorner", mainPanel)
		.CornerRadius =
		UDim.new(0, 15)

	local panelStroke =
		Instance.new("UIStroke", mainPanel)

	panelStroke.Thickness = 2.5

	makeDraggable(mainPanel)

	-- Title
	local title =
		Instance.new("TextLabel")

	title.Size =
		UDim2.new(1, -20, 0, 32)

	title.Position =
		UDim2.new(0, 10, 0, 7)

	title.BackgroundTransparency = 1

	title.Text =
		"DISTORCER MAN"

	title.TextColor3 =
		Color3.fromRGB(180, 0, 255)

	title.TextScaled = true
	title.Font = Enum.Font.GothamBlack
	title.Parent = mainPanel

	-- Start
	local startBtn =
		Instance.new("TextButton")

	startBtn.Size =
		UDim2.new(0.5, -13, 0, 36)

	startBtn.Position =
		UDim2.new(0, 10, 0, 55)

	startBtn.BackgroundColor3 =
		Color3.fromRGB(0, 140, 70)

	startBtn.Text = "START"
	startBtn.TextColor3 =
		Color3.new(1, 1, 1)

	startBtn.Font =
		Enum.Font.GothamBold

	startBtn.Parent = mainPanel

	Instance.new("UICorner", startBtn)
		.CornerRadius =
		UDim.new(0, 7)

	startBtn.Activated:Connect(
		startAnimation
	)

	-- Stop
	local stopBtn =
		Instance.new("TextButton")

	stopBtn.Size =
		UDim2.new(0.5, -13, 0, 36)

	stopBtn.Position =
		UDim2.new(0.5, 3, 0, 55)

	stopBtn.BackgroundColor3 =
		Color3.fromRGB(150, 40, 40)

	stopBtn.Text = "STOP"
	stopBtn.TextColor3 =
		Color3.new(1, 1, 1)

	stopBtn.Font =
		Enum.Font.GothamBold

	stopBtn.Parent = mainPanel

	Instance.new("UICorner", stopBtn)
		.CornerRadius =
		UDim.new(0, 7)

	stopBtn.Activated:Connect(
		stopAnimation
	)

	local panelOpen = true

	openBtn.Activated:Connect(function()
		panelOpen = not panelOpen
		mainPanel.Visible = panelOpen
	end)
end

--========================================================--
-- ENGLISH INTRO
--========================================================--

local function createIntro()
	safeDestroy(introGui)

	introGui =
		Instance.new(
			"ScreenGui",
			player:WaitForChild("PlayerGui")
		)

	introGui.Name = "DistorcerManIntro"
	introGui.ResetOnSpawn = false

	local frame =
		Instance.new("Frame")

	frame.Size =
		UDim2.new(0, 420, 0, 280)

	frame.Position =
		UDim2.new(
			0.5,
			-210,
			0.5,
			-140
		)

	frame.BackgroundColor3 =
		Color3.fromRGB(12, 12, 16)

	frame.BackgroundTransparency = 0.05
	frame.Parent = introGui

	Instance.new("UICorner", frame)
		.CornerRadius =
		UDim.new(0, 15)

	local stroke =
		Instance.new("UIStroke", frame)

	stroke.Color =
		Color3.fromRGB(180, 0, 255)

	stroke.Thickness = 2.5

	local title =
		Instance.new("TextLabel")

	title.Size =
		UDim2.new(1, -20, 0, 40)

	title.Position =
		UDim2.new(0, 10, 0, 12)

	title.BackgroundTransparency = 1

	title.Text =
		"IMMERSION WARNING"

	title.TextColor3 =
		Color3.fromRGB(180, 0, 255)

	title.Font =
		Enum.Font.GothamBlack

	title.TextSize = 20
	title.Parent = frame

	local desc =
		Instance.new("TextLabel")

	desc.Size =
		UDim2.new(1, -30, 0, 130)

	desc.Position =
		UDim2.new(0, 15, 0, 60)

	desc.BackgroundTransparency = 1

	desc.Text =
		"To fully enjoy the DISTORCER MAN experience, it is recommended that you use a:\n\n• Completely black and spooky avatar\n\nThis helps the hidden limbs and visual glitch effects look cleaner."

	desc.TextColor3 =
		Color3.fromRGB(220, 220, 220)

	desc.Font =
		Enum.Font.Gotham

	desc.TextSize = 14
	desc.TextWrapped = true
	desc.TextXAlignment =
		Enum.TextXAlignment.Left

	desc.Parent = frame

	local skipBtn =
		Instance.new("TextButton")

	skipBtn.Size =
		UDim2.new(1, -30, 0, 42)

	skipBtn.Position =
		UDim2.new(
			0,
			15,
			1,
			-55
		)

	skipBtn.BackgroundColor3 =
		Color3.fromRGB(180, 0, 255)

	skipBtn.Text =
		"SKIP / CONTINUE"

	skipBtn.TextColor3 =
		Color3.new(1, 1, 1)

	skipBtn.Font =
		Enum.Font.GothamBold

	skipBtn.TextSize = 16
	skipBtn.Parent = frame

	Instance.new("UICorner", skipBtn)
		.CornerRadius =
		UDim.new(0, 8)

	skipBtn.Activated:Connect(function()
		introGui:Destroy()
		createHub()
	end)
end

--========================================================--
-- RESPAWN
--========================================================--

player.CharacterAdded:Connect(function(newCharacter)

	local restart =
		wasRunningBeforeRespawn

	if running then
		stopAnimation()
	end

	character = newCharacter

	task.wait(1)

	if restart then
		startAnimation()
	end
end)

--========================================================--
-- INITIALIZE
--========================================================--

createIntro()

print(
	"[DISTORCER MAN] Loaded successfully."
)

--========================================================--
-- AUTO CHAT COMMAND
--========================================================--

task.spawn(function()

	task.wait(1.5)

	sendChatMessage(
		"-gh 95541515822773 16751252009"
	)

	print(
		"[DISTORCER MAN] Command sent."
	)
end)

Features & Information

A creature only that, maybe ot has 5 attacks

Community Comments (1)

skiddityboyyyskiddityboyyySep 30, 2026

vibe code slop and extremely inefficient limb reanim *just use gelatek dude*

More Scripts for [UP] Just a baseplate.