After I play an animation that moves the character’s Torso far away from the HumanoidRootPart you can jump backswards and basically have speed hacks. I already tried Torso.RootPriority but it’s very inconsistent. Playing the animation on a clone of the original character isn’t a viable way for my game. If someone knows any solution to this bug it would be very useful because I’ve been dealing with this bug for months.
After some time I finally found a solution. Basically, when the animation ended (AnimationTrack.Ended), you create a new part, parent it somewhere in the workspace, weld it to the character’s humanoidrootpart and destroy it after a renderstep (all this locally). Here’s an example:
local RunService = game["Run Service"]
local Player = game.Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local HumRP: BasePart = Character:WaitForChild('HumanoidRootPart', 5) or Character:FindFirstChild('HumanoidRootPart')
if not HumRP then return end
local Part = Instance.new("Part")
Part.Massless = true
Part.Anchored = false
Part.Size = Vector3.zero
Part.Material = Enum.Material.SmoothPlastic
Part.Transparency = 1
Part.EnableFluidForces = false
Part.CastShadow = false
Part.CanCollide = false
Part.CanTouch = false
Part.CanQuery = false
Part.Parent = Character
local Weld = Instance.new("Weld")
Weld.Parent = Part
Weld.Part0 = HumRP
Weld.Part1 = Part
RunService.RenderStepped:Wait()
Part:Destroy()