Stalcraft Recoil Visualizer

Spray patterns from the game weapon stats

Plot how a weapon's recoil moves your aim point during a spray at a chosen distance, using the game's own recoil statistics, and compare weapons, stances and attachments side by side.

Selected Weapons

0/5

No weapons selected

Add up to 5 weapons to compare their recoil. Every firearm with recoil statistics can be added.

Environment Settings

Target and stance

Stance

Crouching and prone scale recoil and spread by the weapon's own stance multipliers.

Visualization Mode

The widest band the aim point can drift sideways. No randomness.

Simulation Length

Recoil Pattern

Projected shot spread at 20m

Add weapons and activate them to see their recoil patterns

How the Recoil Visualizer calculates a spray

The visualizer turns a weapon's own recoil statistics from the game data, plus the attachments and Module Modifiers (%) you set, into a pattern of points on a flat target at the Target Distance. It is calculated from the listed stats. It is not a recording of an in-game spray, and it does not include any mouse correction.

What the graph shows

The graph is a flat plane facing you at the selected distance (5–100 m, 20 m by default). Both axes are in metres on that plane: Horizontal Spread (m) runs left (−) and right (+), and Vertical Spread (m) is the height above the first shot. The first shot is the origin (0, 0), where you aimed.

From angle to distance
displacement = distance × tan(recoil angle)

The weapon's vertical and horizontal recoil are treated as angles, in degrees per shot, and converted to metres on the plane at the selected distance. The same angle moves the aim point further on a more distant target: 0.5° is about 0.17 m at 20 m and about 0.87 m at 100 m. Distance changes how far apart the points are, not the angles.

What one point is

Point n is where the aim point has drifted to by shot n: the sum of every recoil kick before it. It is not a simulated bullet impact, because bullet spread is not added to the points (see the spread overlay below). The tooltip shows the shot number and the point's horizontal and vertical position in metres. Hover anywhere on the graph and the nearest shot of any weapon is ringed and described. Scroll or pinch to zoom, drag to pan once zoomed, and double-click (or the fit button) to see the whole spray again.

Show Target Dummy

The silhouette is a fixed outline 1 m wide and 2 m tall (head, torso, arms and legs), drawn to scale with its feet at the first shot's point of aim. It is a size reference only: the visualizer does not count hits.

Spray summary

