We are currently having only "turn based" multiplayer games in our party game lobby system. Now we considered to add realtime multiplayer games as well, for example golf in 3D. Our current technologies include:
- Server: C# Server, Custom Web Socket Server logic
- Client: Browser with web sockets, Three.js for 3D rendering
By having a game like golf, it would also involve physics based gameplay. And we want to keep the server as authority if possible. We know that for a smooth experience we need Client prediction, reconciliation and interpolation. This is where it gets tricky for us right now.
For a good prediction or any prediction at all really, we would need a physics engine that runs kinda similiar on the JavaScript client as well as on the C# Server backend. After searching for a bit we have not found any that are ported to both C# and JS.
We also considered to sacrifice the server authority for that kind of game and make one of the clients the authority; therefore the server would just act as a proxy for them. Would that be a valid way to go? This would also save server resources but clients that are authorities could cheat.
How can we implement these physics features in this mismatched client-server environment?