The default ControlScript was recently updated to contain two separate versions of the script within itself.
Statements that determine if the new version is used
The new version, found in the latter half of the script, seems to incorporate some new function of UserInputService to dynamically switch between touch, gamepad, and keyboard control types. The main body of the script contains several critical logic errors, which have rendered any changes in the DevComputerMovementMode and DevTouchMovementMode properties ineffective. If you change either of these properties after your character has been spawned, the script will not register the changes. This has broken the ability to remove a player’s movement controls.
Logic errors
The logic errors are pretty entangling, so it's tricky to put each into words. The biggest part would be these pieces:   The first picture shows the function used to detect changes in the DevMovementMode properties. It calls `ControlState:SwitchTo()`, which has a debounce. The problem is, the debounce accounts for the general control types, like Keyboard and Touch. Therefore, if the control mode isn't changed, but MovementMode is, then you will get debounced and nothing will happen.In order to fully fix the script, I made a couple of changes to the enabling/disabling portion of the Keyboard control object. Basically I needed to track the current keyboard sub module so that it could be properly disabled, because the process of choosing which module to disable would be flawed if it is intended to be used with the ControlState:SwitchTo()
funtion (and I’m pretty sure it is).
I made a few quick patches to fix this issue. Here is my (somewhat) fixed version of the control script. I don’t think there are any bugs, but I have only tested it for a couple of minutes.
NOTE: I did not fix the DevTouchMovementMode portion, only the keyboard portion because that is what I am interested in.
ControlScriptPatched.rbxm (19.7 KB)