Inside the armoury / TFX 2.05

How TFX’s weapons work.

From the pylon to the target. Missile motors, seekers, bomb trajectories and damage, with some unexpected differences from the handbook.

By the Lost Engines team · · 22 minute read

The original Nighthawk loadout screen with its selection of ground-attack missilesAn original TFX HARM impact with a polygonal fireball and smoke
TFX 2.05, drawn by the original code. The weapon in the menu and the explosion at its destination are connected by several quite different systems.

Select an AGM 109 H in the Nighthawk and the aircraft can announce a lock while it is still sitting on the runway. There is no radar contact to acquire and no laser spot to find. The missile already has somewhere to go.

That little detail leads into a surprisingly complicated armoury. TFX has weapons that chase aircraft, weapons that follow a designated point, dispensers that scatter smaller projectiles, and bombs that stop moving horizontally halfway through their descent. Their names suggest quite different technologies. Underneath, many share the same handful of movement routines.

We followed the weapons in TFX 2.05 from the loadout screen through launch, guidance, collision and damage. Along the way, we found some useful tactical distinctions, some generous shortcuts, and several places where the manual describes a different weapon from the one the code delivers.

What leaves the pylon

The loadout screen is displaying small, working 3D models. A carried weapon, its released version and its later flying appearance can each have a separate object definition. Those definitions contain more than geometry: they also supply collision behaviour, damage and animation.

Original Eurofighter arming screen showing AIM 9S, AIM 9L, ASRAAM, AMRAAM, AAAM and AA-ARM models Original F-117 arming screen showing Maverick, AGM 109 H, HARM, Sidearm and Harpoon models
The original loadout renderer, showing the air-to-air and ground-attack selections. The right-hand illustrations are rotating models, not inventory icons.

The executable has 27 weapon records. Alongside the selectable armament are the cannon projectile, external tank, chaff, flare, cargo box and a generic bomblet called shoot. A record specifies the permitted mounts, carried mass, targeting category, range operand, model names and a short sequence of movement stages.

A missile's sequence might read:

  1. AttachedFollow the aircraft’s release point.
  2. FallingMove forward and drop clear.
  3. BoostAdd speed on every update.
  4. GuidedTurn towards the target and spend the remaining range.
The common missile sequence. Bombs, dispensers and the cannon choose different combinations of the same callbacks.

At release, the projectile inherits the aircraft's pitch, heading and scalar speed. Its initial roll is zero. During the attached stage, a player-launched store follows its moving mount, but its stored launch angles stay fixed. Banking or pitching sharply while it leaves the aircraft can therefore produce a less tidy departure than the model's attachment suggests. Computer-controlled launches skip the normal mounted wait.

The usual attached interval is 25 ticks. AIM 9S and AIM 9L then fall for 125 ticks; ASRAAM and most other powered missiles fall for 75. The smaller delay gives ASRAAM a genuine practical advantage over the Sidewinders even before guidance begins. Guided bombs use 125 falling ticks; the Mk 82 uses 200 before entering its long ballistic stage.

TFX's shared hardware clock runs at about 54.62 ticks per second, while several physical conversions assume 50. Thus 25 + 125 ticks is roughly 2.75 seconds of clock time. Stage changes happen at update boundaries, so a particular launch can take slightly longer. The update which expires a stage still finishes that stage's movement; unused time is not carried into the next stage.

These weapon routines are shared across the flight-model settings. Choosing Military-spec changes the aircraft carrying the weapons, not the missile into a more elaborate aerodynamic simulation.

The weapon-record decoder and movement routines retain the original table fields and stage transitions.

Range is a budget, speed is a recipe

The manual gives most powered weapons a maximum speed in Mach and a maximum range. The game has a range value, but no corresponding Mach limit or target speed in the weapon record.

The following table compares the handbook's ranges with the values used by the game. Both range columns use statute miles, matching the radar. The game figure is a guided-flight distance budget, not a promise that the weapon can hit anything inside that radius.

