universal gojo npc killer script
Key RequiredUniversal

universal gojo npc killer script

Universal ScriptEatkidmasterEatkidmaster 1.2K views 558 executesUpdated Oct 5, 2026
Unrated
00
Lua Script•1346 lines (18783 chars)
--========================================================--
-- GOJO NPC KILLER
-- R6 + R15 | MOBILE + PC
--
-- Blue            = 3s cooldown
-- Red             = 5s cooldown + red explosion
-- Hollow Purple   = 10s cooldown + BIG
-- Limitless Fly   = 5s cooldown / INFINITE FLIGHT
-- Teleport        = 3s cooldown
--
-- LIMITLESS FLY:
-- • Infinite duration
-- • Control with WASD / mobile joystick
-- • Camera controls direction
-- • Unequip tool to stop flying
-- NPC ONLY
--========================================================--

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

local Player = Players.LocalPlayer

--========================================================--
-- CHARACTER
--========================================================--

local Character
local Humanoid
local Root

local function SetupCharacter(char)

	Character = char
	Humanoid = char:WaitForChild("Humanoid")
	Root = char:WaitForChild("HumanoidRootPart")

end

SetupCharacter(
	Player.Character or Player.CharacterAdded:Wait()
)

--========================================================--
-- SETTINGS
--========================================================--

local BLUE_DAMAGE = 35
local RED_DAMAGE = 50
local PURPLE_DAMAGE = 500

local NPC_PUSH = 35
local NPC_FREEZE_TIME = 2.5

local BLUE_COOLDOWN = 3
local RED_COOLDOWN = 5
local PURPLE_COOLDOWN = 10
local FLY_COOLDOWN = 5
local TELEPORT_COOLDOWN = 3

local FLY_SPEED = 75

local TELEPORT_DISTANCE = 35

local BLUE_SPEED = 50
local RED_SPEED = 135
local PURPLE_SPEED = 180

local BLUE_SIZE = 1.5
local RED_SIZE = 1.8
local PURPLE_SIZE = 5

--========================================================--
-- SOUNDS
--========================================================--

local SOUND = {
	BlueCharge = "rbxassetid://911882310",
	BlueFire = "rbxassetid://12222216",

	RedCharge = "rbxassetid://911882310",
	RedFire = "rbxassetid://12222216",

	PurpleCharge = "rbxassetid://911882310",
	PurpleFire = "rbxassetid://12222216",

	Impact = "rbxassetid://12222152",

	Teleport = "rbxassetid://5568266006",

	FlyStart = "rbxassetid://911882310",
	FlyEnd = "rbxassetid://12222152",
}

--========================================================--
-- COOLDOWNS
--========================================================--

local Cooldown = {
	Blue = false,
	Red = false,
	Purple = false,
	Fly = false,
	Teleport = false
}

local function TryCooldown(name, time)

	if Cooldown[name] then
		return false
	end

	Cooldown[name] = true

	task.delay(time, function()
		Cooldown[name] = false
	end)

	return true
end

--========================================================--
-- SOUND
--========================================================--

local function PlaySound(id, volume, speed)

	if not Root then
		return
	end

	local sound = Instance.new("Sound")

	sound.SoundId = id
	sound.Volume = volume or 1
	sound.PlaybackSpeed = speed or 1

	sound.RollOffMaxDistance = 120
	sound.RollOffMinDistance = 5

	sound.Parent = Root

	sound:Play()

	Debris:AddItem(sound, 10)

end

--========================================================--
-- NPC CHECK
--========================================================--

local function GetNPC(part)

	if not part then
		return nil
	end

	local model =
		part:FindFirstAncestorOfClass("Model")

	if not model then
		return nil
	end

	if model == Character then
		return nil
	end

	-- NEVER target players
	if Players:GetPlayerFromCharacter(model) then
		return nil
	end

	local humanoid =
		model:FindFirstChildOfClass("Humanoid")

	if not humanoid then
		return nil
	end

	if humanoid.Health <= 0 then
		return nil
	end

	return model
end

--========================================================--
-- RED EXPLOSION
--========================================================--

local function RedExplosion(position)

	local part = Instance.new("Part")

	part.Name = "RedExplosion"
	part.Shape = Enum.PartType.Ball
	part.Material = Enum.Material.Neon

	part.Color = Color3.fromRGB(
		255,
		20,
		20
	)

	part.Size = Vector3.new(2, 2, 2)
	part.Transparency = 0.1

	part.Anchored = true
	part.CanCollide = false
	part.CanTouch = false
	part.CanQuery = false

	part.Position = position
	part.Parent = workspace

	local light = Instance.new("PointLight")

	light.Color = Color3.fromRGB(
		255,
		0,
		0
	)

	light.Brightness = 15
	light.Range = 30
	light.Parent = part

	local tween = TweenService:Create(
		part,
		TweenInfo.new(
			0.4,
			Enum.EasingStyle.Quad,
			Enum.EasingDirection.Out
		),
		{
			Size = Vector3.new(14, 14, 14),
			Transparency = 1
		}
	)

	tween:Play()

	PlaySound(
		SOUND.Impact,
		1.5,
		0.8
	)

	Debris:AddItem(
		part,
		0.5
	)

end

--========================================================--
-- PURPLE EXPLOSION
--========================================================--

local function PurpleExplosion(position)

	local part = Instance.new("Part")

	part.Name = "HollowPurpleExplosion"

	part.Shape = Enum.PartType.Ball
	part.Material = Enum.Material.Neon

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

	part.Size = Vector3.new(5, 5, 5)
	part.Transparency = 0.1

	part.Anchored = true
	part.CanCollide = false
	part.CanTouch = false
	part.CanQuery = false

	part.Position = position
	part.Parent = workspace

	local light = Instance.new("PointLight")

	light.Color = Color3.fromRGB(
		190,
		50,
		255
	)

	light.Brightness = 30
	light.Range = 50
	light.Parent = part

	local tween = TweenService:Create(
		part,
		TweenInfo.new(
			0.7,
			Enum.EasingStyle.Exponential,
			Enum.EasingDirection.Out
		),
		{
			Size = Vector3.new(30, 30, 30),
			Transparency = 1
		}
	)

	tween:Play()

	Debris:AddItem(
		part,
		0.8
	)

end

--========================================================--
-- NPC HIT
--========================================================--

local function DamageNPC(
	npc,
	damage,
	direction,
	ability
)

	local humanoid =
		npc:FindFirstChildOfClass("Humanoid")

	local npcRoot =
		npc:FindFirstChild("HumanoidRootPart")

	if not humanoid then
		return
	end

	if humanoid.Health <= 0 then
		return
	end

	-- NEVER damage players
	if Players:GetPlayerFromCharacter(npc) then
		return
	end

	-- DAMAGE
	humanoid:TakeDamage(damage)

	-- RED EFFECT
	if ability == "Red" and npcRoot then
		RedExplosion(npcRoot.Position)
	end

	-- PURPLE EFFECT
	if ability == "Purple" and npcRoot then
		PurpleExplosion(npcRoot.Position)
	end

	-- PUSH
	if npcRoot and direction then

		local push =
			Instance.new("BodyVelocity")

		push.MaxForce =
			Vector3.new(
				100000,
				100000,
				100000
			)

		push.Velocity =
			direction.Unit *
			NPC_PUSH
			+
			Vector3.new(
				0,
				8,
				0
			)

		push.Parent = npcRoot

		Debris:AddItem(
			push,
			0.15
		)

	end

	-- FREEZE
	local oldWalk =
		humanoid.WalkSpeed

	local oldJump =
		humanoid.JumpPower

	local oldRotate =
		humanoid.AutoRotate

	humanoid.WalkSpeed = 0
	humanoid.JumpPower = 0
	humanoid.AutoRotate = false

	task.delay(
		NPC_FREEZE_TIME,
		function()

			if humanoid
				and humanoid.Parent
				and humanoid.Health > 0
			then

				humanoid.WalkSpeed =
					oldWalk

				humanoid.JumpPower =
					oldJump

				humanoid.AutoRotate =
					oldRotate

			end

		end
	)

end

--========================================================--
-- CREATE PROJECTILE
--========================================================--

