UPDATE: THIS HAS BEEN FIXED. THIS BELOW INFORMATION IS NOW HISTORICAL AND DOES NOT WORK ANYMORE.
The way how it was done in Windows XP Gui Test was very simple. In a LocalScript in ReplicatedFirst, it checks what device you are using. If it is a VR Headset or a TenFootInterface, it does not disable CoreGUI due to issues revolving around those UIs. If it is NOT a VR Headset or a TenFootInterface, it renames PlayerGui to PlayarGui.
game.Players.LocalPlayer:FindFirstChildWhichIsA("PlayerGui").Name = "PlayarGui"
Suprised how this hasnāt been fixed already. The only reason why CoreGUIs break is because they rely on
game.Players.LocalPlayer:WaitForChild("PlayerGui")
Since the PlayerGui object is renamed, the WaitForChild throws an āinfinite yield possibleā error and breaks the script. Most modern Roblox CoreGUIs break due to this issue.
If you are using this in your game, please make sure there is an easy way to leave it/open your custom menu (use simialar menu locations, esc button). Not doing any of those can ruin user experience.
Also, DO NOT USE THIS if you rely on certain features such as Viewing avatars, etc. Those UIs donāt even work due to the WaitForChild issue.
If your game has console or VR support, please add checks before the script is run to ensure that those platforms do NOT have PlayerGui renamed. Those players cannot leave the game with PlayerGui renamed, as most of the important CoreGUIs break.
This may be against TOS. Abuse this bug at your own risk.