Entity limit

From Valve Developer Community
Revision as of 05:21, 27 April 2012 by Killer89 (talk | contribs) (Added a theory about the limitation passing, as some mods have done this succesfully. (over 110% entity usage without issues.))
Jump to: navigation, search

For reasons of memory allocation, there is a limit to the number of entities Source can manage at once.

The combined size (in bytes) of a map's entity data should also be considered, even if the number of entities is within safe limits. Large amounts of entdata can take a noticeably long time to transmit from server to client, and

Confirm:may lead to crashes


Confirm:The entity usage can be passed, if the PC has plenty of RAM (4Gb+). (Having not enough of RAM will cause the game / mod to use HDD as Memory #2, which is way slower than RAM --> Will cause crash.) The limitation is the same as it was back in 2004, when 512mb was quite common amount of RAM, so the memory usage were needed to follow carefully. Nowdays 4Gb is quite common amount of RAM, so its apparently possible to use more entities without bigger issues.

Tip.png Tip: When creating very large or detailed maps, remember that more entities will exist at runtime than were compiled in. Things like weapons held by characters, projectiles and death ragdolls are all entities too. If you see "no free edicts" errors then you need to start cutting!

Engine limits

There can be up to 4096 entities. This total is split into two groups of 2048:

  1. Non-networked entities, which exist only on the client or server (e.g. death ragdolls on client, logicals on server).
  2. Entities with associated edicts, which can cross the client/server divide.

If the game tries to assign a 2049th edict it will exit with an error message, but if it tries to create a 2049th non-networked entity it will merely refuse and print a warning to the console. The logic behind this may be that an entity spawned dynamically (i.e. not present in the map) but not assigned an edict probably isn't too important.

The two entity lists are created by CBaseEntityList::CBaseEntityList() using NUM_ENT_ENTRIES and MAX_EDICTS. Neither of those values can be changed without breaking compatibility with the engine.

Tip.png Tip: Temporary entities and static or detail props do not count toward either limit.
Tip.png Tip: If you're creating lots of individual objects all the time, consider rolling them all into a single manager entity. This is how Left 4 Dead handles huge numbers of infected: they are all "finger puppets" of the director.
Tip.png Tip: In-game, use console commands like report_entities and cl_showents to get an idea of how many entities are present at that current state.

Hammer limits

Hammer itself has no entity limit, but VBSP's is 8192. This is double the combined total accepted by the engine, which may be because it at first treats internal entities (such as prop_static and env_cubemap) like normal entities, or perhaps because it generates a lot of detail props.

VBSP also recommends an entdata size limit of 384KB, but this is in no way enforced.