WeaponManual range (miles)Game budget (miles)Manual speedBoost ticks
AIM 9S / AIM 9L9.929.99Mach 250
ASRAAM9.39.36Mach 350
AMRAAM29.7629.96Mach 4120
AAAM124 in the table; 70 in the text124.85Mach 650
AA-ARM124124.85Mach 5120
AGM 65D Maverick24.824.97Mach 1.550
AGM 109 H316.28 in the table; 186 in the text317.74Mach 0.60100
AGM 88 HARM11.1611.24Mach 2120
AGM 122A Sidearm4.964.99Mach 3100
AGM 84 Harpoon57.0457.43Mach 0.75100

The manual gives the AGM 109 H’s table entry as 509 km, converted here to 316.28 miles.

The broad range choices agree reasonably well with the manual. The exceptions start when we ask what the numbers actually control.

A guided update subtracts the distance travelled from the remaining budget. A turning missile spends it along its curved path, so a fleeing or manoeuvring target can exhaust the weapon well inside its advertised range. Travel during the preceding fall and boost does not consume this budget. Although the stage record also contains a timer, ordinary guidance does not count it down: remaining range ends the stage. Conversely, the large number stored for an unguided bomb is not a 125-mile bombing capability: its ballistic stages do not use the guided-range calculation at all.

Speed is stranger. The boost routine maintains an acceleration accumulator, initially 25:

speed += acceleration >> 2
acceleration = min(acceleration + 16 × elapsed_ticks, 200)
move_forward(speed × elapsed_ticks)

The accumulator's growth uses elapsed time. The addition to speed does not. Once the accumulator reaches 200, each call adds 50 speed units, whether that call covers four ticks or ten. The projectile manager divides long frames into steps of at most ten ticks, but that still leaves a substantial difference between update cadences. Military-spec normally caps the world step at four ticks; other flight modes and time acceleration can supply larger steps.

We ran the original routines with the same launch speed, 190.5 m/s, and two fixed update intervals:

Original-code measurements: a 50-tick boost reaches 460 metres per second with four-tick updates but 287 with ten-tick updates; 100-tick and 120-tick boosts show the same dependence
Speed on entering guidance, measured from the original projectile state. Metres per second use the flight model’s 50-tick conversion. The six measurements hold launch speed and weapon parameters fixed.

At four ticks per update, AIM 9S, AIM 9L, ASRAAM, AAAM and Maverick all emerge from their 50-tick boost at about 460 m/s. AMRAAM, AA-ARM and HARM reach about 865 m/s. AGM 109 H, Sidearm and Harpoon reach about 746 m/s. These are examples from one controlled launch, not fixed speeds of those weapons. A faster aircraft supplies a faster starting value; a different update cadence changes the boost gain.

That reverses some of the handbook's comparisons. AAAM's printed Mach 6 does not make it faster than AMRAAM. Sidearm's printed Mach 3 does not make it faster than HARM. The supposedly subsonic cruise missile and Harpoon use the same 100-tick boost as Sidearm.

After boost, ordinary guidance retains that scalar speed. It does not calculate air density, motor burnout drag, energy lost in a turn or a terminal velocity. Guided bombs use this same constant-speed movement without a boost stage.

Getting a lock

The game separates finding a target, acquiring it, and steering towards it after launch. The three stages have different limits.

The aircraft contact list holds 20 entries. Its broad scan accepts contacts within a horizontal square extending just under 50 miles in each map axis. Height does not enter that first test. Thus an air-to-air weapon with a 125-mile budget does not get a 125-mile acquisition system. A target near a diagonal corner of the scan square can be farther away than one directly ahead.

For an ordinary air-to-air acquisition, the target must lie within about 25.3° of the aircraft's heading and pitch, tested separately. There is also a minimum separation, normally 30 world units, about 73 metres. Friendly aircraft fail the weapon-lock check; neutral aircraft are allowed through it.

