# The Levers That Matter Most

Doing a balance pass and only want to touch a few things? Touch these. It's the roughly ten highest-impact knobs in Underroot, the ones that move the whole difficulty curve. Every value here lives in a `data/*.json` file, so these are true tuning edits, not code changes, and each wants the validate-and-smoke pass afterwards ([The Safe Change Workflow](/docs/underroot/the-safe-change-workflow)).

## In plain terms

Most of the game's feel comes from a handful of levers: how soon the Maw wakes and how fast it grows, how long a day is, how fast supplies drain, how much cushion the player can bank, how good the villager economy is, and how hard the deep game gets. Nudge them gently. Several compound, so a 10% change can feel like much more.

Values below are the current defaults, copied from the data files. A **multiplier** scales a base value; a **tile** is one 32px world cell.

---

## The Maw: how fast the clock runs

The Maw is the run timer. These knobs set how much runway the player gets and how fast it burns off.

| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
| `grace_period` | `balance.json` → `maw` | `360.0` | Seconds before the Maw moves at all — the opening breather. Same value as one full day. | Higher = a longer safe setup window; lower = immediate pressure. The single biggest lever on early-game feel. |
| `pressure_growth_per_day` | `balance.json` → `maw` | `0.04` | How fast the Maw's hunger escalates each day. Pressure = `1 + this × days`, capped at `pressure_max`. | Higher = the mid/late game tightens much faster. This compounds — small changes hit hard. |
| `base_chew_rate` | `balance.json` → `maw` | `1.0` | The baseline speed the Maw chews through walls, before escalation and adaptation multiply it. | Higher = every wall buys less time at all depths. A flat difficulty shift across the whole run. |
| `chew_increase_base` | `balance.json` → `astrolabe` | `0.08` | The floor growth rate each Ritual applies to the Maw's permanent chew stack. Every ritual multiplies the stack by `1 + increase`. | **The dominant late-game lever.** It compounds and is uncapped, so it is raised to a power across a run — see the care note below. |

`pressure_max` (`balance.json → maw`, default `5.0`) is the ceiling those escalation multipliers climb toward. Raise it only if you want very long runs to keep getting harder past the current cap.

**Why the Ritual knob is on this list.** Pressure caps at ×5 and familiarity caps at ×3 per material — both flatten. The Astrolabe stack does neither: it compounds per ritual with no ceiling, reaching ×351 after twelve most-expensive rituals against a combined pressure-and-familiarity ceiling of ×15. In any deep-ritual run it is the term that decides the difficulty. The three sibling keys (`chew_increase_volume` `0.18`, `chew_increase_discovery_min` `0.22`, `chew_increase_discovery_max` `0.37`) shape the spread between cautious and greedy play. Full Maw detail lives in [Maw Threat and Escalation](/docs/underroot/maw-threat-and-escalation); the ritual curve and its calibration anchor are in [The Astrolabe Consequence Curve](/docs/underroot/the-astrolabe-consequence-curve).

---

## Time: the length of a day

| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
| `day_duration` | `balance.json` → `time` | `360.0` | Seconds in one game-day. Nearly everything paces off this: village daily ticks, per-day drain, pressure growth, weather cadence. | Higher = the whole game slows down and each day's costs spread over more real time; lower = everything accelerates. A global tempo dial — change it last and test widely. |

---

## Survival: how fast the larder empties

How fast the player-carried food and water bars fall, and how much the player can stockpile. Village population drains from a separate pool (see below).

| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
| `food_drain_per_second` | `balance.json` → `survival` | `0.04` | Base food drain per second for the digger. | Higher = tighter supply pressure; lower = supplies feel generous. |
| `water_drain_per_second` | `balance.json` → `survival` | `0.04` | Base water drain per second. | Same as food; the two are usually tuned together. |
| `work_mult` | `balance.json` → `survival` | `2.0` | Drain multiplier while actively working (digging/gathering). | Higher = active play burns supplies faster, pushing rest-vs-work tension. |
| `idle_mult` | `balance.json` → `survival` | `0.15` | Drain multiplier while the window is idle/unfocused — the core idle-game throttle. | Higher = offline/idle costs more; lower = the game is kinder while away. |
| `storage_cap` | `balance.json` → `survival` | `500.0` | Maximum food or water the player can bank. | Higher = players can hoard a bigger safety buffer against storms and bad stretches; lower = forces steadier resupply. A key lever on how forgiving the run feels. |

Village-side consumption (`food_per_person_per_day` `0.15`, `water_per_person_per_day` `0.11`, both in `balance.json → village`) scales drain with population, worth a look on the same pass. Full detail in [Survival and Supply Drain](/docs/underroot/survival-and-supply-drain).

---

## The economy: how good the villager trades are

The villager economy is priced off Value-Points, but two efficiency knobs decide how much the player actually gets back.

| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
| `basic_efficiency` | `balance.json` → `trading` | `0.45` | How much value the player recovers on ordinary material-for-supply trades. Below 1.0, trading always loses value — it is a convenience, not a profit. | Higher = trading becomes a stronger supply source; lower = players must self-supply. |
| `astrolabe_efficiency` | `balance.json` → `trading` | `0.85` | The improved exchange rate after the Astrolabe/Ritual is active. | The gap between this and `basic_efficiency` is the reward for progressing. Widen it to make the Ritual feel more transformative. |

See the full trade tables in [The Villager Economy](/docs/underroot/the-villager-economy).

---

## Village scale and progression gates

| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
| `base_population` | `balance.json` → `village` | `47` | Starting village size on a normal run. Sets baseline consumption and the scale everything else is measured against. | Higher = more mouths to feed from turn one; lower = a leaner start. |
| `artificer_population` | `balance.json` → `village` | `120` | Population threshold that unlocks the Artificer specialist. | Higher = the Artificer arrives later, gating its content behind more growth; lower = players reach it sooner. A progression gate, not a difficulty dial. |

`building_milestones` (`balance.json → village`, `[63, 85, 113, 137, 167, 213, 263, 321, 376]`) are the population thresholds that unlock each bell building — the spine of village progression. See [Village Buildings](/docs/underroot/village-buildings).

---

## Task feed: what work the village asks for

Villager tasks come from `projects.json`. The lever that shapes the whole feed is per-task spawn weight.

| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
| `spawn_weight` | `projects.json` → each task | Absent = `1.0`; explicit values range `0.3`–`0.9` | How likely a given task is to appear, relative to others. Tasks with no `spawn_weight` field default to weight `1.0` (the most common). Epic tasks sit at `0.3` (rare); many mid/deep tasks at `0.7`–`0.9`. | Raise a task's weight to surface it more often; lower it to make it a rare event. Also gated by `min_depth`/`max_depth`, so weight only matters once a task is eligible. |

Full task-tuning rules (ask budgets, reward pools, the reward-must-not-match-ask rule) are in [Villager Tasks and Projects](/docs/underroot/villager-tasks-and-projects).

---

## Skills and classes: the passive power curve

Six use-trained skills each grant a live percentage bonus, and each run's chosen class champions one of them. Three knob families here move the whole system. All live in `balance.json → skills`; full detail in [Skills, Classes, and Handicaps](/docs/underroot/skills-classes-and-handicaps).

| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
| `node_pct` | `balance.json` → `skills` | `[0.04, 0.10, 0.18, 0.30, 0.45, 0.60, 0.75]` | The cumulative bonus at each of the 7 skill nodes. The whole power budget of the system — every dig-speed, craft-speed, yield, trade, wall, and growth bonus reads off this vector. | Raise the top values to make trained skills (and champions) stronger; flatten them to make the system cosmetic. Keep it strictly increasing. |
| `anchors` | `balance.json` → `skills` | `{digging 4000, foraging 500, crafting 800, building 20000, population 80, trading 60}` | The node-5 XP for each skill — the clean single-number lever on how long each skill takes to climb. | Halve an anchor and its skill maxes twice as fast; double it to slow the climb. Tune per skill. |
| `champion_fill_mult` + cap gap | `balance.json` → `skills` | `2.0`; non-champion caps node 5 (+45%), champion reaches node 7 (+75%) | The **class identity lever**: how much better a champion is at its calling than anyone else who trains that skill. The champion fills at 2× rate and climbs two nodes higher. | Widen (raise top `node_pct`, raise fill) to make class choice matter; narrow to make classes near-interchangeable. |

Two more skill knobs sit just below this tier: `inherit_factor` (`0.5` — how much skill XP an heir keeps on a lineage death) and the six per-class **handicaps** in `class_info.<class>.handicap.mults` (each class's small downside; want ±0.10, no more). The six node-5 **capstone perks** (Rich Veins, Beloved, Silver Tongue, …) are code constants, not JSON — see the skills page.

---

## Safe to change / handle with care

- **Compounding levers first, tempo lever last.** `pressure_growth_per_day` and `day_duration` both ripple through many systems. Change one thing at a time and feel-test; stacked edits make it impossible to tell what did what.
- **The `chew_increase_*` keys are raised to a power, not summed.** A ritual multiplies the standing stack, so a change is compounded once per ritual the player performs. Moving `chew_increase_base` from `0.08` to `0.12` looks trivial and takes the twelve-ritual stack from ~350 to ~560. Never judge these from a single ritual — run `tools/astrolabe_curve_check.gd`, which prints the full twelve-ritual table and asserts the calibration target.
- **`day_duration` touches everything.** Per-day drain, pressure growth, and weather all pace off it, so editing it silently rebalances survival and the Maw at once. Save it for a dedicated pass.
- **`storage_cap` sets the forgiveness ceiling.** It quietly decides how much a skilled player can insulate against bad luck (storms, offline stretches). One of the strongest levers on perceived difficulty, even though it never shows up in a formula.
- **`node_pct` is the skill system's power ceiling.** Like `storage_cap`, it's a quiet lever — one vector behind every skill and class bonus in the game. Move its late rungs together and re-check champion runs.
- **Every value here is JSON.** After any edit, run the data validator (expect `DATA OK`) and the smoke test (expect `SMOKE PASS`), then feel-check in the editor. See [The Safe Change Workflow](/docs/underroot/the-safe-change-workflow).

## Related

- [Maw Threat and Escalation](/docs/underroot/maw-threat-and-escalation)
- [The Astrolabe Consequence Curve](/docs/underroot/the-astrolabe-consequence-curve)
- [Survival and Supply Drain](/docs/underroot/survival-and-supply-drain)
- [The Villager Economy](/docs/underroot/the-villager-economy)
- [Villager Tasks and Projects](/docs/underroot/villager-tasks-and-projects)
- [Skills, Classes, and Handicaps](/docs/underroot/skills-classes-and-handicaps)
- [Layers and Progression Pacing](/docs/underroot/layers-and-progression-pacing)
- [Where Balance Lives](/docs/underroot/where-balance-lives)
- [The Safe Change Workflow](/docs/underroot/the-safe-change-workflow)