I think it's common for multiplayer game engines to implement single-player by running a local server on loopback (or via an equivalent internal mechanism). At the very least, I believe the Source Engine and Minecraft do this. Perhaps Unreal Engine does this also, and if so, that might be why the client has server functionality.
For live service games, self-hosting is increasingly uncommon. During the Source era of Team Fortress 2, Half-Life Deathmatch, etc, self-hosting was certainly a thing. But in the modern era, games like Overwatch 2 have no means to be a server or listen server. Even "custom games" where you can make your own game mode and do fun, arcadey-style things connect to a dedicated server.
For things that are "single player", (e.g. Tutorials/Practice), I agree with you that it's to be expected that some sort of mock-loopback is likely stood up. But what was unusual in this situation is the _entirety_ of the code is there, to the point it even would bind to a UDP port and handle full bi-directional UDP communication.
I would expect that for something like this, they'd include a trimmed down version, and not ship the _entire_ thing.
Probably many games do, but there is often an external master server that the local server fetches data from e.g. Team Fortress 2's local server calls out to a master server that tracks which items you have, Counter-strike: Global Offensive calls out to a separate master server that tracks your level and stats etc.
Comments
I think it's common for multiplayer game engines to implement single-player by running a local server on loopback (or via an equivalent internal mechanism). At the very least, I believe the Source Engine and Minecraft do this. Perhaps Unreal Engine does this also, and if so, that might be why the client has server functionality.
For live service games, self-hosting is increasingly uncommon. During the Source era of Team Fortress 2, Half-Life Deathmatch, etc, self-hosting was certainly a thing. But in the modern era, games like Overwatch 2 have no means to be a server or listen server. Even "custom games" where you can make your own game mode and do fun, arcadey-style things connect to a dedicated server.
For things that are "single player", (e.g. Tutorials/Practice), I agree with you that it's to be expected that some sort of mock-loopback is likely stood up. But what was unusual in this situation is the _entirety_ of the code is there, to the point it even would bind to a UDP port and handle full bi-directional UDP communication.
I would expect that for something like this, they'd include a trimmed down version, and not ship the _entire_ thing.
Probably many games do, but there is often an external master server that the local server fetches data from e.g. Team Fortress 2's local server calls out to a master server that tracks which items you have, Counter-strike: Global Offensive calls out to a separate master server that tracks your level and stats etc.