I have a working P2P non real time (think Civ 5) multiplayer strategy game using deterministic lockstep for the game model, but lag can really cause inconvenience. To clarify, units don't move in real time, but the UI needs to update with player decisions, like offering trades.
StarCraft 2 uses this model PLUS some client prediction to make things feel much more responsive. How does it do this? Is there a coding pattern?
My game is currently structured with MVC. Should I be adding a ViewModel object in between the view and model so the user interface can update immediately? The major disadvantage is I would have to write quite a bit more code to create a passthrough layer for every API...
One crazy idea would be to duplicate the entire Model (call it FakeModel) and have client changes trigger immediately within it, and have it update to respect Model every so often. Unfortunately updating the whole thing could introduce it's own performance issues.