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

Projectiles are special moving objects shot from weapons and thrown as grenades.


Projectile movement is simulated during each game tick (smallest unit of simulated time). According to the projectile's velocity and gravity scale, its next position is calculated by the engine and a "trace" line between the two points is tested for collisions.

The trace collision test takes advantage of objects' bounding radii and the collision BSP structures found in model_collision_geometry and scenario_structure_bsp. If any collision is detected, it is handled accordingly (e.g. applying effects or playing sounds).

If no collision is detected, the projectile is moved to its next position at the end of the trace line. The process continues, tick by tick, until the projectile collides, detonates at its maximum range, or is removed at its maximum air or water damage range.

A sufficiently high velocity projectile is essentially hitscan if it can cross a playable space within a single tick, with the game being simulated at 30 ticks per second. Otherwise, ballistic leading will be required to hit a moving target.

Structure and fields

projectile flagsbitfield
oriented along velocity0x1

Projectile will always face in the direction it's moving in.

ai must use ballistic aiming0x2

AI will try to arc their shots to hit their targets rather than firing directly at them. Useful if the projectile has a strong arc or long travel time, throws off AI aim if not.

detonation max time if attached0x4
has super combining explosion0x8

If seven of this projectile are attached to the same biped, this projectile's super detonation effect will be triggered. This number is hardcoded and cannot be changed.

combine initial velocity with parent velocity0x10

When off, projectiles add the component of the shooter's velocity in the direction of travel when firing. When on, the shooter's unmodified velocity is added to the projectile's when firing.

random attached detonation time0x20
minimum unattached detonation time0x40
detonation timer startsenum

The detonation timer begins immediately after the projectile is created, causing it to explode after a fixed length of time.

after first bounce0x1

Treated identically to when at rest by the game (same code path).

when at rest0x2

Once the projectile comes to rest, its detonation timer begins. If it becomes in motion again, the timer is not interrupted.

impact noiseenum
projectile a inenum
range remaining0x1
time remaining0x2
projectile b inenum?
projectile c inenum?
projectile d inenum?
super detonationTagDependency: effect
ai perception radiusfloat
  • Unit: world units
collision radiusfloat
  • Unit: world units
arming timefloat
  • Unit: seconds
danger radiusfloat
  • Unit: world units

Actors within this distance of the projectile may attempt to avoid it, such as by diving away, depending on actor settings.

effectTagDependency: effect
  • Unit: seconds
minimum velocityfloat
  • Unit: world units per second
maximum rangefloat
  • Unit: world units
air gravity scalefloat
air damage rangeBounds?
  • Unit: world units

Determines the maximum range that the projectile travels in the air and scales impact damage between its lower and upper bound. When the projectile reaches the maximum range, it disappears (and does not detonate). If detonation at a max range is desired, used the maximum range field above. See the impact damage formula for more information. If these values are set to 0, maximum damage is applied and the projectile continues traveling until colliding or detonating.

water gravity scalefloat
water damage rangeBounds?
  • Unit: world units

Like air damage range, but for underwater environments (determined by the is water flag of fog tags).

initial velocityfloat
  • Unit: world units per second

Sets the velocity of the projectile upon creation. For grenades thrown by AI, see actor_variant grenade velocity. For player-thrown grenades, see unit grenade velocity.

final velocityfloat
  • Unit: world units per second
guided angular velocityfloat
  • Unit: degrees per second
detonation noiseenum?
detonation startedTagDependency: effect
flyby soundTagDependency: sound
attached detonation damageTagDependency: damage_effect
impact damageTagDependency: damage_effect
projectile material responseBlock
  • HEK max count: 33
cannot be overpenetrated0x1
default responseenum
default effectTagDependency: effect
potential responseenum?
potential flagsbitfield
only against units0x1
never against units0x2
  • H1A only
potential skip fractionfloat
  • Min: 0
  • Max: 1
potential betweenBounds?
potential andBounds?
  • Unit: world units per second
potential effectTagDependency: effect
scale effects byenum
angular noisefloat
velocity noisefloat
  • Unit: world units per second
detonation effectTagDependency: effect
initial frictionfloat
maximum distancefloat
parallel frictionfloat
perpendicular frictionfloat


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

  • gbMichelle (Movement)
  • Kavawuvi (Invader tag definitions)
  • Mimickal (Explaining bounce timer)
  • MosesOfEgypt (Tag structure research)