local function CreateOrb(
	color,
	size
)

	local orb =
		Instance.new("Part")

	orb.Name = "GojoProjectile"

	orb.Shape =
		Enum.PartType.Ball

	orb.Material =
		Enum.Material.Neon

	orb.Color =
		color

	orb.Size =
		Vector3.new(
			size,
			size,
			size
		)

	orb.CanCollide = false
	orb.CanTouch = true
	orb.CanQuery = false

	orb.CastShadow = false

	orb.Parent = workspace

	local light =
		Instance.new("PointLight")

	light.Color =
		color

	light.Brightness =
		size * 7

	light.Range =
		size * 8

	light.Parent =
		orb

	return orb
end

--========================================================--
-- SHOOT
--========================================================--

local function Shoot(
	color,
	size,
	speed,
	lifetime,
	damage,
	fireSound,
	ability
)

	if not Root then
		return
	end

	local camera =
		workspace.CurrentCamera

	if not camera then
		return
	end

	local direction =
		camera.CFrame.LookVector

	local orb =
		CreateOrb(
			color,
			size
		)

	orb.CFrame =
		CFrame.new(
			Root.Position
			+
			direction * 4
			+
			Vector3.new(
				0,
				1,
				0
			)
		)

	local velocity =
		Instance.new("BodyVelocity")

	velocity.MaxForce =
		Vector3.new(
			math.huge,
			math.huge,
			math.huge
		)

	velocity.Velocity =
		direction * speed

	velocity.Parent =
		orb

	PlaySound(
		fireSound,
		1.5,
		1
	)

	local hit = false
	local connection

	connection =
		orb.Touched:Connect(
			function(part)

				if hit then
					return
				end

				local npc =
					GetNPC(part)

				if npc then

					hit = true

					DamageNPC(
						npc,
						damage,
						direction,
						ability
					)

					if connection then
						connection:Disconnect()
					end

					orb:Destroy()

				end

			end
		)

	Debris:AddItem(
		orb,
		lifetime
	)

	task.delay(
		lifetime,
		function()

			if connection then
				connection:Disconnect()
			end

		end
	)

end

--========================================================--
-- BLUE
--========================================================--

local function UseBlue()

	if not TryCooldown(
		"Blue",
		BLUE_COOLDOWN
	) then
		return
	end

	PlaySound(
		SOUND.BlueCharge,
		1.2,
		1.15
	)

	task.wait(0.15)

	Shoot(
		Color3.fromRGB(
			0,
			170,
			255
		),

		BLUE_SIZE,

		BLUE_SPEED,

		3,

		BLUE_DAMAGE,

		SOUND.BlueFire,

		"Blue"
	)

end

--========================================================--
-- RED
--========================================================--

local function UseRed()

	if not TryCooldown(
		"Red",
		RED_COOLDOWN
	) then
		return
	end

	PlaySound(
		SOUND.RedCharge,
		1.3,
		0.85
	)

	task.wait(0.15)

	Shoot(
		Color3.fromRGB(
			255,
			40,
			40
		),

		RED_SIZE,

		RED_SPEED,

		3,

		RED_DAMAGE,

		SOUND.RedFire,

		"Red"
	)

end

--========================================================--
-- HOLLOW PURPLE
--========================================================--

local function UsePurple()

	if not TryCooldown(
		"Purple",
		PURPLE_COOLDOWN
	) then
		return
	end

	PlaySound(
		SOUND.PurpleCharge,
		1.5,
		0.7
	)

	local charge =
		Instance.new("Part")

	charge.Shape =
		Enum.PartType.Ball

	charge.Material =
		Enum.Material.Neon

	charge.Color =
		Color3.fromRGB(
			170,
			0,
			255
		)

	charge.Size =
		Vector3.new(
			2,
			2,
			2
		)

	charge.Anchored = true
	charge.CanCollide = false
	charge.CanTouch = false

	charge.CFrame =
		Root.CFrame *
		CFrame.new(
			0,
			1,
			-5
		)

	charge.Parent =
		workspace

	local light =
		Instance.new("PointLight")

	light.Color =
		Color3.fromRGB(
			190,
			50,
			255
		)

	light.Brightness = 25
	light.Range = 45

	light.Parent =
		charge

	local tween =
		TweenService:Create(
			charge,
			TweenInfo.new(
				0.7,
				Enum.EasingStyle.Quad,
				Enum.EasingDirection.Out
			),
			{
				Size =
					Vector3.new(
						PURPLE_SIZE,
						PURPLE_SIZE,
						PURPLE_SIZE
					)
			}
		)

	tween:Play()

	task.wait(0.7)

	if charge then
		charge:Destroy()
	end

	Shoot(
		Color3.fromRGB(
			170,
			0,
			255
		),

		PURPLE_SIZE,

		PURPLE_SPEED,

		4,

		PURPLE_DAMAGE,

		SOUND.PurpleFire,

		"Purple"
	)