The table under the graph gives, for each shown weapon, the shots fired, the height of the last point, the widest sideways drift (the cone's half-width at the last shot), the first and the strongest kick, and the first shot with buildup. These numbers do not depend on randomness, whichever mode the graph uses.

Kick multiplier per shot

The chart under the table draws m(n), the factor each shot's kick is multiplied by (see below), shot by shot. It shows at a glance which weapon kicks hardest on the first shot and when its buildup begins.

Recoil per shot: first-shot multiplier and recoil buildup

Each new shot moves the aim point by the weapon's recoil multiplied by a per-shot factor. The same factor scales the vertical and the horizontal kick.

Kick from shot n to shot n + 1
kick(n) = recoil angle × m(n)
m(1) = first-shot multiplier
m(n) = 1 + buildup × max(0, n − buildup start), for n ≥ 2

The first kick uses the weapon's 1st Shot multiplier. Buildup is a percentage per shot, and the buildup start is the number of shots fired before it applies: with a start of 5, the kicks of shots 2 to 5 are ×1 and shot 6 is the first with buildup. Each later kick is larger by the buildup value, in a straight line, with no cap in this model. A negative buildup makes the kicks smaller, never below zero.

Because the values are separate, the first kick can be the largest one. With a first-shot multiplier of ×2, a buildup of 4% and a start of 5 shots, the kicks are ×2, then ×1 up to shot 5, then ×1.04 at shot 6, ×1.08 at shot 7 and so on. Only at shot 30 is a kick as strong as the first. The first shots of a spray are therefore not always the easiest to control.

All three values come from the weapon's own game statistics (first-shot recoil multiplier, recoil buildup and recoil buildup start), marked Game data on the weapon card. A weapon whose data predates these statistics uses the value the site maintains instead (Site value), with buildup from shot 2, or else ×1 and 0% (Default). Attachments and the Buildup adjustment change the buildup percentage. Nothing on the page changes the first-shot multiplier or the start.

Stance

Stance scales the recoil by the weapon's own crouch or prone recoil multiplier (×0.875 crouching and ×0.75 prone for most weapons) and the spread overlay by its crouch or prone spread multiplier. Standing is ×1. A weapon that states no multiplier for a stance uses ×1 there. The multiplier in use is shown on the weapon card.

Simulation Length

Time

Shots = ⌊RPM ÷ 60 × Seconds to Fire⌋, rounded down. At 600 RPM, 2.5 s gives 25 shots. This is the only mode that uses the rate of fire. If a weapon has none listed, 600 RPM is assumed.

Mag

One full magazine: the weapon's capacity, or the capacity of a fitted magazine attachment, which replaces it. 30 rounds are used if no capacity is listed. The capacity in use is shown in the Mag box on the weapon card.

Shots

Exactly the number entered in Number of Shots.

Visualization Mode

Vertical recoil always moves the aim point up and is never random. The modes differ only in how the horizontal kicks are drawn. A horizontal kick's size comes from the weapon's horizontal recoil range [min; max] × m(n). Most weapons state one value (min = max).

Cone of Fire (Bounds)

No randomness. For each shot it draws the height and a band from −X to +X, where X is the sum of every horizontal kick so far at the top of the range: the furthest sideways the aim point could drift if every kick went the same way. Spread is not drawn.

Cumulative Spread

No randomness. Every horizontal kick goes right at the top of the range, so the path is the right-hand edge of the cone. Spread can be shown around each point.

Random Path

One path. Each horizontal kick goes left or right with equal chance, and its size is drawn evenly from the weapon's horizontal range (exactly the stated value when the range is one value). A new path is drawn every time the graph is recalculated, for example when you change a setting. Spread can be shown around each point.

Multiple Simulations

30 random paths drawn as thin lines, each one drawn like Random Path. The overlapping lines show the range of drift. They are not a probability heat map. Spread is not drawn.

Right-side bias. A weapon whose horizontal range starts at 0, such as the ASh-12 and the 6P62 ([0°; 0.65°]), kicks to the right only: in Random Path and Multiple Simulations each kick goes right with a size from 0 to the maximum, in Cumulative Spread it goes right at the maximum, and in Cone of Fire (Bounds) its band runs from 0 to the right. The weapon card shows the direction. A weapon whose data predates the horizontal range uses the right-side bias the site maintains instead, with the same rule. Nothing in this model pulls to the left.

The spread overlay

Spread radius
spread radius = distance × tan(spread angle)

With Show Spread on (available in Cumulative Spread and Random Path), a circle of this radius is drawn around every point. Spread Mode chooses the angle: Normal uses the weapon's spread and Hip Fire its hip-fire spread, both after attachments and the Stance multiplier. The radius is the same for every shot.

The circle is an overlay around the recoil path, not a simulation of where bullets land. The points are calculated without spread and do not move when the overlay is turned on or off. The circle marks the area that the spread angle covers at this distance; the visualizer does not pick bullet positions inside it.

Attachments and manual adjustments

Each modified stat
final value = base value × (1 + sum of percentage modifiers ÷ 100)

The percentages of all fitted attachments and of the Module Modifiers (%) fields are added together first and then applied once. Two −10% modifiers give −20%, not −19%.

  • Vertical and horizontal recoil: attachments and the vertical and horizontal adjustment fields.
  • Buildup: the attachments' recoil buildup modifier and the Buildup adjustment field.
  • Spread and hip-fire spread: attachments only. They change only the radius of the spread overlay.
  • Magazine capacity: a magazine attachment's capacity replaces the weapon's, which changes the Mag length.
  • Nothing else is read. Other attachment effects, such as aim speed, ergonomics or movement speed, do not change the graph.
  • Compatibility: the attachment picker offers only the attachments whose game data lists the weapon as a suitable target. A saved attachment the weapon cannot take is removed.
  • Best attachments on a weapon card fits the compatible attachments with the lowest total recoil (climb plus drift) at the current settings, with the Recoil Table's search. Pistol grips are never chosen; the Recoil Table's preferred and blocked attachments apply. A full magazine is compared over the weapon's own magazine size.
Why Stabilization is shown but not used

The weapon card adds up the attachments' Stabilization modifiers and shows the total, but the pattern calculation does not read it: the points are the same whatever its value. The site's attachment reference describes stabilization as visual recoil (camera shake and how quickly the reticle re-centres), which this flat model of aim-point drift does not include. The visualizer therefore makes no claim about how stabilization changes a spray.

Assumptions and limitations

  • No mouse compensation. The graph shows uncorrected drift. How much of it a player removes by pulling down or sideways is not modelled.
  • No movement model. Stance offers Standing, Crouching and Prone. Walking and jumping are not modelled.
  • No moving target. The target plane is fixed. The dummy is a size reference, and hits are not counted.
  • Random Path and Multiple Simulations change between runs. They use unseeded random numbers, so two calculations with the same settings draw different paths. Use Cone of Fire (Bounds) or Cumulative Spread for repeatable comparisons.
  • Stabilization is not modelled (see above).
  • Spread is an overlay, not sampled bullet dispersion. The points are aim positions without spread.
  • One continuous spray from the first shot. There are no pauses, bursts, recoil recovery or reloads. Time only matters for counting shots in Time mode.
  • Buildup is read as a straight line. The game lists the percentage and the start shot, not the curve after it. The visualizer adds the percentage once per shot, with no cap.
  • Horizontal range. Kick sizes are drawn evenly from the weapon's range. The game does not say how it picks a value inside it.
  • Data can lag behind game updates. Every value comes from the site's copy of the game data. A game update can change a weapon before that copy is refreshed.
  • Weapon choice. The weapon picker lists every firearm with recoil statistics, up to 5 at a time.