0x9836cd87
U8 = 5 Unknown byte, default 5. Purpose not yet identified.
The definition of a complete particle system ("troy") - the root object that a VFX entry in a bin file deserializes into. A system is a container of emitters plus system-wide settings: visibility/culling, audio hooks, HUD-layer placement, an optional dynamic light, and a set of behavior flags.
The same in-memory object is also produced by the legacy .troybin loader, so both
content pipelines (modern bin and legacy troybin) feed the exact same structure -
the bin format simply exposes more of it (several Flags bits and properties have
no legacy troybin equivalent).
Emitters are split into three lists. ComplexEmitterDefinitionData gets the full
feature set (e.g. emission-mesh geometry resolution), SimpleEmitterDefinitionData
is a lightweight path, and ShimmerEmitterDefinitionData holds emitters that
delegate their behavior to a component graph instead of carrying it as properties.
U8 = 5 Unknown byte, default 5. Purpose not yet identified.
U8 = 0 Selects which game clock drives the system's simulation time.
Optional distance-keyed alpha ramp for the whole system - see VfxDistanceBasedTransparencyParams. Typically authored on large ground-plane ability indicators.
Optional event-driven override table - see VfxDynamicParametersData. When one of the events it lists fires, named emitters have individual parameters (scale, UV scale, emission rate, lifetime, birth velocity) swapped for a computed value, either immediately or eased in over a duration.
Optional environment effector carried by the system - see VfxEffectorDefinition. A system linking one contributes a shaped force to a map-wide environment field for as long as the system lives, affecting the environment rather than the system's own particles.
F32 = 1.3333333730697632 Aspect ratio of the HUD-layer virtual canvas. Default 4/3 (≈1.333). See HudLayerDimension.
Optional dynamic light emitted by the system. The light definition carries a type, an optional lifetime (default 5 s), a color track, an intensity-scale track (default 1), a radius track (default 500), an HDR scale (default 5) and an impact setting. Instantiated together with the emitters and updated every simulation step.
The system's component emitters - see VfxShimmerEmitterDefinitionData. Emitters in this list carry only a few gates of their own and take emission, lifetime, physics, rendering and geometry from a component graph. An entry whose graph does not supply all four of those components is dropped while the system is prepared, rather than running misconfigured.
String = "fx" Legacy asset-category string (default fx). Removed from current builds.
List of asset remap entries that substitute assets referenced by the system's emitters.
I32 = -1 Flex ID used to drive an audio parameter (RTPC) for this system's sounds. -1 (default) disables it.
F32 = 0 Duration used to derive a time-scaled audio parameter for the system's sounds, paired with AudioParameterFlexId.
F32 = 0 When the system becomes visible, its simulation is fast-forwarded by this many seconds so a long-running ambient effect appears fully built up instead of restarting from empty.
The system's complex emitters. Complex emitters support the full emitter
feature set - notably emission-mesh geometry (EmissionMeshName) is only
resolved for emitters in this list.
U8 = 0 Which layer the system renders in. 0 (default) is the normal world layer;
1 renders on the HUD layer - the system skips world frustum culling and is
placed on a virtual canvas defined by HudLayerDimension / HudLayerAspect.
U16 = 212 Bitfield of system behavior flags. The value is used verbatim as serialized -
the game never adds bits at runtime. Default 212 (0xD4).
| Bit | Name (legacy troybin key) | Effect |
|---|---|---|
0x0001 |
SimulateWhileOffScreen | Keep simulating while culled off-screen instead of pausing. |
0x0002 |
PersistThruDeath | Don't kill the instance when its owner dies. |
0x0004 |
PersistThruRevive | Don't kill the instance when its owner revives. Default on. |
0x0008 |
SimulateOncePerFrame | One variable-timestep simulation step per frame instead of fixed-timestep substeps. |
0x0010 |
(bin only) | On deactivation, stop persistent sound/voice-over immediately instead of letting them run out. Default on (troybin effects never set it, so their persistent audio finishes naturally). |
0x0020 |
SoundsPlayWhileOffScreen | Persistent sounds keep playing while the system is hidden (otherwise they are stopped on hide). |
0x0040 |
SimulateEveryFrame | Force at least one simulation step even on frames where the fixed-rate accumulator would yield none. Default on (bin); legacy default off. |
0x0080 |
KeepOrientationAfterSpellCast | Written by the legacy loader (default on) but vestigial - no consumer exists in current builds. |
0x0100 |
(bin only) | Analytic drag motion: particle position is driven in closed form toward the fixed displacement BirthVelocity / Drag (the exponential-drag asymptote) instead of numeric integration. Frame-rate independent with an exact end position - used for UI/HUD particles. |
0x0200 |
(bin only) | HUD layer: take the pixel size from the hosting UI element (UiElementEffectData) instead of HudLayerDimension / HudLayerAspect. |
0x0400 |
(bin only) | Scale by bound object size: every update, multiply particle scale by the owner unit's current model scale (including size modifiers and death shrink). With a target attachment, the scale can instead lerp by 2D distance to the target. |
0x0800 |
(bin only) | Opt in to aggressive low-spec culling: on very low EffectsQuality (when the server-side feature is enabled), all emitters except importance 3 (gameplay-critical) and 4 (low-quality substitute) are skipped. |
Bool = true For HUD-layer systems: anchor the effect at the world position projected into screen space. Default true.
F32 = 1024 Size of the virtual canvas used to place HUD-layer systems (DrawingLayer = 1).
Default 1024.
Bool = false Marks the system as non-gameplay eye candy. Eye-candy systems belong to the
EyeCandy visibility group and are hidden when the player enables
[General] HideEyeCandy.
Bool = false Marks the system as a pose afterimage effect (character snapshot/ghost visuals).
Material overrides applied to this system's emitters (same entry type as the emitter-level MaterialOverrideDefinitions).
Hash = "0x0" No documentation available yet. Click "Add documentation" to contribute!
Option<F32> = null Optional cap applied to the system's scale. Unset (the default) means no cap.
String = "" The system's short name, as authored (e.g. the troy name).
String = "" The full content path identifying this system (the key other objects use to reference it).
Bool = false Scale the system with the scale of the bone it is attached to.
F32 = -1 Self-illumination factor applied to the system's rendering. -1 (default) = unset.
The system's simple emitters - a lightweight emitter path that skips the
heavier complex-emitter features (no emission-mesh resolution). See also the
emitter's LegacySimple property.
String = "" Audio event fired once when a system instance is created.
String = "" Looping audio event started with the system and stopped when it ends.
Whether it is cut immediately on deactivation or allowed to run out is
controlled by Flags bit 0x10; whether it keeps playing off-screen by bit 0x20.
Mtx44 [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]Static transform applied to the whole system. Default identity.
F32 = 250 Radius (in world units) of the bounding box used for visibility culling.
The system's cull box is its position ± VisibilityRadius · √½ on each axis;
when the box leaves the camera frustum the system is hidden and (unless flagged
otherwise) its simulation is paused.
String = "" Voice-over event fired once when a system instance is created.
String = "" Looping voice-over counterpart of SoundPersistentDefault, with the same lifetime rules.
Map<U32, VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Map<I8, VfxSystemDefinitionData> 0xa3e06fe2 Map<I8, VfxSystemDefinitionData> Link<VfxSystemDefinitionData> 0xb4b6a94f Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> HoverVfxSystem Link<VfxSystemDefinitionData> IdleVfxSystem Link<VfxSystemDefinitionData> NotPickedVfxSystem Link<VfxSystemDefinitionData> PickedVfxSystem Link<VfxSystemDefinitionData> RefreshOverlayVfxSystem Link<VfxSystemDefinitionData> RefreshVfxSystem Link<VfxSystemDefinitionData> List2<VfxSystemDefinitionData> 0x40aec206 Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> FlashInVfxSystem Link<VfxSystemDefinitionData> HoverVfxSystem Link<VfxSystemDefinitionData> IdleVfxSystem Link<VfxSystemDefinitionData> NotPickedVfxSystem Link<VfxSystemDefinitionData> PickedVfxSystem Link<VfxSystemDefinitionData> RefreshOverlayVfxSystem Link<VfxSystemDefinitionData> RefreshVfxSystem Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Map<String, VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Map<Hash, VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Map<U32, VfxSystemDefinitionData> Link<VfxSystemDefinitionData> VfxSystem Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData> Link<VfxSystemDefinitionData>