Entity limit: Difference between revisions
TomEdwards (talk | contribs) mNo edit summary |
TomEdwards (talk | contribs) (corrections) |
||
Line 1: | Line 1: | ||
For reasons of memory allocation, there is a limit to the number of entities | For reasons of memory allocation, there is a limit to the number of entities Source can manage at once. | ||
== Engine limits == | == Engine limits == | ||
There | There can be up to 4096 entities. This total is split into two groups of 2048: | ||
# | # Non-networked entities, which exist only in <code>client.dll</code> or only in <code>server.dll</code> (e.g. death ragdolls, [[CLogicalEntity|logicals]]). | ||
# | # Networked entities with associated [[edict]]s, which can cross DLL boundaries. | ||
If the game | 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. | ||
[[Temporary Entity|Temporary entities]] do not count toward either limit. | The two entity lists are created by <code>CBaseEntityList::CBaseEntityList()</code> using <code>NUM_ENT_ENTRIES</code> and <code>MAX_EDICTS</code>. Neither of those values can be changed without breaking compatibility with the engine. | ||
{{tip|[[Temporary Entity|Temporary entities]] do not count toward either limit.}} | |||
{{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|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.}} | ||
== Hammer limits == | == Hammer limits == | ||
[[VBSP]]'s | Hammer itself has no entity limit, but [[VBSP]]'s is 8192. This is double the combined total accepted by the engine, {{confirm|which may be because it at first treats [[internal entity|internal entities]] (such as [[prop_static]] and [[env_cubemap]]) like normal entities, and/or possibly because it generates a lot of [[prop_detail|detail props]].}} | ||
VBSP places a size limit of 384KB on the <code>entdata</code> block however, which prevents any map from coming anywhere near 8192 designer-placed entities. Remember that more entities will exist in a map at runtime than were compiled into it by the level designer! | |||
{{tip|Since VBSP's source is included in the SDK, it is perfectly possible to make your own build with the <code>entdata</code> limit increased or removed.}} | {{tip|Since VBSP's source is included in the SDK, it is perfectly possible to make your own build with the <code>entdata</code> limit increased or removed.}} |
Revision as of 04:03, 16 September 2009
For reasons of memory allocation, there is a limit to the number of entities Source can manage at once.
Engine limits
There can be up to 4096 entities. This total is split into two groups of 2048:
- Non-networked entities, which exist only in
client.dll
or only inserver.dll
(e.g. death ragdolls, logicals). - Networked entities with associated edicts, which can cross DLL boundaries.
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.


Hammer limits
Hammer itself has no entity limit, but VBSP's is 8192. This is double the combined total accepted by the engine,

VBSP places a size limit of 384KB on the entdata
block however, which prevents any map from coming anywhere near 8192 designer-placed entities. Remember that more entities will exist in a map at runtime than were compiled into it by the level designer!

entdata
limit increased or removed.