Trace and bullet definitions
This page covers the collision shapes used by melee windows and bullet hits, and how a bullet row overrides the instance, chains, and emitters. Concepts are in Traces and hit windows and Bullet runtime.
FGCS_TraceDefinition
A Data Table row, also commonly inlined on a weapon or bullet definition. UGCS_TraceSystemComponent creates the instance; UGCS_TraceSubsystem submits async sweeps on the tick policy. One definition is one shape + one query mode + one sample cadence. Start and stop come from a melee request’s TracesToControl, weapon activation, or a bullet lifetime.
IsValidDefinition() requires a valid TraceTag and a usable shape instance. Invalid rows warn during weapon validation and never register at runtime.
Field | Purpose | When to change | Misconfiguration |
|---|---|---|---|
| Instance identity. Categories= | Blade, tip, and bullet body each get their own tag. | A tag that does not match |
| Instanced shape based on | See the next section. | Attached / Socket Based with a missing socket fails initialization. |
| Query source: channel, object types, or profile. | See the table below. | A channel the target ignores looks like a clean miss. |
| Sample policy. Default | Fast swings use a distance threshold; normal melee uses a fixed rate. | A large |
| Fixed rate. Default 30. | Denser blade samples. | Very high rates flood async sweeps. |
| Move at least this far before sampling. Default 30. | Weapons that travel quickly. | The old name |
| Also sample after this many degrees of rotation. Default 15. | Twisting in place with little translation. | A tiny value sweeps almost every frame. |
There is also a Default tick type that uses the subsystem default. New tables should pick Fixed or Distance explicitly.
FGCS_TraceSweepSetting
Field | Purpose | When to change | Misconfiguration |
|---|---|---|---|
| | Pick one scheme for the project and stay with it. | |
| Channel query. Default | Characters on Pawn or a custom weapon channel. | Visibility misses bodies set to Ignore. |
| Object-type array. | Only Pawn and WorldStatic. | An empty array hits nothing. |
| Collision profile name. | Reuse an existing weapon profile. | A typo fails the query. |
| Trace against complex collision. | A blade that must hug the weapon mesh. | Expensive, and usually unnecessary on characters. |
Collision shapes
CollisionShape excludes the base struct and samples in SourceComponent space. Four built-ins:
Shape | Display name | Role | When to use | Misconfiguration |
|---|---|---|---|---|
| Collision Shape (Static) | A fixed Sphere / Box / Capsule in source-component space. | Fists, a staff of fixed length. | Forgetting Orientation on Box/Capsule sweeps off-axis. |
| Collision Shape (Shape Based) | Binds a Box/Sphere/Capsule on the source component and copies its size. | The weapon already has a collision component. | A non-shape source never receives dimensions. |
| Collision Shape (Attached) | Static shape that follows | The edge hangs on a tip socket. | A wrong socket name parks the shape at the component origin. |
| Collision Shape (Socket Based) | A capsule between | Blade trails, two-socket weapons. | Missing sockets collapse half-height and the blade looks short. |
Static / ShapeBased show Radius, HalfHeight, and HalfSize from ShapeType. Socket Based also has MeshSocketLengthOffset to lengthen the capsule.
FGCS_TraceHandle
Runtime identity: TraceTag + Guid + SourceObject. The component uses it to start, stop, remove, and correlate hit callbacks. Weapons store handles in TraceHandles after activation; bullets store them on FGCS_BulletState.TraceHandles. Do not author the Guid. SourceObject is typically the weapon or bullet instance, so two swords on the same pawn can share a tag without colliding.
FGCS_BulletDefinition
A Data Table row (display name GCS Bullet Definition). UGCS_BulletSystemComponent uses the row to spawn a batch, build GEs, and handle penetration, chains, and emitters. The bullet Actor only presents and moves. The component applies authoritative GEs on hit. Predicted bullets never Apply a GE.
Field | Purpose | When to change | Misconfiguration |
|---|---|---|---|
| Soft-referenced bullet Actor. It must implement | Spherical shots subclass | A missing interface or an Abstract class never leaves the pool. |
| Lifetime in seconds. Default 3. | Lasers, lingering orbs. | Infinite bullets need a reliable hit or cancel path, or the pool fills up. |
| Delay after a terminal hit before settlement (effects, chains, impact presentation, end). | Grenades that explode after landing. | This does not add radial damage. AoE still comes from a GE / EffectContainer or project logic. |
| Cancel this bullet when the parent expires. | Child scatter should not outlive the parent. | Enabling it on a chain can tear down an explosion early. |
| Shots per launch. Minimum 1. | Shotguns. | A large count plus a shared hit list means later pellets cannot hit the same pawn. |
| Yaw, yaw interval, and pitch. | Fan scatter, arcs. | A zero interval stacks every shot. |
| Horizontal distance (cm) where gravity scale switches. Default 800. | Bolts that fly flat, then drop. | Read it with the two gravity scales; changing only this does not show an arc. |
| Gravity scale inside / outside the range. The latter is a historical spelling; Details shows Gravity Scale Out Range. | No gravity up close, drop at range. | Searching Blueprint for “OutRange” misses the field. Use |
| Initial / final hit radius. Final | Growing or shrinking shots. | A zero radius almost never hits. |
| Initial and max speed. Both default 1500. | Accelerating or constant shots. | Max below Initial clamps the movement component immediately. |
| | One settlement per ammo type. | An empty handle means an authoritative hit has no GE. |
| Hit-detection definitions. They override the instance class. | A larger sphere or a different channel than the Actor default. | An empty array falls back to the instance. One invalid entry means no detection. |
| Flight and impact Niagara / Cascade. | Presentation only. | An unloaded soft reference skips FX and does not affect settlement. |
| Niagara parameter overrides (Modifer is a historical spelling). | Recolor or resize one FX asset. | User parameter names must match the Niagara asset. |
| Attached flight, impact, and spawn audio. | Presentation only. | |
| Whether the bullet penetrates pawns, and the max count. | AP rounds. | Without penetrate, the first pawn ends the bullet. |
| Whether the bullet penetrates world geometry. | Wall-piercing shots. | Still limited by the Trace channel. |
| Row spawned on hit or expiry. Cannot be this row. | Split on explode, residue on land. | Pointing at itself is rejected to stop recursion. |
| Chain spawn pose. Categories= | See native tags. | An empty tag uses Default: parent location and rotation. |
| When the chain fires. Categories= | See native tags. | Do not assume an empty tag always launches. Check the condition you authored. |
| Share hit history across the batch (keyed by EntryId). Default true. Pawn hits only. | Shotgun pellets should not all land on one person. | Off allows the same pawn to be hit by every shot in the batch. |
| Per-pawn hit cooldown in seconds. | Continuous lasers. | |
| Row emitted periodically when this bullet is an emitter. | An aerial circle dropping shots. | A child that is also an emitter can loop if you wire a cycle. |
| How the emitter picks a spawn. Categories= | See native tags. | |
| Preset and radius (cm) used to pick a target. | Random around the shooter, or the nearest enemy. | Radius 0 means no random offset. |
| First wait and a randomized interval. Min is ClampMin=1. | Circle cadence. | Keep Min<=Max. Min>Max depends on scheduler details you should not rely on. |
| Same C++ / Blueprint split as attack definitions. | Project fields on the ammo type. | Same pitfalls as attack-definition extensions. |
FGCS_BulletSpawnParameters and FGCS_BulletState are runtime spawn parameters and instance state. Do not author them in the table. Chain and emitter bullets spawn on the authority only.
Native bullet tags
Namespaces live in GCS_GameplayTags.h. The GameplayTag values hang under GGF.Combat.Bullet.*.
GCS_BulletLaunch (LaunchCondition)
Tag | Value | Behavior |
|---|---|---|
| | Spawn a follow-up whenever a hit happens. |
| | Spawn only when the parent missed every pawn (explode on ground). |
| | Spawn only when the parent hit a pawn (split on contact). |
GCS_BulletEmitter (EmitterSourceType)
Tag | Value | Behavior |
|---|---|---|
| | Reuse the parent bullet transform. |
| | Offset randomly around the shooter by |
| | Ask |
GCS_BulletChain (HitChainType)
Tag | Value | Behavior |
|---|---|---|
| | Spawn at the parent location and rotation. |
| | Spawn at the hit, aimed along TraceEnd−TraceStart. |
| | Use the original attack-request transform. |
| | Hit location + owner forward. |
| | Parent location + owner forward. |
Custom instances and interfaces are in Interfaces and custom instances.