https://raw.githubusercontent.com/ESWAT/john-carmack-plan-ar...
Thank you for this treasure.
The relevant bits:
> I am now allowing the client to guess at the results of the users movement until the authoritative response from the server comes through. This is a biiiig architectural change. The client now needs to know about solidity of objects, friction, gravity, etc. I am sad to see the elegent client-as-terminal setup go away, but I am practical above idealistic.
> The server is still the final word, so the client is allways repredicting it's movement based off of the last known good message from the server.
If you want to predict not just position but also orientation in a shooter game, that's basically predicting the mouse movements.