
KeylessUniversal

--========================================================--
-- STILL LIFE ENTITY
--========================================================--
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local Player = Players.LocalPlayer
--========================================================--
-- SETTINGS
--========================================================--
local NORMAL_SPEED = 9
local RAGE_SPEED = 30
local EXTRA_HEADS_MIN = 1
local EXTRA_HEADS_MAX = 3
local EXTRA_HANDS_MIN = 1
local EXTRA_HANDS_MAX = 4
local EXTRA_LEGS_MIN = 1
local EXTRA_LEGS_MAX = 4
local BLEND = 8
local Character
local Humanoid
local Root
local Motors = {}
local BaseC0 = {}
local ExtraParts = {}
local Rage = false
local AnimTime = 0
local LastTouch = 0
local NextTwitch = 0
--========================================================--
-- MOTOR SEARCH
--========================================================--
local function Motor(...)
for _, name in ipairs({...}) do
if Motors[name] then
return Motors[name]
end
end
return nil
end
--========================================================--
-- FIND MOTORS
--========================================================--
local function GetMotors()
table.clear(Motors)
table.clear(BaseC0)
if not Character then
return
end
for _, obj in ipairs(Character:GetDescendants()) do
if obj:IsA("Motor6D") then
Motors[obj.Name] = obj
BaseC0[obj] = obj.C0
end
end
end
--========================================================--
-- REMOVE OLD EXTRAS
--========================================================--
local function RemoveExtras()
for _, obj in ipairs(ExtraParts) do
if obj and obj.Parent then
obj:Destroy()
end
end
table.clear(ExtraParts)
end
--========================================================--
-- CREATE WELDED PART
--========================================================--
local function AddPart(source, parent, cf)
if not source or not parent then
return
end
local part = source:Clone()
-- Remove joints/scripts
for _, obj in ipairs(part:GetDescendants()) do
if obj:IsA("Motor6D")
or obj:IsA("Weld")
or obj:IsA("WeldConstraint")
or obj:IsA("Script")
or obj:IsA("LocalScript")
or obj:IsA("ModuleScript")
or obj:IsA("Humanoid")
or obj:IsA("Animator") then
obj:Destroy()
end
end
part.Name = "StillLifeExtra"
part.Anchored = false
part.CanCollide = false
part.CanTouch = false
part.CanQuery = false
part.Massless = true
part.CFrame = parent.CFrame * cf
part.Parent = Character
local weld = Instance.new("WeldConstraint")
weld.Part0 = parent
weld.Part1 = part
weld.Parent = part
table.insert(ExtraParts, part)
end
--========================================================--
-- EXTRA HEADS
--========================================================--
local function CreateHeads()
local head = Character:FindFirstChild("Head")
if not head then
return
end
local amount = math.random(
EXTRA_HEADS_MIN,
EXTRA_HEADS_MAX
)
for i = 1, amount do
local side = math.random(0,1) == 0 and -1 or 1
local cf = CFrame.new(
side * math.random(35,85) / 100,
math.random(-20,70) / 100,
math.random(-35,40) / 100
)
*
CFrame.Angles(
math.rad(math.random(-25,25)),
math.rad(math.random(-70,70)),
math.rad(math.random(-25,25))
)
AddPart(
head,
head,
cf
)
end
end
--========================================================--
-- FIND ARM PART
--========================================================--
local function FindArm(left)
if left then
return Character:FindFirstChild("Left Arm")
or Character:FindFirstChild("LeftHand")
or Character:FindFirstChild("LeftLowerArm")
else
return Character:FindFirstChild("Right Arm")
or Character:FindFirstChild("RightHand")
or Character:FindFirstChild("RightLowerArm")
end
end
--========================================================--
-- EXTRA HANDS
--========================================================--
local function CreateHands()
local left = FindArm(true)
local right = FindArm(false)
if not left and not right then
return
end
local amount = math.random(
EXTRA_HANDS_MIN,
EXTRA_HANDS_MAX
)
for i = 1, amount do
local useLeft =
math.random(0,1) == 0
local source =
useLeft and left or right
if not source then
source = left or right
end
local side =
math.random(0,1) == 0
and -1
or 1
local cf = CFrame.new(
side * math.random(30,100) / 100,
math.random(-60,70) / 100,
math.random(-30,70) / 100
)
*
CFrame.Angles(
math.rad(math.random(-80,80)),
math.rad(math.random(-80,80)),
math.rad(math.random(-80,80))
)
AddPart(
source,
Root,
cf
)
end
end
--========================================================--
-- FIND LEG
--========================================================--
local function FindLeg(left)
if left then
return Character:FindFirstChild("Left Leg")
or Character:FindFirstChild("LeftFoot")
or Character:FindFirstChild("LeftLowerLeg")
else
return Character:FindFirstChild("Right Leg")
or Character:FindFirstChild("RightFoot")
or Character:FindFirstChild("RightLowerLeg")
end
end
--========================================================--
-- EXTRA LEGS
--========================================================--
local function CreateLegs()
local left = FindLeg(true)
local right = FindLeg(false)
if not left and not right then
return
end
local amount = math.random(
EXTRA_LEGS_MIN,
EXTRA_LEGS_MAX
)
for i = 1, amount do
local source
if math.random(0,1) == 0 then
source = left
else
source = right
end
if not source then
source = left or right
end
local side =
math.random(0,1) == 0
and -1
or 1
local cf = CFrame.new(
side * math.random(25,95) / 100,
math.random(-40,70) / 100,
math.random(-40,60) / 100
)
*
CFrame.Angles(
math.rad(math.random(-35,35)),
math.rad(math.random(-60,60)),
math.rad(math.random(-30,30))
)
AddPart(
source,
Root,
cf
)
end
end
--========================================================--
-- STOP DEFAULT ANIMATION
--========================================================--
local function StopDefaultAnimations()
if not Humanoid then
return
end
for _, track in ipairs(
Humanoid:GetPlayingAnimationTracks()
) do
track:Stop(0)
end
end
--========================================================--
-- JOINT POSE
--========================================================--
local function Pose(motor, rotation, dt)
if not motor then
return
end
local base = BaseC0[motor]
if not base then
return
end
local target = base * rotation
local alpha = math.clamp(
dt * BLEND,
0,
1
)
motor.C0 = motor.C0:Lerp(
target,
alpha
)
end
--========================================================--
-- TIRED IDLE
--========================================================--
local function TiredIdle(dt)
local wave = math.sin(
AnimTime * 1.5
)
local slow = math.sin(
AnimTime * 0.6
)
local neck = Motor("Neck")
local ls = Motor(
"Left Shoulder",
"LeftShoulder"
)
local rs = Motor(
"Right Shoulder",
"RightShoulder"
)
local lh = Motor(
"Left Hip",
"LeftHip"
)
local rh = Motor(
"Right Hip",
"RightHip"
)
local root = Motor(
"RootJoint",
"Root"
)
-- Head droops forward
Pose(
neck,
CFrame.Angles(
math.rad(12 + wave * 2),
math.rad(slow * 2),
math.rad(slow * 2)
),
dt
)
-- Shoulders hang
Pose(
ls,
CFrame.Angles(
math.rad(5 + wave),
0,
math.rad(-9)
),
dt
)
Pose(
rs,
CFrame.Angles(
math.rad(5 + wave),
0,
math.rad(9)
),
dt
)
-- Slight leg relaxation
Pose(
lh,
CFrame.Angles(
math.rad(-3),
0,
0
),
dt
)
Pose(
rh,
CFrame.Angles(
math.rad(-3),
0,
0
),
dt
)
-- Slumped torso
Pose(
root,
CFrame.Angles(
math.rad(-5 + wave),
0,
math.rad(slow * 1.5)
),
dt
)
end
--========================================================--
-- TIRED RUN
--========================================================--
local function TiredRun(dt)
local cycle = AnimTime * 8
local s = math.sin(cycle)
local c = math.cos(cycle)
local neck = Motor("Neck")
local ls = Motor(
"Left Shoulder",
"LeftShoulder"
)
local rs = Motor(
"Right Shoulder",
"RightShoulder"
)
local lh = Motor(
"Left Hip",
"LeftHip"
)
local rh = Motor(
"Right Hip",
"RightHip"
)
local root = Motor(
"RootJoint",
"Root"
)
Pose(
neck,
CFrame.Angles(
math.rad(10 + s * 3),
math.rad(c * 2),
math.rad(s * 2)
),
dt
)
-- Opposite arm swing
Pose(
ls,
CFrame.Angles(
math.rad(5),
0,
math.rad(-s * 22)
),
dt
)
Pose(
rs,
CFrame.Angles(
math.rad(5),
0,
math.rad(s * 22)
),
dt
)
-- Opposite leg movement
Pose(
lh,
CFrame.Angles(
math.rad(s * 27),
0,
0
),
dt
)
Pose(
rh,
CFrame.Angles(
math.rad(-s * 27),
0,
0
),
dt
)
-- Forward tired lean
Pose(
root,
CFrame.Angles(
math.rad(-9),
0,
math.rad(s * 2)
),
dt
)
end
--========================================================--
-- TIRED JUMP
--========================================================--
local function TiredJump(dt)
local wave = math.sin(
AnimTime * 4
)
local neck = Motor("Neck")
local ls = Motor(
"Left Shoulder",
"LeftShoulder"
)
local rs = Motor(
"Right Shoulder",
"RightShoulder"
)
local lh = Motor(
"Left Hip",
"LeftHip"
)
local rh = Motor(
"Right Hip",
"RightHip"
)
local root = Motor(
"RootJoint",
"Root"
)
Pose(
neck,
CFrame.Angles(
math.rad(-5),
0,
math.rad(wave * 2)
),
dt
)
Pose(
ls,
CFrame.Angles(
math.rad(-25),
0,
math.rad(-10)
),
dt
)
Pose(
rs,
CFrame.Angles(
math.rad(-25),
0,
math.rad(10)
),
dt
)
Pose(
lh,
CFrame.Angles(
math.rad(12),
0,
0
),
dt
)
Pose(
rh,
CFrame.Angles(
math.rad(12),
0,
0
),
dt
)
Pose(
root,
CFrame.Angles(
math.rad(7),
0,
math.rad(wave * 2)
),
dt
)
end
--========================================================--
-- RAGE RUN
--========================================================--
local function RageRun(dt)
local cycle = AnimTime * 15
local s = math.sin(cycle)
local c = math.cos(cycle)
local neck = Motor("Neck")
local ls = Motor(
"Left Shoulder",
"LeftShoulder"
)
local rs = Motor(
"Right Shoulder",
"RightShoulder"
)
local lh = Motor(
"Left Hip",
"LeftHip"
)
local rh = Motor(
"Right Hip",
"RightHip"
)
local root = Motor(
"RootJoint",
"Root"
)
-- Head pushed forward
Pose(
neck,
CFrame.Angles(
math.rad(19 + s * 5),
math.rad(c * 4),
math.rad(s * 5)
),
dt
)
-- Large aggressive arm swing
Pose(
ls,
CFrame.Angles(
math.rad(-10),
math.rad(-4),
math.rad(-s * 45)
),
dt
)
Pose(
rs,
CFrame.Angles(
math.rad(-10),
math.rad(4),
math.rad(s * 45)
),
dt
)
-- Fast legs
Pose(
lh,
CFrame.Angles(
math.rad(s * 50),
0,
0
),
dt
)
Pose(
rh,
CFrame.Angles(
math.rad(-s * 50),
0,
0
),
dt
)
-- Deep forward lean
Pose(
root,
CFrame.Angles(
math.rad(-18 + c * 3),
0,
math.rad(s * 3)
),
dt
)
end
--========================================================--
-- RAGE JUMP
--========================================================--
local function RageJump(dt)
local wave = math.sin(
AnimTime * 8
)
local neck = Motor("Neck")
local ls = Motor(
"Left Shoulder",
"LeftShoulder"
)
local rs = Motor(
"Right Shoulder",
"RightShoulder"
)
local lh = Motor(
"Left Hip",
"LeftHip"
)
local rh = Motor(
"Right Hip",
"RightHip"
)
local root = Motor(
"RootJoint",
"Root"
)
Pose(
neck,
CFrame.Angles(
math.rad(20),
math.rad(wave * 3),
math.rad(wave * 3)
),
dt
)
Pose(
ls,
CFrame.Angles(
math.rad(-35),
0,
math.rad(-18)
),
dt
)
Pose(
rs,
CFrame.Angles(
math.rad(-35),
0,
math.rad(18)
),
dt
)
Pose(
lh,
CFrame.Angles(
math.rad(20),
0,
math.rad(-4)
),
dt
)
Pose(
rh,
CFrame.Angles(
math.rad(20),
0,
math.rad(4)
),
dt
)
Pose(
root,
CFrame.Angles(
math.rad(-12),
0,
math.rad(wave * 3)
),
dt
)
end
--========================================================--
-- ANIMATION UPDATE
--========================================================--
local function UpdateAnimation(dt)
if not Humanoid then
return
end
AnimTime += dt
local state = Humanoid:GetState()
local airborne =
state == Enum.HumanoidStateType.Jumping
or state == Enum.HumanoidStateType.Freefall
local moving =
Humanoid.MoveDirection.Magnitude > 0.05
if airborne then
if Rage then
RageJump(dt)
else
TiredJump(dt)
end
elseif moving then
if Rage then
RageRun(dt)
else
TiredRun(dt)
end
else
TiredIdle(dt)
end
end
--========================================================--
-- RAGE
--========================================================--
local function ToggleRage()
if not Humanoid then
return
end
if Humanoid.Health <= 0 then
return
end
Rage = not Rage
if Rage then
Humanoid.WalkSpeed = RAGE_SPEED
AnimTime = 0
print("[STILL LIFE] RAGE ON")
else
Humanoid.WalkSpeed = NORMAL_SPEED
AnimTime = 0
print("[STILL LIFE] RAGE OFF")
end
end
--========================================================--
-- PC RAGE
--========================================================--
UIS.InputBegan:Connect(function(input, processed)
if processed then
return
end
if input.KeyCode == Enum.KeyCode.R then
ToggleRage()
end
end)
--========================================================--
-- MOBILE DOUBLE TAP
--========================================================--
UIS.TouchTap:Connect(function()
local now = os.clock()
if now - LastTouch <= 0.35 then
ToggleRage()
LastTouch = 0
else
LastTouch = now
end
end)
--========================================================--
-- CHARACTER SETUP
--========================================================--
local function SetupCharacter(char)
Character = char
Humanoid = Character:WaitForChild(
"Humanoid"
)
Root = Character:WaitForChild(
"HumanoidRootPart"
)
task.wait(0.3)
RemoveExtras()
GetMotors()
Rage = false
AnimTime = 0
Humanoid.WalkSpeed = NORMAL_SPEED
Humanoid.AutoRotate = true
StopDefaultAnimations()
CreateHeads()
CreateHands()
CreateLegs()
NextTwitch =
os.clock() + 0.7
print("[STILL LIFE] Loaded")
print("[STILL LIFE] Press R to rage")
end
--========================================================--
-- MAIN LOOP
--========================================================--
RunService.Heartbeat:Connect(function(dt)
if not Character
or not Character.Parent
or not Humanoid then
return
end
if Humanoid.Health <= 0 then
return
end
-- Keep speed correct
if Rage then
if Humanoid.WalkSpeed ~= RAGE_SPEED then
Humanoid.WalkSpeed = RAGE_SPEED
end
else
if Humanoid.WalkSpeed ~= NORMAL_SPEED then
Humanoid.WalkSpeed = NORMAL_SPEED
end
end
-- Animation
UpdateAnimation(dt)
-- Random twitch
local now = os.clock()
if now >= NextTwitch then
local neck = Motor("Neck")
if neck and math.random(1,6) == 1 then
local old = neck.C0
local base = BaseC0[neck]
if base then
neck.C0 =
base *
CFrame.Angles(
math.rad(math.random(-5,5)),
math.rad(math.random(-20,20)),
math.rad(math.random(-5,5))
)
task.delay(0.08, function()
if neck and neck.Parent then
neck.C0 = old
end
end)
end
else
local list = {}
for _, motor in pairs(Motors) do
table.insert(list, motor)
end
if #list > 0 then
local motor =
list[
math.random(
1,
#list
)
]
local base = BaseC0[motor]
if base then
motor.C0 =
base *
CFrame.Angles(
math.rad(math.random(-10,10)),
math.rad(math.random(-10,10)),
math.rad(math.random(-10,10))
)
task.delay(0.06, function()
if motor and motor.Parent then
motor.C0 = base
end
end)
end
end
end
NextTwitch =
now +
math.random(
math.floor(TWITCH_MIN * 100),
math.floor(TWITCH_MAX * 100)
) / 100
end
end)
--========================================================--
-- RESPAWN
--========================================================--
Player.CharacterAdded:Connect(function(char)
task.wait(0.5)
SetupCharacter(char)
end)
--========================================================--
-- START
--========================================================--
if Player.Character then
SetupCharacter(Player.Character)
end



can you make it so that you can be tall and add more body parts? And can you make it so that if you press Q you will eat players thats near to you