For the rear-aspect category, TFX compares the headings of the two aircraft. They must differ by no more than 45°. It does not compute the missile seeker's view of a three-dimensional exhaust cone. Flying roughly the same direction is the decisive extra condition.

The small aiming reticle then moves towards the projected target, at a nominal 15 original screen pixels per model second. Lock arrives when the reticle catches it. Although there is a 500-tick field in this controller, it is not a compulsory ten-second acquisition delay. A target already under the reticle can lock promptly; one near the edge takes longer.

This makes two table choices particularly revealing:

WeaponsAcquisitionAfter launchDecoy accepted
AIM 9S, ASRAAMRear-aspect heading checkAbout 60° pitch and heading tracking limitsFlare
AIM 9L, AMRAAM, AAAMNo rear-aspect checkNo 60° tracking limitChaff
AA-ARMNo rear-aspect checkAbout 60° pitch and heading tracking limitsEither

ASRAAM is described as all-aspect infrared in the manual, but shares AIM 9S's rear-aspect category. AIM 9L is described as infrared, but shares the radar missiles' chaff and ECM category. These are consequences of the actual category bytes and their consumers, not deductions from how the models look.

There are further rough edges in the range check. It compares signed 16-bit pieces of horizontal separations, rather than a clean spherical distance. The HUD's IN RNG calculation uses another distance estimate. We should therefore read IN RNG and LOCK as the outputs of two specific tests, not as a full assessment of whether a shot will succeed. Air-to-air lock is not a general trigger interlock, either: the missile can be released before one is established.

Acquisition, contact-slot retention and the reticle chase are reconstructed in air.cpp. The targeting category comes directly from each original weapon record.

How a missile turns

Once airborne and guided, the missile asks a simple question: which pitch and heading point from my current position to my target's current position?

It turns towards those angles, with a limit of 140 angle units per elapsed tick on each axis. A complete turn is 65,536 units, so this corresponds to about 38.45° per model second, or 42.0° per second of the unclamped hardware clock.

desired = bearing(missile_position, target_position)
error = desired - missile_angles
turn_limit = 140 × elapsed_ticks
missile_angles += clamp(error, -turn_limit, +turn_limit)
move_forward(speed × elapsed_ticks)

This is pure pursuit: chase where the target is now. There is no prediction of where the target will be when the missile arrives, and no proportional-navigation calculation based on the rotation of the line of sight.

The same angular rate serves very different weapons. At the measured 460 m/s, a sustained maximum-rate horizontal turn has a radius of roughly 686 metres using model time. At 865 m/s it is roughly 1,289 metres. More speed can make a missile worse at staying inside a tight turn, even though it catches a straight-flying target sooner.

For categories with the tracking limit, both angular errors must be less than about 59.8°. Outside that region, the weapon does not make a fresh search for another aircraft. It pitches down towards roughly 60° instead. Categories used by AIM 9L, AMRAAM, AAAM, guided bombs, Maverick, CSW and Harpoon bypass this limit and continue turning even towards a target behind them.

There are some distinctly economical calculations here. Pitch bearing uses the larger horizontal separation rather than the true horizontal hypotenuse. The signed-angle subtraction can also choose the long turn across the ±180° boundary. A missile which seems to make a surprisingly wide detour may be following those arithmetic rules quite faithfully.

Targets are references, not permanent promises of a live enemy. Destroying an aircraft does not immediately dispose of every missile already chasing its position. A surviving projectile can circle the wreck's location until its remaining range is spent or a contact retires it. Ground impact is still checked; the guidance routine simply has no special “target died, stop pursuing” manoeuvre.

Original TFX missile camera following a HARM as its motor lights above the Libyan desert The same HARM turning towards its ground target, trailing white smoke
A HARM launch in mission 503, followed with the original F8 missile camera. The released model, flame and trail are separate pieces of the effect.

Bombs, glide slopes and release attitude

The distinction between a release restriction and a successful trajectory matters here. TFX has no general rule saying that a guided bomb can only be released within a particular bank angle, dive angle or glide slope. It checks whether the aircraft can fire, whether a store is present, and, for the laser-guided category, whether there is a designation.