end

--========================================================--
-- LIMITLESS FLY
--========================================================--

local Flying = false
local FlyConnection
local FlyVelocity
local FlyTool

local function StopFly()

	if not Flying then
		return
	end

	Flying = false

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

	if FlyVelocity then
		FlyVelocity:Destroy()
		FlyVelocity = nil
	end

	if Humanoid then
		Humanoid.AutoRotate = true
	end

	PlaySound(
		SOUND.FlyEnd,
		1.2,
		1.2
	)

end

local function StartFly()

	if Flying then
		return
	end

	if not TryCooldown(
		"Fly",
		FLY_COOLDOWN
	) then
		return
	end

	if not Root or not Humanoid then
		return
	end

	Flying = true

	Humanoid.AutoRotate = false

	PlaySound(
		SOUND.FlyStart,
		1.5,
		0.8
	)

	FlyVelocity =
		Instance.new("BodyVelocity")

	FlyVelocity.MaxForce =
		Vector3.new(
			math.huge,
			math.huge,
			math.huge
		)

	FlyVelocity.Velocity =
		Vector3.zero

	FlyVelocity.Parent =
		Root

	FlyConnection =
		RunService.RenderStepped:Connect(
			function()

				if not Flying then
					return
				end

				if not Root
					or not Root.Parent
					or not Humanoid
					or Humanoid.Health <= 0
				then

					StopFly()
					return

				end

				local camera =
					workspace.CurrentCamera

				if not camera then
					return
				end

				-- Get normal player movement
				local moveDirection =
					Humanoid.MoveDirection

				-- Camera direction
				local cameraLook =
					camera.CFrame.LookVector

				local cameraRight =
					camera.CFrame.RightVector

				-- Convert normal movement into
				-- camera-relative 3D flight movement.
				local forwardAmount =
					moveDirection:Dot(
						Vector3.new(
							cameraLook.X,
							0,
							cameraLook.Z
						).Unit
					)

				local rightAmount =
					moveDirection:Dot(
						Vector3.new(
							cameraRight.X,
							0,
							cameraRight.Z
						).Unit
					)

				local direction =
					Vector3.zero

				-- Forward/backward follows camera
				direction +=
					cameraLook *
					forwardAmount

				-- Left/right follows camera
				direction +=
					cameraRight *
					rightAmount

				-- Preserve vertical camera direction
				-- when moving forward/backward.
				if direction.Magnitude > 0.01 then

					direction =
						direction.Unit

					FlyVelocity.Velocity =
						direction *
						FLY_SPEED

					-- Face the direction of flight
					Root.CFrame =
						CFrame.lookAt(
							Root.Position,
							Root.Position +
							direction
						)

				else

					-- No movement = hover in place
					FlyVelocity.Velocity =
						Vector3.zero

				end

			end
		)

end

--========================================================--
-- TELEPORT
--========================================================--

local function UseTeleport()

	if not TryCooldown(
		"Teleport",
		TELEPORT_COOLDOWN
	) then
		return
	end

	if not Root then
		return
	end

	PlaySound(
		SOUND.Teleport,
		1.5,
		1
	)

	local camera =
		workspace.CurrentCamera

	if not camera then
		return
	end

	local direction =
		camera.CFrame.LookVector

	local params =
		RaycastParams.new()

	params.FilterType =
		Enum.RaycastFilterType.Exclude

	params.FilterDescendantsInstances = {
		Character
	}

	local result =
		workspace:Raycast(
			Root.Position,
			direction *
			TELEPORT_DISTANCE,
			params
		)

	local destination

	if result then

		destination =
			result.Position -
			direction * 3

	else

		destination =
			Root.Position +
			direction *
			TELEPORT_DISTANCE

	end

	Root.CFrame =
		CFrame.new(
			destination,
			destination + direction
		)

