Data & methodology
How the simulation works and where every number comes from. For the drop rates themselves, see CS2 case opening odds and CS2 knife odds by case.
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. DropLabz implements that rule and renormalises over whichever tiers a given container actually holds.
| Tier | Relative weight | Probability | Odds |
|---|---|---|---|
| Mil-Spec Grade | ×1 | 79.92% | 1 in 1.3 |
| Restricted | ×5 rarer | 15.9847% | 1 in 6.3 |
| Classified | ×25 rarer | 3.1969% | 1 in 31.3 |
| Covert | ×125.0 rarer | 0.6394% | 1 in 156 |
| Rare Special Item | ×312.5 rarer | 0.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. In the rare-special pool that holds per finish: a Doppler's phases share one finish's odds (Phases 1–4 ≈ 22.5% each, Ruby ≈ 4%, Sapphire ≈ 4%, Black Pearl ≈ 2%; Gamma Doppler Emerald ≈ 10% — community estimates, as Valve never published phase odds). The engine is deterministic under a seeded RNG (see the test suite) and uses crypto.getRandomValues for live rolls.
Float & wear
DropLabz assumes 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 New | 0.00 – 0.07 |
| Minimal Wear | 0.07 – 0.15 |
| Field-Tested | 0.15 – 0.38 |
| Well-Worn | 0.38 – 0.45 |
| Battle-Scarred | 0.45 – 1.00 |
This is a simplified model, not a verified distribution of in-game unboxings. CSFloat's research on unboxed CS:GO skins found a nonuniform raw-float distribution. That historical research does not establish the current CS2 distribution, but it means uniform generation should not be presented as confirmed game behavior. DropLabz's wear probabilities, case expected values and ROI rankings depend on this assumption and may differ from real openings. Trade-up output floats use a separate deterministic formula.
StatTrak, pattern & special finishes
- StatTrak: an independent 10% roll on items that can exist in StatTrak form (per the upstream
stattrakflag). 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
- csgotrader.app steam.json — Steam Community Market, USD, most recent 24h / 7d / 30d / 90d average
- Price snapshot
- Oct 27, 2026, 10:25 AM UTC (cached, committed at build)
- Price coverage
- 94.7% of reachable (skin, wear) combinations
- Dataset built
- Oct 27, 2026, 12:26 PM 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; knife/glove finishes are equally likely, with Doppler phases sharing their finish's odds.
- 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.