You cannot release normally while still landed, ejecting, disabled or in the inhibited refuelling state. Weapon-system damage can prevent the command. Internal weapons bays are opened as part of the release sequence; they are not a separate manual prerequisite.

Once a GBU is released, however, it spends its initial interval falling along the launch attitude before it can steer. From a steep dive at low altitude, it can hit the ground during that interval. The eventual guidance routine's very generous turning ability cannot rescue a bomb which never reaches it.

GBU 24 trajectories from 200 metres: a level release begins guidance and reaches the target, while 30 and 60 degree downward releases reach the ground during the falling stage
GBU 24 movement returned by the original code, at a launch speed of 190.5 m/s towards a point 5 km ahead. Solid lines are the unguided release; dashed lines are guided flight. The vertical scale is exaggerated; the plot ends at the sea-level plane. Four-tick updates; the mount is held fixed during the attached wait.

In the 200-metre case, the 30° downward release reaches the ground about 348 metres ahead. The 60° release lands about 141 metres ahead. Neither has begun guidance. Release level and the same bomb survives the delay, turns down gently and travels to the target. At 700 metres, all three of these example releases reach the guided phase.

That is a useful altitude constraint, but it is not a conventional glide envelope. Once guided, the bomb maintains its inherited scalar speed and can turn upwards as readily as downwards. It has no lift-to-drag ratio, energy reserve or bank-induced sink rate. The manual's description of an invisible funnel between the aircraft and the laser spot corresponds to a much simpler pursuit calculation.

The Mk 82 is genuinely ballistic in a different sense. Its falling and coasting stages keep adding vertical fall speed while advancing along the launch direction. It has no steering target. The CCIP display runs that same projectile movement forward to estimate where it reaches the Y = 0 ground plane, rather than tracing a curved flight through the actual terrain mesh.

The manual recommends a 30–40° dive from at least 2,000 feet. That is advice for lining up the CCIP marker, not an enforced release window. Its impact circle is drawn only inside a small HUD rectangle. If the predicted point lies outside that rectangle, the line can remain while the circle disappears; the trigger has not been locked out.

The laser designator and Maverick

In this version, Z enters the laser-designator view for a compatible selected weapon, and another Z press records the aimed point. X breaks the lock. The cursor keys move the search view. The underlying intersection is with the flat ground plane, so aiming at a mountain is not a general-purpose terrain raycast.

The F-117 has an extra search-gimbal restriction: roughly ±45° sideways, and from about 1.4° above the aircraft's pitch to 45° below it. The locked tracking path does not apply that same clamp. It is possible to acquire something within the search limits and continue following its designation after the aircraft turns away.

The handbook gives Maverick a two-press Space workflow: first pickle a target in the HUD, then fire. The release handler in this build reserves that automatic first-press acquisition for Harpoon. Maverick belongs to the same designation-required category as the GBUs. The reliable route is to establish its point in the designator first.

Maverick then gets a useful extra step. On designation, the game searches for the closest eligible mobile ground object's damage-box centre, within a generous search radius of about 24.4 km around the selected point. If it finds one, it remembers an offset on that actor and updates the designated position as the actor moves. The aim point remains on the ground plane; the offset does not rotate with the vehicle.

There is another consequence of how designations are stored. These ground weapons follow a shared designated point. A launched air-to-air missile retains a reference to its own aircraft target, but a GBU or Maverick can see a later change to the common designation. Selecting a different point can therefore redirect weapons which are already on their way. “Fire and forget” in the manual does not always mean a private, immutable target inside each projectile.

The gimbal, ground intersection, mobile-target search and ship/emitter selectors are in ground.cpp. The projectile runtime resolves actor references, decoys and the shared designation on each update.

The missile that knows its destination

