droplab
Methodology

Data / Odds

How the simulation works and where every number comes from. No hidden magic.

Rarity model

Valve published the generative rule, not just a table: in a weapon case each rarity tier is 5× rarer than the tier below it, and the Rare Special Item (knife / glove) is 2.5× rarer than Covert. DropLab implements that rule and renormalises over whichever tiers a given container actually holds.

TierRelative weightProbabilityOdds
Mil-Spec Grade×179.92%1 in 1.3
Restricted×5 rarer15.9847%1 in 6.3
Classified×25 rarer3.1969%1 in 31.3
Covert×125.0 rarer0.6394%1 in 156
Rare Special Item×312.5 rarer0.2558%1 in 391

Within a tier, every skin is treated as equally likely — Valve has never published per-skin weights, and equal weighting is the community standard. The engine is deterministic under a seeded RNG (see the test suite) and uses crypto.getRandomValues for live rolls.

Float & wear

A raw float is drawn uniformly in [0, 1), then mapped into the skin's own range: float = min + raw × (max − min). Wear is derived from the result — never rolled first — so skins whose range excludes a wear simply never produce it.

Factory New0.000.07
Minimal Wear0.070.15
Field-Tested0.150.38
Well-Worn0.380.45
Battle-Scarred0.451.00

Market data shows Factory-New clustering; that is a listing-selection effect, not a generation effect, so it is intentionally not modelled.

StatTrak, pattern & special finishes

  • StatTrak: an independent 10% roll on items that can exist in StatTrak form (per the upstream stattrak flag). Gloves are never StatTrak. StatTrak status feeds the value estimate.
  • Pattern seed: every applicable item gets an index in [0, 1000], shown in the result and inventory.
  • Special finishes: Doppler / Gamma Doppler phases (Ruby, Sapphire, Black Pearl, Emerald), Fade, Marble Fade, Case Hardened, etc. are surfaced only when they can be read from the upstream data — phase-priced valuation is future work.

Data sources & provenance

Case & skin metadata
ByMykel/CSGO-API (MIT) — cases, skins, rarities, float ranges, StatTrak eligibility, keys
Item & case artwork
Steam CDN URLs referenced from the metadata (community.*.steamstatic.com)
Pricing
ByMykel/counter-strike-price-tracker — Steam Community Market, USD, cents → dollars
Price snapshot
Aug 8, 2026, 06:46 AM UTC (cached, committed at build)
Price coverage
93.4% of reachable (skin, wear) combinations
Dataset built
Sep 8, 2026, 01:28 AM UTC · 42 weapon cases

Data is fetched and normalised by npm run build:data and committed to the repo — no external calls happen at page-load time. Prices are estimates and exclude marketplace fees; thin markets may be missing entirely and are excluded from expected-value maths.

Assumptions the simulator makes

  • Opening cost = current case price + key price. Non-marketable keys use the $2.50 store price.
  • Skins within a rarity tier are equally likely.
  • StatTrak is an independent 10% roll; float is uniform in raw space.
  • P(wear) is the fraction of a skin's float range inside each wear band.
  • Values are Steam snapshot mid prices, not net of fees, and can be stale.
  • Expected value excludes any outcome with no price in the snapshot.