(Game-breaking) Recent update breaks RigidConstraints

As of some time last night, the horse system in my game completely stopped working

This was broken after a roblox update, not any changes to our code/published place. The horses contain a humanoid which has move inputs given to it on the client (via humanoid:Move()), and network ownership is given to the player whenever they ride the horse (confirmed by calling :GetNetworkOwner() on the root part of the rig).

For some reason, the server and/or client seems to be rejecting any movement from assemblies that have a humanoid, even when that client has network ownership. Trying to set the CFrame of the root part directly on the client simply causes the rig to immediately snap back to where it was before on the server.

Edit: Looks like I misidentified the cause of this bug! It was just the RigidConstraint that was created between the horse and the player that was bugging out.

I was able to work around this by replacing the RigidConstraint with a Motor6D, and then updating the transform to align the player with the horse’s animated Bones on Stepped client-side

11 Likes

We’re getting this at our game too, it has completely broken player movement across all morph characters (except for one, seemingly arbitrarily). It seems like it might have something to do with rigid constraints specifically? We use one to attach an invisible sound emitter part to one of the character’s root bones, and deleting that seems to free up the avatar to move like normal. Obviously this isn’t a viable fix, as we also use rigid constraints to attach accessories and items.

5 Likes

Yes, same thing for our game Yellowstone Unleashed.
We use it to attach an eating/drinking ParticleEffect part to the mouth bone.

Since player stands still during eating, I found band-aid fix: delete the RigidConstraint once eating stops (movement begins).

3 Likes

This looks very concerning, hopefully the root cause can be identified

2 Likes

This behavior is provoked by playing any animation (suitable for a rig) in the skinned mesh model that has rigidconstraints. I wish this could be fixed as quickly as possible

2 Likes

Same issue in my game. Very frustrating and it cuts into the little time I have to test and develop. Hopefully, they fix this ASAP.

1 Like

we have reverted a flag that may have been the cause of this bug, let us know if you’re still running into it, thanks

5 Likes

Recently in the studio everything worked in single-player mode, in multi-player mode (2 players) it stopped working again, after that in single-player also stopped working, and in the game itself in the roblox client

1 Like

The flag change briefly got caught in a mass revert, it should be off again now.

3 Likes

Looks like the flag revert worked! Thanks a bunch!

2 Likes

@apenzijncoolenleuk1 Could you make a simplified test case illustrating what you’re doing? It sounds like you have the simplest broken case and I can’t figure out how to reproduce any bad behavior.

The RigidConstraint is used to attach a Particle/SoundEffect part to the mouth bone of our character while they’re eating. This works perfectly while eating (movement is blocked during eat).

However, the part lingers around for some time after eating stops to smoothly cleanup the effect. This would prevent movement (only for small/light-weight animals!) until the part/weld was destroyed.

Part is massless, transparent with all collisions (cancollide, canquery and cantouch) disabled.

This only happened for small (light weight?) animals.

  • Happened for a fox with AssemblyMass of 8.66
  • Didn’t happen for a bison with AssemblyMass of 447.09

Video of what happened:

Here’s how the part is attached to the bone:

-- 'Weld' a part to a bone using a 'RigidConstraint'
local function weldPartToBone(part, bone)
	-- Set to correct position + unanchor so the part can move
	part.CFrame = bone.WorldCFrame
	part.Anchored = false
	-- The part needs an attachment for the constraint to work
	local attach = Instance.new("Attachment")
	attach.Parent = part
	
	local constraint = Instance.new("RigidConstraint")
	constraint.Attachment0 = bone
	constraint.Attachment1 = attach
	constraint.Parent = part	-- Constraint gets destroyed when part is destroyed
end

Movement is custom (non-humanoid). All forces act on the rootpart.

  • 1 VectorForce for linear movement
  • 1 VectorForce for linear friction (opposite direction of movement)
  • 1 VectorForce for floor height alignment (only acts on y-dir)
  • 1 AlignOrientation for smoothened turning

It’s based on this resource, but heavily modified: PhysicsCharacterController | Mover Constraints based character controller

Perhaps it didn’t affect larger animals as the calculated forces are much greater for larger weights.

2 Likes

I don’t believe I’m using rigid constraints but I’ve noticed some really weird behavior on characters. For attacks and flying and such, I use linear velocity and I believe a bodygyro.

Seemingly at random characters will fling to nan,nan,nan or get stuck in place like shown in your video, almost as if the networkowner wasn’t set or they were being teleported in place.

(someone recorded this as a joke but I can’t recreate this bug in studio really)

Edit; There’s also a few summon attacks that use AlignPosition and AlignOrientation and they’ve also been flinging themselves at insane speeds to “nan” coordinates. So far the only workaround I have has been detecting a fling and teleporting them back.

I am experiencing a similar issue with other constraints. AngularVelocity is having trouble manipulating large assemblies and players are struggling to stay on moving platforms manipulated by VectorForce.

We’re seeing something somewhat similar, where enabling Rigidity on an AlignOrientation object causes that object and other entirely unrelated objects that also have AlignOrientation/AlignPosition on them to move to nan and then get destroyed. This has suddenly started happening to our game without any changes, in the last few days.