The long-distance weapon is AGM 109 H, TFX's air-launched Tomahawk. Its target is prepared when the mission starts, using the first mission target plus an offset supplied by that target's object definition. The offset is added in map axes without rotating it with the target. The aim height is fixed at ten world units above the zero plane, equivalent to 80 feet.

Whenever AGM 109 H is selected, its targeting controller installs this position as the designation. It does not wait for a radar scan, a laser lock or a nose-on acquisition. That is why LOCK, IN RNG and the tracking announcement can appear before takeoff.

Original F-117 cockpit at night on the runway, showing IN RNG and LOCK for AGM 109 H The original F9 camera showing the cruise missile’s designated ground target before takeoff
Mission 703 with AGM 109 H fitted through the arming screen. The lock exists on the runway; F9 can already inspect its destination. Firing is still inhibited while landed.

Pressing N to cycle mission-target previews does not change the stored cruise destination. It changes what the pilot is looking at in that display, not the launch programme. Nor does the missile search for an alternative target when the first one has already been destroyed.

The manual describes low-altitude travel, scene matching and a delivery of bomblets over an enemy airfield. The implemented weapon has an attached stage, a fall, a 100-tick boost and ordinary guided pursuit. There is no terrain-following or scene-matching stage, and no dispenser stage. Its large direct-contact damage value makes it a powerful weapon without any of those extra systems.

Its guidance category also retains the roughly 60° tracking limits. A pre-programmed destination does not mean that launching away from it is sensible. Pointing towards the destination and allowing room for the release and boost makes better use of the weapon than relying on the generous range number alone.

HARM, Sidearm and Harpoon

HARM and Sidearm get their targets from the surface-actor list. AA-ARM, despite its anti-radiation name, uses the ordinary air-target acquisition described above. The selector searches for an available enemy object with the game's emitter type, 56. C cycles through qualifying actors. It does not inspect a simulated radar waveform, and the selector does not ask whether that actor is currently transmitting. The chosen position becomes the designation.

They then use the shared guided routine with the approximately 60° tracking limits. HARM has the longer boost and larger range budget. Sidearm is lighter, but the shorter motor programme makes it slower in otherwise identical launches, despite the manual advertising it as faster.

Harpoon has a different acquisition path. With no existing ground target, the first trigger press looks for the nearest available surface actor belonging to a list of ship types, within about 73 km by the game's distance estimate. The next press releases the missile. This search has no allegiance filter, so the nearest eligible ship is not necessarily an authorised enemy target.

Its descent is wonderfully blunt. While above 640 feet, the guided update adds a fixed downward displacement of 512 position subunits per elapsed tick. On the model's time scale that is about 244 m/s of extra descent, on top of its normal forward motion. Below the threshold, that addition stops and ordinary pursuit continues. This is not a controller holding a chosen clearance above waves or terrain.

Harpoon bypasses the 60° guidance gate, so it can keep turning towards a ship well outside the nose direction. Its smoke, target view and dramatic downward movement make it look much more specialised than the handful of conditions added to the common missile routine.

Dispensers and runway weapons

Original loadout menu displaying Mk 82 and Paveway guided bomb models Original loadout menu displaying GBU-55, CMB18, CSW and Durandal models
The bomb and dispenser pages. TFX labels its fuel-air bomb GBU-55 in the menu, while the manual calls it CBU 55. CMB18 is the manual’s JP233 runway dispenser.

The specialist weapons do have distinct sequences, although some of their advertised features stop at the description.

CMB18 / JP233 scatters generic bomblets around the aircraft's current release anchor during its dispenser stage. With the normal projectile substep limit, it emits one child per update. More updates during the 150-tick stage therefore produce more bomblets. The children use the generic shoot record, not separate runway charges and persistent delayed-action mines.

CSW falls, boosts, then uses a guided stage which ends when it descends to about 640 feet. At that point it begins scattering the same generic bomblet. The release condition is altitude, not arrival over the target. Its range operand is 124.85 miles, whereas the manual gives the weapon 12.4 miles.

