Haconys PNG Chaser
Key RequiredUniversal

Haconys PNG Chaser

Universal ScriptHacony_DaGurlllHacony_DaGurlll 175 views 2.4K executesUpdated Aug 9, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•470 lines (15313 chars)
-- PNG Chaser - Awesome script made by Hacony ( ^ω^ )

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

local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")

local DEFAULT_FACE = "rbxassetid://102355976849890"
local DEFAULT_COLORS = {Color3.fromRGB(80, 255, 80), Color3.fromRGB(255, 230, 50)}
local DEFAULT_LIGHT = Color3.fromRGB(120, 255, 80)

local VARIANTS = {
	{id = "rbxassetid://99192734109891", text = "SHAPES & BEATS", colors = {Color3.fromRGB(255, 80, 180), Color3.fromRGB(0, 255, 255)}, light = Color3.fromRGB(255, 100, 200), quirk = "blixer"},
	{id = "rbxassetid://104865173959730", text = "IT'S YOU!", colors = {Color3.fromRGB(255, 255, 255), Color3.fromRGB(255, 40, 40)}, light = Color3.fromRGB(255, 70, 70), quirk = "hacony"},
	{id = "rbxassetid://95682086336733", text = "PLUSHIE TIME!", colors = {Color3.fromRGB(60, 140, 255), Color3.fromRGB(0, 220, 255)}, light = Color3.fromRGB(80, 180, 255), quirk = "cocoshark"},
	{id = "rbxassetid://115619036875180", text = "DURR!", colors = {Color3.fromRGB(255, 230, 0), Color3.fromRGB(255, 255, 80)}, light = Color3.fromRGB(255, 220, 40), quirk = "durr"},
	{id = "rbxassetid://95156098953045", text = "HOWDY!", colors = {Color3.fromRGB(80, 255, 80), Color3.fromRGB(255, 230, 50)}, light = Color3.fromRGB(120, 255, 80), quirk = "flowey"},
	{id = "rbxassetid://130979680533261", text = "YOU ARE NOSY", colors = {Color3.fromRGB(70, 140, 255), Color3.fromRGB(20, 50, 140)}, light = Color3.fromRGB(60, 120, 255), quirk = "naarah"},
	{id = "rbxassetid://89585627964473", text = "...", colors = {Color3.fromRGB(255, 255, 255), Color3.fromRGB(30, 30, 30)}, light = Color3.fromRGB(200, 200, 220), quirk = "mirror"},
	{id = "rbxassetid://109120301075986", text = "NYAN NYAN!", colors = {Color3.fromRGB(255, 80, 180), Color3.fromRGB(80, 200, 255), Color3.fromRGB(255, 220, 50), Color3.fromRGB(120, 255, 120)}, light = Color3.fromRGB(255, 150, 220), quirk = "nyan"},
}

local TRACKER_ICON = "rbxassetid://124614424879215"
local DEATH_QUOTES = {"SKILL ISSUE", "TOO SLOW", "GET GOOD", "PIZZA TIME OVER", "L + RATIO", "NOOB DETECTED", "TRY AGAIN", "EZ", "YOU DIED", "GIT GUD"}

local currentConnection = nil

local function cleanup()
	if currentConnection then
		currentConnection:Disconnect()
		currentConnection = nil
	end
	for _, n in ipairs({"PizzaFaceHitbox", "PizzaFaceVisual"}) do
		local o = Workspace:FindFirstChild(n)
		if o then o:Destroy() end
	end
	local g = PlayerGui:FindFirstChild("PizzaFaceUI")
	if g then g:Destroy() end
end