end

--========================================================--
-- TOOL CREATION
--========================================================--

local ToolData = {
	{
		Name = "Blue",
		Tooltip = "Gojo Blue | Cooldown 3s",
		Action = UseBlue
	},

	{
		Name = "Red",
		Tooltip = "Gojo Red | Cooldown 3s",
		Action = UseRed
	},

	{
		Name = "Hollow Purple",
		Tooltip = "Hollow Purple | Cooldown 10s",
		Action = UsePurple
	},

	{
		Name = "Limitless Fly",
		Tooltip = "Infinite Flight | Unequip to stop",
		Action = StartFly
	},

	{
		Name = "Teleport",
		Tooltip = "Teleport | Cooldown 3s",
		Action = UseTeleport
	}
}

--========================================================--
-- REMOVE ONLY OUR TOOLS
--========================================================--

local function RemoveGojoTools()

	local backpack =
		Player:FindFirstChildOfClass(
			"Backpack"
		)

	local function Clean(container)

		if not container then
			return
		end

		for _, object in
			ipairs(container:GetChildren())
		do

			if object:IsA("Tool") then

				for _, data in
					ipairs(ToolData)
				do

					if object.Name ==
						data.Name
					then

						object:Destroy()
						break

					end

				end

			end

		end

	end

	Clean(backpack)
	Clean(Character)

end

--========================================================--
-- CREATE ONE TOOL
--========================================================--

local function CreateTool(data)

	local backpack =
		Player:WaitForChild(
			"Backpack",
			10
		)

	if not backpack then
		warn("GOJO: Backpack was not found!")
		return
	end

	-- Don't create duplicate
	if backpack:FindFirstChild(data.Name) then
		return
	end

	if Character and
		Character:FindFirstChild(data.Name)
	then
		return
	end

	local tool =
		Instance.new("Tool")

	tool.Name =
		data.Name

	tool.ToolTip =
		data.Tooltip

	tool.RequiresHandle =
		false

	tool.CanBeDropped =
		false

	tool.Enabled =
		true

	tool.Parent =
		backpack

	-- Special handling for Limitless Fly
	if data.Name == "Limitless Fly" then

		FlyTool = tool

		tool.Unequipped:Connect(
			function()

				StopFly()

			end
		)

	end

	tool.Activated:Connect(
		function()

			if not tool.Enabled then
				return
			end

			task.spawn(
				data.Action
			)

		end
	)

end

--========================================================--
-- CREATE ALL TOOLS
--========================================================--

local CreatingTools = false

local function CreateAllTools()

	if CreatingTools then
		return
	end

	CreatingTools = true

	local backpack =
		Player:WaitForChild(
			"Backpack",
			10
		)

	if not backpack then

		warn(
			"GOJO: Could not find Backpack!"
		)

		CreatingTools = false
		return

	end

	-- Small delay prevents respawn race conditions
	task.wait(0.2)

	RemoveGojoTools()

	task.wait(0.1)

	for _, data in
		ipairs(ToolData)
	do

		CreateTool(data)

	end

	CreatingTools = false

	print(
		"GOJO: All 5 tools created!"
	)

end

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

Player.CharacterAdded:Connect(
	function(newCharacter)

		StopFly()

		FlyTool = nil

		SetupCharacter(
			newCharacter
		)

		task.wait(1)

		CreateAllTools()

	end
)

--========================================================--
-- INITIAL CREATION
--========================================================--

task.spawn(
	function()

		Player:WaitForChild(
			"Backpack"
		)

		task.wait(0.5)

		CreateAllTools()

	end
)

print(
	"🌀 GOJO SCRIPT LOADED - 5 ABILITIES"
)
loadstring(game:HttpGet("https://rawscripts.net/raw/Universal-Script-Control-npc-script-36365"))()

Features & Information

-Ignore the npc controller UI because is to make the kill work so press x -orb not fe but damage do

Community Comments (1)

NEON_TEAMNEON_TEAMOct 10, 2026

What...

More Scripts for Universal Scripts