local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local player = Players.LocalPlayer local character = player.Character if not character then character = player.CharacterAdded:Wait() end local humanoid = character:WaitForChild("Humanoid", 5) if not humanoid then warn("Failed to find Humanoid in character") return end local Enabled = false local Anims = {} local Connections = {} local Dancing = false local Running = false local gui = Instance.new("ScreenGui") gui.Name = "AnimationMenu_" .. tostring(tick()) gui.ResetOnSpawn = false gui.Parent = player:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 250, 0, 300) frame.Position = UDim2.new(0.5, -125, 0.5, -150) frame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) frame.BorderSizePixel = 0 frame.Visible = true frame.Parent = gui local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 30) title.Position = UDim2.new(0, 0, 0, 0) title.BackgroundColor3 = Color3.fromRGB(30, 30, 30) title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Text = "Animation Menu" title.Font = Enum.Font.SourceSansBold title.TextSize = 18 title.Parent = frame local toggleButton = Instance.new("TextButton") toggleButton.Size = UDim2.new(0, 200, 0, 40) toggleButton.Position = UDim2.new(0.5, -100, 0, 40) toggleButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) toggleButton.Text = "Enable Animations" toggleButton.Font = Enum.Font.SourceSans toggleButton.TextSize = 16 toggleButton.Parent = frame local closeButton = Instance.new("TextButton") closeButton.Size = UDim2.new(0, 20, 0, 20) closeButton.Position = UDim2.new(1, -25, 0, 5) closeButton.BackgroundColor3 = Color3.fromRGB(200, 0, 0) closeButton.TextColor3 = Color3.fromRGB(255, 255, 255) closeButton.Text = "X" closeButton.Font = Enum.Font.SourceSans closeButton.TextSize = 14 closeButton.Parent = frame local infoLabel = Instance.new("TextLabel") infoLabel.Size = UDim2.new(0, 230, 0, 180) infoLabel.Position = UDim2.new(0.5, -115, 0, 90) infoLabel.BackgroundTransparency = 1 infoLabel.TextColor3 = Color3.fromRGB(200, 200, 200) infoLabel.Text = "Controls:\nShift - Run\nQ/Y/E/R/T/etc - Dances\n\nFeatures:\n- Custom animations\n- Movement states\n- Toggle on/off" infoLabel.Font = Enum.Font.SourceSans infoLabel.TextSize = 14 infoLabel.TextWrapped = true infoLabel.Parent = frame local dragging, dragInput, dragStart, startPos frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) frame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then local delta = input.Position - dragStart frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) local function PreloadAnimation(assetId) local success, result = pcall(function() local animation = Instance.new("Animation") animation.AnimationId = "rbxassetid://"..assetId local track = humanoid:LoadAnimation(animation) return track end) if not success then warn("Failed to load animation " .. assetId .. ": " .. result) return nil end local class = {} class.Track = result class.Speed = 1 class.Stopped = true class.Play = function() if not Enabled then return end if not class.Track then return end class.Stopped = false class.Track:Play() class.Track:AdjustSpeed(class.Speed) end class.Stop = function() if not class.Track then return end class.Stopped = true class.Track:Stop() end return class end local function SetupAnimations() local animationIds = { Idle = 4211217646, Walk = 913376220, Run = 913376220, Jump = 507765000, Fall = 507767968 } for key, id in pairs(animationIds) do local anim = PreloadAnimation(id) if anim then Anims[key] = anim else warn("Failed to preload animation for " .. key) end end local StopAll = function() for _, v in pairs(Anims) do if v and not v.Stopped then v:Stop() end end end Connections.Run = humanoid.Running:Connect(function(speed) if not Enabled then return end if speed > 6 and not Dancing and Anims.Walk and Anims.Walk.Stopped and not Running then StopAll() Anims.Walk:Play() elseif speed < 5 and not Dancing and Anims.Walk and not Anims.Walk.Stopped and not Running then StopAll() if Anims.Idle then Anims.Idle:Play() end end end) Connections.Jumping = humanoid.Jumping:Connect(function(active) if not Enabled then return end if active and not Dancing and Anims.Jump and Anims.Jump.Stopped then StopAll() Anims.Jump:Play() end end) Connections.FreeFalling = humanoid.FreeFalling:Connect(function(active) if not Enabled then return end if active and not Dancing and Anims.Jump and Anims.Jump.Stopped then StopAll() if Anims.Fall then Anims.Fall:Play() end end end) local mouse = player:GetMouse() Connections.ShiftDown = mouse.KeyDown:Connect(function(key) if not Enabled then return end if key:lower() == string.char(48) and Anims.Walk and not Anims.Walk.Stopped then StopAll() if Anims.Run then Anims.Run:Play() end Running = true humanoid.WalkSpeed = 26 end end) Connections.ShiftUp = mouse.KeyUp:Connect(function(key) if not Enabled then return end if key:lower() == string.char(48) then Running = false humanoid.WalkSpeed = 16 end end) local function Bind(id, key, speed) speed = speed or 1 local animation = PreloadAnimation(id) if not animation then return end Anims[key] = animation Connections[key] = UserInputService.InputBegan:Connect(function(input) if not Enabled then return end if input.KeyCode == Enum.KeyCode[key] then if not Dancing then Dancing = true StopAll() wait(0.1) animation:Play() animation.Speed = speed else Dancing = false StopAll() wait(0.1) if Anims.Idle then Anims.Idle:Play() end end end end) end local danceMoves = { {10507080897, "Q", 1}, {10731649737, "Y", 1}, {10724052169, "E", 1}, {10722615238, "R", 1}, {5971749922, "T", 1}, {5349599731, "U", 2}, {5641878449, "F", 1}, {5943669474, "O", 1}, {6024896974, "G", 1}, {10881761394, "H", 1}, {1574383214, "J", 1}, {10881753261, "K", 1}, {5349600811, "L", 1}, {10881645631, "Z", 1}, {10881661040, "X", 1}, {10881685708, "C", 1}, {5943658900, "V", 1}, {10881733560, "B", 1}, {10881694331, "N", 1}, {5927871610, "M", 1} } for _, move in pairs(danceMoves) do Bind(move[1], move[2], move[3]) end end toggleButton.MouseButton1Click:Connect(function() Enabled = not Enabled toggleButton.Text = Enabled and "Disable Animations" or "Enable Animations" toggleButton.BackgroundColor3 = Enabled and Color3.fromRGB(0, 200, 0) or Color3.fromRGB(100, 100, 100) if Enabled then humanoid.WalkSpeed = 16 if Anims.Idle then Anims.Idle:Play() end else humanoid.WalkSpeed = 16 for _, v in pairs(Anims) do if v then v:Stop() end end end end) UserInputService.InputBegan:Connect(function(input) if input.KeyCode == Enum.KeyCode.Insert then frame.Visible = not frame.Visible end end) closeButton.MouseButton1Click:Connect(function() frame.Visible = false end) local success, err = pcall(SetupAnimations) if not success then warn("Failed to setup animations: " .. err) end player.CharacterAdded:Connect(function(newChar) character = newChar humanoid = character:WaitForChild("Humanoid", 5) if not humanoid then warn("Failed to find Humanoid in new character") return end for _, conn in pairs(Connections) do conn:Disconnect() end Connections = {} Anims = {} local success, err = pcall(SetupAnimations) if not success then warn("Failed to setup animations on character respawn: " .. err) end if Enabled and Anims.Idle then Anims.Idle:Play() end end) -- GystyFr made this print("Animation Script Loaded! Menu should be visible (Press Insert to toggle if not)")