local function createUI()
	local gui = Instance.new("ScreenGui")
	gui.Name = "PizzaFaceUI"
	gui.IgnoreGuiInset = true
	gui.ResetOnSpawn = false
	gui.Parent = PlayerGui

	local flash = Instance.new("Frame")
	flash.Size = UDim2.fromScale(1, 1)
	flash.BackgroundColor3 = Color3.fromRGB(255, 30, 30)
	flash.BackgroundTransparency = 1
	flash.BorderSizePixel = 0
	flash.ZIndex = 10
	flash.Parent = gui

	local left = Instance.new("TextLabel")
	left.Size = UDim2.fromScale(0.09, 0.28)
	left.Position = UDim2.fromScale(0.015, 0.36)
	left.BackgroundTransparency = 1
	left.Text = "!"
	left.TextColor3 = Color3.fromRGB(255, 40, 40)
	left.TextStrokeTransparency = 0
	left.Font = Enum.Font.GothamBlack
	left.TextScaled = true
	left.TextTransparency = 1
	left.ZIndex = 8
	left.Parent = gui

	local right = left:Clone()
	right.Position = UDim2.fromScale(0.895, 0.36)
	right.Parent = gui

	local tracker = Instance.new("ImageLabel")
	tracker.Size = UDim2.fromOffset(52, 52)
	tracker.BackgroundTransparency = 1
	tracker.Image = TRACKER_ICON
	tracker.Visible = false
	tracker.ZIndex = 20
	tracker.Parent = gui

	local title = Instance.new("TextLabel")
	title.Size = UDim2.fromScale(1, 0.32)
	title.Position = UDim2.fromScale(0, 0.3)
	title.BackgroundTransparency = 1
	title.Text = "PIZZA TIME!"
	title.TextColor3 = Color3.fromRGB(255, 50, 50)
	title.TextStrokeTransparency = 0
	title.Font = Enum.Font.GothamBlack
	title.TextScaled = true
	title.TextTransparency = 1
	title.ZIndex = 15
	title.Parent = gui

	local death = Instance.new("TextLabel")
	death.Size = UDim2.fromScale(1, 0.2)
	death.Position = UDim2.fromScale(0, 0.4)
	death.BackgroundTransparency = 1
	death.Text = ""
	death.TextColor3 = Color3.fromRGB(255, 50, 50)
	death.TextStrokeTransparency = 0
	death.Font = Enum.Font.GothamBlack
	death.TextScaled = true
	death.TextTransparency = 1
	death.ZIndex = 25
	death.Parent = gui

	return gui, flash, left, right, tracker, title, death
end

local function fireProjectile(origin, direction, speed, size, color, damage, life)
	local p = Instance.new("Part")
	p.Shape = Enum.PartType.Ball
	p.Size = Vector3.new(size, size, size)
	p.Color = color
	p.Material = Enum.Material.Neon
	p.Anchored = false
	p.CanCollide = false
	p.CanQuery = false
	p.CastShadow = false
	p.Position = origin
	p.Parent = Workspace

	local bv = Instance.new("BodyVelocity")
	bv.Velocity = direction.Unit * speed
	bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
	bv.Parent = p

	Debris:AddItem(p, life or 3)

	if damage and damage > 0 then
		local conn
		conn = RunService.Heartbeat:Connect(function()
			if not p.Parent then conn:Disconnect() return end
			local char = LocalPlayer.Character
			if char and char:FindFirstChild("HumanoidRootPart") and char:FindFirstChild("Humanoid") then
				if (p.Position - char.HumanoidRootPart.Position).Magnitude < 3.8 then
					char.Humanoid:TakeDamage(damage)
					p:Destroy()
					conn:Disconnect()
				end
			end
		end)
	end
end

local function sayNosy(adornee)
	local bb = Instance.new("BillboardGui")
	bb.Size = UDim2.fromOffset(220, 55)
	bb.StudsOffset = Vector3.new(0, 5, 0)
	bb.AlwaysOnTop = true
	bb.Adornee = adornee
	bb.Parent = adornee

	local label = Instance.new("TextLabel")
	label.Size = UDim2.fromScale(1, 1)
	label.BackgroundTransparency = 1
	label.Text = "YOU ARE NOSY"
	label.TextColor3 = Color3.fromRGB(100, 180, 255)
	label.TextStrokeTransparency = 0
	label.Font = Enum.Font.GothamBlack
	label.TextScaled = true
	label.Parent = bb

	Debris:AddItem(bb, 2.3)
end

