The definition of one particle system: three lists of
emitters plus settings for the system as a whole
(culling, audio, HUD placement, a point light and a set of behaviour flags). One
definition is shared by every instance spawned from it.
Emitter lists
The lists also differ in which spawn gates apply, see
VfxEmitterDefinitionData.
Life of an instance
- Prepare, once per definition. The emitters are turned into prepared
descriptors and their textures and meshes are loaded.
assetRemappingTable is
applied here, and the texture group 0x9836cd87 is active for these loads.
- Spawn. Each emitter goes through its gates and the survivors are
instantiated. The point light is created, the material overrides are handed to
the attached object and
selfIllumination is pushed.
- Update. The instance takes position, velocity, orientation and scale from its
attachment, tests its cull box, and simulates.
- Simulation runs in fixed steps: 30 per second on High and Very High
EffectsQuality, 20 on Medium, 15 on Low and Very Low. Within a step the
component emitters update first, then the complex emitters, then the simple
ones, then the point light. flags bits 0x8 and 0x40 change the stepping.
- End. The system is finished when every emitter of every list reports
finished, or when it is stopped. A soft stop lets each emitter finish by its
linger rules, a hard stop ends the system at once.
Visibility
The cull box comes from visibilityRadius. A hidden system that may not simulate
off screen (flags bit 0x1 clear) is not paused. Its emitters are reset when
it hides: particles are cleared and child effects released. If it stays hidden
until its duration has elapsed, it is finished for good. The duration is the
longest duration among its instantiated emitters. Teamfight Tactics turns
off-screen simulation off for every system.
HUD layer
A system with drawingLayer 1 is drawn through its own orthographic projection
instead of the scene camera. See drawingLayer, hudLayerDimension,
HudLayerAspect and hudAnchorPositionFromWorldProjection.
Legacy troybin
The client still carries a loader for .troy files. It runs when an effect is
requested by a name ending in .troy and no definition object was found, and it
fills this same object from the file. Properties without a troybin key keep their
defaults. Whether any shipped content still reaches this loader is not established.