contrail

This page is incomplete! You can contribute information using GitHub issues or pull requests.

Contrails describe the trail effects which commonly follow projectiles, or emit from model markers like the Banshee's wingtips. They reference a bitmap to be rendered at repeated intervals and can be affected by wind and gravity using point_physics.

Limits

Contrails are represented in-engine as series of connected points. There is a limit of 1024 such points existing at any given time, meaning contrails may stop generating if there are already many in the scene. Lower the point generation rate if this becomes an issue.

Setting the point generation rate to 15 per second or higher can cause visual artifacts in the contrail since point generation is framerate dependent and can conflict with the game's tick rate. Modern client mods will modify the effect in-engine to prevent this.

Structure and fields

Field Type Comments
flags bitfield
Flag Mask Comments
first point unfaded 0x1
last point unfaded 0x2
points start pinned to media 0x4
points start pinned to ground 0x8
points always pinned to media 0x10
points always pinned to ground 0x20
edge effect fades slowly 0x40
scale flags bitfield
Flag Mask Comments
point generation rate 0x1
point velocity 0x2
point velocity delta 0x4
point velocity cone angle 0x8
inherited velocity fraction 0x10
sequence animation rate 0x20
texture scale u 0x40
texture scale v 0x80
texture animation u 0x100
texture animation v 0x200
point generation rate float
  • Unit: points per second

For compatibility with unmodified clients or future mods, try not to exceed 15 points per second because it can cause visual artifacts.

point velocity Bounds
  • Unit: world units per second
Field Type Comments
min float
max float
point velocity cone angle float
inherited velocity fraction float
render type enum
Option Value Comments
vertical orientation 0x0
horizontal orientation 0x1
media mapped 0x2
ground mapped 0x3
viewer facing 0x4
double marker linked 0x5
texture repeats u float
  • Unit: repeats
texture repeats v float
  • Unit: repeats
texture animation u float
  • Unit: repeats per second
texture animation v float
  • Unit: repeats per second
animation rate float
  • Unit: frames per second
bitmap TagDependency: bitmap
first sequence index uint16
sequence count uint16
unknown int uint32
  • Cache only
shader flags bitfield
Flag Mask Comments
sort bias 0x1
nonlinear tint 0x2
don't overdraw fp weapon 0x4
framebuffer blend function enum
Option Value Comments
alpha blend 0x0
multiply 0x1
double multiply 0x2
add 0x3
subtract 0x4
component min 0x5
component max 0x6
alpha multiply add 0x7
framebuffer fade mode enum
Option Value Comments
none 0x0
fade when perpendicular 0x1
fade when parallel 0x2
map flags bitfield
Flag Mask Comments
unfiltered 0x1
secondary bitmap TagDependency: bitmap
anchor enum
Option Value Comments
with primary 0x0
with screen space 0x1
zsprite 0x2
secondary map flags bitfield?
u animation source enum
Option Value Comments
none 0x0
a out 0x1
b out 0x2
c out 0x3
d out 0x4
u animation function enum
Option Value Comments
one 0x0
zero 0x1
cosine 0x2
cosine variable period 0x3
diagonal wave 0x4
diagonal wave variable period 0x5
slide 0x6
slide variable period 0x7
noise 0x8
jitter 0x9
wander 0xA
spark 0xB
u animation period float
  • Unit: seconds
u animation phase float
u animation scale float
  • Unit: repeats
v animation source enum?
v animation function enum?
v animation period float
  • Unit: seconds
v animation phase float
v animation scale float
  • Unit: repeats
rotation animation source enum?
rotation animation function enum?
rotation animation period float
rotation animation phase float
rotation animation scale float
rotation animation center Point2D
Field Type Comments
x float
y float
zsprite radius scale float
point states Block
  • HEK max count: 16
Field Type Comments
duration Bounds?
  • Unit: seconds
transition duration Bounds?
  • Unit: seconds
physics TagDependency: point_physics
width float
  • Unit: world units
color lower bound ColorARGB
Field Type Comments
alpha float
red float
green float
blue float
color upper bound ColorARGB?
scale flags bitfield
Flag Mask Comments
duration 0x1
duration delta 0x2
transition duration 0x4
transition duration delta 0x8
width 0x10
color 0x20

Acknowledgements

Thanks to the following individuals for their research or contributions to this topic:

  • gbMichelle (Limits)
  • Kavawuvi (Invader tag definitions)
  • MosesOfEgypt (Tag structure research)