local function setup(character)
	cleanup()

	local root = character:WaitForChild("HumanoidRootPart", 5)
	local humanoid = character:WaitForChild("Humanoid", 5)
	if not root or not humanoid then return end

	local camera = Workspace.CurrentCamera
	local gui, flash, leftBang, rightBang, tracker, title, deathQuote = createUI()
	local originalFOV = camera.FieldOfView

	-- Equal chance for all
	local ALL = {
		{id = DEFAULT_FACE, text = "PIZZA TIME!", colors = DEFAULT_COLORS, light = DEFAULT_LIGHT, quirk = "none"}
	}
	for _, v in ipairs(VARIANTS) do
		table.insert(ALL, v)
	end
	local data = ALL[math.random(1, #ALL)]
	local face = data.id
	local colors = data.colors
	local lightCol = data.light
	local quirk = data.quirk

	local startSize = (quirk == "naarah") and 3.5 or 5

	local hitbox = Instance.new("Part")
	hitbox.Name = "PizzaFaceHitbox"
	hitbox.Shape = Enum.PartType.Ball
	hitbox.Size = Vector3.new(startSize * 0.65, startSize * 0.65, startSize * 0.65)
	hitbox.Transparency = 1
	hitbox.Anchored = true
	hitbox.CanCollide = false
	hitbox.Position = root.Position + Vector3.new(0, 45, 0)
	hitbox.Parent = Workspace

	local visual = Instance.new("Part")
	visual.Name = "PizzaFaceVisual"
	visual.Size = Vector3.new(startSize, startSize, startSize)
	visual.Transparency = 1
	visual.Anchored = true
	visual.CanCollide = false
	visual.Position = hitbox.Position
	visual.Parent = Workspace

	local function addFace(f)
		local s = Instance.new("SurfaceGui")
		s.Face = f
		s.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud
		s.PixelsPerStud = 50
		s.LightInfluence = 0
		s.Parent = visual
		local i = Instance.new("ImageLabel")
		i.Size = UDim2.fromScale(1, 1)
		i.BackgroundTransparency = 1
		i.Image = face
		i.Parent = s
		return i
	end
	local frontImg = addFace(Enum.NormalId.Front)
	local backImg = addFace(Enum.NormalId.Back)

	local light = Instance.new("PointLight")
	light.Color = lightCol
	light.Brightness = 2.4
	light.Range = 18
	light.Parent = visual

	leftBang.TextColor3 = colors[1]
	rightBang.TextColor3 = colors[1]

	local canChase = false
	local velocity = Vector3.zero
	local timeAlive = 0
	local bob = 0
	local pulse = 0
	local lastHit = 0
	local isFrozen, freezeT = false, 0
	local isLunging, lungeT = false, 0
	local nextLunge = 5
	local ghostT = 0
	local quirkT = 0
	local hasDied = false

	task.delay(5.5, function()
		if not visual.Parent or not character.Parent then return end

		flash.BackgroundColor3 = colors[1]
		flash.BackgroundTransparency = 0.2
		TweenService:Create(flash, TweenInfo.new(0.7), {BackgroundTransparency = 1}):Play()

		title.Text = data.text
		title.TextTransparency = 0
		title.TextStrokeTransparency = 0
		TweenService:Create(title, TweenInfo.new(0.4, Enum.EasingStyle.Back), {
			Size = UDim2.fromScale(1.15, 0.36),
			Position = UDim2.fromScale(-0.075, 0.28)
		}):Play()

		task.spawn(function()
			local i = 1
			local start = os.clock()
			while os.clock() - start < 1.4 and title.Parent do
				title.TextColor3 = colors[((i-1) % #colors) + 1]
				i += 1
				task.wait(0.1)
			end
		end)

		task.delay(1.3, function()
			if title and title.Parent then
				TweenService:Create(title, TweenInfo.new(0.45), {TextTransparency = 1, TextStrokeTransparency = 1}):Play()
			end
		end)

		canChase = true
	end)

	currentConnection = RunService.Heartbeat:Connect(function(dt)
		if not character.Parent or not hitbox.Parent or humanoid.Health <= 0 then
			if humanoid.Health <= 0 and not hasDied then
				hasDied = true
				deathQuote.Text = DEATH_QUOTES[math.random(1, #DEATH_QUOTES)]
				deathQuote.TextTransparency = 0
				deathQuote.TextColor3 = colors[1]
			end
			cleanup()
			if camera then camera.FieldOfView = originalFOV end
			return
		end

		timeAlive += dt
		bob = math.sin(timeAlive * 3.8) * 0.5
		pulse += dt

		local growth = math.clamp(timeAlive / 100, 0, 1)
		local base = (quirk == "naarah") and 3.5 or 5
		local size = base + growth * ((quirk == "naarah") and 5 or 7)

		-- Visual size
		visual.Size = Vector3.new(size, size, size)

		-- Hitbox is smaller for Naarah
		local hitSize = (quirk == "naarah") and (size * 0.65) or size
		hitbox.Size = Vector3.new(hitSize, hitSize, hitSize)

		light.Range = 14 + size

		if quirk == "nyan" then
			local t = timeAlive * 2.5
			light.Color = Color3.new(math.sin(t)*0.5+0.5, math.sin(t+2.1)*0.5+0.5, math.sin(t+4.2)*0.5+0.5)
		else
			light.Color = lightCol
		end

		local hitRange = 3.3 + hitSize * 0.3

		if canChase and not isFrozen then
			quirkT += dt
			if quirk == "blixer" and quirkT >= 1.4 then
				quirkT = 0
				fireProjectile(hitbox.Position, root.Position - hitbox.Position, 70, 1.1, Color3.fromRGB(255, 80, 200), 5, 2.2)
			elseif quirk == "flowey" and quirkT >= 2.5 then
				quirkT = 0
				fireProjectile(hitbox.Position, root.Position - hitbox.Position, 30, 1.3, Color3.fromRGB(255, 255, 255), 8, 4)
			elseif quirk == "cocoshark" and quirkT >= 2.2 then
				quirkT = 0
				fireProjectile(hitbox.Position + Vector3.new(0,3,0), Vector3.new(math.random(-20,20), 50, math.random(-20,20)), 1, 1.8, Color3.fromRGB(110,70,30), 0, 3.5)
			elseif quirk == "durr" and quirkT >= 0.6 then
				quirkT = 0
				fireProjectile(hitbox.Position, Vector3.new(math.random(-50,50), math.random(0,30), math.random(-50,50)), 40, 0.9, Color3.fromRGB(180,255,220), 0, 2)
			elseif quirk == "naarah" and quirkT >= 2.5 then
				quirkT = 0
				sayNosy(visual)
			end
		end

		if isFrozen then
			freezeT -= dt
			velocity = Vector3.zero
			frontImg.ImageColor3 = colors[1]
			backImg.ImageColor3 = colors[1]
			if freezeT <= 0 then
				isFrozen = false
				frontImg.ImageColor3 = Color3.new(1,1,1)
				backImg.ImageColor3 = Color3.new(1,1,1)
			end
		end

		if canChase and not isFrozen then
			local speed = 1 + math.min(timeAlive * 1.5, 85)
			if quirk == "naarah" then speed *= 1.35 end
			if quirk == "mirror" then speed *= 0.55 end

			local accel = 0.009
			if quirk == "mirror" then accel = 0.04 end

			nextLunge -= dt
			if nextLunge <= 0 and not isLunging then
				isLunging = true
				lungeT = (quirk == "nyan" and 0.28) or (quirk == "hacony" and 1.0) or 0.55
				nextLunge = 4.8 + math.random() * 3
			end

			if isLunging then
				lungeT -= dt
				local mult = (quirk == "nyan" and 3.0) or (quirk == "hacony" and 1.9) or 1.7
				speed *= mult
				accel = (quirk == "nyan" and 0.13) or 0.06
				if lungeT <= 0 then isLunging = false end
			end

			local to = (root.Position + Vector3.new(0, 1.5, 0)) - hitbox.Position
			local dist = to.Magnitude
			if dist > 0.5 then
				velocity = velocity:Lerp(to.Unit * speed, accel)
			end
			hitbox.Position += velocity * dt

			ghostT += dt
			if ghostT > 0.04 then
				ghostT = 0
				local g = Instance.new("Part")
				g.Size = visual.Size
				g.Transparency = 1
				g.Anchored = true
				g.CanCollide = false
				g.CFrame = visual.CFrame
				g.Parent = Workspace
				local sg = Instance.new("SurfaceGui", g)
				sg.Face = Enum.NormalId.Front
				sg.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud
				sg.PixelsPerStud = 50
				sg.LightInfluence = 0
				local gi = Instance.new("ImageLabel", sg)
				gi.Size = UDim2.fromScale(1,1)
				gi.BackgroundTransparency = 1
				gi.Image = face
				if quirk == "nyan" then
					local t = timeAlive * 3
					gi.ImageColor3 = Color3.new(math.sin(t)*0.5+0.5, math.sin(t+2)*0.5+0.5, math.sin(t+4)*0.5+0.5)
				else
					gi.ImageColor3 = isLunging and colors[2] or colors[1]
				end
				gi.ImageTransparency = 0.3
				Debris:AddItem(g, 0.6)
			end

			local str = math.clamp(1 - dist/50, 0, 0.85)
			local pul = dist < 20 and math.abs(math.sin(pulse*9))*0.25 or 0
			leftBang.TextTransparency = 1 - (str + pul)
			rightBang.TextTransparency = 1 - (str + pul)

			local fov = originalFOV + math.clamp(1 - dist/35, 0, 1) * 16
			camera.FieldOfView += (fov - camera.FieldOfView) * 0.1
		end

		if canChase and camera then
			local sp, onScreen = camera:WorldToViewportPoint(hitbox.Position)
			if not onScreen or sp.Z < 0 then
				tracker.Visible = true
				tracker.Size = isLunging and UDim2.fromOffset(64,64) or UDim2.fromOffset(52,52)
				local vs = camera.ViewportSize
				tracker.Position = UDim2.fromOffset(
					math.clamp(sp.X, 30, vs.X-30) - tracker.Size.X.Offset/2,
					math.clamp(sp.Y, 30, vs.Y-30) - tracker.Size.Y.Offset/2
				)
			else
				tracker.Visible = false
			end
		end

		if not isFrozen and camera then
			visual.CFrame = CFrame.lookAt(hitbox.Position + Vector3.new(0, bob, 0), camera.CFrame.Position)
		end

		if canChase and not isFrozen and (hitbox.Position - root.Position).Magnitude <= hitRange and os.clock() - lastHit > 0.9 then
			lastHit = os.clock()
			humanoid:TakeDamage(18)
			isFrozen = true
			freezeT = 1
			velocity = Vector3.zero
			flash.BackgroundColor3 = colors[1]
			flash.BackgroundTransparency = 0.35
			TweenService:Create(flash, TweenInfo.new(0.3), {BackgroundTransparency = 1}):Play()
		end
	end)
end

local function onCharacterAdded(char)
	task.defer(function()
		setup(char)
	end)
end

if LocalPlayer.Character then
	onCharacterAdded(LocalPlayer.Character)
end
LocalPlayer.CharacterAdded:Connect(onCharacterAdded)

Features & Information

This script adds a Visual Chaser, which goes after the player! Its basically PizzaFace, but it slingshots towards the player with LERP based movement! It also has Variants, each one listed below: Blixer - Shoots pink bullets (5 dmg) CocoShark - Throws coconuts Flowey - Shoots slow white pellets Durr - Shoots random drool Naarah (SkinWalker) - Smaller + faster + says "YOU ARE NOSY" Mirror Woman (The Watcher) - Much slower + no slingshot Nyan Cat - Super fast but very short dashes + rainbow PizzaFace - No Quirk! Hacony - Holy self insert 🥹, Dash is Longer and Faster.
#Enemy#PizzaFace

Community Comments (3)

awesome but didnt tried it

does it chase other players btw

its not working?

More Scripts for Universal Scripts