local LocalPlayer = game.Players.LocalPlayer local StarterGui = game:GetService("StarterGui") function notifyPlayer(title, text) pcall(function() StarterGui:SetCore("SendNotification", { Title = title; Text = text; Duration = 5; }) end) end notifyPlayer("let go Figure Animation V4", "Reanimate FE Loaded!") local fake_transparency = 1 local Motors = { ["Left Hip"] = 0, ["Neck"] = 0, ["Left Shoulder"] = 0, ["Right Hip"] = 0, ["Right Shoulder"] = 0 } local TS = game:GetService("TweenService") local function getnext(tbl, number) local closestDiff = math.huge local closestValue = 0 for i, v in pairs(tbl) do if i > number and i - number < closestDiff then closestDiff = i - number closestValue = i end end return closestValue end local function kftotbl(kf) local tbl3 = {} for _, v in pairs(kf:GetDescendants()) do if v:IsA("Pose") then tbl3[string.sub(v.Name, 1, 1) .. string.sub(v.Name, #v.Name, #v.Name)] = v.CFrame end end return tbl3 end local function getSpeed(lastTimeStamp, currentTimeStamp) if currentTimeStamp == 0 then return 0 end return math.abs(lastTimeStamp - currentTimeStamp) end local function getAnimation(animationId) local animationObject local success, errorMsg = pcall(function() animationObject = game:GetObjects(animationId)[1] end) if not success then return nil end return animationObject end local Main = {} Main.__index = Main function Main.LoadDummy(DummyChar) local metatable = {} setmetatable(metatable, Main) metatable.char = DummyChar return metatable end function Main:LoadAnimation(animationId) local Character = self.char local animationObject = getAnimation(animationId) if not animationObject then return end local metatable = {} setmetatable(metatable, Main) metatable.char = Character metatable.animObject = animationObject return metatable end local animationplayer = Main local Players = game:GetService("Players") local Player = Players.LocalPlayer local RunService = game:GetService("RunService") local Debris = game:GetService("Debris") local UserInputService = game:GetService("UserInputService") Player.Character.Archivable = true local FakeCharacter = Player.Character:Clone() Player.Character:BreakJoints() Player.Character = nil local Connection Connection = game.Workspace.DescendantAdded:Connect(function(c) if c.Name == "Animate" and c.Parent == Player.Character then c.Enabled = false Connection:Disconnect() end end) repeat task.wait() until Player.Character task.wait(0.1) local RealChar = Player.Character RealChar.Archivable = true FakeCharacter.Name = "non" FakeCharacter.Parent = workspace local rig = animationplayer.LoadDummy(FakeCharacter) task.spawn(function() for _, LS in ipairs(FakeCharacter:GetChildren()) do if LS:IsA("LocalScript") then LS.Enabled = false task.wait(0.1) LS.Enabled = false end end end) for _, Part in ipairs(FakeCharacter:GetDescendants()) do if Part:IsA("BasePart") then Part.Transparency = fake_transparency end end for _, Decal in ipairs(FakeCharacter:GetDescendants()) do if Decal:IsA("Decal") then Decal.Transparency = fake_transparency end end Player.Character = FakeCharacter local function MotorAngle() if RealChar:FindFirstChild("Torso") then for MotorName, Motor6DAngle in pairs(Motors) do if RealChar:FindFirstChild("Torso"):FindFirstChild(MotorName) then RealChar:FindFirstChild("Torso"):FindFirstChild(MotorName).CurrentAngle = Motor6DAngle end end end end local function SetAngles() if FakeCharacter:FindFirstChild("Torso") then for MotorName, Motor6DAngle in pairs(Motors) do if FakeCharacter:FindFirstChild("Torso"):FindFirstChild(MotorName) then local Motor = FakeCharacter:FindFirstChild("Torso"):FindFirstChild(MotorName) local rx, ry, rz = Motor.Part1.CFrame:ToObjectSpace(FakeCharacter:FindFirstChild("Torso").CFrame):ToOrientation() if Motor.Name == "Right Shoulder" then Motors[MotorName] = -rx end if Motor.Name == "Left Shoulder" then Motors[MotorName] = rx end if Motor.Name == "Right Hip" then Motors[MotorName] = -rx end if Motor.Name == "Left Hip" then Motors[MotorName] = rx end if Motor.Name == "Neck" then Motors[MotorName] = -ry end end end end end local function BaseCol() for _, Part in ipairs(RealChar:GetChildren()) do if Part:IsA("BasePart") then Part.CanCollide = false end end for _, Part in ipairs(FakeCharacter:GetChildren()) do if Part:IsA("BasePart") then Part.CanCollide = false end end end RunService.Heartbeat:Connect(function() SetAngles() MotorAngle() pcall(function() RealChar.HumanoidRootPart.CFrame = FakeCharacter.Torso.CFrame RealChar.HumanoidRootPart.Velocity = Vector3.new(0, 0, 0) end) end) RunService.PreSimulation:Connect(function() BaseCol() end) local bodyVelocity = Instance.new("BodyVelocity") bodyVelocity.MaxForce = Vector3.new(0.1, 0.1, 0.1) bodyVelocity.Velocity = Vector3.new(0, 0, 0) bodyVelocity.Parent = RealChar.HumanoidRootPart