Object locality
In Arma, all objects have a locality, which refers to the client in possession. It can be the server, a headless client (HC), or a player client. Locality will determine where calculations for that particular object run, including:
- Hit registration: Whether shots land and do their damage.
- Physics: How vehicles steer, collide, and interact with the physical world.
- AI Behaviour: Handles movement, spotting and decision-making.
Why locality matters
Non-local objects (except for "local only" objects) have to be synchronised across all clients to exist. Synchronisation involves sending information to the server and redistributing it to other clients. Delays in doing so may lead to:
- Bad Hit Registration: Shots not registering or registering wrong.
- Teleportation: Objects or units seemingly jump around.
Some scripts also need to be executed only where appropriate, that is:
- Global Execution: Runs on every client at the same time.
- Local Execution: Runs only on the client which owns the object.
- Server Execution: Runs only on the server.
Headless Clients (HCs)
Headless clients take some load off the server CPU because AI calculations are done on its side and the server can handle just the game logic. AI calculations are offloaded to the client which owns the AI object.
Tradeoffs of Using HCs
While HCs offer better performance, they introduce some additional synchronization latency. The sync path now goes through HC ↔ server ↔ player, which may cause delays. To alleviate this HCs should be run on the same physical machine as the server to reduce network latency.