CS2 mechanicVERIFIEDUpdated 2026-07-03

CS2 bullet damage: one formula, one floor, distance measured to the hitbox

CS2 computes bullet damage as floor(damage × rangeModifier^(distance/500) × hitgroupMultiplier × armor) — a single floor at the very end, never a round — and the distance is measured to the hit point on the hitbox, not to the victim's origin. Head multipliers are per weapon rather than a global 4×, legs are 0.75 and are never protected by armour, and friendly fire scales bullets by 0.33 but grenade self-damage by 1.0. The formula reproduces 29 of 30 recorded damage events exactly, including every armoured one; rounding instead of flooring reproduces 16.

Derived from player damage events in a current-build recording (network protocol 14166) and checked against the current build's compiled weapon data; friendly-fire factors read from the live convar list.

Rounding
floor, applied once at the end
Falloff exponent
distance / 500 u
Falloff distance basis
shooter → hit point on the hitbox
Head multiplier
per weapon (M4A1-S 3.475, Deagle 3.9)
Chest and arms
× 1.0
Stomach
× 1.25
Legs
× 0.75 (never armoured)
Armoured damage dealt
raw × (armorRatio × 0.5)
Armour points lost
floor((raw − dealt) × 0.5)
Friendly fire, bullets
× 0.33
Friendly fire, grenade
× 0.85
Grenade self-damage
× 1.00 (unreduced)
HE damage against enemies
99 × (1 − d/350)
Watch a real pro CS2 match in 3D

Plays in your browser · no download · no account

How it was measured

Damage is one of the few CS2 systems a demo can settle outright, because the server writes both the inputs and the integer result. That makes it a fit problem with a hard oracle: a candidate formula either reproduces the recorded integer or it does not.

Two details are decided by that test rather than by taste. The first is rounding — flooring once at the very end reproduces 29 of 30 recorded events, and rounding reproduces 16, so the choice is not a matter of preference. The second is where falloff distance is measured from. Two adjacent friendly-fire events at raw values 21.03 and 21.10 straddle a flooring boundary and got different server results, which is impossible under an origin-distance model with any constant factor. Distance is measured to the hit point on the hitbox. At ranges over 100 units the two are close enough to be indistinguishable, which is exactly why the near case is the one that proves it.

Armour behaves as two separate quantities. The damage dealt to health is scaled by the weapon's armour ratio halved; the armour value itself loses half of what it absorbed, floored. A helmeted headshot in the corpus lands at 87 health and 18 armour at 471 units, and the model reproduces both.

Friendly fire looked like a rounding ambiguity until the convar list settled it: the bullet factor is literally 0.33, not one third. Grenade self-damage is 1.0, fully unreduced — an earlier guess of about 0.6 was wrong, and the small self-damage numbers people observe are armour absorption at full damage rather than a reduction.

What demos cannot give is the other half of shooting. There is no bullet impact event in any available demo — 9,372 recorded shots across four 2026 tournament demos produce zero impacts, and a 35-event census contains no such event at all. So spread sampling and penetration have no demo oracle and are not claimed here.

Every fact on this page, with its tier

Bullet damage pipeline: floor(dmg × rangeMod^(dist/500) × hitgroupMult × armor), with head using the per-weapon value, chest and arms 1.0, stomach 1.25, legs 0.75; armoured damage dealt = raw × (armorRatio × 0.5) and armour lost = floor((raw − dealt) × 0.5)

Value
single floor at the end
Confidence tier
VERIFIED
How it was derived
Candidate formulas were required to reproduce the server's recorded integer result exactly, event by event, including the armoured rows.
Evidence
29/30 recorded damage rows integer-exact including every armoured row and a helmeted headshot at 87 health / 18 armour at 471 u. Rounding instead of flooring fits only 16/30.

Falloff distance basis = shooter → HIT POINT on the hitbox (not the victim origin)

Value
hit point
Confidence tier
MEASURED
How it was derived
Discriminated by a pair of adjacent events that straddle a flooring boundary — a case where the two candidate bases must disagree.
Evidence
Two adjacent friendly-fire rows at raw 21.03 and 21.10 got different server results, which no constant-factor origin-distance model can produce. At over 100 u the origin distance is exact.

Friendly-fire damage factors: bullets 0.33, grenade 0.85, grenade self 1.0, other 0.4

Value
0.33 / 0.85 / 1.0 / 0.4
Confidence tier
VERIFIED (cvarlist)
How it was derived
Read literally from the current build's convar list.
Evidence
The bullet factor is literally 0.33 rather than one third, which settles the flooring ambiguity and matches the 29/30-exact damage model. Grenade self-damage is fully unreduced, correcting an earlier guess of about 0.6.

HE grenade damage against enemies = 99 × (1 − d/350), base 99 and radius ~350 u

Value
99 × (1 − d/350)
Confidence tier
VERIFIED
How it was derived
Fitted to recorded damage events and independently confirmed against the compiled weapon data.
Evidence
442 recorded damage events; the measured envelope (base ~97–99, ~64 at 125 u, ~7 at 325 u) confirms the authored values. Self-damage is unreduced.

Bullet impact events are ABSENT from all available demos

Value
0 impacts in 9,372 shots
Confidence tier
VERIFIED negative result (ABSENT in all available demos)
How it was derived
Checked by a raw event census on every demo in the corpus rather than by looking for the event where it was expected.
Evidence
All four 2026 tournament demos yield 9,372 weapon-fire rows and zero impacts, and a 35-event census contains no such event. It is not exposed to demos at all, so the endpoint oracle requires binary reverse engineering.

Open questions — what is not known

The armoured HE split is not separately derived.

HE damage against enemies is verified and self-damage is known to be unreduced, but how HE damage divides between health and armour wants its own derivation from armoured HE events.

Spread and penetration have no demo oracle.

Because no demo records a bullet endpoint, the spread sampling distribution and the penetration model cannot be measured from recordings at any tier. They are binary reverse-engineering targets and nothing is claimed about them here.

Other CS2 mechanics

Last updated 2026-07-03 — the date of the measurement, not of this page's rendering. What the confidence tiers mean. Memorin is not affiliated with or endorsed by Valve; Counter-Strike 2 is a trademark of Valve Corporation.