Best way to Drive FaceControls

Hey developers. My question is centered around FaceControls and how to drive their values in the most efficient way.

It’s important to note that the client provides the FaceControls Weight Values, and the Server replicates them, using RemoteEvents.

My initial logic was to drive the FaceControl Properties directly, however, that was swiftly shutdown after realizing that all the Properties are Permission 1 (iirc), meaning they’re totally inaccessible by (Local)Scripts.

After this, I decided to attempt to use the only documented way of driving FaceControl properties, which was to animate the DynamicHead. So here we are, 49 animations later, and it still doesn’t work as intended. Most of the animations do properly drive the properties, however, some others will do nothing at all and idle animations will override my animations (even on Action priority and when stopping all other animations on the Humanoid). Using Action4 priority breaks my animations for some reason.

My only other possible option could be to clone the Character’s Head, use a RigidConstraint to the original head, hide the Original Head, and then drive the new head’s FaceControls with the animations. The two problems with this is that one, hiding the original head would also hide the player’s nametag, and two, there is still no guarantee that the animations would work any better on the new head, only that the old idle animations would no longer override my animations.

I’m open for any suggestions, just any proper way to drive a character’s DynamicHead’s FaceControl’s properties without issues would do, preferably without 49 animations… :sweat_smile: