Description:
When a Weld attached to the character (e.g., the Torso) continuously updates its C0 property — even by extremely small amounts — the character becomes stuck just below the water surface.
Normally, Roblox buoyancy brings the head halfway above water when swimming (without pressing Jump). However, with continuous C0 updates, the character rises normally until reaching the surface, then stops exactly under the waterline and cannot rise any further.
This behavior persists until the C0 updates stop, at which point the character immediately continues to rise and behaves normally again.
Steps to Reproduce:
-
Create a
Part(or any instance) with aWeldconnected to the character’s Torso. -
Place a ClickDetector inside a part in the Workspace named
PressMe(used to stop the loop). -
Run the following ServerScript:
local STOP = false game.Players.PlayerAdded:Connect(function(p) p.CharacterAdded:Connect(function(c) local w = game.ReplicatedStorage.BugTool:Clone() w.Weld.Part0 = c:FindFirstChild("Torso") w.Parent = c local x = 0 while not STOP do task.wait() if x ~= 0 then x = 0 else x += 0.0001 end w.Weld.C0 = CFrame.new(x, 0, 0) end end) end) game.Workspace.PressMe.ClickDetector.MouseClick:Connect(function() STOP = true end) -
Enter water with the character. (R6 is required)
-
Observe that the character rises to the surface, then stops exactly below it and remains stuck there. (Jumping will not fix it. You will be dragged under the water level)
-
Click the “PressMe” part — the script stops, and the character immediately continues floating normally.
Repro Summary:
- Occurs 100% of the time with any continuous
C0modification. - Works on R6 only.
- Reproducible in Studio and Roblox Player.
- Stops immediately once the Weld updates stop.
Testing Environment:
- Tested on a fresh Baseplate with water terrain.
- Roblox Studio and live Player, both consistent.
- No other scripts, constraints, or plugins active.
Repro file:
Bug_Maybe.rbxl (73.1 KB)
In-Game Footage (Roblox Player)
Clip hosted externally due to file size limit.
Watch on Streamable
Expected Behavior:
The character should continue to rise naturally until (~half of) the head is above the water surface, regardless of small Weld C0 updates.
Actual Behavior:
When Weld.C0 is continuously modified (even by ±0.0001), the buoyancy solver seems to lose its ability to push the character through the surface. The character remains perfectly aligned with the water surface from below until the updates stop.