@page "/theory" @using CsWeb.Services @model TheoryModel @{ ViewData["Title"] = "Theorycrafting"; var b = Model.B; }
Numbers below are live — read from the running servers' effective config, including any hot-reloaded balance tuning. The curves are computed by the same compiled code that scales damage in game. Everything is also editable: change any knob to explore; Reset returns to server values.
Showing values for @Fmt.ModeName(b?.Mode) — view for TDM · Gun Game · Survival (modes can override handicap bands).
@if (b is null) {One signed index t summarizes how dominant you are (K/D, headshot rate, killstreak, level, and the mode's progress axis, weighted and eased). t = 0 is neutral; +1 is fully dominant; −1 is struggling. All three multipliers are driven by the same t, so they hit their extremes together: dominate and you deal less, take more, and level faster — all at once.
@if (Model.Panels.Count > 0) {Seeded from the live server config. Edit anything — player state, stat levels, card picks, handicap knobs — and every readout and curve recomputes. Abilities, crits and headshots are excluded (parity with the in-game HUD's base readout). Edited fields get an amber outline.
| t | Deal × | Take × | XP × |
|---|---|---|---|
| @r.T.ToString("0.0") | @r.Deal.ToString("0.00") | @r.Take.ToString("0.00") | @r.Xp.ToString("0.00") |
Vanilla CS2 bullet math, computed from numbers extracted out of the installed game's own files (re-extracted on every Valve update — never hand-copied). Shots to kill a 100 HP target per hitgroup, with distance falloff, per-weapon armor penetration and the per-weapon headshot multipliers (the Deagle's ×3.9 and M4A1-S's ×3.475 included). Tick apply my build & handicap to layer your simulated player from above onto the same math.
| Weapon | Body dmg | Head | Chest | Stomach | Legs | TTK |
|---|---|---|---|---|---|---|
| @label | ||||||
| @Html.Raw(Model.IconFor(w))@w.Name @(w.Pellets > 1 ? Html.Raw($"×{w.Pellets}") : Html.Raw("")) | @shot[1] | @TheoryModel.StkStr(shot[0]) | @TheoryModel.StkStr(shot[1]) | @TheoryModel.StkStr(shot[2]) | @TheoryModel.StkStr(shot[3]) | @TheoryModel.TtkStr(w, shot[1]) |
From CS2 build @Model.Weap.GameVersion (extracted @(Model.Weap.GeneratedAt is { Length: >= 10 } g ? g[..10] : Model.Weap.GeneratedAt)). “Kevlar + helmet” armors every hitgroup except legs — legs never take armor reduction. Shotgun rows (×pellets) assume every pellet lands in the same hitgroup. Damage is truncated per pellet, exactly like the engine does it.
} @section Scripts { }