
KeylessUniversal

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")



Cool :D