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.

Related HaloScript

Function/global

Type

(render_contrails [boolean])

Toggles the display of all contrails.

Global

Structure and fields

FieldTypeComments
flagsbitfield
FlagMaskComments
first point unfaded0x1
last point unfaded0x2
points start pinned to media0x4
points start pinned to ground0x8
points always pinned to media0x10
points always pinned to ground0x20
edge effect fades slowly0x40
scale flagsbitfield
FlagMaskComments
point generation rate0x1
point velocity0x2
point velocity delta0x4
point velocity cone angle0x8
inherited velocity fraction0x10
sequence animation rate0x20
texture scale u0x40
texture scale v0x80
texture animation u0x100
texture animation v0x200
point generation ratefloat
  • 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 velocityBounds
  • Unit: world units per second
FieldTypeComments
minfloat
maxfloat
point velocity cone anglefloat
inherited velocity fractionfloat
render typeenum
OptionValueComments
vertical orientation0x0
horizontal orientation0x1
media mapped0x2
ground mapped0x3
viewer facing0x4
double marker linked0x5
texture repeats ufloat
  • Unit: repeats
texture repeats vfloat
  • Unit: repeats
texture animation ufloat
  • Unit: repeats per second
texture animation vfloat
  • Unit: repeats per second
animation ratefloat
  • Unit: frames per second
bitmapTagDependency: bitmap
first sequence indexuint16
sequence countuint16
unknown intuint32
  • Cache only
shader flagsbitfield
FlagMaskComments
sort bias0x1
nonlinear tint0x2
don't overdraw fp weapon0x4
framebuffer blend functionenum
OptionValueComments
alpha blend0x0
multiply0x1
double multiply0x2
add0x3
subtract0x4
component min0x5
component max0x6
alpha multiply add0x7
framebuffer fade modeenum
OptionValueComments
none0x0
fade when perpendicular0x1
fade when parallel0x2
map flagsbitfield
FlagMaskComments
unfiltered0x1
secondary bitmapTagDependency: bitmap
anchorenum
OptionValueComments
with primary0x0
with screen space0x1
zsprite0x2
secondary map flagsbitfield?
u animation sourceenum
OptionValueComments
none0x0
a out0x1
b out0x2
c out0x3
d out0x4
u animation functionenum
OptionValueComments
one0x0
zero0x1
cosine0x2
cosine variable period0x3
diagonal wave0x4
diagonal wave variable period0x5
slide0x6
slide variable period0x7
noise0x8
jitter0x9
wander0xA
spark0xB
u animation periodfloat
  • Unit: seconds
u animation phasefloat
u animation scalefloat
  • Unit: repeats
v animation sourceenum?
v animation functionenum?
v animation periodfloat
  • Unit: seconds
v animation phasefloat
v animation scalefloat
  • Unit: repeats
rotation animation sourceenum?
rotation animation functionenum?
rotation animation periodfloat
rotation animation phasefloat
rotation animation scalefloat
rotation animation centerPoint2D
FieldTypeComments
xfloat
yfloat
zsprite radius scalefloat
point statesBlock
  • HEK max count: 16
FieldTypeComments
durationBounds?
  • Unit: seconds
transition durationBounds?
  • Unit: seconds
physicsTagDependency: point_physics
widthfloat
  • Unit: world units
color lower boundColorARGB
FieldTypeComments
alphafloat
redfloat
greenfloat
bluefloat
color upper boundColorARGB?
scale flagsbitfield
FlagMaskComments
duration0x1
duration delta0x2
transition duration0x4
transition duration delta0x8
width0x10
color0x20

Acknowledgements

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

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