
Key RequiredUniversal

local Players=game:GetService("Players")
local RunService=game:GetService("RunService")
local Debris=game:GetService("Debris")
local Player=Players.LocalPlayer
local Target=Player
local PURPLE=Color3.fromRGB(170,0,255)
local TRAIL_DELAY=1
local RECORD_RATE=.03
local INDICATOR_TIME=3
local INITIAL_DELAY=3
local FOLLOWER_LIFETIME=60
local RESPAWN_DELAY=30
local FOLLOWER_DELAY=1.2
local Followers={}
local Trail={}
local Running=true
local SpawnQueue=0
local Spawning=false
local function getCharacter()
return Target.Character
end
local function getRoot()
local Character=getCharacter()
if not Character then return end
return Character:FindFirstChild("HumanoidRootPart")
end
local function clearFollowers()
for i=#Followers,1,-1 do
local F=Followers[i]
if F.Model then
F.Model:Destroy()
end
table.remove(Followers,i)
end
end
local function safeSpawn(Position)
local NewPosition=Position
for _,F in ipairs(Followers) do
if F.Model and F.Model.Parent then
if (NewPosition-F.Body.Position).Magnitude<6 then
NewPosition+=Vector3.new(6,0,0)
end
end
end
return NewPosition
end
local function makeIndicator(Position)
local Indicator=Instance.new("Part")
Indicator.Name="FollowerIndicator"
Indicator.Size=Vector3.new(2,2,2)
Indicator.Color=PURPLE
Indicator.Material=Enum.Material.Neon
Indicator.Anchored=true
Indicator.CanCollide=false
Indicator.CanTouch=false
Indicator.CanQuery=false
Indicator.CFrame=CFrame.new(Position)
Indicator.Parent=workspace
local Sound=Instance.new("Sound")
Sound.SoundId="rbxassetid://139310882854462"
Sound.Looped=true
Sound.Volume=1
Sound.Parent=Indicator
Sound:Play()
local Rotation=0
local Connection
Connection=RunService.Heartbeat:Connect(function(DT)
if not Indicator.Parent then
Connection:Disconnect()
return
end
Rotation+=DT*35
Indicator.CFrame=
CFrame.new(Position)*
CFrame.Angles(
Rotation,
Rotation*1.3,
Rotation*1.7
)
end)
return Indicator,Connection
end
local function createDeathBlocks(Position)
for i=1,20 do
local Block=Instance.new("Part")
Block.Name="PurpleMiniBlock"
Block.Size=Vector3.new(.4,.4,.4)
Block.Color=PURPLE
Block.Material=Enum.Material.Neon
Block.Anchored=false
Block.CanCollide=true
Block.Position=
Position+
Vector3.new(
math.random(-2,2),
math.random(0,4),
math.random(-2,2)
)
Block.Parent=workspace
Block.AssemblyLinearVelocity=
Vector3.new(
math.random(-15,15),
math.random(5,25),
math.random(-15,15)
)
Debris:AddItem(Block,5)
end
end
local function killTarget()
local Character=getCharacter()
if not Character then return end
local Humanoid=Character:FindFirstChildOfClass("Humanoid")
local Root=Character:FindFirstChild("HumanoidRootPart")
if not Humanoid or Humanoid.Health<=0 then
return
end
if Root then
createDeathBlocks(Root.Position)
end
local Sound=Instance.new("Sound")
Sound.SoundId="rbxassetid://107071619177667"
Sound.Volume=3
Sound.Parent=workspace
Sound:Play()
Debris:AddItem(Sound,5)
Humanoid.Health=0
end
local function createFollower(Position)
local Model=Instance.new("Model")
Model.Name="Follower"
local Body=Instance.new("Part")
Body.Name="Body"
Body.Size=Vector3.new(2,5,2)
Body.Color=PURPLE
Body.Material=Enum.Material.Neon
Body.Anchored=true
Body.CanCollide=false
Body.CanTouch=false
Body.CanQuery=false
Body.CFrame=CFrame.new(Position)
Body.Parent=Model
local Hitbox=Instance.new("Part")
Hitbox.Name="Hitbox"
Hitbox.Size=Vector3.new(2.5,5.5,2.5)
Hitbox.Transparency=1
Hitbox.Anchored=true
Hitbox.CanCollide=false
Hitbox.CanTouch=true
Hitbox.CanQuery=true
Hitbox.CFrame=CFrame.new(Position)
Hitbox.Parent=Model
Model.PrimaryPart=Body
Model.Parent=workspace
local ChaseSound=Instance.new("Sound")
ChaseSound.Name="ChaseSound"
ChaseSound.SoundId="rbxassetid://7405472944"
ChaseSound.Looped=true
ChaseSound.Volume=1
ChaseSound.Parent=Model
ChaseSound:Play()
local Data={
Model=Model,
Body=Body,
Hitbox=Hitbox,
SpawnTime=os.clock(),
Alive=true
}
table.insert(Followers,Data)
Hitbox.Touched:Connect(function(Hit)
if not Data.Alive then
return
end
local Character=Hit:FindFirstAncestorOfClass("Model")
if Character==getCharacter() then
Data.Alive=false
killTarget()
end
end)
end
local function spawnFollower()
local Root=getRoot()
if not Root then
return
end
local Position=safeSpawn(Root.Position)
local Indicator,Connection=makeIndicator(Position)
task.wait(INDICATOR_TIME)
if Connection then
Connection:Disconnect()
end
if Indicator then
Indicator:Destroy()
end
if Running then
createFollower(Position)
end
end
local function requestFollower()
SpawnQueue+=1
if Spawning then
return
end
Spawning=true
task.spawn(function()
while SpawnQueue>0 and Running do
SpawnQueue-=1
spawnFollower()
if SpawnQueue>0 then
task.wait(FOLLOWER_DELAY)
end
end
Spawning=false
end)
end
RunService.Heartbeat:Connect(function()
if not Running then
return
end
local Root=getRoot()
if Root then
table.insert(Trail,{
Time=os.clock(),
CFrame=Root.CFrame
})
end
local Cutoff=os.clock()-10
while #Trail>0 and Trail[1].Time<Cutoff do
table.remove(Trail,1)
end
local Now=os.clock()
for i=#Followers,1,-1 do
local F=Followers[i]
if not F.Model or not F.Model.Parent then
table.remove(Followers,i)
continue
end
if Now-F.SpawnTime>=FOLLOWER_LIFETIME then
local Position=F.Body.Position
F.Alive=false
local Explosion=Instance.new("Explosion")
Explosion.Position=Position
Explosion.BlastRadius=8
Explosion.BlastPressure=0
Explosion.DestroyJointRadiusPercent=0
Explosion.Parent=workspace
F.Model:Destroy()
table.remove(Followers,i)
task.delay(RESPAWN_DELAY,function()
if Running then
requestFollower()
end
end)
continue
end
local WantedTime=Now-TRAIL_DELAY
local OldCFrame
for j=#Trail,1,-1 do
if Trail[j].Time<=WantedTime then
OldCFrame=Trail[j].CFrame
break
end
end
if OldCFrame then
F.Body.CFrame=OldCFrame
F.Hitbox.CFrame=OldCFrame
end
end
end)
Player.CharacterAdded:Connect(function()
clearFollowers()
table.clear(Trail)
task.wait(INITIAL_DELAY)
if Running then
requestFollower()
end
end)
task.wait(INITIAL_DELAY)
if Running and getRoot() then
requestFollower()
endNo comments yet for this script.



