Fe zombie r15
Key RequiredUniversal

Fe zombie r15

Universal Scriptoofeccentricoofeccentric 3K views 4.8K executesUpdated Dec 11, 2025
0.0/ 5(2 votes)
020% Positive
Lua Script•450 lines (14436 chars)
--[[// 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
})

Features & Information

You will need an r15 to r6 Animation script like this loadstring(game:HttpGet("https://raw.githubusercontent.com/Imagnir/r6_anims_for_r15/main/r6_anims.lua", true))()

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts