--[[ FORSAKEN-STYLE ANIMATOR (STABLE VERSION) - MP3 Audio Handler (Looping, Stops on Reset) - Removed Clones - Kill (G) and Self Kill (S) roles fixed - Stun Loop logic corrected ]] local V5_LINK = "https://raw.githubusercontent.com/gObl00x/Stuff/refs/heads/main/Animator6D.lua" local AUDIO_URL = "https://files.catbox.moe/ksxhk8.mp3" -- Audio Handler local Sound = Instance.new("Sound", game:GetService("SoundService")) Sound.SoundId = "rbxassetid://0" -- Placeholder Sound.Volume = 2 Sound.Looped = true -- Since it's an external link, we use the game engine to try and fetch/play it -- Note: Directly playing external MP3s requires an executor that supports 'getcustomasset' local success_audio, assetId = pcall(function() if writefile and getcustomasset then if not isfile("jason_theme.mp3") then writefile("jason_theme.mp3", game:HttpGet(AUDIO_URL)) end return getcustomasset("jason_theme.mp3") end end) if success_audio and assetId then Sound.SoundId = assetId Sound:Play() end -- Stop music on reset local Players = game:GetService('Players') local player = Players.LocalPlayer player.CharacterRemoving:Connect(function() Sound:Stop() end) -- Load Animator6D if not getgenv().Animator6DLoadedPro then task.spawn(function() loadstring(game:HttpGet(V5_LINK))() end) repeat task.wait() until getgenv().Animator6D end local RunService = game:GetService('RunService') local Anims = {} -- Load Model local success, model = pcall(function() return game:GetObjects("rbxassetid://126832528231171")[1] end) if success and model then local function scan(obj) if obj:IsA("KeyframeSequence") then Anims[obj.Name] = obj end for _, c in ipairs(obj:GetChildren()) do scan(c) end end scan(model) end local function GetAnimLength(kfseq) if not kfseq then return 0 end local length = 0 for _, kf in ipairs(kfseq:GetKeyframes()) do if kf.Time > length then length = kf.Time end end return length end -- State Management local Character = player.Character or player.CharacterAdded:Wait() local Humanoid = Character:WaitForChild("Humanoid") local currentAnim, activeAction, actionEndTime = nil, nil, 0 local States = { isSprinting = false, isRaging = false, isStunned = false } local function Play(kfseq, looped, speed) if not kfseq or (currentAnim == kfseq and looped) then return end getgenv().Animator6DStop() getgenv().Animator6D(kfseq, speed or 1, looped ~= false) currentAnim = kfseq end local function PlayAction(name, durationOverride) local kf = Anims[name] if kf then activeAction = kf actionEndTime = tick() + (durationOverride or GetAnimLength(kf)) Play(kf, false) end end -- GUI local ScreenGui = Instance.new('ScreenGui', player:WaitForChild('PlayerGui')) ScreenGui.Name = 'Jason_V2_UI' ScreenGui.ResetOnSpawn = true local function MakeBtn(pos, text, size, color) local b = Instance.new('TextButton', ScreenGui) b.Size = size or UDim2.new(0, 150, 0, 90) b.Position = pos b.BackgroundColor3 = color or Color3.fromRGB(140, 80, 255) b.BackgroundTransparency = 0.5 b.Font = Enum.Font.SourceSansSemibold b.Text = text b.TextColor3 = Color3.fromRGB(255, 255, 255) b.TextScaled = true Instance.new('UICorner', b).CornerRadius = UDim.new(0, 8) return b end -- Buttons local SlashBtn = MakeBtn(UDim2.new(0.266, 0, 0.077, 0), "Slash") local BeheadBtn = MakeBtn(UDim2.new(0.417, 0, 0.077, 0), "Behead") local GashingBtn = MakeBtn(UDim2.new(0.559, 0, 0.077, 0), "GASHING Wound") local RagingBtn = MakeBtn(UDim2.new(0.702, 0, 0.077, 0), "Raging Pace") local SelfKillBtn= MakeBtn(UDim2.new(0.257, 0, 0.774, 0), "Self Kill (S)", UDim2.new(0, 180, 0, 90), Color3.fromRGB(10, 1, 140)) local KillBtn = MakeBtn(UDim2.new(0.120, 0, 0.774, 0), "Kill (G)", UDim2.new(0, 120, 0, 90), Color3.fromRGB(180, 20, 20)) local StunBtn = MakeBtn(UDim2.new(0.120, 0, 0.077, 0), "Stun", UDim2.new(0, 120, 0, 90)) local SprintBtn = MakeBtn(UDim2.new(0.639, 0, 0.697, 0), "Sprint") -- Logic SlashBtn.MouseButton1Click:Connect(function() PlayAction("Jason_Swing") end) BeheadBtn.MouseButton1Click:Connect(function() PlayAction("Behead") end) GashingBtn.MouseButton1Click:Connect(function() PlayAction("Gushwound") end) RagingBtn.MouseButton1Click:Connect(function() States.isRaging = not States.isRaging if States.isRaging then PlayAction("Jason_RagingStart") end end) -- Exact animation roles requested SelfKillBtn.MouseButton1Click:Connect(function() PlayAction("G+S killanim - S [cleaned up]") end) KillBtn.MouseButton1Click:Connect(function() PlayAction("G+S killanim - G [cleaned up]") end) StunBtn.MouseButton1Click:Connect(function() if States.isStunned then return end task.spawn(function() States.isStunned = true PlayAction("Jason_Stun") task.wait(GetAnimLength(Anims["Jason_Stun"])) Play(Anims["Jason_StunLoop"], true) task.wait(3.5) PlayAction("Jason_StunEnd") task.wait(GetAnimLength(Anims["Jason_StunEnd"])) States.isStunned = false end) end) SprintBtn.MouseButton1Click:Connect(function() States.isSprinting = not States.isSprinting end) -- Handler Loop RunService.RenderStepped:Connect(function() if not Character or not Humanoid.Parent then return end if States.isStunned then Humanoid.WalkSpeed = 0 Humanoid.JumpPower = 0 return else Humanoid.JumpPower = 50 end if tick() < actionEndTime then return end if activeAction then activeAction = nil; currentAnim = nil end local isMoving = Humanoid.MoveDirection.Magnitude > 0 if isMoving then if States.isRaging then Humanoid.WalkSpeed = 22 Play(Anims["Jason_RagingWalk"], true) elseif States.isSprinting then Humanoid.WalkSpeed = 20 Play(Anims["Jason_Run"], true) else Humanoid.WalkSpeed = 16 Play(Anims["Jason_Walk"] or Anims["Jason_Run"], true, 0.8) end else if States.isRaging then Play(Anims["Jason_RagingIdle"], true) else Play(Anims["Jason_Idle"], true) end end end)