Generic Client Side Prediction

Modify the client side POV movement prediction to a more generic scheme, add several modes. Short of moving the gi.Pmove code into a client side DLL, this is the only way to overcome certain limitations that various mods are facing.

Benefits:

Implementation of forces and effects, movements, power ups and modes exploiting full 6 DoF, better and different underwater movement, inventive new physics simulations would be possible.

Despite appearances, Q2 is not a full 3D game. It makes various simplifications based on the assumption that player and entity movement is basically restricted to a 2D XY plane projection, and that UP vector orientation corresponds with the Z axis.

This bias originates from DOOM, and was expressed e.g. in the John Romero statement "Quake has gravity - down is down".

In consequence, certain mods, e.g. 6 DoF zero gravity games (Descent-like) are not possible without shutting down the client side prediction. As the per refresh frame processing of user input for movement/rotation is done within this gi.Pmove mechanism, this procssing is also lost, and has to be blocked.

Benefits are a learning experience for Trinity, forcing id to remove the old bias. It also opens the door for various ambitious mods that rely, one way or the other, on changing the definition and behavior of gravity.

Problems:

We might fail to forsee the various modes needed for a given mod. This solution is more involved, and less flexible than alternatives (see below).

Feasibility:

From the original exchange with John Carmack:

We can expand client side parameters reasonably easily.

Implementation:

Requires rewrite the gi.Pmove and the related parts of the DLL. While the former has a limited scope, the replacement of Z equals down could draw some sweat. The latter is required because of the interaction of gi.Pmove with the player state as used in the DLL.

It should be noted that any mod taking full advantage of this will have to make a lot of more or less subtle fixes on the monster movement/AI/collision response/ on ground detection/muzzle flash offset handling/ rotation and orientation code/physics of friction, gravity/implementation of Floaters/Flyers ... etc.. The same bias (Z assumption) present in the gi.Pmove implementation will be find in all those places.

Related Proposals:

Entity extrapolation is the flip side of client side prediction. It makes no sense to have the POV more right, only to have the entities be interpolated in various invalid ways.

This proposal does compete with a Client Side DLL, in which gi.Pmove could be exposed and modified as needed. The latter is the most flexible solution, at the cost of added complexity.

The parameter/constraint addition is a response to the MaxSpeed proposal, which gives an excellent example of the gameplay/gamedesign restrictions resulting from client side prediction.

Submitted 980321, revised 980406, revised 980420, revised 980504, comments to bk@gamers.org.