local MODEL_ASSET_ID = 120538196837455 local IDLE_KEYFRAMES_NAME = "Jason Idle" local WALK_KEYFRAMES_NAME = "Walk" local RUN_KEYFRAMES_NAME = "Run" local SLASH_KEYFRAMES_NAME = "Swing" local BEHEAD_KEYFRAMES_NAME = "RagingBehead" local GASHING_KEYFRAMES_NAME = "Gashing Wound Hit" local RAGINGPACE_START = "RagingPaceStart" local RAGING_IDLE = "RagingIdle" local RAGE_WALK = "RageWalk" local RAGING_SWING = "RagingSwing" local KILL_KEYFRAMES_NAME = "Kill" local GUESTKILL_KEYFRAMES_NAME = "GuestKills" local RUN_SPEED = 30 local BEHEAD_PUSH_DISTANCE = 6 local RAGING_SPEED = 20 local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local rootPart = character:WaitForChild("HumanoidRootPart") local DEFAULT_WALK_SPEED = humanoid.WalkSpeed for _, track in ipairs(humanoid:GetPlayingAnimationTracks()) do pcall(function() track:Stop() track:Destroy() end) end local animate = character:FindFirstChild("Animate") if animate then animate:Destroy() end local animator = humanoid:FindFirstChildOfClass("Animator") if animator then animator:Destroy() end local R6_MAPPING = { ["Torso"] = "RootJoint", ["Head"] = "Neck", ["Right Arm"] = "Right Shoulder", ["Left Arm"] = "Left Shoulder", ["Right Leg"] = "Right Hip", ["Left Leg"] = "Left Hip", } local motors = {} for _, m in ipairs(character:GetDescendants()) do if m:IsA("Motor6D") then motors[m.Name] = m end end local function resetMotors() for _, m in pairs(motors) do if m then m.Transform = CFrame.identity end end end local asset local ok, result = pcall(function() return game:GetObjects("rbxassetid://" .. MODEL_ASSET_ID) end) if ok and result and #result > 0 then asset = result[1] else warn("FAILED TO LOAD ASSET") return end local idleSeq, walkSeq, runSeq local slashSeq, beheadSeq, gashingSeq local ragingPaceStartSeq, ragingIdleSeq, rageWalkSeq, ragingSwingSeq local killSeq, guestKillSeq for _, obj in ipairs(asset:GetDescendants()) do if obj:IsA("KeyframeSequence") then if obj.Name == IDLE_KEYFRAMES_NAME then idleSeq = obj elseif obj.Name == WALK_KEYFRAMES_NAME then walkSeq = obj elseif obj.Name == RUN_KEYFRAMES_NAME then runSeq = obj elseif obj.Name == SLASH_KEYFRAMES_NAME then slashSeq = obj elseif obj.Name == BEHEAD_KEYFRAMES_NAME then beheadSeq = obj elseif obj.Name == GASHING_KEYFRAMES_NAME then gashingSeq = obj elseif obj.Name == RAGINGPACE_START then ragingPaceStartSeq = obj elseif obj.Name == RAGING_IDLE then ragingIdleSeq = obj elseif obj.Name == RAGE_WALK then rageWalkSeq = obj elseif obj.Name == RAGING_SWING then ragingSwingSeq = obj elseif obj.Name == KILL_KEYFRAMES_NAME then killSeq = obj elseif obj.Name == GUESTKILL_KEYFRAMES_NAME then guestKillSeq = obj end end end if not idleSeq then warn("Missing '" .. IDLE_KEYFRAMES_NAME .. "'") return end if not walkSeq then warn("Missing '" .. WALK_KEYFRAMES_NAME .. "'") return end local conn local currentSeq local function stopAnimation() if conn then conn:Disconnect() conn = nil end resetMotors() currentSeq = nil end local function playSequence(seq, looped) if not seq then return end if currentSeq == seq then return end stopAnimation() currentSeq = seq local keyframes = seq:GetKeyframes() if #keyframes == 0 then return end table.sort(keyframes, function(a, b) return a.Time < b.Time end) local start = os.clock() local length = keyframes[#keyframes].Time conn = RunService.RenderStepped:Connect(function() local t = os.clock() - start for i = #keyframes, 1, -1 do local kf = keyframes[i] if t >= kf.Time then for _, pose in ipairs(kf:GetDescendants()) do if pose:IsA("Pose") then local motorName = R6_MAPPING[pose.Name] local motor = motors[motorName] if motor then motor.Transform = pose.CFrame end end end break end end if t >= length then if looped then start = os.clock() else stopAnimation() end end end) end local runEnabled = false local manualSeqPlaying = false local normalIdleSeq = idleSeq local normalWalkSeq = walkSeq local activeIdleSeq = idleSeq local activeWalkSeq = walkSeq local isRaging = false RunService.RenderStepped:Connect(function() if manualSeqPlaying then return end local moving = humanoid.MoveDirection.Magnitude > 0 if moving then if runEnabled and runSeq then playSequence(runSeq, true) humanoid.WalkSpeed = RUN_SPEED else playSequence(activeWalkSeq, true) humanoid.WalkSpeed = (isRaging and RAGING_SPEED or DEFAULT_WALK_SPEED) end else playSequence(activeIdleSeq, true) humanoid.WalkSpeed = (isRaging and RAGING_SPEED or DEFAULT_WALK_SPEED) end end) local gui = Instance.new("ScreenGui") gui.Name = "AnimationGui" gui.ResetOnSpawn = false gui.Parent = player:WaitForChild("PlayerGui") local jumpBtn = player.PlayerGui:FindFirstChild("MobileControlsFrame") and player.PlayerGui.MobileControlsFrame:FindFirstChild("JumpButton") local positions = {} if jumpBtn then local pos = jumpBtn.Position positions["Run"] = UDim2.new(pos.X.Scale, pos.X.Offset - 80, pos.Y.Scale, pos.Y.Offset) positions["Slash"] = UDim2.new(pos.X.Scale, pos.X.Offset - 160, pos.Y.Scale, pos.Y.Offset) positions["Behead"] = UDim2.new(pos.X.Scale, pos.X.Offset - 240, pos.Y.Scale, pos.Y.Offset) positions["Gash"] = UDim2.new(pos.X.Scale, pos.X.Offset - 320, pos.Y.Scale, pos.Y.Offset) positions["Raging"] = UDim2.new(pos.X.Scale, pos.X.Offset - 400, pos.Y.Scale, pos.Y.Offset) positions["Kill"] = UDim2.new(pos.X.Scale, pos.X.Offset - 480, pos.Y.Scale, pos.Y.Offset) positions["GuestKill"] = UDim2.new(pos.X.Scale, pos.X.Offset - 560, pos.Y.Scale, pos.Y.Offset) else positions["Run"] = UDim2.new(0, 50, 0, 50) positions["Slash"] = UDim2.new(0, 130, 0, 50) positions["Behead"] = UDim2.new(0, 210, 0, 50) positions["Gash"] = UDim2.new(0, 290, 0, 50) positions["Raging"] = UDim2.new(0, 370, 0, 50) positions["Kill"] = UDim2.new(0, 450, 0, 50) positions["GuestKill"] = UDim2.new(0, 530, 0, 50) end local function createButton(name, position, callback) local btn = Instance.new("TextButton") btn.Size = UDim2.new(0, 70, 0, 70) btn.Position = position btn.Text = name btn.Font = Enum.Font.SourceSansBold btn.TextScaled = true btn.TextColor3 = Color3.fromRGB(170, 0, 255) btn.BackgroundColor3 = Color3.fromRGB(30, 30, 30) btn.BorderColor3 = Color3.fromRGB(170, 0, 255) btn.BorderSizePixel = 2 local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 12) corner.Parent = btn btn.Parent = gui btn.MouseButton1Click:Connect(callback) return btn end createButton("Run", positions["Run"], function() runEnabled = not runEnabled end) createButton("Slash", positions["Slash"], function() if not slashSeq then return end manualSeqPlaying = true playSequence(slashSeq, false) local totalTime = slashSeq:GetKeyframes()[#slashSeq:GetKeyframes()].Time task.delay(totalTime, function() manualSeqPlaying = false end) end) createButton("Behead", positions["Behead"], function() if not beheadSeq then return end manualSeqPlaying = true local keyframes = beheadSeq:GetKeyframes() local totalTime = keyframes[#keyframes].Time local pushStart = totalTime * 0.4 local pushEnd = totalTime * 0.7 playSequence(beheadSeq, false) local connPush connPush = RunService.RenderStepped:Connect(function() local t = os.clock() % totalTime if t >= pushStart and t <= pushEnd then local step = (BEHEAD_PUSH_DISTANCE / (pushEnd - pushStart)) * RunService.RenderStepped:Wait() rootPart.CFrame = rootPart.CFrame + rootPart.CFrame.LookVector * step end end) task.delay(totalTime, function() manualSeqPlaying = false if connPush then connPush:Disconnect() end end) end) createButton("Gash", positions["Gash"], function() if not gashingSeq then return end manualSeqPlaying = true local oldSpeed = humanoid.WalkSpeed humanoid.WalkSpeed = 0 playSequence(gashingSeq, false) local totalTime = gashingSeq:GetKeyframes()[#gashingSeq:GetKeyframes()].Time task.delay(totalTime, function() humanoid.WalkSpeed = oldSpeed manualSeqPlaying = false end) end) createButton("Kill", positions["Kill"], function() if not killSeq then return end manualSeqPlaying = true local oldSpeed = humanoid.WalkSpeed humanoid.WalkSpeed = 0 playSequence(killSeq, false) local totalTime = killSeq:GetKeyframes()[#killSeq:GetKeyframes()].Time task.delay(totalTime, function() humanoid.WalkSpeed = oldSpeed manualSeqPlaying = false end) end) createButton("Guest Kill", positions["GuestKill"], function() if not guestKillSeq then return end manualSeqPlaying = true local oldSpeed = humanoid.WalkSpeed humanoid.WalkSpeed = 0 playSequence(guestKillSeq, false) local totalTime = guestKillSeq:GetKeyframes()[#guestKillSeq:GetKeyframes()].Time task.delay(totalTime, function() humanoid.WalkSpeed = oldSpeed manualSeqPlaying = false end) end) createButton("Raging Pace", positions["Raging"], function() if not ragingPaceStartSeq then return end if not ragingIdleSeq then return end if not rageWalkSeq then return end manualSeqPlaying = true playSequence(ragingPaceStartSeq, false) local totalTime = ragingPaceStartSeq:GetKeyframes()[#ragingPaceStartSeq:GetKeyframes()].Time task.delay(totalTime, function() isRaging = true activeIdleSeq = ragingIdleSeq activeWalkSeq = rageWalkSeq humanoid.WalkSpeed = RAGING_SPEED manualSeqPlaying = false -- Slash Raging Pace button local slashRagingBtn = Instance.new("TextButton") slashRagingBtn.Size = UDim2.new(0, 110, 0, 80) slashRagingBtn.Position = UDim2.new( positions["Raging"].X.Scale, positions["Raging"].X.Offset, positions["Raging"].Y.Scale, positions["Raging"].Y.Offset + 90 ) slashRagingBtn.Text = "Slash RP" slashRagingBtn.Font = Enum.Font.SourceSansBold slashRagingBtn.TextScaled = true slashRagingBtn.TextColor3 = Color3.fromRGB(170, 0, 255) slashRagingBtn.BackgroundColor3 = Color3.fromRGB(30, 30, 30) slashRagingBtn.BorderColor3 = Color3.fromRGB(170, 0, 255) slashRagingBtn.BorderSizePixel = 2 local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 12) corner.Parent = slashRagingBtn slashRagingBtn.Parent = gui slashRagingBtn.MouseButton1Click:Connect(function() if not ragingSwingSeq then return end manualSeqPlaying = true playSequence(ragingSwingSeq, false) local totalSwingTime = ragingSwingSeq:GetKeyframes()[#ragingSwingSeq:GetKeyframes()].Time local launchDistance = 12 local connLaunch connLaunch = RunService.RenderStepped:Connect(function() local step = (launchDistance / totalSwingTime) * RunService.RenderStepped:Wait() rootPart.CFrame = rootPart.CFrame + rootPart.CFrame.LookVector * step end) task.delay(totalSwingTime, function() if connLaunch then connLaunch:Disconnect() end isRaging = false activeIdleSeq = normalIdleSeq activeWalkSeq = normalWalkSeq humanoid.WalkSpeed = DEFAULT_WALK_SPEED manualSeqPlaying = false slashRagingBtn:Destroy() end) end) end) end) print("Added Kill animations")