
KeylessUniversal

--[[// zombie R15 Animations
Script by oof eccentric
]]
local player = game.Players.LocalPlayer
local userInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local StarterGui = game:GetService("StarterGui")
local RunService = game:GetService("RunService")
local task = task
-- | SETTINGS |
speed = false
jump = false
local isUsingSetA = true
-- === GUI Theme Settings ===
local Mode = "Red" -- "Red" or "Black"
local Colors = {
Red = {
Main = Color3.fromRGB(255, 64, 64), -- main frame
Title = Color3.fromRGB(200, 0, 0), -- top bar
Stroke = Color3.fromRGB(150, 0, 0), -- outlines
Text = Color3.fromRGB(255, 200, 200), -- button/text
Label = Color3.fromRGB(255, 180, 180) -- label
},
Black = {
Main = Color3.fromRGB(30,30,30),
Title = Color3.fromRGB(50,50,50),
Stroke = Color3.fromRGB(150,150,150),
Text = Color3.fromRGB(200,200,200),
Label = Color3.fromRGB(180,180,180)
}
}
local currentColors = Colors[Mode]
-- === Animation Sets ===
local animSetA = {
idle = "rbxassetid://0",
walk = "rbxassetid://0",
jump = "rbxassetid://0"
}
local animSetB = {
idle = "rbxassetid://90806086002292",
walk = "rbxassetid://140703855480494",
jump = "rbxassetid://0"
}
local currentSet = animSetB
local walkTrack, idleTrack, jumpTrack
local runningConnection, jumpingConnection, landedConnection
local speedEnforcer, jumpEnforcer
-- Retro effect helper (for idle & spawn-in separately)
local function playRetroTrack(track)
if not track then return end
if track.IsPlaying then track:Stop() end
track:Play()
track:AdjustSpeed(3) -- normal speed
coroutine.wrap(function()
while track.IsPlaying do
task.wait(0.1 + math.random() * 0.1)
if track.IsPlaying then
track:AdjustSpeed(0)
task.wait(0.15)
track:AdjustSpeed(3)
end
end
end)()
end
-- Spawn-in animation (adjustable)
local SPAWN_ANIM_ID = "rbxassetid://126663872512408"
local function playSpawnAnimation(character, callback)
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator")
if not animator then
animator = Instance.new("Animator")
animator.Parent = humanoid
end
local spawnAnim = Instance.new("Animation")
spawnAnim.AnimationId = SPAWN_ANIM_ID
local spawnTrack = animator:LoadAnimation(spawnAnim)
spawnTrack.Looped = false
spawnTrack.Priority = Enum.AnimationPriority.Action
-- Torso collision
local torsoParts = {"UpperTorso", "LowerTorso"}
local originalCollides = {}
for _, partName in ipairs(torsoParts) do
local part = character:FindFirstChild(partName)
if part and part:IsA("BasePart") then
originalCollides[part] = part.CanCollide
end
end
spawnTrack:Play()
-- Constantly enforce CanCollide during spawn
local enforceConnection
enforceConnection = RunService.Heartbeat:Connect(function()
if spawnTrack.IsPlaying then
for _, partName in ipairs(torsoParts) do
local part = character:FindFirstChild(partName)
if part and part:IsA("BasePart") then
part.CanCollide = true
end
end
else
enforceConnection:Disconnect()
-- Restore original CanCollide
for part, collide in pairs(originalCollides) do
if part and part.Parent then
part.CanCollide = collide
end
end
if callback then callback() end
end
end)
-- Retro freeze effect
coroutine.wrap(function()
while spawnTrack.IsPlaying do
task.wait(0.1 + math.random() * 0.05)
if spawnTrack.IsPlaying then
spawnTrack:AdjustSpeed(0)
task.wait(0.15)
spawnTrack:AdjustSpeed(1)
end
end
end)()
end
local function safeDisconnect(conn)
if conn and typeof(conn) == "RBXScriptConnection" then
conn:Disconnect()
end
end
-- Apply main animations
local function applyAnimations(character)
local humanoid = character:WaitForChild("Humanoid")
safeDisconnect(runningConnection)
safeDisconnect(jumpingConnection)
safeDisconnect(landedConnection)
safeDisconnect(speedEnforcer)
safeDisconnect(jumpEnforcer)
for _, track in ipairs({walkTrack, idleTrack, jumpTrack}) do
if track then pcall(function() track:Stop() end) end
end
local animator = humanoid:FindFirstChildOfClass("Animator")
if not animator then
animator = Instance.new("Animator")
animator.Parent = humanoid
end
if speed then
humanoid.WalkSpeed = 34
speedEnforcer = humanoid:GetPropertyChangedSignal("WalkSpeed"):Connect(function()
if humanoid.WalkSpeed ~= 34 then
humanoid.WalkSpeed = 34
end
end)
end
if jump then
humanoid.UseJumpPower = true
humanoid.JumpPower = 75
humanoid.JumpHeight = 7.2
jumpEnforcer = RunService.Heartbeat:Connect(function()
if humanoid and humanoid.Parent then
if not humanoid.UseJumpPower then humanoid.UseJumpPower = true end
if humanoid.JumpPower ~= 75 then humanoid.JumpPower = 75 end
if humanoid.JumpHeight ~= 7.2 then humanoid.JumpHeight = 7.2 end
end
end)
end
local walkAnim = Instance.new("Animation")
walkAnim.AnimationId = currentSet.walk
walkTrack = animator:LoadAnimation(walkAnim)
walkTrack.Looped = true
walkTrack.Priority = Enum.AnimationPriority.Movement
local idleAnim = Instance.new("Animation")
idleAnim.AnimationId = currentSet.idle
idleTrack = animator:LoadAnimation(idleAnim)
idleTrack.Looped = true
idleTrack.Priority = Enum.AnimationPriority.Idle
local jumpAnim = Instance.new("Animation")
jumpAnim.AnimationId = currentSet.jump
jumpTrack = animator:LoadAnimation(jumpAnim)
jumpTrack.Looped = true
jumpTrack.Priority = Enum.AnimationPriority.Action
runningConnection = humanoid.Running:Connect(function(speedVal)
if humanoid:GetState() ~= Enum.HumanoidStateType.Jumping then
if speedVal > 0 then
if idleTrack.IsPlaying then idleTrack:Stop() end
if not walkTrack.IsPlaying then walkTrack:Play() end
else
if walkTrack.IsPlaying then walkTrack:Stop() end
if not idleTrack.IsPlaying then playRetroTrack(idleTrack) end
end
end
end)
jumpingConnection = humanoid.Jumping:Connect(function(isActive)
if isActive then
if walkTrack.IsPlaying then walkTrack:Stop() end
if idleTrack.IsPlaying then idleTrack:Stop() end
jumpTrack:Play()
coroutine.wrap(function()
task.wait()
pcall(function() jumpTrack:AdjustSpeed(0) end)
end)()
end
end)
landedConnection = humanoid.StateChanged:Connect(function(_, new)
if new == Enum.HumanoidStateType.Landed then
pcall(function() jumpTrack:AdjustSpeed(1) end)
if jumpTrack.IsPlaying then jumpTrack:Stop() end
if humanoid.MoveDirection and humanoid.MoveDirection.Magnitude > 0 then
if not walkTrack.IsPlaying then walkTrack:Play() end
else
if not idleTrack.IsPlaying then playRetroTrack(idleTrack) end
end
end
end)
if not idleTrack.IsPlaying then
playRetroTrack(idleTrack)
end
end
-- GUI part, yes
local function initializeGUI()
if player.PlayerGui:FindFirstChild("AnimToggleGui") then return end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "AnimToggleGui"
screenGui.ResetOnSpawn = false
screenGui.IgnoreGuiInset = true
screenGui.Parent = player:WaitForChild("PlayerGui")
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 200, 0, 100)
mainFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
mainFrame.AnchorPoint = Vector2.new(0.5, 0.5)
mainFrame.BackgroundColor3 = currentColors.Main
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Draggable = true
mainFrame.Parent = screenGui
mainFrame.Visible = true
-- === Corruption Glitch Effect on Main Frame === // adjustable if you want
local glitchOverlay = Instance.new("Frame")
glitchOverlay.Size = UDim2.new(1,0,1,0)
glitchOverlay.Position = UDim2.new(0,0,0,0)
glitchOverlay.BackgroundColor3 = Color3.fromRGB(255,0,0)
glitchOverlay.BackgroundTransparency = 1
glitchOverlay.BorderSizePixel = 0
glitchOverlay.ZIndex = 101
glitchOverlay.Parent = mainFrame
-- Small tear lines inside mainFrame
local function spawnMainFrameTear()
local tear = Instance.new("Frame")
tear.Size = UDim2.new(1,0,0,math.random(2,4))
tear.Position = UDim2.new(0,math.random(-5,5),math.random(),0)
tear.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
tear.BackgroundTransparency = 0 -- fully visible
tear.Rotation = math.random(-2,2)
tear.ZIndex = 999
tear.BorderSizePixel = 0 -- remove black outline
tear.Parent = mainFrame
local offsetX, offsetY = math.random(-20,20), math.random(-10,10)
local dur = 0.08 + math.random()*0.07
TweenService:Create(tear, TweenInfo.new(dur, Enum.EasingStyle.Linear), {
Position = tear.Position + UDim2.new(0, offsetX, 0, offsetY)
}):Play()
task.delay(dur+0.05, function()
if tear then tear:Destroy() end
end)
end
-- Animate glitch effect on mainFrame
task.spawn(function()
while mainFrame and mainFrame.Parent do
-- flicker red overlay
glitchOverlay.BackgroundTransparency = math.random(70,90)/100
task.wait(0.05 + math.random()*0.05)
TweenService:Create(glitchOverlay, TweenInfo.new(0.1, Enum.EasingStyle.Linear), {
BackgroundTransparency = 1
}):Play()
-- small internal tears
local burst = math.random(2,5)
for i = 1, burst do
spawnMainFrameTear()
task.wait(math.random()*0.02)
end
-- small jitter of mainFrame :)
local origPos = mainFrame.Position
local jitterX = math.random(-1,1)
local jitterY = math.random(-1,1)
TweenService:Create(mainFrame, TweenInfo.new(0.03, Enum.EasingStyle.Linear), {
Position = origPos + UDim2.new(0,jitterX,0,jitterY)
}):Play()
task.wait(0.03)
TweenService:Create(mainFrame, TweenInfo.new(0.03, Enum.EasingStyle.Linear), {
Position = origPos
}):Play()
end
end)
local uiScale = Instance.new("UIScale")
uiScale.Scale = 0
uiScale.Parent = mainFrame
TweenService:Create(uiScale, TweenInfo.new(0.6, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
Scale = 1
}):Play()
local outline = Instance.new("UIStroke")
outline.Color = currentColors.Stroke
outline.Thickness = 3
outline.Parent = mainFrame
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1,0,0,40)
titleBar.BackgroundColor3 = currentColors.Title
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
local titleStroke = Instance.new("UIStroke")
titleStroke.Color = currentColors.Stroke
titleStroke.Thickness = 3
titleStroke.Parent = titleBar
for _, pos in ipairs({20, 50}) do
local circ = Instance.new("Frame")
circ.Size = UDim2.new(0,15,0,15)
circ.Position = UDim2.new(0,pos,0.5,-7)
circ.BackgroundColor3 = currentColors.Main
circ.BorderSizePixel = 0
circ.Parent = titleBar
local uic = Instance.new("UICorner")
uic.CornerRadius = UDim.new(1,0)
uic.Parent = circ
local stroke = Instance.new("UIStroke")
stroke.Color = currentColors.Stroke
stroke.Thickness = 2
stroke.Parent = circ
end
local oval = Instance.new("Frame")
oval.Size = UDim2.new(0,50,0,20)
oval.Position = UDim2.new(1,-70,0.5,-10)
oval.BackgroundColor3 = currentColors.Main
oval.BorderSizePixel = 0
oval.Parent = titleBar
local ovalCorner = Instance.new("UICorner")
ovalCorner.CornerRadius = UDim.new(1,0)
ovalCorner.Parent = oval
local ovalStroke = Instance.new("UIStroke")
ovalStroke.Color = currentColors.Stroke
ovalStroke.Thickness = 2
ovalStroke.Parent = oval
local button = Instance.new("TextButton")
button.Size = UDim2.new(0,100,0,50)
button.Position = UDim2.new(0.5,-50,0.5,-12.5)
button.Text = "r6 mode"
button.TextColor3 = currentColors.Text
button.BackgroundTransparency = 1
button.Font = Enum.Font.GothamBold
button.TextSize = 24
button.Parent = mainFrame
local bstroke = Instance.new("UIStroke")
bstroke.Color = currentColors.Stroke
bstroke.Thickness = 3
bstroke.Parent = button
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1,0,0,30)
label.Position = UDim2.new(0,0,1,-30)
label.BackgroundTransparency = 1
label.Text = "Made By R_MP6"
label.TextColor3 = currentColors.Label
label.Font = Enum.Font.Gotham
label.TextSize = 16
label.Parent = mainFrame
button.MouseButton1Click:Connect(function()
isUsingSetA = not isUsingSetA
currentSet = isUsingSetA and animSetA or animSetB
if player.Character then
applyAnimations(player.Character)
end
end)
end
-- === Main ===
if player.Character then
playSpawnAnimation(player.Character, function()
applyAnimations(player.Character)
initializeGUI()
end)
end
player.CharacterAdded:Connect(function(character)
currentSet = isUsingSetA and animSetA or animSetB
playSpawnAnimation(character, function()
applyAnimations(character)
initializeGUI()
end)
end)
-- Notifications
StarterGui:SetCore("SendNotification", {
Title = "cubeify R15 Animations",
Text = "Script has successfully launched!",
Duration = 4
})
StarterGui:SetCore("SendNotification", {
Title = "Script Creator",
Text = "Made by oof eccentric",
Duration = 4
})No comments yet for this script.



