contrail

🚧 This article is a stub. You can help expand it by submitting content in pull requests or issues in this wiki's source repo.

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 30 per second or higher can cause visual artifacts in the contrail since this value begins to exceed the game's standard tick rate.

Structure and fields #

Field Type Comments
flags bitfield(16)
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(16)
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 f32 (points per second)
point velocity f32 (world units per second) (min & max)
point velocity cone angle Angle: f32
inherited velocity fraction Fraction: f32
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
pad(2)
texture repeats u f32 (repeats)
texture repeats v f32 (repeats)
texture animation u f32 (repeats per second)
texture animation v f32 (repeats per second)
animation rate f32 (frames per second)
first sequence index Index: u16
sequence count u16
pad(64)
pad(36)
unknown int u32
  • Only set when the tag is compiled into a map cache.
shader flags bitfield(16)
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(16)
Flag Mask Comments
unfiltered 0x1
pad(12)
pad(16)
anchor enum
Option Value Comments
with primary 0x0
with screen space 0x1
zsprite 0x2
secondary map flags bitfield(16)
Flag Mask Comments
unfiltered 0x1
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 f32 (seconds)
u animation phase f32
u animation scale f32 (repeats)
v animation source enum
Option Value Comments
none 0x0
a out 0x1
b out 0x2
c out 0x3
d out 0x4
v 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
v animation period f32 (seconds)
v animation phase f32
v animation scale f32 (repeats)
rotation animation source enum
Option Value Comments
none 0x0
a out 0x1
b out 0x2
c out 0x3
d out 0x4
rotation 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
rotation animation period f32
rotation animation phase f32
rotation animation scale Angle: f32
rotation animation center
Point2D
  • x: f32
  • y: f32
pad(4)
zsprite radius scale f32
pad(20)
point states Block?
Field Type Comments
duration f32 (seconds) (min & max)
transition duration f32 (seconds) (min & max)
pad(32)
width f32 (world units)
color lower bound
ColorARGB
  • alpha: f32
  • red: f32
  • green: f32
  • blue: f32
color upper bound
ColorARGB
  • alpha: f32
  • red: f32
  • green: f32
  • blue: f32
scale flags bitfield(32)
Flag Mask Comments
duration 0x1
duration delta 0x2
transition duration 0x4
transition duration delta 0x8
width 0x10
color 0x20

This information was partially generated using Invader tag definitions.

Acknowledgements

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

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