During CSW's 150-tick dispenser stage, each update emits elapsed_ticks + 1 children. Over a full stage, four-tick updates request 190 children over 38 calls; ten-tick updates request 165 over 15 calls. The manual's fixed count of 250 independently homing anti-armour bomblets is not what this programme generates. The children do not have their own armour-seeking guidance.

Both dispensers also borrow the player's current angles and speed when creating a child. A CSW far away from the aircraft is therefore still influenced by the aircraft's state at the moment its bomblets are born. Their scatter is random but asymmetrical: the wide pattern adds positive offsets along both map axes rather than spreading evenly around the parent.

The projectile population has 98 usable slots. When full, it recycles the oldest active projectile. A dense dispenser event can therefore request far more children than remain simultaneously alive, and can even recycle an older dispenser while it is running. Counting rendered dots is not a reliable way to recover the authored number of releases.

Durandal takes another shortcut. After its attached and falling stages, and a one-tick boost, it enters the retarded-store routine. That routine increases vertical fall speed and pitches the model down, but does not call the forward-movement routine. Its horizontal position stops advancing. The end of the drop is vertical rather than a continuously simulated parachute-to-rocket trajectory.

These differences matter when choosing an approach. A straight low pass suits a dispenser attached to the aircraft's moving anchor. A Durandal needs its initial forward travel to put the vertical descent in the right place. CSW's altitude-triggered opening makes its release height and distance to the target especially consequential.

What a hit actually does

The weapon's carried mass affects the aircraft. It does not determine damage by multiplying mass by impact speed.

Damage comes from the released object's small scenery programme, or SSD. Its initialisation writes an impact value and a health value. The collision system tests the projectile's swept movement against authored volumes, then runs the target's response. These are object-defined boxes and callbacks, not intersections with every visible triangle.

WeaponContact damageNotable comparison
Cannon10Each visible projectile represents an ammunition burst.
Sidewinders, ASRAAM101 in flightAIM 9S’s pre-boost object starts at 111.
AMRAAM, AAAM, AA-ARM121Very different advertised sizes, equal direct-hit strength.
Mk 82, GBU 12501Guidance changes placement, not this damage value.
GBU 161,001About twice the smaller GBU’s impact value.
GBU 10, BLU 109, GBU-552,001The penetrator and fuel-air descriptions do not imply greater direct-hit damage.
GBU 244,001About twice BLU 109, the manual’s “hardier” derivative.
Durandal401A special trajectory, not a simulated concrete thickness.
Maverick, HARM251Equal contact damage.
Sidearm201Less damage as well as less range than HARM.
AGM 109 H3,001A strong direct hit; no bomblet stage.
Harpoon1,001Its target’s own damage programme decides the result.
Generic dispenser bomblet121Each child has its own collision and damage.

We checked these values by running all 54 fired and secondary object initialisers in the original executable. The numbers are game damage units, not blast energy or kilograms of explosive.

The target can subtract damage from an authored health or lives field, change a model parameter, remove a component, and request fire or explosion effects. Most weapon objects have just one health point themselves, so a damaging contact also consumes the projectile. The target's programme determines whether it has an intermediate damaged state or simply switches to destruction.

There is no general penetration calculation in this contact path which turns BLU 109's casing or Durandal's advertised concrete-breaking ability into a different material interaction. A GBU 24 can be stronger than the supposedly hardier BLU 109 because its SSD literally supplies the larger number. GBU-55 has an additional explosion-effect path, but it is not a simulated fuel cloud spreading and igniting through the scenery.

Original target-camera view of a bright polygonal fireball at the HARM impact site Original target-camera view of smoke rising above the damaged target after the fireball fades
The same mission 503 strike, now viewed from F9 with the camera moved closer. The fireball gives way to smoke and an expanding ring; the effects have their own drawing and lifetime.

Collision eligibility changes with the movement stage, too. The ordinary swept object-contact pass skips attached, falling and the main boost stage. Once guidance or coasting begins, those contacts become active. The separate ground-contact check still runs, which is why an early low-altitude release can be lost before its seeker starts.

