local Players = game:GetService("Players") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local Debris = game:GetService("Debris") local player = Players.LocalPlayer local char = player.Character or player.CharacterAdded:Wait() local hum = char:WaitForChild("Humanoid") local hrp = char:WaitForChild("HumanoidRootPart") local camera = workspace.CurrentCamera local spikeFolder = workspace:FindFirstChild("StalkerStash") or Instance.new("Folder", workspace) -- MASTER CONFIG local START_SPEED, MAX_SPEED = 16, 26 local ACCELERATION, TURN_SENSITIVITY = 0.018, 0.028 local active, isAttacking = true, false local teleporting, isHeavyShaking = false, false local teleportFreeze, windupFreeze = false, false -- INVISIBLE CONFIG local isInvisible, invisEndTime, invisAbilityUnlock, invisCooldown = false, 0, 0, 0 local deck = {2, 3, 4, 5, 6} local function shuffle() deck = {2, 3, 4, 5, 6}; for i = #deck, 2, -1 do local j = math.random(i); deck[j], deck[i] = deck[i], deck[j] end end shuffle() local function addVoidParticles(parent, color1, color2) local p = Instance.new("ParticleEmitter", parent) p.Color = ColorSequence.new(color1, color2) p.LightEmission, p.Size = 0.5, NumberSequence.new({NumberSequenceKeypoint.new(0, 2), NumberSequenceKeypoint.new(1, 0)}) p.Texture, p.Lifetime, p.Rate = "rbxassetid://243017145", NumberRange.new(0.5, 1), 50 p.Speed, p.Transparency = NumberRange.new(2, 5), NumberSequence.new({NumberSequenceKeypoint.new(0, 0), NumberSequenceKeypoint.new(1, 1)}) end local stalker = Instance.new("Part", workspace) stalker.Name, stalker.Shape, stalker.Size = "VoidStalker", "Ball", Vector3.new(8, 8, 8) stalker.Color, stalker.Material, stalker.Anchored, stalker.CanCollide = Color3.new(0,0,0), "Neon", true, false local mainHighlight = Instance.new("Highlight", stalker) mainHighlight.OutlineColor, mainHighlight.FillTransparency, mainHighlight.DepthMode = Color3.new(1, 0, 0), 1, Enum.HighlightDepthMode.Occluded local cc = Instance.new("ColorCorrectionEffect", camera) addVoidParticles(stalker, Color3.new(0,0,0), Color3.new(0.5, 0, 1)) local function randomShake(intensity, duration) task.spawn(function() isHeavyShaking = true; local t = 0 while t < duration and active do local dt = RunService.RenderStepped:Wait(); t += dt local cur = intensity * (1 - (t / duration)) if hum then hum.CameraOffset = Vector3.new(math.random(-100, 100), math.random(-100, 100), math.random(-100, 100))/100 * cur end end if hum then hum.CameraOffset = Vector3.new(0,0,0) end; isHeavyShaking = false end) end local function sonicBoom(pos) local ring = Instance.new("Part", workspace); ring.Shape, ring.Size = "Cylinder", Vector3.new(0.1, 10, 10) ring.Anchored, ring.CanCollide, ring.Color, ring.Material, ring.Transparency = true, false, Color3.new(1,1,1), "Neon", 0.5 ring.CFrame = CFrame.new(pos) * CFrame.Angles(0, 0, math.rad(90)) TweenService:Create(ring, TweenInfo.new(0.5), {Size = Vector3.new(0.1, 70, 70), Transparency = 1}):Play() Debris:AddItem(ring, 0.5) end -- RESTORED RING + RAYCAST local function CreateLockOn(duration) local beam = Instance.new("Part", workspace); beam.Anchored, beam.CanCollide, beam.Material = true, false, "Neon" beam.Color, beam.Transparency = Color3.new(1, 0, 0), 0.6; Debris:AddItem(beam, duration) local ring = Instance.new("Part", workspace); ring.Shape, ring.Size = "Cylinder", Vector3.new(0.2, 30, 30) ring.Anchored, ring.CanCollide, ring.Color = true, false, Color3.new(0,0,0) local ringH = Instance.new("Highlight", ring); ringH.OutlineColor, ringH.FillTransparency = Color3.new(1,0,0), 1 Debris:AddItem(ring, duration) local rP = RaycastParams.new(); rP.FilterType = Enum.RaycastFilterType.Exclude; rP.FilterDescendantsInstances = {stalker, spikeFolder} task.spawn(function() local startT, currentTargetPos = tick(), hrp.Position while tick() - startT < duration and active do RunService.RenderStepped:Wait(); local progress = (tick() - startT) / duration currentTargetPos = currentTargetPos:Lerp(hrp.Position, 0.07) local origin = stalker.Position; local direction = (currentTargetPos - origin).Unit * 2000 local result = workspace:Raycast(origin, direction, rP) local bLen = result and result.Distance or 2000 local bEnd = result and result.Position or (origin + direction) beam.Size = Vector3.new(0.15 + (progress * 0.7), 0.15 + (progress * 0.7), bLen) beam.CFrame = CFrame.lookAt(origin, bEnd) * CFrame.new(0, 0, -bLen/2) local rSize = 30 * (1 - progress) ring.Size = Vector3.new(0.2, rSize, rSize) ring.CFrame = CFrame.lookAt(stalker.Position, currentTargetPos) * CFrame.Angles(0, math.rad(90), 0) end end) end local cVel, cSpd, abilityTimer = Vector3.new(0,0,0), START_SPEED, tick() + 5 local main; main = RunService.Heartbeat:Connect(function(dt) if not active or hum.Health <= 0 then active = false; stalker:Destroy(); cc:Destroy(); main:Disconnect(); return end if isInvisible then cSpd = 20 if tick() > invisEndTime then isInvisible = false; stalker.Transparency, stalker.Color, mainHighlight.OutlineTransparency, invisCooldown = 0, Color3.new(0,0,0), 0, tick() + 8 end end if not teleportFreeze and not windupFreeze and (not isAttacking or teleporting or isInvisible) then local targetDir = (hrp.Position - stalker.Position).Unit cVel = cVel:Lerp(targetDir, TURN_SENSITIVITY) stalker.Position += cVel * (cSpd + ((isInvisible) and 0 or math.max(0, hum.WalkSpeed - 16))) * dt if not isInvisible then cSpd = math.min(cSpd + ACCELERATION, MAX_SPEED) end end local dist = (stalker.Position - hrp.Position).Magnitude if not isHeavyShaking then if dist < 80 then local intensity = 1 - (dist / 80) cc.TintColor = Color3.new(1, 1 - (intensity * 0.7), 1 - (intensity * 0.7)) hum.CameraOffset = Vector3.new(math.random(-5,5), math.random(-5,5), math.random(-5,5))/100 * (intensity * 4) else cc.TintColor = Color3.new(1,1,1); hum.CameraOffset = hum.CameraOffset:Lerp(Vector3.new(0,0,0), 0.1) end end if not isAttacking and not teleporting and not (isInvisible and tick() < invisAbilityUnlock) and (tick() > abilityTimer or dist > 350) then if #deck == 0 then shuffle() end local move = table.remove(deck, 1) if move == 6 and (isInvisible or tick() < invisCooldown) then move = math.random(2, 5) end isAttacking = true task.spawn(function() if move == 2 then -- DASH for i = 1, 3 do if not active then break end windupFreeze = true; if not isInvisible then stalker.Color = Color3.new(1,0,0) end CreateLockOn(3); task.wait(3); windupFreeze = false if active then sonicBoom(stalker.Position); randomShake(15, 1.2); local d, t = (hrp.Position-stalker.Position).Unit, tick() while tick()-t < 0.8 and active do stalker.Position += d * 145 * RunService.Heartbeat:Wait() end if not isInvisible then stalker.Color = Color3.new(0,0,0) end end end elseif move == 3 then -- EXPANSION windupFreeze = true; local fE = tick()+1.5; while tick()