Welding a player to another player's character creates weird movement (Titan Shifting Grab Move)

My goal is so make the titan player grab the target on the ground and it stays on his arm. I did this by welding the target to the titan character’s arm so it stays and sticks, but the issue is that the movement is very unusual when a target is grabbed.

I tried making the target’s humanoidrootpart massless to true but it doesn’t seem to do anything. Moreover, I look through all other posts regarding similar issues and can’t seem to find a solution to this.

game.ReplicatedStorage.TitanRemotes.GrabRemote.OnServerEvent:Connect(function(player)
	
	
	print("grab")
	
	player.Character.Humanoid:LoadAnimation(script.Parent.Animation.Grab):Play()
	
	local hitbox2 = script.Parent.Models.Hitbox:Clone()
	hitbox2.Parent = player.Character
	hitbox2.Massless = true
	hitbox2.CFrame = player.Character["Right Arm"].CFrame * CFrame.new(0, -13, 0)
	hitbox2.Orientation = hitbox2.Orientation + Vector3.new(0, 0, 0)

	-- Create WeldConstraint
	local weldConstraint = Instance.new("WeldConstraint", hitbox2)
	weldConstraint.Part0 = hitbox2
	weldConstraint.Part1 = player.Character["Right Arm"]

	-- Add hitbox to Debris for cleanup after 0.8 seconds
	game.Debris:AddItem(hitbox2, 0.9)

	
	

	
	--player.Character.HumanoidRootPart.EnableFluidForces = false
	
	hitbox2.Touched:connect(function(hit)
		if hit.Parent == player.Character then return end
		if hit.Parent.Humanoid then
			hitbox2:Destroy()
			hit.Parent.HumanoidRootPart.Massless = true
			hit.Parent.Humanoid.AutoRotate = false
			hit.Parent.HumanoidRootPart.Anchored = false
		---	hit.Parent.HumanoidRootPart.RootPriority = -10
			local weld = Instance.new("Weld",hit.Parent.HumanoidRootPart)
			weld.Part0 = hit.Parent.HumanoidRootPart
			weld.Part1 = player.Character["Right Arm"]
			weld.C0 = CFrame.new(0,15,0)
		end	

	end)
end)
1 Like

maybe try using a weld constraint?

1 Like

thats what i used initially, the problem was still a thing thus i tried and swapped to just weld which also then still remained the same

have you tried to put the target parts massless?

1 Like

the problem still remains the same, it did nothing

for _, part in pairs(hit.Parent:GetDescendants()) do if part:IsA("BasePart") then part.Massless = true end end
1 Like

try mess around with cancollide or even anchored properties on the target’s baseparts

2 Likes

The titan still has weird movements.

for _, part in pairs(hit.Parent:GetDescendants()) do if part:IsA("BasePart") then
					part.Massless = true 
					part.CanCollide = false
					part.Anchored = false
				end 
			end

I tried messing with the collision groups but to no avail, nothing changed.

game.ReplicatedStorage.TitanRemotes.GrabRemote.OnServerEvent:Connect(function(player)
	
	
	print("grab")
	
	player.Character.Humanoid:LoadAnimation(script.Parent.Animation.Grab):Play()
	
	local hitbox2 = script.Parent.Models.Hitbox:Clone()
	hitbox2.Parent = player.Character
	hitbox2.Massless = true
	hitbox2.CFrame = player.Character["Right Arm"].CFrame * CFrame.new(0, -13, 0)
	hitbox2.Orientation = hitbox2.Orientation + Vector3.new(0, 0, 0)

	-- Create WeldConstraint
	local weldConstraint = Instance.new("WeldConstraint", hitbox2)
	weldConstraint.Part0 = hitbox2
	weldConstraint.Part1 = player.Character["Right Arm"]

	-- Add hitbox to Debris for cleanup after 0.8 seconds
	game.Debris:AddItem(hitbox2, 0.9)

	
	

	
	--player.Character.HumanoidRootPart.EnableFluidForces = false
	
local touchConnection
touchConnection = hitbox2.Touched:Connect(function(hit)
    if hit.Parent == player.Character then return end
    if hit.Parent:FindFirstChild("Humanoid") then
        touchConnection:Disconnect()
        hitbox2:Destroy()
			
			local PhysicsService = game:GetService("PhysicsService")
			
			
			for _,v in pairs(player.Character:GetChildren()) do
				if v:IsA("BasePart") then
					PhysicsService:SetPartCollisionGroup(v, "GrabbedCollision")
					
				end
			end

			for _,v in pairs(hit.Parent:GetChildren()) do
				if v:IsA("BasePart") then
					PhysicsService:SetPartCollisionGroup(v, "GrabbedCollision")
					v.Massless=true -- Make the bad massless
					v.CanCollide = false
				end
			end
			
			
			
		---	hit.Parent.HumanoidRootPart.RootPriority = -10
			local weld = Instance.new("Weld",hit.Parent.HumanoidRootPart)
			
			weld.Part0 = hit.Parent.HumanoidRootPart
			weld.Part1 = player.Character["Right Arm"]
			weld.C0 = player.Character["Right Arm"].CFrame:ToObjectSpace(hit.Parent.HumanoidRootPart.CFrame) * CFrame.new(0, 15, 0)

		end	

	end)
end)

idk if it will help ur case as much as it did me long ago,
Try putting the Titan’s PrimaryPart.RootPriority = --Any number higher than the grabbed.PrimaryPart.RootPriority