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=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() end