Devlog banner for Umbral Idle: Last Salvage: Umbral Idle: Last Salvage #3
General
Oct 9, 2026

Umbral Idle: Last Salvage #3

Today's devlog is going to be slightly different. A bit more educational, you could say.

Why resetting as soon as possible is usually optimal in idle games, and how I tried to make waiting worth it

I wanted to talk through one problem in my game's prestige loop, where I spent a lot of time trying to make things more interesting. Thought some of you might find the maths interesting (or tell me where I've gone wrong 😄).

The Problem: Most idle games pay prestige currency on something like the square root of what you earned in the run. Mine does too: reward = 10 × sqrt(runSalvage / D)

However, I made facility costs grow exponentially, so your income only grows slowly as you buy more. In practice, a run's total earnings grow a bit faster than linear, roughly: t × log(t)

Put those together and the reward per hour falls from the very first minute. The square root eats your growth. So the optimal play is to reset the instant you're allowed to, over and over. Every idle game I've played with this shape ends up as reset spam, and the devs usually bolt on a minimum timer to side step the issue.

Why not use a timer? I tried that. Play testers fed back that it read it as come back later. There was a lack of player agency which made it a rule, which isn't fun.

What I did instead: For waiting to pay, a run's earnings have to grow faster than t², so the square root of them still grows faster than time does. So I added a ramp called System Instability that multiplies Salvage income by: (1 + 2 × hoursIntoRun)², capped at 8 hours (×289 at the peak).

When you integrate that, the run's earnings grow roughly like t³. The square root of that is t^1.5, so reward per hour now rises the longer you hold on, up to the cap.

This allowed me to turn the reset into an actual decision that players can make, whether to cash out early, or ride it to the peak. The 8 hour cap matches the offline cap, so a casual player can start a run before bed and wake up at the peak, with the aim being that you're never punished for idle play (it's an idle game after all!).

The bits I had to be careful with:

  • Offline progress: if you're away while the multiplier climbs from ×10 to ×200, you can't pay the whole gap at ×200. I pay it at the average across the gap (it's a polynomial, so it integrates nicely).
  • A minimum still exists, but as a production target rather than a timer, so active play gets you there faster.
  • The cap matters. Without it, waiting forever is optimal, which is just a different broken shape.

Overall, I'm pretty pleased with the change. It's way more fun than a forced wait. So I leave you with this one thought: have you played your game? If not, you might not run into the things that aren't fun for players

Discussion