I discovered an alarming, weird behavior with Welds (and Motor6Ds). This behavior happens only if you do a certain method (listed below). Since Welds and Motor6Ds both exhibit the behavior using the same, certain methods, I’ll be referring to them as welds.
Weird behavior:
A weld, executed correctly according to the Wiki, is supposed to move its Part1 after a C0 edit. Instead, the weld moves its Part0 on C0 edit. That’s what the behavior is (The weld moves Part0 instead of Part1), I think it essentially disables welds, meaning this switch-up of a behavior would make the welded model look super clunky and glitch, I classify it as a major bug- it destroys the look of everything and everyone is vulnerable.
How to trigger this behavior:
NOTE: make sure all involved parts are unanchored and have all SurfaceTypes set to smooth (standard welding procedure)
- Weld a part that is greater in size than the part it’s being welded to
- Weld a part that is equal in size than the part it’s being welded to
- SOMETIMES, if you have 2 parts of the same size and you weld those 2 parts to a part of any size, it will trigger this behavior
“Why would you weld a huge part to a small part?”, Ball and Chain, you weld the ball to the chain, one should be able to make a ball and chain (and isn’t it a staple of physics?)
Try it yourself, using this code that I used to weld two parts:
-- Weld part1 (partBeingWelded) to part2 (partBeingWeldedTo)
-- This isn't special code, we've all seen a WeldTo code, you could use your own
-- Also, you'll need code to edit the C0, welding only triggers the behavior, editing C0 lets you
-- - see the behavior.
--
-- adjust the C0 of the first object selected in studio
game.Selection:Get()[1].C0 = game.Selection:Get()[1].C0 + Vector3.new(0,2,0)
--
local weldTo = function(partBeingWelded, partBeingWeldedTo)
-- Use a weld or a Motor6D, same results
--local newWeld = Instance.new("Weld")
local newWeld = Instance.new("Motor6D")
newWeld.Part0 = partBeingWeldedTo
newWeld.Part1 = partBeingWelded
newWeld.C0 = partBeingWeldedTo.CFrame:inverse() * partBeingWelded.CFrame
newWeld.Name = "w"..partBeingWelded.Name
newWeld.Parent = partBeingWeldedTo
end
Wiki explains how to correctly weld: Documentation - Roblox Creator Hub
Short term solution:
I guess I just have to avoid those 3 ways that create this weird behavior.
Request:
Please make it so C0 edits of Welds and Motor6Ds ALWAYS adjust the Part1 in any properly-made welds (the way Wiki recommends ^)
If I made any mistakes/anything I should I know please lemme know.