Wendigo Animation r15
Key RequiredUniversal

Wendigo Animation r15

Universal Scriptwolfn3764wolfn3764 2.5K views 5.4K executesUpdated Dec 15, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•166 lines (5837 chars)
-- CustomAnimationController.lua
-- Place as a LocalScript in StarterCharacterScripts
-- Replace the IDs below with your animation asset ids.

local CustomAnims = {
    Idle   = "rbxassetid://111622207474992",
    Walk   = "rbxassetid://134010853417610",
    Run    = "rbxassetid://102269417125238",
    Jump   = "rbxassetid://5895324424",
    Fall   = "rbxassetid://89523370947906",
    Climb  = "rbxassetid://139000839803032",
    Swim   = "rbxassetid://72406831106803",
}

-- Configuration
local RUN_THRESHOLD = 12    -- speed (studs/sec) above which "Run" plays instead of "Walk"
local WALK_THRESHOLD = 1    -- minimal speed to be considered walking

-- Internal helpers
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer

local function createAnimation(id, priority)
    local anim = Instance.new("Animation")
    anim.Name = id
    anim.AnimationId = id
    if priority then
        pcall(function() anim.Priority = priority end)
    end
    return anim
end

local function setupForCharacter(character)
    if not character then return end

    -- Wait for humanoid
    local humanoid = character:WaitForChild("Humanoid", 5)
    if not humanoid then return end

    -- Remove any default "Animate" script if present
    local oldAnimate = character:FindFirstChild("Animate")
    if oldAnimate then oldAnimate:Destroy() end

    -- Ensure an Animator exists
    local animator = humanoid:FindFirstChildOfClass("Animator")
    if not animator then
        animator = Instance.new("Animator")
        animator.Parent = humanoid
    end

    -- Create Animation objects (AnimationId = rbxassetid://...)
    local animations = {
        Idle  = createAnimation(CustomAnims.Idle, Enum.AnimationPriority.Idle),
        Walk  = createAnimation(CustomAnims.Walk, Enum.AnimationPriority.Movement),
        Run   = createAnimation(CustomAnims.Run, Enum.AnimationPriority.Movement),
        Jump  = createAnimation(CustomAnims.Jump, Enum.AnimationPriority.Action),
        Fall  = createAnimation(CustomAnims.Fall, Enum.AnimationPriority.Action),
        Climb = createAnimation(CustomAnims.Climb, Enum.AnimationPriority.Movement),
        Swim  = createAnimation(CustomAnims.Swim, Enum.AnimationPriority.Movement),
    }

    -- Load tracks (pcall because invalid assets will error)
    local tracks = {}
    for name, anim in pairs(animations) do
        local ok, track = pcall(function() return animator:LoadAnimation(anim) end)
        if ok and track then
            track.Name = name .. "Track"
            -- set looping where appropriate
            if name == "Idle" or name == "Walk" or name == "Run" or name == "Climb" or name == "Swim" then
                track.Looped = true
            else
                track.Looped = false
            end
            tracks[name] = track
        else
            warn("Could not load animation:", name, anim.AnimationId)
        end
    end

    -- Keep track of currently playing state
    local currentState = "Idle"

    local function playState(state, fadeTime)
        fadeTime = fadeTime or 0.12
        if currentState == state then return end

        -- Stop tracks that shouldn't be playing
        for name, track in pairs(tracks) do
            if track then
                if name == state then
                    if not track.IsPlaying then
                        track:Play(fadeTime)
                    end
                else
                    if track.IsPlaying then
                        track:Stop(fadeTime)
                    end
                end
            end
        end
        currentState = state
    end

    -- React to running (speed)
    local function onRunning(speed)
        -- If in special states (Jumping, Falling, Swimming, Climbing) don't override
        local hState = humanoid:GetState()
        if hState == Enum.HumanoidStateType.Freefall or
           hState == Enum.HumanoidStateType.Jumping or
           hState == Enum.HumanoidStateType.Swimming or
           hState == Enum.HumanoidStateType.Climbing then
            return
        end

        if speed >= RUN_THRESHOLD and tracks.Run then
            playState("Run")
        elseif speed >= WALK_THRESHOLD and tracks.Walk then
            playState("Walk")
        else
            playState("Idle")
        end
    end

    -- React to state changes (Jump, Fall, Swim, Climb, Land)
    humanoid.Running:Connect(onRunning)

    humanoid.StateChanged:Connect(function(oldState, newState)
        if newState == Enum.HumanoidStateType.Jumping then
            if tracks.Jump then
                playState("Jump", 0.08)
            end
        elseif newState == Enum.HumanoidStateType.Freefall then
            if tracks.Fall then
                playState("Fall", 0.12)
            end
        elseif newState == Enum.HumanoidStateType.Landed or newState == Enum.HumanoidStateType.Running or newState == Enum.HumanoidStateType.Walking then
            -- resume based on speed
            onRunning(humanoid.MoveDirection.Magnitude > 0 and humanoid.WalkSpeed or 0)
        elseif newState == Enum.HumanoidStateType.Swimming then
            if tracks.Swim then
                playState("Swim", 0.12)
            end
        elseif newState == Enum.HumanoidStateType.Climbing then
            if tracks.Climb then
                playState("Climb", 0.12)
            end
        end
    end)

    -- Ensure Idle plays on spawn
    task.delay(0.15, function()
        if tracks.Idle and not tracks.Idle.IsPlaying then
            playState("Idle", 0.2)
        end
    end)
end

-- Connect to character ready / respawn
if LocalPlayer.Character then
    setupForCharacter(LocalPlayer.Character)
end
LocalPlayer.CharacterAdded:Connect(function(char)
    -- small delay to let humanoid load
    task.wait(0.05)
    setupForCharacter(char)
end)

Features & Information

Poorly written English: This script is for those who want to scare their friends. This animation is recommended for a normal-sized character; if you increase the size to make it bigger, the character will fly. Português: Este script é para quem quer assustar os amigos. Esta animação é recomendada para um personagem de tamanho normal; se você aumentar o tamanho para torná-lo maior, o personagem voará. Esse script peguei com base nos do @Justahackertwin I got this script based on those from... @Justahackertwin

Community Comments (2)

wolfn3764wolfn3764Dec 15, 2025

The animation looks better with clothes that cover the body, and the body style has to be 1.0.

ludicious_clawludicious_clawDec 15, 2025

this is cool! :thumbsup:

More Scripts for Universal Scripts