Legacy Reference

Network Serialization and Aspects

All objects that are intended to be synchronized over the network should have a function called NetSerialize(). In the GameObject, this appears as: IGameObject::NetSerialize().

The NetSerialize() function uses a TSerialize object of type ISerialize to transform data to a stream. The serialization uses different aspects and profiles to distinguish the various types of streams.


Serialized data for a given aspect and profile must remain fixed. For example, if you serialized four floats, you must always serialize four floats.


You use aspects to logically group data together.

Aspects are defined as follows:

  • eEA_GameClient – Information sent from the client to the server, if the client has authority over the object.

  • eEA_GameServer – The normal server to client data stream.

  • Dynamic/Static – Data that is constantly changing should be added to the Dynamic aspect. Objects that rarely change should be added to the Static aspect. Updates are not sent if only one value changes.

  • eEA_Script – Used where script network data is transported, including any script RMI calls.

  • eEA_Physics – Used where physics data is transported. It is not divided into client/server because it always uses the same path: (controlling-client) to serve other clients.


Profiles allow an aspect’s fixed format data to be different. There are potentially eight profiles per aspect, and they are only used for physics aspects (for example, switching between ragdoll and living entity).

On this page: