Move Stream Manager

The Move manager guarantees "soonest possible" delivery of client input moves to the server and "soonest possible" delivery of control object state data. A sliding window is used to track the delivery of moves and also to synchronize move processing between control objects and their ghosts. This manager is asymmetrical in that moves are only sent from a "client" connection to a "server" connection and Control Object state data from server object to client ghost.

Input moves are used to control simulation objects such as vehicles, cameras, and players. Input is gathered on the client by an Input Manager, which collects a move every 32 milliseconds. Moves consist of x, y and z translations, yaw, pitch and roll rotations as well as an array of trigger states. These moves are delivered to objects by the Move manager and are the sole means of user controlled object movement.

The Move manager, similar to the Event and Ghost managers, writes information into every packet stream allocated by the Stream manager. Unlike the other managers, it makes no use of the Transmission Record or the Connection manager's notification system. Instead, the Move manager provides "soonest possible" delivery of moves to the server by writing moves into every packet sent. Each move is transmitted three times in consecutive packets. Each packet transmitted from the server contains the last move received, which the client uses to advance a sliding window of outstanding moves. If the window becomes full, the client simulation is halted until the server advances the window. If 3 packets are dropped in a row then any moves unique to those packets are lost.

In Starsiege TRIBES, every move in the current window was transmitted in every packet guaranteeing 100% delivery of all moves, but this was sometimes the cause of a negative feedback loop. A dropped packet would increase the size of the next packet by widening the sliding window and causing more moves to be transmitted. On low bandwidth Internet connections the increased packet size could exceed the connection's bandwidth, causing more packets to be dropped. Though this means moves are no longer guaranteed delivery, the client responds better when large numbers of packets are dropped. Losing moves can cause the client and server control object to get out of sync which may produce a momentary “warping” for the client.

The Control Object for a client is the object that receives the current move being produced. Both the Control Object on the server and its ghost on the client receive every move. Control Objects have two major requirements that differentiate them from other objects. The first is the deterministic processing of moves. Both the original server object and its ghost are given moves generated by the player and both, given the same starting state, must produce the same end state. The second is that the control object must be able to transfer its current state on demand. Though Control Objects are ghosted, and thus can transfer information using the ghost State Mask, the Move manager provides a separate "Soonest possible" delivery of a Control Object's state to its ghost. This state information is similar but not identical to information transmitted through the Ghost manager. State information sent to a ghost is normally limited to that needed to render the object, or to reasonably predict its motion. Control Object state information must include everything needed to deterministically process input moves. "Soonest possible" delivery of this control state information is achieved by having the Control Object write its current state into every packet sent from the server. This combination of state transfer and deterministic move processing is used to keep the Control Object and its ghost synchronized, and to allow the client to predict the motion of the control object ahead of server updates.

Delivering moves and Control Object state updates as soon as possible along with client prediction of move processing allows smooth and immediate response to player input, while providing full validation of all player moves by the server.

Back to Contents