https://files.facepunch.com/solw/2026/April/16_16-00-DapperAmethystgemclam.png
* Display disconnect, kick, or connection failed messages to users in a big new messagebox.
* Client reconnect (from map change etc) uses normal, interruptable connect flow.
* Connecting by SteamId attempts with retries (incl. for lobbies for now)
* Connecting by IP swaps localhost for loopback address, appends default port if not supplied.
* More explicit loading screen activation for connection progress, no longer reactivates from a text update.
* Fix main menu being briefly reloaded when loading games or on reconnect.
* Loads now cancel correctly on disconnect/close across all entry points
* Unified some loading flow and UI logic
* Fixed errors when cancelling mid-load
When a Dresser component is set to `ClothingSource.OwnerConnection`, it will verify the owner connection actually owns the items they are attempting to wear using the Steam API. This means users can't just add items they never owned to their avatar forcefully.
Adds host-side enforcement for LobbyPrivacy.FriendsOnly lobbies. Previously, non-friends could still connect and remain in the lobby, which is now fixed.
Every time we Join via New Instance, the new instance is given an new id - that id is used locally to determine the SteamId it gives the server (from some base SteamId for bots). This means you can properly test stuff like persistent data per SteamId rather than local instances using the same SteamId as the editor host. This is safe from spoofing though, because real servers and lobbies verify the SteamId the user provides.