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.
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().C0 = game.Selection:Get().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: http://wiki.roblox.com/index.php?title=Weld
Short term solution:
I guess I just have to avoid those 3 ways that create this weird behavior.
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.