The Astrolabe Consequence Curve
The Terrestrial Astrolabe is the late-game ritual that lets a player reshape the world in exchange for a permanent penalty. This page covers the astrolabe block in balance.json — the knobs that set how expensive each ritual is and how fast the reward (exotic materials) ramps up — plus the one village key that decides when the Artificer specialist who unlocks the whole system can arrive.
In plain terms
Every time the player fires the Astrolabe, they set three sliders: how much of the dug-out cavern to refill, how dense to make world discoveries, and whether to bias shallow or deep. Each ritual then does three things, permanently: the Maw chews faster, the strange-root defense degrades, and rare "exotic" materials start seeding into the ground. The values below set the price of that trade.
A "multiplier" here is a number the game multiplies the Maw's chew speed by — 1.0 means no change, 1.5 means 50 percent faster. Chew increases from rituals compound: each ritual multiplies the running stack rather than adding to it, so a ritual's price is a fixed share of the threat the player already carries. The stack never resets within a run, and it has no ceiling — a run ends when the player dies, not when the Maw stops getting faster.
This changed. The stack used to be additive (
stack + increase). That made every ritual after the first progressively cheaper in relative terms — at mid sliders the first ritual cost +82 percent of current threat and the ninth cost +11 percent, so the decisions meant to be the most dangerous were the cheapest a player would ever make. The fourchew_increase_*values below were rescaled at the same time, because a growth rate needs smaller numbers than an addend.
How a ritual is priced
When the player confirms a ritual, the permanent chew-rate cost is computed from the two relevant sliders (read by AstrolabeManager.compute_chew_increase), then applied multiplicatively:
chew_increase =
chew_increase_base
+ slider_volume × chew_increase_volume
+ discovery_position × (discovery_max − discovery_min) + discovery_min
new_stack = old_stack × (1.0 + chew_increase)
slider_volumeruns 0.0 (refill almost nothing) to 1.0 (refill the most).discovery_positionis the discovery slider normalized to 0.0 (full-left, cheapest) to 1.0 (full-right, densest and most expensive).
So the cheapest possible ritual costs base + discovery_min = 0.08 + 0.22 = 0.30, i.e. it multiplies the stack by 1.30. The most expensive costs base + volume + discovery_max = 0.08 + 0.18 + 0.37 = 0.63, multiplying the stack by 1.63. A middle-of-the-road ritual sits at 1.465. (The Ravenous Maw challenge and the Harrow "ritual fury" dial multiply the increase before it is applied — see Challenge and Harrow Modifiers.)
Mid-slider is not an independent knob. Because the slider terms sum linearly, a middle setting is always exactly the average of the cheapest and most expensive ritual, no matter how the four keys below are split. Only the floor and the ceiling are tunable; the middle follows.
What the curve looks like in play
The stack (astrolabe_chew_mult) after N rituals, at three slider settings:
| Ritual | Cheapest sliders | Middle | Most expensive |
|---|---|---|---|
| 1 | 1.30 | 1.47 | 1.63 |
| 2 | 1.69 | 2.15 | 2.66 |
| 3 | 2.20 | 3.14 | 4.33 |
| 6 | 4.83 | 9.89 | 18.76 |
| 9 | 10.60 | 31.08 | 81.22 |
| 12 | 23.30 | 97.74 | 351.76 |
The stack is multiplied by the time-based pressure level (capped at 5.0) to give the "Hunger ×N" figure the player sees — see Maw Threat and Escalation.
The calibration anchor: the curve is tuned so that after 12 most-expensive rituals, the Maw eats a full 9-block glazed_vault_block column — 45,000 HP, the toughest wall in the game — in about 60 seconds, against a Maw that has fully learned that material at capped pressure. The same column at ritual 1 takes over three hours. Cheapest-slider play still buys about 15 minutes per column at ritual 12, so twelve careful rituals remain survivable where twelve greedy ones do not. tools/astrolabe_curve_check.gd asserts this target against the live JSON and prints the full table.
If you retune the four keys, re-derive from the anchor:
growth_per_ritual = (target_stack) ^ (1 / target_ritual_count)
The astrolabe block
balance.json → astrolabe. Every value here has a hardcoded fallback of the same number inside AstrolabeManager.gd; the JSON is the tuning surface and overrides the constant on load.
| Setting | Default | What it controls | Turn it up / down |
|---|---|---|---|
chew_increase_base |
0.08 |
The flat growth rate every ritual applies, before any slider. The floor price of ritual use. | Higher makes even a minimal ritual bite hard. Because the stack compounds, small changes here swing the late-run curve enormously — a run of many rituals raises this to a power. |
chew_increase_volume |
0.18 |
Extra growth at the top of the restore-volume slider. Refilling more cavern costs more speed. | Higher punishes big restores; lower makes volume "free" and removes the slider's tension. |
chew_increase_discovery_min |
0.22 |
Growth when the discovery-density slider is full-left (sparsest world). | This applies to every ritual regardless of slider, so it is effectively a second base cost. Raising it lifts the whole price floor. |
chew_increase_discovery_max |
0.37 |
Growth when the discovery-density slider is full-right (densest world). | Sets the ceiling on how much a rich-world ritual costs. Widen the gap from min to make the slider a bigger decision — under compounding that gap becomes an exponent, so it separates cautious and greedy play far more sharply than the raw numbers suggest. |
exotic_chance_per_use |
0.02 |
Per-ritual step in the chance that a restored or undug tile becomes an exotic material. Chance = exotic_chance_per_use × number_of_rituals_so_far. |
This is the reward ramp. Higher = exotics show up sooner and thicker; lower = players must ritual many times before the payoff feels real. |
exotic_chance_cap |
0.2 |
The ceiling on that exotic chance (reached after 10 rituals at the default step). No matter how many rituals, at most this fraction of eligible tiles turn exotic. | Higher lets a deep-ritual run flood the map with exotics; lower keeps them rare even late. |
Four more keys live in this block but sit outside this page's scope (they tune the strange-root bounce defense and the tile-restore volume, not the consequence curve): bounce_loss_max (8.0), bounce_cd_increase_max (0.5), restore_pct_min (0.1), restore_pct_span (0.8). They are listed here only so a designer scanning the block knows every key is accounted for.
What the refill will never do
Whatever restore_pct_* is set to — even a full 100 percent refill — the restore has two hard guarantees, so raising the volume can never destroy a player's factory:
- It never fills in a standing machine. Machine footprints are excluded from the plan and re-checked as tiles are written.
- It never seals one off. If filling would leave a surviving machine in a sealed pocket with no route in, the plan gives back the shortest corridor needed to reach it.
The second guarantee costs a handful of tiles out of the restored volume, once per ritual — invisible against the thousands of tiles a real restore touches, and worth knowing only if you are reconciling an exact refill percentage.
How the exotic ramp actually plays
The exotic chance uses one formula in two places — refilled cavern tiles (rolled live at ritual time) and previously-undug ground everywhere (rolled deterministically as the player digs). Both read exotic_chance_per_use and exotic_chance_cap:
exotic_chance = clamp(exotic_chance_per_use × rituals_performed,
exotic_chance_per_use, # floor after the 1st ritual
exotic_chance_cap) # ceiling
At the defaults: 2 percent after ritual 1, 4 percent after ritual 2, on up, flattening at 20 percent from ritual 10 onward. Restored deep caverns get an extra depth multiplier (up to 2x) on top, so pushing the depth slider deep is the fastest route to exotics. Before the first ritual the chance is zero — nothing exotic appears until the Astrolabe has fired at least once.
Note the asymmetry this creates with the chew curve: the exotic reward flattens at ritual 10 while the hunger cost keeps compounding. Rituals past 10 buy discovery density and refilled cavern, not more exotics, at a steeply rising price. That is intentional — it is what makes the decision to stop a real one.
The discovery-density reward
The discovery slider's reward side (its cost side is the two chew_increase_discovery_* keys above) is a world-wide multiplier on how often a dug tile yields a discovery pocket. Each ritual multiplies the running density by 1.0 + slider × 0.5 — so 0.5x (full-left) to 1.5x (full-right) per ritual — compounding across rituals and clamped to a 2.5x ceiling. Full-right slider reaches that ceiling by about the third ritual; further rituals add exotics and Maw hunger, not more discovery density.
This ceiling is
DISCOVERY_MULT_MAX, a code constant inAstrolabeManager.gd— not abalance.jsonkey. It was lowered from3.0to2.5after the double-count fix below.
At the 2.5x cap, discovery coverage peaks around 50 percent of solid tiles in the richest mid layers (stone / iron) — roughly double the ~22 percent no-ritual baseline. "Bad" discoveries (Maw resonance, plague spores, hazards) are deliberately excluded from this multiplier, so a denser world is a richer one, never a more dangerous one.
Two guardrails keep density in check:
- The mushroom near-water boost is a floor, not a multiplied base. Before the fix, the density mult tripled that boost (0.15 → 0.45) and, because water-pocket density also scales with the mult, nearly every tile counted as "near water" — mushrooms alone blanketed the mid layers and coverage hit ~80 percent. Now the boost is applied as
max(base × mult, boost), so it stays a local nudge. - Raising the ceiling raises render load. More on-screen discovery hints cost frame time on weak hardware (an FPS-adaptive animation budget absorbs most of it, but higher coverage still means more static markers). Push it up only after a two-machine feel/perf check.
The gate: when the Astrolabe becomes reachable
The Artificer, the fourth Astrolabe specialist, is what unlocks the system. The Artificer only shows up once the village hits a population threshold and the other three specialists have already arrived.
| Setting | Where it lives | Default | What it controls | Turn it up / down |
|---|---|---|---|---|
artificer_population |
balance.json → village |
120 |
The village population at which the Artificer can arrive, gating the entire Astrolabe / ritual system. | Read by SpecialistManager (fallback 120). Lower = players reach the Astrolabe earlier and the whole late-game consequence curve opens sooner; higher pushes it deeper into a long run. This is a hard progression gate — set it above a population the player can plausibly reach and the ritual system never opens. |
Safe to change / handle with care
chew_increase_*compounds — raise it to a power, not a sum. These multiply a stack that never resets within a run. A player who rituals ten times pays the product of ten increases. Bumpingchew_increase_basefrom0.08to0.12looks tiny but at twelve most-expensive rituals it takes the stack from ~350 to ~560. Always test a full multi-ritual run and re-runtools/astrolabe_curve_check.gd, never a single ritual.- There is no ceiling on the stack, by design. Do not add one to "fix" a runaway number — the run is supposed to end with the player's death. Nothing downstream needs a bound either: each Maw front consumes at most one wall column per frame regardless of how fast it chews.
exotic_chance_capis the whole reward economy for exotics. Exotics gate several endgame machines and recipes. Set the cap too low and a player who commits to rituals never sees enough exotic material to progress; too high and exotics stop feeling special.artificer_populationis a soft-lock risk. It is a progression gate with no alternative path. Raise it past a reachable population and the Astrolabe, exotics, and the consequence curve all become dead content for that run.
After editing any of these, re-run the data validator and smoke test — see The Safe Change Workflow.