# Balancing Spreadsheets Balance numbers belong in a live spreadsheet, not a markdown table — the point is the user can change one input and watch everything downstream recalculate. Always build these with the `xlsx` skill (read its SKILL.md first) so formulas, not hardcoded values, drive every derived column. ## TTK (time-to-kill) calculator Columns: | Weapon/Enemy | Base Damage | Fire Rate (shots/s) | DPS (=Damage*FireRate) | Target HP | TTK (=HP/DPS) | - Put Base Damage, Fire Rate, and Target HP as the only hand-entered cells; everything else is a formula. - Add a second small table of **target TTK ranges per enemy tier** (trash/elite/boss) so the user can see at a glance which weapons fall outside the intended range — conditional formatting (red/green) on the TTK column against those targets is worth setting up. ## XP / progression curve generator Columns: | Level | XP to Next | Cumulative XP | Power Stat (optional) | - `XP to Next` as a formula off Level using whichever curve shape was chosen (see `systems-design-patterns.md`): e.g. linear `=Base*Level`, exponential `=Base*Growth^(Level-1)`, log-style `=Base*LN(Level+1)`. - Put `Base` and `Growth` in labeled, separate cells (not buried in the formula) so the user can tune them directly. - A line chart of `Cumulative XP` vs. `Level` is the single most useful gut-check — always add one. If a "Power Stat" column exists, chart it against a separately-entered "Content Difficulty" column to visualize the power-vs-content curve match. ## Economy ledger (faucets & sinks) Columns: | Day/Session | Faucet: Source A | Faucet: Source B | ... | Sink: Spend A | Sink: Spend B | ... | Net Flow (=sum faucets - sum sinks) | Running Balance (=prior balance + Net Flow) | - One column per named faucet/sink (pulled straight from the table built in the systems-design doc), not a single "income" blob — the point is to see which specific source or sink is driving the trend. - Model at least 30-90 days/sessions of simulated play to see whether Running Balance trends flat, up, or down — flag explicitly which it does and what that implies (inflation risk if up and unchecked; frustration risk if down to zero with no recovery). - If there's a premium currency, give it its own mini-ledger — don't mix premium and soft currency in the same running balance. ## Drop tables Columns: | Item | Rarity Tier | Weight | Cumulative Weight | Probability (=Weight/TotalWeight) | - Probability is always a formula off Weight, never hand-entered — keeps it correct when items are added/removed. - If using a pity system, add a small separate table: `Pity Counter Threshold`, `Pity Bonus Weight Multiplier`, and a worked example row showing probability at counter=0 vs counter=threshold. - Add a `SUM` check cell on the Probability column that should always read 100% — useful as a built-in sanity check the user can glance at after any edit. ## General spreadsheet hygiene - Hand-entered inputs and calculated outputs should be visually distinct (e.g. light fill on input cells) so the user knows what's safe to edit. - Name the tabs by function (`TTK Calc`, `XP Curve`, `Economy`, `Drop Tables`), one model per tab, so the file stays navigable as it grows. - Prefer a chart over a wall of numbers wherever the question is "does this curve look right" — that's a visual judgment, not a numeric one.