I think that, honestly, the easiest solution to make it doable for everyone would be to open up BYOND's networking systems and make it more transparent and actually alterable. If we had direct access to BYOND's networking, then we could just set out and write our own game clients with ease.
Some people are going to argue that that would completely ruin BYOND's ease-of-use, but that's just ridiculous. Pixel movement didn't ruin BYOND's native tile-movement. It wasn't a complete change, it was an add-on. If you left the code alone, then you get the default tile-movement. It's not until you explicitly start working with the pixel movement do you actually have to worry about handling the pixel movement. Networking would and should be on the exact same footing. Default of totally server-side until you started to mess with it.
The key issue that I would foresee with that, though, is that there's a lot of backend networking that isn't just sending and receiving commands. I think having a default "render" packet would be key to keeping it relatively simple to use.
Say you write both your server and your client. You could send the "render" update every tick by default to whichever client you want. The client receiving that could then take that render data and plug it into the map, giving you the view of how things should look. That way the developers don't actually have to worry about sending each individual packet of data necessary to know where to draw everything on the client's screen. BYOND already has this "screen update" communication. The developer realistically shouldn't ever have to mess with it, in all honesty. It would be essentially plug-and-play.
Going even further, I think it would be even easier to just default to having a one-time socket and listening function between the server and the client. The connection would be continued on the backend.
Client setup might be something like
game_client
var/DM_Socket/socket //DM_Socket being a built-in class for handling connections.
connect2server() //custom function
ConnectRenderSocket(target_address, target_port, credentials, other_data) //built-in BYOND function to receive rendering data
socket.Connect(target_address, target_port, credentials) //sends a connection request to the server
The server wouldn't need an explicit response to the ConnectRenderSocket() function. That would be something just automatically handled on BYOND's backend. It would require the server to have an explicit listening port for the client, though.
The credentials essentially being just extra data being sent in the connection request. It could help you determine server-side whether it's a client-server connection in the case of a player trying to connect to your game or if it's a server-server connection, where you're managing a larger cluster.
I know the discussion turned more into a "open up networking functions", but honestly, I think that's where the vast majority of the improvement could be. We can do whatever we want with clients and servers, it's just the fact that we don't currently have a reliable way of communicating between them is the main problem.
Okay, you aren't hearing what I'm saying. Or understanding what I'm typing, as it were. I'm not shooting down your idea or saying it's not possible. I'm challenging you to flesh the idea out. I'm including myself in the discussion because I've been down this road a few times with Tom. I'm interested in the feature. Let's flesh out the request into a workable idea, ok?
I'm asking how do we semantically include it in the language?