New weld system needs to go

The new weld system completely disregards the Part0/Part1 properties and makes the largest part Part0 and the smallest part Part1. That causes this to happen:

The weld system can’t make up its mind which one is largest so if I go into Play mode one time with the below script running, I could have my torso be in the correct place and the first-person one behind it like it should be, or the weld system could pick the first person torso (the blue one) to be Part0 despite explicitly telling it that the normal torso is Part0 and the first person is Part1 and the real torso gets pushed forward.

local player = game.Players.LocalPlayer
local character = game.Players.LocalPlayer.Character

local body = {}
local firstPersonBody = {}

wait()

character:WaitForChild("Humanoid")
body.Torso = character:WaitForChild("Torso")
body.LeftArm = character:WaitForChild("Left Arm")
body.RightArm = character:WaitForChild("Right Arm")
body.LeftLeg = character:WaitForChild("Left Leg")
body.RightLeg = character:WaitForChild("Right Leg")

firstPersonBody.Body = Instance.new("Model", workspace.CurrentCamera)
Instance.new("Humanoid", firstPersonBody.Body)
firstPersonBody.Torso = body.Torso:clone()
firstPersonBody.RightArm = body.RightArm:clone()
firstPersonBody.LeftArm = body.LeftArm:clone()
firstPersonBody.RightLeg = body.RightLeg:clone()
firstPersonBody.LeftLeg = body.LeftLeg:clone()
firstPersonBody.Torso.Parent = firstPersonBody.Body
firstPersonBody.LeftArm.Parent = firstPersonBody.Body
firstPersonBody.RightArm.Parent = firstPersonBody.Body
firstPersonBody.LeftLeg.Parent = firstPersonBody.Body
firstPersonBody.RightLeg.Parent = firstPersonBody.Body

local torsoWeld = Instance.new("Weld")
torsoWeld.Part0 = body.Torso
torsoWeld.Part1 = firstPersonBody.Torso
firstPersonBody.Torso.CFrame = body.Torso.CFrame * CFrame.new(0,0,1)
torsoWeld.C0 = CFrame.new(0,0,1)
torsoWeld.Parent = body.Torso

I remember Simon telling me at the Atlanta Maker Faire that you guys were working on some system where everything would always be welded together automatically and developers wouldn’t have to worry about it. This isn’t accomplishing that – it’s only making it a hassle. All you’ve done is broken Part0/Part1 and now it’s impossible to tell what the weld system will do because it could randomly select either of the parts to be Part0. I can’t make that first person character now because it’s impossible to know whether it will be placed correctly or will shove up the torso. Revert it now, please, and never try something like this again. You’re taking control away from us by trying to automate it, and you will never be able to automate it perfectly (you can’t predict what every single person would want to do with welds), so just revert it back to where we can actually choose Part0/Part1.

I reported this a while ago Documentation - Roblox Creator Hub

Roblox is a game engine, nothing should be arbitrary.

What amazes me is that Part0/Part1 exist specifically for the purpose of dictating which should be the root part and which should be the sub part, yet somebody decided “Hey, you know how you can choose which part you want to be Part0 and which to be Part1? Let’s remove that and give the developer absolutely zero choice in the matter at all!”

This really hurts for my custom parkour system I’m making. It’s a custom character with many more joints than a regular Roblox character, and this screws things up. Fix please.

I ran into this issue and solved it by welding my hierarchically-welded custom character to a massive “core” part. This prevents any of the smaller weld joints from having this issue, because they have more mass because they’re connected to the massive core part down the line.

It goes like this:
Massive core part > body rotators
body rotators > body
body > arms/legs/head

How the model looks:

red = core part, blue = collision box/joints

So… I’m supposed to weld a massive lead block to my character to make welds work? That thing affects gravity you know. I appreciate the effort, but I’d rather ROBLOX nuke this horrid update instead of making my characters weigh three times as much as they normally do.

Edit: Also, gotta love those welds:

This is getting really annoying. The new system randomly picks either this or what it should on a random basis.

I was trying to look into this issue, but without more information, I can’t tell what is happening.

Please let us know:

[ul]
[li]What you see happening. This is pretty well documented in the previous posts.[/li]
[li] What you expect to happen. I couldn’t tell what the expected behavior was. It seemed very strange to try to make two humanoids which both have collision and try to place them in the same spot. That would definitely cause issues and could result in non-deterministic behavior.[/li]
[li]A link to a place that shows the incorrect behavior I tried the provided script and did have unusual things happen, but I wasn’t able to get that strange animation that was displayed to happen. Without reproduce cases, it is very hard to figure out what the issue might be.
[/ul]

What I see happening:
The second image in the OP

What I expect to happen:
The first image in the OP

Place:
I have since ditched the idea of using a second character for first person limbs and now just modify the rootjoint to move it back, so I don’t exactly have a place for you any more.

Though, Part0 should be Part0 and Part1 should be Part1 – not sure I need a place to explain that.

What we expect is that Part be the root part of the weld. That is, regardless of the size of either of the parts involved, Part1 is moved to match onto Part0, not the smaller part moved to the larger part.

Incorrect behavior can be seen by placing a weld on a small part and setting it’s Part1 to a large part. The small part moves even though it is Part0, the root part. The root part should not move. Part1 should move. This is what we expect.