
Key RequiredUniversal

-- [[ MINECRAFT WITHER BOSS - BEDROCK ARTILLERY & FLING OVERLOAD V6.0.9 ]] --
-- Engine Core: DYTON_txt (Engine Reset Layout)
-- Josep Bart Core: Absolute Head Tumpuk, Pet Breath & Levitation Sway Idle Animation
local Players = game:GetService("Players")
local LP = Players.LocalPlayer
local RS = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local CoreGui = game:GetService("CoreGui")
local OwnerName = LP.Name
local petMode = false
local rampageMode = false
local wingRemoteCache = {}
local PERMANENT_PROP_LOCK = {}
local currentCFrames = {}
local lastNetworkUpdate = 0
local lastColorUpdate = 0
local lastScanTime = 0
local colorIndex = 1
-- [[ ANIMATION & ADAPTIVE SYSTEM VARIABLES ]] --
local isSummoning = false
local summonStartTime = 0
local summonOriginPos = Vector3.zero
local rampageBlacklist = {}
local targetAttackTrack = { player = nil, startTime = 0, initialPos = Vector3.zero }
local hasFetchedBall = false
-- [[ ADAPTIVE VARIABLE CONTROL ]] --
local estimatedPing = 0.03
local witherCurrentPos = Vector3.zero
local lastAttackTime = 0
local activeProjectiles = {}
local lastLookAtPos = Vector3.zero
-- =============================================================================
-- [[ CONFIGURASI MANUAL WITHER BOSS - BY JOSEP BART ]] --
-- =============================================================================
local WITHER_SPEED = 8 -- Kecepatan terbang Wither mengejar target
local PROJECTILE_SPEED = 15 -- Dipercepat agar proyektil melesat responsif
local ATTACK_COOLDOWN = 1.3 -- Cooldown jeda tembakan (detik)
local HOVER_HEIGHT = 24 -- Tinggi Wither melayang di atas kepala target
local RANDOM_DRIFT_SCALE = 50 -- Jangkauan gerak acak Wither saat menyerang
local RAMPAGE_RADIUS = 400 -- Jarak maksimal Wither mau mengejar target
local SUMMON_DURATION = 11.5 -- Durasi waktu animasi spawn (detik)
local IMPACT_LINGER_TIME = 0.5 -- Durasi proyektil nempel + Fling di badan target
local MAX_STUCK_TIME = 6.0 -- Batas waktu toleransi jika target kebal sebelum di-skip
-- [[ PENGATURAN POSISI WITHER SAAT JADI PET (Belakang Player) ]] --
local PET_OFFSET = Vector3.new(-5, 6, 1) -- (Kanan/Kiri, Atas/Bawah, Belakang/Depan)
local MANUAL_ROTATION = Vector3.new(-20, 360, 0)
local TargetPlayer = nil
-- =============================================================================
local COLORS = {
AbyssRed = Color3.fromRGB(100, 0, 180),
DarkAbyss = Color3.fromRGB(30, 0, 60),
Void = Color3.fromRGB(10, 0, 20),
Accent = Color3.fromRGB(255, 255, 255),
SuccessGreen = Color3.fromRGB(0, 255, 120),
WarningRed = Color3.fromRGB(15, 30, 60),
PureWhiteOnly = Color3.fromRGB(255, 255, 255),
SoulArmorWhite = Color3.fromRGB(0, 0, 0),
SoulAuraBlue = Color3.fromRGB(180, 220, 255)
}
local function getAbyssColor(t, offset)
if isSummoning then
return COLORS.PureWhiteOnly
elseif rampageMode then
local cycle = (t * 1.5 + (offset * 0.15)) % 1
return cycle < 0.5 and COLORS.SoulArmorWhite:Lerp(COLORS.SoulAuraBlue, cycle * 2) or COLORS.SoulAuraBlue:Lerp(COLORS.SoulArmorWhite, (cycle - 0.5) * 2)
else
local cycle = (t * 0.3 + (offset * 0.1)) % 1
return cycle < 0.5 and COLORS.AbyssRed:Lerp(COLORS.DarkAbyss, cycle * 2) or COLORS.DarkAbyss:Lerp(COLORS.Void, (cycle - 0.5) * 2)
end
end
local function getOff(base, target) return base:ToObjectSpace(target) end
local baseRef = CFrame.new(199.91932678222656, 12.894913673400879, -64.45938873291016, -0.9999717473983765, 0.0023622966837137938, -0.007140748668462038, 0.00002453153138048947, 0.9504163265228271, 0.31098055839538574, 0.0075213126838207245, 0.31097161769866943, -0.9503894448280334)
local WitherParts = {
getOff(baseRef, CFrame.new(199.91932678222656, 12.894913673400879, -64.45938873291016, -0.9999717473983765, 0.0023622966837137938, -0.007140748668462038, 0.00002453153138048947, 0.9504163265228271, 0.31098055839538574, 0.0075213126838207245, 0.31097161769866943, -0.9503894448280334)), -- [1] Kepala Tengah (Utama)
getOff(baseRef, CFrame.new(203.3807373046875, 12.144608497619629, -64.58366394042969, -0.9881877899169922, 0.0020154754165560007, 0.15324385464191437, 0.04300922527909279, 0.9633787870407104, 0.2646729052066803, -0.14709845185279846, 0.26813700795173645, -0.9520856738090515)), -- [2] Kepala Kanan
getOff(baseRef, CFrame.new(196.47140502929688, 12.144608497619629, -64.46726989746094, -0.9922080039978027, 0.0019081804202869534, -0.12461142241954803, -0.030268877744674683, 0.9662537574768066, 0.255808562040329, 0.12089492380619049, 0.25758394598960876, -0.9586628675460815)), -- [3] Kepala Kiri
getOff(baseRef, CFrame.new(200.55374145507812, 9.997815132141113, -65.8962631225586, 0.011634256690740585, -0.9998592734336853, 0.01209464855492115, -0.9996784925460815, -0.011900508776307106, -0.022389855235815048, 0.02253078483045101, -0.011830298230051994, -0.9996806383132935)),
getOff(baseRef, CFrame.new(201.73304748535156, 11.699615478515625, -65.55762481689453, -0.9997870922088623, -0.020352469757199287, 0.0034083069767802954, -0.020009975880384445, 0.9965177774429321, 0.08094435930252075, -0.005043855868279934, 0.08085893094539642, -0.9967127442359924)),
getOff(baseRef, CFrame.new(197.95692443847656, 11.64893627166748, -65.57623291015625, -0.9997870922088623, -0.020352384075522423, 0.003408305812627077, -0.020009886473417282, 0.9965177774429321, 0.08094478398561478, -0.005043855868279934, 0.08085934817790985, -0.9967127442359924)),
getOff(baseRef, CFrame.new(199.9916534423828, 9.876144409179688, -65.82450103759766, -0.9997870922088623, -0.020351946353912354, 0.0034083069767802954, -0.020009439438581467, 0.9965176582336426, 0.08094686269760132, -0.005043855868279934, 0.08086142688989639, -0.9967127442359924)),
getOff(baseRef, CFrame.new(200.1062469482422, 8.116905212402344, -65.7476577758789, -0.9997904300689697, -0.020351704210042953, 0.0034083081409335136, -0.020009208470582962, 0.9965173006057739, 0.08094825595617294, -0.005043872632086277, 0.08086279034614563, -0.9967158436775208)),
getOff(baseRef, CFrame.new(200.07086181640625, 6.217313766479492, -65.79713439941406, -0.9997870922088623, -0.020351329818367958, 0.0034082906786352396, -0.020008813589811325, 0.9965173006057739, 0.08094976842403412, -0.005043855868279934, 0.0808643251657486, -0.9967123866081238)),
getOff(baseRef, CFrame.new(200.62400817871094, 6.589557647705078, -66.70326232910156, 0.014601275324821472, -0.999857485294342, 0.008065760135650635, -0.9589880108833313, -0.01172405481338501, 0.2832024097442627, -0.2830718159675598, -0.011869758367538452, -0.9590224027633667))
}
local function GetBallSilent()
local b = LP.Backpack:FindFirstChild("SoccerBall") or (LP.Character and LP.Character:FindFirstChild("SoccerBall"))
if not b and not hasFetchedBall then
hasFetchedBall = true
pcall(function()
game:GetService("ReplicatedStorage").RE:FindFirstChild("1Too1l"):InvokeServer("PickingTools", "SoccerBall")
end)
end
local ballsFolder = workspace:FindFirstChild("WorkspaceCom") and workspace.WorkspaceCom:FindFirstChild("001_SoccerBalls")
if ballsFolder then
local ball = ballsFolder:FindFirstChild("Soccer" .. LP.Name)
if ball then
ball.CanCollide = false
return ball
end
end
return nil
end
local function FindNearestPrey()
local nearestPlayer = nil
local shortestDistance = RAMPAGE_RADIUS
local myPos = witherCurrentPos
for _, p in ipairs(Players:GetPlayers()) do
if p ~= LP and Players:FindFirstChild(p.Name) and not rampageBlacklist[p.Name] then
local char = p.Character
if char then
local hum = char:FindFirstChildOfClass("Humanoid")
if hum and hum.Health > 0 and not hum.Sit then
local torso = char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso") or char:FindFirstChild("HumanoidRootPart")
if torso then
local dist = (myPos - torso.Position).Magnitude
if dist < shortestDistance then
shortestDistance = dist
nearestPlayer = p
end
end
end
end
end
end
return nearestPlayer
end
-- [[ GUI SYSTEM V6.0.9 ]] --
local sg = Instance.new("ScreenGui", CoreGui)
sg.Name = "Abyss_Wither_Control"
local main = Instance.new("Frame", sg)
main.Size, main.Position = UDim2.new(0, 180, 0, 165), UDim2.new(0.05, 0, 0.4, 0)
main.BackgroundColor3, main.BorderSizePixel = Color3.fromRGB(10, 10, 10), 0
main.ClipsDescendants = true
local titleBar = Instance.new("Frame", main)
titleBar.Size, titleBar.BackgroundColor3 = UDim2.new(1, 0, 0, 25), Color3.fromRGB(25, 25, 25)
titleBar.BorderSizePixel = 0
local titleLabel = Instance.new("TextLabel", titleBar)
titleLabel.Size, titleLabel.Position = UDim2.new(1, -10, 1, 0), UDim2.new(0, 5, 0, 0)
titleLabel.BackgroundTransparency, titleLabel.Text = 1, "Wither Of Soulking V6.0.9"
titleLabel.TextColor3, titleLabel.Font, titleLabel.TextSize = Color3.new(1, 1, 1), Enum.Font.SourceSansBold, 12
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
local ballStatusLabel = Instance.new("TextLabel", main)
ballStatusLabel.Size = UDim2.new(1, -10, 0, 15)
ballStatusLabel.Position = UDim2.new(0, 5, 1, -30)
ballStatusLabel.BackgroundTransparency = 1
ballStatusLabel.Text = "BALL: FETCHING..."
ballStatusLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
ballStatusLabel.Font = Enum.Font.Code
ballStatusLabel.TextSize = 10
ballStatusLabel.TextXAlignment = Enum.TextXAlignment.Left
local creditLabel = Instance.new("TextLabel", main)
creditLabel.Size, creditLabel.Position = UDim2.new(1, 0, 0, 15), UDim2.new(0, 0, 1, -15)
creditLabel.BackgroundTransparency, creditLabel.Text = 1, "By DYTON_txt "
creditLabel.TextColor3, creditLabel.Font, creditLabel.TextSize = COLORS.Accent, Enum.Font.Code, 10
local dragging, dragStart, startPos
titleBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging, dragStart, startPos = true, input.Position, main.Position
end
end)
UIS.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
UIS.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end)
local function styleBtn(b)
b.BackgroundColor3, b.BorderSizePixel, b.BorderColor3 = COLORS.Void, 1, Color3.fromRGB(40, 40, 40)
b.TextColor3, b.Font, b.TextSize = Color3.new(0.8, 0.8, 0.8), Enum.Font.SourceSansBold, 11
b.MouseEnter:Connect(function() b.BorderColor3 = (rampageMode and COLORS.SoulAuraBlue or COLORS.Accent) b.TextColor3 = Color3.new(1,1,1) end)
b.MouseLeave:Connect(function() b.BorderColor3 = Color3.fromRGB(40, 40, 40) b.TextColor3 = Color3.new(0.8,0.8,0.8) end)
end
local container = Instance.new("Frame", main)
container.Size, container.Position, container.BackgroundTransparency = UDim2.new(1, -10, 1, -65), UDim2.new(0, 5, 0, 30), 1
local function createBtn(txt, pos, size)
local b = Instance.new("TextButton", container)
b.Text, b.Position, b.Size = txt, pos, size styleBtn(b)
return b
end
local SummonBtn = createBtn("ACTIVATE WITHER", UDim2.new(0,0,0,0), UDim2.new(1,0,0.28,0))
local TargetBox = Instance.new("TextBox", container)
TargetBox.Size = UDim2.new(1, 0, 0.26, 0)
TargetBox.Position = UDim2.new(0, 0, 0.34, 0)
TargetBox.BackgroundColor3 = Color3.fromRGB(5, 5, 5)
TargetBox.BorderSizePixel = 1
TargetBox.BorderColor3 = Color3.fromRGB(40, 40, 40)
TargetBox.TextColor3 = Color3.fromRGB(180, 180, 180)
TargetBox.PlaceholderText = "Type Target & Press Enter"
TargetBox.PlaceholderColor3 = Color3.fromRGB(80, 80, 80)
TargetBox.Font = Enum.Font.Code
TargetBox.TextSize = 10
TargetBox.ClearTextOnFocus = false
local RampageBtn = createBtn("TARGET ALL: OFF", UDim2.new(0, 0, 0.66, 0), UDim2.new(1, 0, 0.28, 0))
TargetBox.FocusLost:Connect(function(enterPressed)
if enterPressed then
if rampageMode then return end
local searchKey = TargetBox.Text:lower()
if searchKey == "" then
TargetPlayer = nil
TargetBox.Text = ""
TargetBox.BorderColor3 = Color3.fromRGB(40, 40, 40)
return
end
local found = false
for _, p in ipairs(Players:GetPlayers()) do
if p.Name:lower():find(searchKey) or p.DisplayName:lower():find(searchKey) then
TargetPlayer = p
TargetBox.Text = p.DisplayName
TargetBox.BorderColor3 = COLORS.SuccessGreen
found = true
break
end
end
if not found then
TargetPlayer = nil
TargetBox.Text = "[NOT FOUND]"
TargetBox.BorderColor3 = COLORS.WarningRed
task.wait(1)
TargetBox.Text = ""
TargetBox.BorderColor3 = Color3.fromRGB(40, 40, 40)
end
end
end)
SummonBtn.MouseButton1Click:Connect(function()
petMode = not petMode
if petMode then
SummonBtn.TextColor3 = COLORS.Accent
SummonBtn.Text = "DEACTIVATE WITHER"
hasFetchedBall = false
local char = LP.Character
if char and char:FindFirstChild("HumanoidRootPart") then
summonOriginPos = char.HumanoidRootPart.Position
witherCurrentPos = summonOriginPos
lastLookAtPos = summonOriginPos + Vector3.new(0, 0, -1)
isSummoning = true
summonStartTime = tick()
end
local p = workspace:WaitForChild("WorkspaceCom"):WaitForChild("001_TrafficCones")
local targetName = (OwnerName == "terasiremik") and "Propterasiremik" or ("Prop" .. OwnerName)
local rawProps = {}
for _, v in ipairs(p:GetChildren()) do
if v.Name == targetName then table.insert(rawProps, v) end
end
for id, storedProp in pairs(PERMANENT_PROP_LOCK) do
if not storedProp or not storedProp.Parent then PERMANENT_PROP_LOCK[id] = nil end
end
for _, prop in ipairs(rawProps) do
local alreadyRegistered = false
for id, storedProp in pairs(PERMANENT_PROP_LOCK) do
if storedProp == prop then alreadyRegistered = true break end
end
if not alreadyRegistered then
for id = 1, 15 do
if not PERMANENT_PROP_LOCK[id] then
PERMANENT_PROP_LOCK[id] = prop
break
end
end
end
end
wingRemoteCache = {}
for id = 1, 15 do
if PERMANENT_PROP_LOCK[id] and PERMANENT_PROP_LOCK[id].Parent then
table.insert(wingRemoteCache, PERMANENT_PROP_LOCK[id])
end
end
else
SummonBtn.TextColor3 = Color3.new(0.8,0.8,0.8)
SummonBtn.Text = "ACTIVATE WITHER"
rampageMode = false
isSummoning = false
hasFetchedBall = false
RampageBtn.Text = "TARGET ALL: OFF"
RampageBtn.TextColor3 = Color3.new(0.8, 0.8, 0.8)
TargetBox.Text = ""
TargetBox.BorderColor3 = Color3.fromRGB(40, 40, 40)
table.clear(currentCFrames)
table.clear(activeProjectiles)
table.clear(rampageBlacklist)
end
end)
RampageBtn.MouseButton1Click:Connect(function()
if not petMode or isSummoning then return end
rampageMode = not rampageMode
if rampageMode then
table.clear(rampageBlacklist)
RampageBtn.Text = "SOUL RAMPAGE: ACTIVE "
RampageBtn.TextColor3 = COLORS.SoulAuraBlue
TargetBox.Text = "[SOUL HUNTER]"
TargetBox.BorderColor3 = COLORS.SoulAuraBlue
else
rampageMode = false
RampageBtn.Text = "TARGET ALL: OFF"
RampageBtn.TextColor3 = Color3.new(0.8, 0.8, 0.8)
TargetPlayer = nil
TargetBox.Text = ""
TargetBox.BorderColor3 = Color3.fromRGB(40, 40, 40)
end
end)
local function getTargetTorso(player)
if not player or not player.Parent or not Players:FindFirstChild(player.Name) or not player.Character then return nil end
local char = player.Character
return char:FindFirstChild("Torso") or char:FindFirstChild("UpperTorso") or char:FindFirstChild("HumanoidRootPart")
end
-- [[ MAIN PATHFINDER & BEDROCK FLING ENGINE WITH JOSEP PREDICTIVE MATH ]] --
RS.Heartbeat:Connect(function(dt)
local totalProps = #wingRemoteCache
if not petMode or totalProps < 1 then return end
local t = tick()
local activeBall = GetBallSilent()
local flingActiveThisFrame = false
for _, proj in pairs(activeProjectiles) do
if proj.IsStuck then flingActiveThisFrame = true break end
end
if isSummoning then
ballStatusLabel.Text = "WITHER: AWAKENING (WHITE)..."
ballStatusLabel.TextColor3 = COLORS.PureWhiteOnly
elseif not activeBall then
ballStatusLabel.Text = "BALL: DISPAWNED / MISSING "
ballStatusLabel.TextColor3 = COLORS.WarningRed
elseif flingActiveThisFrame then
ballStatusLabel.Text = "BALL: FLINGING TARGET "
ballStatusLabel.TextColor3 = (rampageMode and COLORS.SoulAuraBlue or COLORS.Accent)
else
ballStatusLabel.Text = rampageMode and "BALL: SOUL RAMPAGE MODE " or "BALL: PET HOVER LOCK "
ballStatusLabel.TextColor3 = rampageMode and COLORS.SoulAuraBlue or COLORS.SuccessGreen
end
if rampageMode and not isSummoning then
if TargetPlayer then
local enemyChar = TargetPlayer.Character
local enemyHum = enemyChar and enemyChar:FindFirstChildOfClass("Humanoid")
local enemyTorso = getTargetTorso(TargetPlayer)
if not enemyChar or not enemyHum or enemyHum.Health <= 0 or enemyHum.Sit or rampageBlacklist[TargetPlayer.Name] or not Players:FindFirstChild(TargetPlayer.Name) then
TargetPlayer = nil
elseif enemyTorso then
local currentVelocity = enemyTorso.AssemblyLinearVelocity.Magnitude
local distanceMoved = (enemyTorso.Position - targetAttackTrack.initialPos).Magnitude
if currentVelocity > 120 or (flingActiveThisFrame and distanceMoved > 85) then
rampageBlacklist[TargetPlayer.Name] = true
TargetPlayer = nil
elseif t - targetAttackTrack.startTime > MAX_STUCK_TIME and distanceMoved < 8 then
rampageBlacklist[TargetPlayer.Name] = true
TargetPlayer = nil
end
end
end
if t - lastScanTime > 0.35 then
lastScanTime = t
if not TargetPlayer then
local prey = FindNearestPrey()
if prey then
TargetPlayer = prey
targetAttackTrack.player = prey
targetAttackTrack.startTime = t
if prey.Character and getTargetTorso(prey) then
targetAttackTrack.initialPos = getTargetTorso(prey).Position
end
TargetBox.Text = "HUNTING: " .. prey.DisplayName
TargetBox.BorderColor3 = COLORS.SoulAuraBlue
else
TargetBox.Text = "[SCANNING FAIL...]"
TargetBox.BorderColor3 = Color3.fromRGB(40, 40, 40)
end
end
end
end
local finalPos
local isPetState = false
if isSummoning then
local elapsed = t - summonStartTime
if elapsed >= SUMMON_DURATION then
isSummoning = false
else
local rotationSpeed = (elapsed ^ 2) * 12
local currentAngle = elapsed * rotationSpeed
local currentHeight = (elapsed / SUMMON_DURATION) * HOVER_HEIGHT
witherCurrentPos = summonOriginPos + Vector3.new(0, currentHeight, 0)
finalPos = CFrame.new(witherCurrentPos) * CFrame.Angles(0, currentAngle, 0)
end
end
if not isSummoning then
local currentTarget = TargetPlayer
if not rampageMode and (not currentTarget or not currentTarget.Character or not getTargetTorso(currentTarget)) then
currentTarget = LP
isPetState = true
end
local targetTorso = getTargetTorso(currentTarget)
if not targetTorso and rampageMode then
finalPos = CFrame.new(witherCurrentPos, lastLookAtPos)
elseif targetTorso then
local idealTargetPos
if isPetState then
local ownerChar = LP.Character
local ownerRoot = ownerChar and ownerChar:FindFirstChild("HumanoidRootPart")
if ownerRoot then
-- [[ Poin B: Levitation Sway (Ayunan Melayang Naik-Turun) khusus posisi Pet ]] --
local swayY = math.sin(t * 1.8) * 0.45
local animatedOffset = PET_OFFSET + Vector3.new(0, swayY, 0)
idealTargetPos = (ownerRoot.CFrame * CFrame.new(animatedOffset)).Position
else
idealTargetPos = targetTorso.Position + Vector3.new(0, 8, 5)
end
else
local driftX = math.sin(t * 1.5) * RANDOM_DRIFT_SCALE
local driftZ = math.cos(t * 1.2) * RANDOM_DRIFT_SCALE
local driftY = math.sin(t * 2.5) * (RANDOM_DRIFT_SCALE * 0.4)
idealTargetPos = targetTorso.Position + Vector3.new(driftX, HOVER_HEIGHT + driftY, driftZ)
end
local moveDirection = (idealTargetPos - witherCurrentPos)
local distance = moveDirection.Magnitude
if distance > 0.1 then
local speedMod = isPetState and 15 or 5
local maxMove = WITHER_SPEED * speedMod * dt
local step = math.min(distance, maxMove)
witherCurrentPos = witherCurrentPos + (moveDirection.Unit * step)
end
local rawLookAt
if isPetState then
local ownerChar = LP.Character
local ownerRoot = ownerChar and ownerChar:FindFirstChild("HumanoidRootPart")
if ownerRoot then
rawLookAt = ownerRoot.Position + (ownerRoot.CFrame.LookVector * 50)
else
rawLookAt = witherCurrentPos + Vector3.new(0, 0, -5)
end
else
rawLookAt = Vector3.new(targetTorso.Position.X, witherCurrentPos.Y, targetTorso.Position.Z)
end
lastLookAtPos = lastLookAtPos:Lerp(rawLookAt, 1 - math.exp(-14 * dt))
finalPos = CFrame.new(witherCurrentPos, lastLookAtPos)
else
finalPos = CFrame.new(witherCurrentPos)
end
end
local rotCF = CFrame.Angles(math.rad(MANUAL_ROTATION.X), math.rad(MANUAL_ROTATION.Y), math.rad(MANUAL_ROTATION.Z))
local lerpAlpha = 1 - math.exp(-22 * dt)
if not isSummoning then
for auraId, projData in pairs(activeProjectiles) do
local currentEnemyTorso = getTargetTorso(TargetPlayer)
if currentEnemyTorso then
local enemyVelocity = currentEnemyTorso.AssemblyLinearVelocity
local pingAndFpsOffset = dt + 0.05
local predictedPosition = currentEnemyTorso.Position + (enemyVelocity * pingAndFpsOffset)
if projData.IsStuck then
projData.CurrentPos = predictedPosition
if activeBall then
activeBall.CFrame = CFrame.new(predictedPosition)
activeBall.Velocity = Vector3.new(0, 9e10, 0)
end
if t - projData.ImpactTime >= IMPACT_LINGER_TIME then
activeProjectiles[auraId] = nil
end
else
projData.TargetPos = predictedPosition
local pDir = (projData.TargetPos - projData.CurrentPos)
local pDist = pDir.Magnitude
if pDist > 1.8 then
local pStep = math.min(pDist, PROJECTILE_SPEED * 3.5 * dt)
projData.CurrentPos = projData.CurrentPos + (pDir.Unit * pStep)
else
projData.IsStuck = true
projData.ImpactTime = t
projData.CurrentPos = predictedPosition
if activeBall then
activeBall.CFrame = CFrame.new(predictedPosition)
activeBall.Velocity = Vector3.new(0, 9e10, 0)
end
end
end
else
activeProjectiles[auraId] = nil
end
end
else
table.clear(activeProjectiles)
end
for i = 1, totalProps do
local targetCF
if i <= 10 then
local offset = WitherParts[i]
-- [[ Poin 1: Breath of the Void (Efek Bernapas Asynchronous di 3 Kepala) ]] --
if isPetState and not isSummoning then
if i == 1 then -- Kepala Tengah (Maju Mundur)
local breathZ = math.sin(t * 2.5) * 0.22
offset = offset * CFrame.new(0, 0, breathZ)
elseif i == 2 then -- Kepala Kanan (Asynchronous breathing)
local breathZ = math.cos(t * 2.3) * 0.18
offset = offset * CFrame.new(0, 0, breathZ)
elseif i == 3 then -- Kepala Kiri (Asynchronous breathing)
local breathZ = math.sin(t * 2.1) * 0.18
offset = offset * CFrame.new(0, 0, breathZ)
end
end
targetCF = finalPos * rotCF * offset
else
-- [[ ABSOLUTE HEAD STACK ALIGNMENT WITH INTEGRATED BREATH SYNC ]] --
local auraId = i - 10
local activeProj = activeProjectiles[auraId]
if activeProj and not isSummoning then
targetCF = CFrame.new(activeProj.CurrentPos, lastLookAtPos)
else
local targetHeadId
if auraId == 1 or auraId == 2 then
targetHeadId = 2
elseif auraId == 3 or auraId == 4 then
targetHeadId = 3
else
targetHeadId = 1
end
-- Mengambil CFrame Kepala yang sudah teranimasi napas di loop atas agar peluru ikut menempel sempurna
local headCFrame = currentCFrames[targetHeadId] or finalPos
targetCF = headCFrame
end
end
currentCFrames[i] = (currentCFrames[i] or targetCF):Lerp(targetCF, lerpAlpha)
end
if TargetPlayer and getTargetTorso(TargetPlayer) and not isSummoning then
if t - lastAttackTime > ATTACK_COOLDOWN then
lastAttackTime = t
local availableAuras = {}
for auraId = 1, 5 do
if not activeProjectiles[auraId] then
table.insert(availableAuras, auraId)
end
end
local freeCount = #availableAuras
if freeCount > 0 then
local burstCount = math.random(1, math.min(3, freeCount))
local enemyTorso = getTargetTorso(TargetPlayer)
task.defer(function()
for k = 1, burstCount do
local auraId = availableAuras[k]
local targetHeadId
if auraId == 1 or auraId == 2 then targetHeadId = 2
elseif auraId == 3 or auraId == 4 then targetHeadId = 3
else targetHeadId = 1 end
local headCFrame = currentCFrames[targetHeadId]
if headCFrame and enemyTorso and TargetPlayer then
local enemyVelocity = enemyTorso.AssemblyLinearVelocity
local predictedTargetPos = enemyTorso.Position + (enemyVelocity * (dt + 0.05))
activeProjectiles[auraId] = {
CurrentPos = headCFrame.Position,
TargetPos = predictedTargetPos,
IsStuck = false,
ImpactTime = 0
}
end
if k < burstCount then task.wait(math.random(4, 9) / 100) end
end
end)
end
end
end
if t - lastNetworkUpdate > 0.014 then
local canUpdateColor = (t - lastColorUpdate > 0.05)
local frameCFrames = currentCFrames
local startSend = os.clock()
for i = 1, totalProps do
local prop = wingRemoteCache[i]
local targetCFrame = frameCFrames[i]
if prop and targetCFrame then
task.spawn(function()
local cfR = prop:FindFirstChild("SetCurrentCFrame")
if cfR then
pcall(function()
cfR:InvokeServer(targetCFrame)
if i == 1 then
estimatedPing = (estimatedPing * 0.85) + ((os.clock() - startSend) * 0.15)
end
end)
end
if canUpdateColor and i == colorIndex then
local crR = prop:FindFirstChild("ChangePropColor")
if crR then pcall(function() crR:InvokeServer(getAbyssColor(t, i)) end) end
end
end)
end
end
if canUpdateColor then
colorIndex = (colorIndex % totalProps) + 1
lastColorUpdate = t
end
lastNetworkUpdate = t
end
end)



Skidded