CS2 mechanicVERIFIED (oracle); throw-strength fractions are T3 code constantsUpdated 2026-07-24
CS2 grenade throw speed: 675, 438.75 or 202.5 u/s — nothing in between
A full-strength CS2 grenade leaves the hand at exactly 675 units per second, and there are only three throw speeds: 202.5 u/s underhand, 438.75 u/s medium and 675 u/s full. Holding the throw button does not charge a continuous strength — the three mouse combinations map to three discrete values, evenly spaced 236.25 u/s apart, identical for every grenade type including molotovs. The speed was read from the server's own latched launch velocity, not inferred from positions.
Measured from the spawn-latched launch velocity in 2026 tournament demos (n = 348 stationary full throws, ≥3 maps); the release law transcribed from the current CS2 server binary and re-verified against 3,210 recorded throws.
Grenade release looks like it should be simple and is not. The demo records a projectile's positions, and reconstructing a launch velocity from positions has a built-in error: the first recorded sample lags the true spawn by a fraction of a tick, and at 320 u/s² of gravity that anchor error is worth several units per second on the vertical channel. A parabola fit on one real throw gave 217.9 where the true value was 221.9149.
The way out is that current demos latch the server's own launch velocity on the spawn tick. Read directly, stationary full throws cluster at mean 675.007 with a standard deviation of 0.09, independent of aim pitch. The horizontal channel is immune to the anchor problem anyway, because zero drag makes it exactly constant.
Weapon data explains only half of it. Every grenade in the game files carries a single throw velocity of 750 and no authored strength field at all, so 675 = 750 × 0.9 and the three fractions are code constants — later confirmed by transcribing the release function from the server binary, which reproduces all three speeds exactly.
The direction is where the community model was wrong. CS2 does not throw along the crosshair: it applies a piecewise pitch bias that is +10° upward when you aim level and tapers to zero at straight up and straight down. A linear approximation of that curve, fitted from demos, reconstructed throws to about 5.16 u/s of error; the native piecewise form reconstructs the same throws to a median of 0.00. The horizontal heading is untouched — launch yaw equals eye yaw with a median absolute deviation of 0.0001° over 535 throws.
The release law, as transcribed from the current CS2 server binary
Grenade launch SPEED = 3 discrete evenly-spaced strengths: underhand 202.5, medium 438.75, full 675 u/s (all grenade types)
Value
202.5 / 438.75 / 675 u/s
Confidence tier
VERIFIED (oracle); fractions T3 code constants
How it was derived
Read from the spawn-latched launch velocity for stationary throwers (on ground, 3D speed under 8), across at least three maps, then reproduced by transcribing the native release function.
Evidence
Full-strength n = 348, mean 675.007, std 0.09, pitch-independent (slope 0.0002); spacing 236.25 = 750 × 0.315. The transcribed constants reproduce all three exactly.
T1 + MEASURED (0.9 factor T3-pending at the time of the row)
How it was derived
Extracted from the current build's compiled weapon data, then cross-checked against the measured clusters — including molotov and incendiary, which share the same field.
Evidence
Every grenade entry reads 750; measured 675 for smoke, HE, flash and decoy implies molotov also launches at 675.
TRANSCRIBED (T3) + DEMO-VERIFIED (supersedes the linear fit)
How it was derived
Ported from the current server binary, then used to reconstruct zero-aim-punch stationary throws and compared against the older demo-fitted linear chord.
Evidence
Native reconstruction median 0.00 u/s (n = 663) against 5.16 for the superseded linear fit. The residual floor on aim-punch throws is the pre-punch eye angle.
Grenade spawn position = eyePos + 16.0 · throwForward (native: source is the eye with z lowered 12 · (1 − strength), a 22 u forward trace with a 2 u hull, spawn = traceEnd − 6 u · forward)
Value
16.0 u
Confidence tier
TRANSCRIBED (T3) + DEMO-VERIFIED
How it was derived
Native transcription checked against the demo's own latched initial position.
Evidence
Spawn residual median 0.006 u (n = 2496); an independent throw-basis decomposition gives forward 15.999, up 0.06, right 0.000 (n = 1911). Duck-independent.
Grenade player-velocity inheritance = 1.25× player velocity, added as a vector after the base velocity (supersedes an earlier 1.0×)
Value
1.25 ×
Confidence tier
TRANSCRIBED (T3); demo-CONSISTENT (refutes the old 1.0×, does NOT independently fix the factor)
How it was derived
The constant is native; the demo evidence is a residual sweep over the factor on 1,415 full-strength moving throws, including a held-out map.
Evidence
Residual minimum at 1.25 on every map (k = 1.0 leaves ~53 u/s, k = 1.25 leaves ~8.5). The old 1.0× was a slope fit attenuated by errors-in-variables noise.
The latched initial velocity IS the exact server launch velocity, and the horizontal launch heading equals the eye yaw (no horizontal remap)
Value
launch yaw − eye yaw MAD 0.0001°
Confidence tier
VERIFIED
How it was derived
Cross-checked against position-differenced, gravity-corrected launches over 2,296 flights.
Evidence
Direction median 0.336° (MAD 0.076°), speed difference median −1.34 u/s; yaw agreement MAD 0.0001° over 535 stationary throws.
Open questions — what is not known
The 1.25× factor is transcribed, not independently pinned by demos.
The demo differences velocity at the spawn tick, while the server samples a release-edge cache about 0.1 s earlier. A residual minimum at 1.25 is therefore consistent with both 1.25× on an unbiased velocity and 1.0× on an under-measured one — the binary transcription is what breaks the tie, and a moving controlled capture is what would pin it from data.
Teleport-injected thrower velocity is not read by the throw.
A controlled capture that teleported horizontal velocity into the thrower found the throw samples a movement-cached release-edge field that teleporting bypasses — so that capture route cannot measure inheritance either.
Last updated 2026-07-24 — 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.