local PRIVATE_MODEL_ID = "Noli Milestone 4" local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") local Player = Players.LocalPlayer local Character = Player.Character or Player.CharacterAdded:Wait() local Humanoid = Character:WaitForChild("Humanoid") local Root = Character:WaitForChild("HumanoidRootPart") local Camera = Workspace.CurrentCamera local WALK_SPEED = 7.5 local RUN_SPEED = 27.5 local RunMode = false local currentAnim local UsingAbility = false local ObservantActive = false local BlockingAnimation = false -- blocks Idle/Walk/Run overrides -- Animator6D if not getgenv().Animator6DLoadedPro then loadstring(game:HttpGet( "https://raw.githubusercontent.com/gObl00x/Stuff/refs/heads/main/Animator6D.lua" ))() repeat task.wait() until getgenv().Animator6DLoadedPro end local model = game:GetObjects(getcustomasset(PRIVATE_MODEL_ID..".rbxmx"))[1] local Animations = {} local function scan(obj) if obj:IsA("KeyframeSequence") then table.insert(Animations,obj) end for _,v in ipairs(obj:GetChildren()) do scan(v) end end scan(model) local Idle, Walk, Run, Stab, Nova local VoidStart, VoidLoop, VoidEnd, StartDashCombo, EndDashNonChar local ObservantStart, ObservantLoop, ObservantTeleport for _,anim in ipairs(Animations) do local n = anim.Name:lower() if n:find("idle") then Idle = anim elseif n:find("walk") then Walk = anim elseif n:find("run") or n:find("sprint") then Run = anim elseif n:find("stab") then Stab = anim elseif n == "nova" then Nova = anim elseif n == "voidrushstart" then VoidStart = anim elseif n == "loopdashinit" then VoidLoop = anim elseif n == "voidrushend" then VoidEnd = anim elseif n == "startdashcombo" then StartDashCombo = anim elseif n == "enddashnonchar" then EndDashNonChar = anim elseif n == "observantstart" then ObservantStart = anim elseif n == "observantloop" then ObservantLoop = anim elseif n == "observantteleport" then ObservantTeleport = anim end end Idle = Idle or Animations[1] Walk = Walk or Animations[1] local function Play(anim, looped) if currentAnim == anim then return end getgenv().Animator6DStop() task.wait(0.03) getgenv().Animator6D(anim,1,looped~=false) currentAnim = anim end local function GetAnimLength(anim) local length = 0 for _,kf in ipairs(anim:GetKeyframes()) do if kf.Time > length then length = kf.Time end end return length end local function UpdateSpeed() Humanoid.WalkSpeed = RunMode and RUN_SPEED or WALK_SPEED end local gui = Instance.new("ScreenGui", Player.PlayerGui) local runBtn = Instance.new("TextButton", gui) runBtn.Size = UDim2.new(0,160,0,45) runBtn.Position = UDim2.new(0.02,0,0.2,0) runBtn.Text = "RUN: OFF" runBtn.BackgroundColor3 = Color3.fromRGB(30,30,30) runBtn.TextColor3 = Color3.new(1,1,1) runBtn.Active = true runBtn.Draggable = true Instance.new("UICorner", runBtn) runBtn.MouseButton1Click:Connect(function() RunMode = not RunMode UpdateSpeed() runBtn.Text = RunMode and "RUN: ON" or "RUN: OFF" end) local stabBtn = Instance.new("TextButton", gui) stabBtn.Size = UDim2.new(0,160,0,45) stabBtn.Position = UDim2.new(0.02,0,0.27,0) stabBtn.Text = "STAB" stabBtn.BackgroundColor3 = Color3.fromRGB(50,20,20) stabBtn.TextColor3 = Color3.new(1,1,1) stabBtn.Active = true stabBtn.Draggable = true Instance.new("UICorner", stabBtn) stabBtn.MouseButton1Click:Connect(function() if not Stab or UsingAbility then return end UsingAbility = true BlockingAnimation = true Play(Stab,false) task.delay(GetAnimLength(Stab)+0.05,function() UsingAbility=false BlockingAnimation=false end) end) local novaBtn = Instance.new("TextButton", gui) novaBtn.Size = UDim2.new(0,160,0,45) novaBtn.Position = UDim2.new(0.02,0,0.34,0) novaBtn.Text = "NOVA" novaBtn.BackgroundColor3 = Color3.fromRGB(20,20,60) novaBtn.TextColor3 = Color3.new(1,1,1) novaBtn.Active = true novaBtn.Draggable = true Instance.new("UICorner", novaBtn) novaBtn.MouseButton1Click:Connect(function() if not Nova or UsingAbility then return end UsingAbility = true BlockingAnimation = true Play(Nova,false) task.delay(GetAnimLength(Nova)+0.05,function() UsingAbility=false BlockingAnimation=false end) end) local voidBtn = Instance.new("TextButton", gui) voidBtn.Size = UDim2.new(0,160,0,45) voidBtn.Position = UDim2.new(0.02,0,0.41,0) voidBtn.Text = "VOID RUSH" voidBtn.BackgroundColor3 = Color3.fromRGB(60,0,80) voidBtn.TextColor3 = Color3.new(1,1,1) voidBtn.Active = true voidBtn.Draggable = true Instance.new("UICorner", voidBtn) voidBtn.MouseButton1Click:Connect(function() if UsingAbility then return end if not (VoidStart and VoidLoop and VoidEnd and StartDashCombo and EndDashNonChar) then return end UsingAbility = true BlockingAnimation = true local function Dash(speed,duration) local hitDetected = false local startTime = tick() local conn conn = RunService.RenderStepped:Connect(function() if tick()-startTime >= duration or hitDetected then conn:Disconnect() return end local look = Camera.CFrame.LookVector local flatLook = Vector3.new(look.X,0,look.Z).Unit Root.CFrame = CFrame.new(Root.Position, Root.Position + flatLook) Root.Velocity = speed * flatLook end) local touchConn touchConn = Root.Touched:Connect(function(hit) local hum = hit.Parent and hit.Parent:FindFirstChild("Humanoid") if hum and hit.Parent ~= Character then hitDetected = true touchConn:Disconnect() end end) while tick()-startTime < duration and not hitDetected do task.wait(0.03) end conn:Disconnect() if touchConn.Connected then touchConn:Disconnect() end return hitDetected end Play(VoidStart,false) task.wait(GetAnimLength(VoidStart)) Play(VoidLoop,true) local firstHit = Dash(60,4) if firstHit then task.wait(1) Play(StartDashCombo,false) task.wait(GetAnimLength(StartDashCombo)) local secondHit = false local startTime2 = tick() Play(VoidLoop,true) local conn2 conn2 = RunService.RenderStepped:Connect(function() if tick()-startTime2 >=4 then conn2:Disconnect() return end local look = Camera.CFrame.LookVector local flatLook = Vector3.new(look.X,0,look.Z).Unit Root.CFrame = CFrame.new(Root.Position, Root.Position + flatLook) Root.Velocity = (secondHit and 80 or 110) * flatLook end) local touchConn2 touchConn2 = Root.Touched:Connect(function(hit) local hum = hit.Parent and hit.Parent:FindFirstChild("Humanoid") if hum and hit.Parent ~= Character then secondHit = true Play(EndDashNonChar,false) task.wait(GetAnimLength(EndDashNonChar)) if conn2.Connected then conn2:Disconnect() end if touchConn2.Connected then touchConn2:Disconnect() end end end) while tick()-startTime2 <4 and not secondHit do task.wait(0.03) end if conn2.Connected then conn2:Disconnect() end if touchConn2.Connected then touchConn2:Disconnect() end else Play(VoidEnd,false) task.wait(GetAnimLength(VoidEnd)) end UsingAbility=false BlockingAnimation=false end) local observantBtn = Instance.new("TextButton", gui) observantBtn.Size = UDim2.new(0,160,0,45) observantBtn.Position = UDim2.new(0.02,0,0.48,0) observantBtn.Text = "OBSERVANT" observantBtn.BackgroundColor3 = Color3.fromRGB(20,60,20) observantBtn.TextColor3 = Color3.new(1,1,1) observantBtn.Active = true observantBtn.Draggable = true Instance.new("UICorner", observantBtn) local teleporting = false local HasTeleported = false local ObservantMouseConn observantBtn.MouseButton1Click:Connect(function() ObservantActive = not ObservantActive HasTeleported = false if ObservantActive then BlockingAnimation = true -- recommend to not set to false Play(ObservantStart,false) task.wait(GetAnimLength(ObservantStart)) spawn(function() while ObservantActive and not teleporting do Play(ObservantLoop,true) task.wait(0.1) end end) local mouse = Player:GetMouse() if ObservantMouseConn then ObservantMouseConn:Disconnect() end ObservantMouseConn = mouse.Button1Down:Connect(function() if teleporting or HasTeleported or not ObservantActive then return end teleporting = true HasTeleported = true local targetPos = mouse.Hit.Position Play(ObservantTeleport,false) task.delay(1.45,function() Root.CFrame = CFrame.new(targetPos + Vector3.new(0,3,0)) end) task.delay(GetAnimLength(ObservantTeleport),function() teleporting = false BlockingAnimation = false end) end) else if ObservantMouseConn then ObservantMouseConn:Disconnect() end BlockingAnimation = false end end) RunService.RenderStepped:Connect(function() if BlockingAnimation then return end local moving = Humanoid.MoveDirection.Magnitude > 0 if moving then if RunMode and Run then Play(Run,true) else Play(Walk,true) end else Play(Idle,true) end end) Player.CharacterAdded:Connect(function(c) Character = c Humanoid = c:WaitForChild("Humanoid") Root = c:WaitForChild("HumanoidRootPart") UpdateSpeed() end) Humanoid.WalkSpeed=WALK_SPEED