The effects system has a particularly visual shortcut. To choose among ground, water and structure impacts, it can sample the previous rendered image at the projected impact point. Palette-index bands distinguish those surface types. The visible splash or impact can consequently depend on what was drawn there, while damage has already followed the separate object-contact logic.

Smoke is also subject to a local effect limit. Eligible projectiles emit trails only within 4,000 world units of the player, about 9.75 km, with further visibility and effects checks. Switching to a distant missile camera does not turn the trail into a permanent record of its entire flight. A missile can remain active after its smoke stops being generated.

The SSD interpreter, collision routines and impact classification cover these separate parts of a hit.

Flares, chaff and electronic countermeasures

The manual's advice to switch off afterburner before using flares is very real in the code.

A cartridge release visits missiles currently targeting its owner, filters them by weapon category, then makes a random test for each eligible missile. For player releases, the thresholds are:

CountermeasureSuccessful random valuesProbability per eligible missile
Chaff60 of 12846.875%
Flare, afterburner off40 of 12831.25%
Flare, afterburner on5 of 1283.90625%

Afterburner makes that flare test eight times less likely to succeed. A successful test changes the missile's target to the actual decoy projectile. When the decoy disappears, followers are changed to a long coasting stage; they do not simply reacquire the aircraft.

Category zero accepts flares, category one accepts chaff, and category two accepts either. This is why the category choice for AIM 9L has effects beyond its acquisition cone. The game treats it like the radar group here even though its handbook description says infrared.

ECM uses another random test against category-one missiles targeting the player, provided they are farther than 1,000 world units away, about 2.44 km. A successful test switches the projectile into a disturbed turning mode. With ECM switched off, that mode returns to ordinary guidance. ECM therefore does not provide a permanent immunity flag, and activating it only at very short range misses this particular test entirely.

Airborne opponents have their own countermeasure decision. One oddity is that their choice uses weapon indices: index one, AIM 9S, selects a radar decoy, while other indices mostly choose between the two. That does not line up with AIM 9S's flare-only seeker category. An enemy can release the wrong kind of decoy for the incoming weapon.

Player cartridge strengths are in defence.cpp; the original population loop applies them in runtime.cpp. Opponent decisions are in air.cpp.

A few more rounds in the cannon

The Eurofighter and F-22 start with 1,760 rounds; the F-117 has no cannon. That agrees with the manual. The relationship between those rounds and the little projectiles on screen is less literal.

Each visible cannon projectile spends ten rounds. The code alternates between two mount positions, adds 300 speed units to the aircraft's speed, then runs two short accelerating stages followed by ballistic coasting. It is representing a burst with one collision object, not simulating ten separate 20 mm bullets.

The held-fire poll runs once per world update. A fresh Space press also has a command path, so the first frame can produce both releases. The handbook's 6,000 rounds per minute is not an independent fixed-rate firing clock in this implementation. As with boost and dispenser density, update cadence affects what happens.

That is a recurring theme across the weapons. TFX puts considerable effort into the experience of acquiring a target, watching a store leave the aircraft, seeing a trail curl away and following the hit. The movement underneath is often compact enough to fit in a few dozen instructions. Learning those instructions explains both the convincing moments and the occasions when the weapons behave nothing like their handbook entries.

Following the evidence

This article follows the September 1994 CD's TFX 2.05 executable and its own weapon resources. Handbook comparisons use the pilot's manual, particularly the HUD and weapon instructions on pages 19–23 and 38–39, and the weapon catalogue on pages 73–82.

The screenshots were drawn by the original code, including the loadout models, cockpit, missile camera and impact effects. For the plots, we supplied controlled launch conditions to the original movement routines and compared their returned states with our reconstruction: 4,698 matching projectile updates, plus the 54 object initialisers used for the damage values. The plotted release tests stop at the zero-height plane, so they isolate the release and guidance behaviour from a particular mountain, building or target volume.

Keep exploring