I've come to the conclusion, finally, that the Source engine in its present
form does not do multiplayer vehicles well.

The issue is this: for a smooth experience, we need prediction.  To do
prediction, we need to be able to simulate a vehicle forward multiple
timesteps relative to the environment as a whole.  For example, when the
client copies an authoritative position for some time in the past, the client
must be able to simulate the object forward from that position into the
present time, while not affecting the world at large.  Similarly, when the
server receives a collection of user commands, the server must be able to
simulate the object forward as many timesteps as there are commands.

The player code is able to do this, as the extent of the simulation in the
player code consists of some velocity integration combined with BBOX traces
nand a whole set of heuristics for game-world permissibility; as the engine
exposes facilities to do BBOX traces quite well, simulating multiple commands
in a client/server frame is no problem.  The shadow controller tied to the
player, which interacts with the VPhysics world, does not completely march in
lockstep with the player, but lags (at most) close behind.

For vehicles, there is no analogous procedure.  To simulate vehicles in game
code, one would be required to use traces of collision hulls at arbitrary
angles (as collision models for vehicles generally cannot be simplified to
the BBOX that serves the player rather well).  Unfortunately, no such
facility exists.  If one were to attempt to do this in VPhysics, one could
use a motion controller, but the motion controller can only integrate a
single command per world timestep; this does not fit the requirements for
client prediction, or multi-command server simulation.

So the solution that I see is that a facility be opened in the VPhysics
interface that allows the simulation of any one arbitrary IPhysicsObject (and
any associated shadow controllers/motion controllers) by one timestep,
leaving the rest of the world that does not interact with this object alone.
In essence, putting all objects except one to sleep, then simulating the
world by one timestep, but done more efficiently.  As fundamentally, a
physics engine must simulate its objects serially, I believe that this is
possible.  I don't know Havok, though, so I won't know if that's actually
true.  I would, however, respectfully ask that VALVe look into the
possibility.

As far as I know, in the land of predicted multiplayer Source vehicles, Krenzo
went with client-side authoritative vehicle physics for Empiresmod (with some
server-side checking).  HLRally gave up.  I'll see what Eternal-Silence can
come up with.

-John Sheu

_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to